mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
DIRECTOR: LINGO: Reimplement exit
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
+263
-263
File diff suppressed because it is too large
Load Diff
@@ -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); }
|
||||
|
||||
Reference in New Issue
Block a user