mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 19:01:07 +01:00
Unify tuple types with tuples-of-types in the interpreter (#442)
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
#define EXECUTABLE_SEMANTICS_INTERPRETER_VALUE_H_
|
||||
|
||||
#include <list>
|
||||
#include <optional>
|
||||
#include <vector>
|
||||
|
||||
#include "executable_semantics/ast/statement.h"
|
||||
@@ -21,6 +22,11 @@ auto FindInVarValues(const std::string& field, VarValues* inits)
|
||||
-> const Value*;
|
||||
auto FieldsEqual(VarValues* ts1, VarValues* ts2) -> bool;
|
||||
|
||||
// Finds the field in `*tuple` named `name`, and returns its address, or
|
||||
// nullopt if there is no such field. `*tuple` must be a tuple value.
|
||||
auto FindTupleField(const std::string& name, const Value* tuple)
|
||||
-> std::optional<Address>;
|
||||
|
||||
enum class ValKind {
|
||||
IntV,
|
||||
FunV,
|
||||
@@ -36,7 +42,6 @@ enum class ValKind {
|
||||
FunctionTV,
|
||||
PointerTV,
|
||||
AutoTV,
|
||||
TupleTV,
|
||||
StructTV,
|
||||
ChoiceTV,
|
||||
ContinuationTV, // The type of a continuation.
|
||||
@@ -102,11 +107,6 @@ struct Value {
|
||||
VarValues* methods;
|
||||
} struct_type;
|
||||
|
||||
struct {
|
||||
std::string* name;
|
||||
VarValues* fields;
|
||||
} tuple_type;
|
||||
|
||||
struct {
|
||||
std::string* name;
|
||||
VarValues* alternatives;
|
||||
@@ -151,7 +151,6 @@ auto MakeFunTypeVal(const Value* param, const Value* ret) -> const Value*;
|
||||
auto MakePtrTypeVal(const Value* type) -> const Value*;
|
||||
auto MakeStructTypeVal(std::string name, VarValues* fields, VarValues* methods)
|
||||
-> const Value*;
|
||||
auto MakeTupleTypeVal(VarValues* fields) -> const Value*;
|
||||
auto MakeVoidTypeVal() -> const Value*;
|
||||
auto MakeChoiceTypeVal(std::string name, VarValues* alts) -> const Value*;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user