22 #ifndef DIRECTOR_LINGO_LINGO_AST_H 23 #define DIRECTOR_LINGO_LINGO_AST_H 40 struct IfElseStmtNode;
41 struct RepeatWhileNode;
42 struct RepeatWithToNode;
43 struct RepeatWithInNode;
44 struct NextRepeatNode;
45 struct ExitRepeatNode;
52 struct AssertErrorNode;
67 struct IntersectsNode;
71 struct TheNumberOfNode;
73 struct TheDateTimeNode;
83 typedef void (*inst)(void);
87 for (uint i = 0; i < list->
size(); i++) {
165 virtual bool visitScriptNode(
ScriptNode *node) = 0;
166 virtual bool visitFactoryNode(
FactoryNode *node) = 0;
167 virtual bool visitHandlerNode(
HandlerNode *node) = 0;
168 virtual bool visitCmdNode(
CmdNode *node) = 0;
169 virtual bool visitPutIntoNode(
PutIntoNode *node) = 0;
172 virtual bool visitSetNode(
SetNode *node) = 0;
173 virtual bool visitGlobalNode(
GlobalNode *node) = 0;
176 virtual bool visitIfStmtNode(
IfStmtNode *node) = 0;
183 virtual bool visitExitNode(
ExitNode *node) = 0;
184 virtual bool visitReturnNode(
ReturnNode *node) = 0;
185 virtual bool visitTellNode(
TellNode *node) = 0;
186 virtual bool visitWhenNode(
WhenNode *node) = 0;
187 virtual bool visitDeleteNode(
DeleteNode *node) = 0;
188 virtual bool visitHiliteNode(
HiliteNode *node) = 0;
190 virtual bool visitIntNode(
IntNode *node) = 0;
191 virtual bool visitFloatNode(
FloatNode *node) = 0;
192 virtual bool visitSymbolNode(
SymbolNode *node) = 0;
193 virtual bool visitStringNode(
StringNode *node) = 0;
194 virtual bool visitListNode(
ListNode *node) = 0;
197 virtual bool visitFuncNode(
FuncNode *node) = 0;
198 virtual bool visitVarNode(
VarNode *node) = 0;
199 virtual bool visitParensNode(
ParensNode *node) = 0;
200 virtual bool visitUnaryOpNode(
UnaryOpNode *node) = 0;
202 virtual bool visitFrameNode(
FrameNode *node) = 0;
203 virtual bool visitMovieNode(
MovieNode *node) = 0;
205 virtual bool visitWithinNode(
WithinNode *node) = 0;
206 virtual bool visitTheNode(
TheNode *node) = 0;
207 virtual bool visitTheOfNode(
TheOfNode *node) = 0;
209 virtual bool visitTheLastNode(
TheLastNode *node) = 0;
211 virtual bool visitMenuNode(
MenuNode *node) = 0;
213 virtual bool visitSoundNode(
SoundNode *node) = 0;
214 virtual bool visitSpriteNode(
SpriteNode *node) = 0;
226 Node(NodeType t) : type(t), isExpression(
false), isStatement(
false), isLoop(
false) {}
266 ScriptNode(NodeList *childrenIn):
Node(kScriptNode), children(childrenIn) {}
268 deleteList(children);
271 return visitor->visitScriptNode(
this);
282 :
Node(kFactoryNode), name(nameIn), methods(methodsIn) {}
288 return visitor->visitFactoryNode(
this);
300 :
Node(kHandlerNode), name(nameIn), args(argsIn), stmts(stmtsIn) {}
307 return visitor->visitHandlerNode(
this);
319 :
StmtNode(kCmdNode), name(nameIn), args(argsIn), lineNumber(lineNumberIn) {}
325 return visitor->visitCmdNode(
this);
336 :
StmtNode(kPutIntoNode), val(valIn), var(varIn) {}
342 return visitor->visitPutIntoNode(
this);
353 :
StmtNode(kPutAfterNode), val(valIn), var(varIn) {}
359 return visitor->visitPutAfterNode(
this);
370 :
StmtNode(kPutBeforeNode), val(valIn), var(varIn) {}
376 return visitor->visitPutBeforeNode(
this);
387 :
StmtNode(kSetNode), var(varIn), val(valIn) {}
393 return visitor->visitSetNode(
this);
407 return visitor->visitGlobalNode(
this);
421 return visitor->visitPropertyNode(
this);
435 return visitor->visitInstanceNode(
this);
446 :
StmtNode(kIfStmtNode), cond(condIn), stmts(stmtsIn) {}
452 return visitor->visitIfStmtNode(
this);
464 :
StmtNode(kIfElseStmtNode), cond(condIn), stmts1(stmts1In), stmts2(stmts2In) {}
471 return visitor->visitIfElseStmtNode(
this);
482 :
LoopNode(kRepeatWhileNode), cond(condIn), stmts(stmtsIn) {}
488 return visitor->visitRepeatWhileNode(
this);
502 :
LoopNode(kRepeatWithToNode), var(varIn), start(startIn), down(downIn), end(endIn), stmts(stmtsIn) {}
510 return visitor->visitRepeatWithToNode(
this);
522 :
LoopNode(kRepeatWithInNode), var(varIn), list(listIn), stmts(stmtsIn) {}
529 return visitor->visitRepeatWithInNode(
this);
539 return visitor->visitNextRepeatNode(
this);
549 return visitor->visitExitRepeatNode(
this);
559 return visitor->visitExitNode(
this);
573 return visitor->visitReturnNode(
this);
585 :
StmtNode(kTellNode), target(targetIn), stmts(stmtsIn) {}
591 return visitor->visitTellNode(
this);
602 :
StmtNode(kWhenNode), event(eventIn), code(codeIn) {}
608 return visitor->visitWhenNode(
this);
622 return visitor->visitDeleteNode(
this);
636 return visitor->visitHiliteNode(
this);
650 return visitor->visitAssertErrorNode(
this);
662 return visitor->visitIntNode(
this);
674 return visitor->visitFloatNode(
this);
688 return visitor->visitSymbolNode(
this);
702 return visitor->visitStringNode(
this);
716 return visitor->visitListNode(
this);
730 return visitor->visitPropListNode(
this);
741 :
ExprNode(kPropPairNode), key(keyIn), val(valIn) {}
747 return visitor->visitPropPairNode(
this);
758 :
ExprNode(kFuncNode), name(nameIn), args(argsIn) {}
764 return visitor->visitFuncNode(
this);
778 return visitor->visitVarNode(
this);
792 return visitor->visitParensNode(
this);
807 return visitor->visitUnaryOpNode(
this);
824 return visitor->visitBinaryOpNode(
this);
838 return visitor->visitFrameNode(
this);
852 return visitor->visitMovieNode(
this);
863 :
ExprNode(kIntersectsNode), sprite1(sprite1In), sprite2(sprite2In) {}
869 return visitor->visitIntersectsNode(
this);
880 :
ExprNode(kWithinNode), sprite1(sprite1In), sprite2(sprite2In) {}
886 return visitor->visitWithinNode(
this);
900 return visitor->visitTheNode(
this);
911 :
ExprNode(kTheOfNode), prop(propIn), obj(objIn) {}
917 return visitor->visitTheOfNode(
this);
928 :
ExprNode(kTheNumberOfNode), type(typeIn), arg(argIn) {}
933 return visitor->visitTheNumberOfNode(
this);
944 :
ExprNode(kTheLastNode), type(typeIn), arg(argIn) {}
949 return visitor->visitTheLastNode(
this);
960 :
ExprNode(kTheDateTimeNode), field(fieldIn), entity(entityIn) {}
963 return visitor->visitTheDateTimeNode(
this);
977 return visitor->visitMenuNode(
this);
988 :
ExprNode(kMenuItemNode), arg1(arg1In), arg2(arg2In) {}
994 return visitor->visitMenuItemNode(
this);
1008 return visitor->visitSoundNode(
this);
1022 return visitor->visitSpriteNode(
this);
1035 :
ExprNode(kChunkExprNode), type(typeIn), start(startIn), end(endIn), src(srcIn) {}
1042 return visitor->visitChunkExprNode(
this);
Definition: lingo-ast.h:753
Definition: lingo-ast.h:798
Definition: lingo-ast.h:708
Definition: lingo-ast.h:813
Definition: lingo-ast.h:565
Definition: lingo-ast.h:516
Definition: lingo-ast.h:441
Definition: lingo-ast.h:458
Definition: lingo-ast.h:736
Definition: lingo-ast.h:939
Definition: lingo-ast.h:923
Definition: lingo-ast.h:784
Definition: lingo-ast.h:1014
Definition: lingo-ast.h:313
Definition: lingo-ast.h:160
Definition: lingo-ast.h:294
Definition: lingo-ast.h:1000
Definition: lingo-ast.h:642
Definition: lingo-ast.h:722
Definition: lingo-ast.h:277
Definition: lingo-ast.h:545
Definition: lingo-ast.h:331
Definition: lingo-ast.h:892
Definition: lingo-ast.h:680
Definition: lingo-ast.h:858
Definition: lingo-ast.h:399
Definition: lingo-ast.h:233
Definition: lingo-ast.h:668
Definition: lingo-ast.h:694
Definition: lingo-ast.h:348
Definition: lingo-ast.h:1028
Definition: lingo-ast.h:494
Definition: lingo-ast.h:263
Definition: lingo-ast.h:830
size_type size() const
Definition: array.h:275
Definition: lingo-ast.h:580
Definition: lingo-ast.h:614
Definition: lingo-ast.h:770
Definition: lingo-ast.h:242
Definition: lingo-ast.h:555
Definition: lingo-ast.h:955
Definition: lingo-ast.h:220
Definition: lingo-ast.h:875
Definition: lingo-ast.h:906
Definition: lingo-ast.h:477
Definition: lingo-ast.h:844
Definition: lingo-ast.h:365
Definition: lingo-ast.h:656
Definition: lobject.h:332
Definition: lingo-ast.h:251
Definition: lingo-ast.h:628
Definition: lingo-ast.h:535
Definition: lingo-ast.h:382
Definition: lingo-ast.h:427
Definition: lingo-ast.h:597
Definition: lingo-ast.h:413