Przeglądaj źródła

Merge HandleValue into the Step functions (#598)

* moved most of logic from HandleValue into the Step functions

* removed the HandleValue function

* added some comments

* responses to Geoffrey

* move increment of act->pos out of the step logic for value actions

* changed act->pos to start at 0 and not have any gaps

* Update executable_semantics/interpreter/action.h

Co-authored-by: Geoff Romer <gromer@google.com>

* update comment based on Geoffrey's suggestion

Co-authored-by: Geoff Romer <gromer@google.com>
Jeremy G. Siek 4 lat temu
rodzic
commit
b60ef90d62

+ 6 - 6
executable_semantics/interpreter/action.cpp

@@ -63,7 +63,7 @@ auto MakeExpAct(const Expression* e) -> Action* {
   auto* act = new Action();
   act->tag = ActionKind::ExpressionAction;
   act->u.exp = e;
-  act->pos = -1;
+  act->pos = 0;
   return act;
 }
 
@@ -71,7 +71,7 @@ auto MakeLvalAct(const Expression* e) -> Action* {
   auto* act = new Action();
   act->tag = ActionKind::LValAction;
   act->u.exp = e;
-  act->pos = -1;
+  act->pos = 0;
   return act;
 }
 
@@ -79,7 +79,7 @@ auto MakeStmtAct(const Statement* s) -> Action* {
   auto* act = new Action();
   act->tag = ActionKind::StatementAction;
   act->u.stmt = s;
-  act->pos = -1;
+  act->pos = 0;
   return act;
 }
 
@@ -87,21 +87,21 @@ auto MakeValAct(const Value* v) -> Action* {
   auto* act = new Action();
   act->tag = ActionKind::ValAction;
   act->u.val = v;
-  act->pos = -1;
+  act->pos = 0;
   return act;
 }
 
 auto MakeExpToLvalAct() -> Action* {
   auto* act = new Action();
   act->tag = ActionKind::ExpToLValAction;
-  act->pos = -1;
+  act->pos = 0;
   return act;
 }
 
 auto MakeDeleteAct(Address a) -> Action* {
   auto* act = new Action();
   act->tag = ActionKind::DeleteTmpAction;
-  act->pos = -1;
+  act->pos = 0;
   act->u.delete_tmp = a;
   return act;
 }

+ 5 - 1
executable_semantics/interpreter/action.h

@@ -32,7 +32,11 @@ struct Action {
     const Value* val;  // for finished actions with a value (ValAction)
     Address delete_tmp;
   } u;
-  int pos;                            // position or state of the action
+  int pos;  // position or state of the action, starts at 0 and goes up to
+  // the number of subexpressions.
+  // pos indicates how many of the entries in the following `results` vector
+  // will be filled in the next time this action is active.
+  // For each i < pos, results[i] contains a pointer to a Value.
   std::vector<const Value*> results;  // results from subexpression
 };
 

Plik diff jest za duży
+ 381 - 489
executable_semantics/interpreter/interpreter.cpp


Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików