DIRECTOR: LINGO: Reimplement exit

This commit is contained in:
djsrv
2021-06-22 18:16:53 -04:00
committed by D.J. Servilla
parent a6cfb4e275
commit 7649e2d44c
5 changed files with 285 additions and 264 deletions
+13
View File
@@ -43,6 +43,7 @@ struct RepeatWhileNode;
struct RepeatWithToNode;
struct NextRepeatNode;
struct ExitRepeatNode;
struct ExitNode;
struct IntNode;
struct FloatNode;
struct SymbolNode;
@@ -87,6 +88,7 @@ enum NodeType {
kRepeatWithToNode,
kNextRepeatNode,
kExitRepeatNode,
kExitNode,
kIntNode,
kFloatNode,
kSymbolNode,
@@ -125,6 +127,7 @@ public:
virtual void visitRepeatWithToNode(RepeatWithToNode *node) = 0;
virtual void visitNextRepeatNode(NextRepeatNode *node) = 0;
virtual void visitExitRepeatNode(ExitRepeatNode *node) = 0;
virtual void visitExitNode(ExitNode *node) = 0;
virtual void visitIntNode(IntNode *node) = 0;
virtual void visitFloatNode(FloatNode *node) = 0;
virtual void visitSymbolNode(SymbolNode *node) = 0;
@@ -454,6 +457,16 @@ struct ExitRepeatNode : StmtNode {
}
};
/* ExitNode */
struct ExitNode : StmtNode {
ExitNode() : StmtNode(kExitNode) {}
virtual ~ExitNode() {}
virtual void accept(NodeVisitor *visitor) {
visitor->visitExitNode(this);
}
};
/* IntNode */
struct IntNode : ExprNode {
+6
View File
@@ -665,6 +665,12 @@ void LingoCompiler::visitExitRepeatNode(ExitRepeatNode *node) {
}
}
/* ExitNode */
void LingoCompiler::visitExitNode(ExitNode *node) {
code1(LC::c_procret);
}
/* IntNode */
void LingoCompiler::visitIntNode(IntNode *node) {
+1
View File
@@ -94,6 +94,7 @@ public:
virtual void visitRepeatWithToNode(RepeatWithToNode *node);
virtual void visitNextRepeatNode(NextRepeatNode *node);
virtual void visitExitRepeatNode(ExitRepeatNode *node);
virtual void visitExitNode(ExitNode *node);
virtual void visitIntNode(IntNode *node);
virtual void visitFloatNode(FloatNode *node);
virtual void visitSymbolNode(SymbolNode *node);
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -294,7 +294,7 @@ ID: tVARID
| tDOWN { $$ = new Common::String("down"); }
// tENDCLAUSE
// tELSE
| tEXIT { $$ = new Common::String("exit"); }
// | tEXIT { $$ = new Common::String("exit"); }
// tFACTORY
| tFIELD { $$ = new Common::String("field"); }
// | tGLOBAL { $$ = new Common::String("global"); }
@@ -372,6 +372,7 @@ proc: ID '(' exprlist[args] ')' '\n' { $$ = new CmdNode($ID, $args); }
| tPUT exprlist[args] '\n' { $$ = new CmdNode(new Common::String("put"), $args); }
| tNEXT tREPEAT '\n' { $$ = new NextRepeatNode(); }
| tEXIT tREPEAT '\n' { $$ = new ExitRepeatNode(); }
| tEXIT '\n' { $$ = new ExitNode(); }
;
asgn: tPUT expr tINTO varorchunk '\n' { $$ = new PutIntoNode($expr, $varorchunk); }