Unify tuple types with tuples-of-types in the interpreter (#442)

This commit is contained in:
Geoff Romer
2021-04-12 16:13:00 -07:00
committed by GitHub
parent 22656c8e09
commit cf7c97bf28
7 changed files with 82 additions and 149 deletions
+6 -7
View File
@@ -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*;