📄 nodes.h
字号:
class EqualNode : public Node { public: EqualNode(Node *e1, Operator o, Node *e2) : expr1(e1), expr2(e2), oper(o) {} virtual void ref(); virtual bool deref(); Value evaluate(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Node *expr1, *expr2; Operator oper; }; class BitOperNode : public Node { public: BitOperNode(Node *e1, Operator o, Node *e2) : expr1(e1), expr2(e2), oper(o) {} virtual void ref(); virtual bool deref(); Value evaluate(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Node *expr1, *expr2; Operator oper; }; /** * expr1 && expr2, expr1 || expr2 */ class BinaryLogicalNode : public Node { public: BinaryLogicalNode(Node *e1, Operator o, Node *e2) : expr1(e1), expr2(e2), oper(o) {} virtual void ref(); virtual bool deref(); Value evaluate(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Node *expr1, *expr2; Operator oper; }; /** * The ternary operator, "logical ? expr1 : expr2" */ class ConditionalNode : public Node { public: ConditionalNode(Node *l, Node *e1, Node *e2) : logical(l), expr1(e1), expr2(e2) {} virtual void ref(); virtual bool deref(); Value evaluate(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Node *logical, *expr1, *expr2; }; class AssignNode : public Node { public: AssignNode(Node *l, Operator o, Node *e) : left(l), oper(o), expr(e) {} virtual void ref(); virtual bool deref(); Value evaluate(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Node *left; Operator oper; Node *expr; }; class CommaNode : public Node { public: CommaNode(Node *e1, Node *e2) : expr1(e1), expr2(e2) {} virtual void ref(); virtual bool deref(); Value evaluate(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Node *expr1, *expr2; }; class StatListNode : public StatementNode { public: // list pointer is tail of a circular list, cracked in the CaseClauseNode ctor StatListNode(StatementNode *s); StatListNode(StatListNode *l, StatementNode *s); virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: friend class CaseClauseNode; StatementNode *statement; StatListNode *list; }; class AssignExprNode : public Node { public: AssignExprNode(Node *e) : expr(e) {} virtual void ref(); virtual bool deref(); Value evaluate(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Node *expr; }; class VarDeclNode : public Node { public: VarDeclNode(const Identifier &id, AssignExprNode *in); virtual void ref(); virtual bool deref(); Value evaluate(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Identifier ident; AssignExprNode *init; }; class VarDeclListNode : public Node { public: // list pointer is tail of a circular list, cracked in the ForNode/VarStatementNode ctor VarDeclListNode(VarDeclNode *v) : list(this), var(v) {} VarDeclListNode(VarDeclListNode *l, VarDeclNode *v) : list(l->list), var(v) { l->list = this; } virtual void ref(); virtual bool deref(); Value evaluate(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: friend class ForNode; friend class VarStatementNode; VarDeclListNode *list; VarDeclNode *var; }; class VarStatementNode : public StatementNode { public: VarStatementNode(VarDeclListNode *l) : list(l->list) { l->list = 0; } virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: VarDeclListNode *list; }; class BlockNode : public StatementNode { public: BlockNode(SourceElementsNode *s); virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; protected: SourceElementsNode *source; }; class EmptyStatementNode : public StatementNode { public: EmptyStatementNode() { } // debug virtual Completion execute(ExecState *exec); virtual void streamTo(SourceStream &s) const; }; class ExprStatementNode : public StatementNode { public: ExprStatementNode(Node *e) : expr(e) { } virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Node *expr; }; class IfNode : public StatementNode { public: IfNode(Node *e, StatementNode *s1, StatementNode *s2) : expr(e), statement1(s1), statement2(s2) {} virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Node *expr; StatementNode *statement1, *statement2; }; class DoWhileNode : public StatementNode { public: DoWhileNode(StatementNode *s, Node *e) : statement(s), expr(e) {} virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: StatementNode *statement; Node *expr; }; class WhileNode : public StatementNode { public: WhileNode(Node *e, StatementNode *s) : expr(e), statement(s) {} virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Node *expr; StatementNode *statement; }; class ForNode : public StatementNode { public: ForNode(Node *e1, Node *e2, Node *e3, StatementNode *s) : expr1(e1), expr2(e2), expr3(e3), statement(s) {} ForNode(VarDeclListNode *e1, Node *e2, Node *e3, StatementNode *s) : expr1(e1->list), expr2(e2), expr3(e3), statement(s) { e1->list = 0; } virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Node *expr1, *expr2, *expr3; StatementNode *statement; }; class ForInNode : public StatementNode { public: ForInNode(Node *l, Node *e, StatementNode *s); ForInNode(const Identifier &i, AssignExprNode *in, Node *e, StatementNode *s); virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Identifier ident; AssignExprNode *init; Node *lexpr, *expr; VarDeclNode *varDecl; StatementNode *statement; }; class ContinueNode : public StatementNode { public: ContinueNode() { } ContinueNode(const Identifier &i) : ident(i) { } virtual Completion execute(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Identifier ident; }; class BreakNode : public StatementNode { public: BreakNode() { } BreakNode(const Identifier &i) : ident(i) { } virtual Completion execute(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Identifier ident; }; class ReturnNode : public StatementNode { public: ReturnNode(Node *v) : value(v) {} virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Node *value; }; class WithNode : public StatementNode { public: WithNode(Node *e, StatementNode *s) : expr(e), statement(s) {} virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Node *expr; StatementNode *statement; }; class CaseClauseNode : public Node { public: CaseClauseNode(Node *e) : expr(e), list(0) { } CaseClauseNode(Node *e, StatListNode *l) : expr(e), list(l->list) { l->list = 0; } virtual void ref(); virtual bool deref(); Value evaluate(ExecState *exec); Completion evalStatements(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Node *expr; StatListNode *list; }; class ClauseListNode : public Node { public: // list pointer is tail of a circular list, cracked in the CaseBlockNode ctor ClauseListNode(CaseClauseNode *c) : cl(c), nx(this) { } ClauseListNode(ClauseListNode *n, CaseClauseNode *c) : cl(c), nx(n->nx) { n->nx = this; } virtual void ref(); virtual bool deref(); Value evaluate(ExecState *exec); CaseClauseNode *clause() const { return cl; } ClauseListNode *next() const { return nx; } virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: friend class CaseBlockNode; CaseClauseNode *cl; ClauseListNode *nx; }; class CaseBlockNode : public Node { public: CaseBlockNode(ClauseListNode *l1, CaseClauseNode *d, ClauseListNode *l2); virtual void ref(); virtual bool deref(); Value evaluate(ExecState *exec); Completion evalBlock(ExecState *exec, const Value& input); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: ClauseListNode *list1; CaseClauseNode *def; ClauseListNode *list2; }; class SwitchNode : public StatementNode { public: SwitchNode(Node *e, CaseBlockNode *b) : expr(e), block(b) { } virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Node *expr; CaseBlockNode *block; }; class LabelNode : public StatementNode { public: LabelNode(const Identifier &l, StatementNode *s) : label(l), statement(s) { } virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Identifier label; StatementNode *statement; }; class ThrowNode : public StatementNode { public: ThrowNode(Node *e) : expr(e) {} virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Node *expr; }; class CatchNode : public StatementNode { public: CatchNode(const Identifier &i, StatementNode *b) : ident(i), block(b) {} virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); Completion execute(ExecState *exec, const Value &arg); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Identifier ident; StatementNode *block; }; class FinallyNode : public StatementNode { public: FinallyNode(StatementNode *b) : block(b) {} virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: StatementNode *block; }; class TryNode : public StatementNode { public: TryNode(StatementNode *b, CatchNode *c) : block(b), _catch(c), _final(0) {} TryNode(StatementNode *b, FinallyNode *f) : block(b), _catch(0), _final(f) {} TryNode(StatementNode *b, CatchNode *c, FinallyNode *f) : block(b), _catch(c), _final(f) {} virtual void ref(); virtual bool deref(); virtual Completion execute(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: StatementNode *block; CatchNode *_catch; FinallyNode *_final; }; class ParameterNode : public Node { public: // list pointer is tail of a circular list, cracked in the FuncDeclNode/FuncExprNode ctor ParameterNode(const Identifier &i) : id(i), next(this) { } ParameterNode(ParameterNode *list, const Identifier &i) : id(i), next(list->next) { list->next = this; } virtual void ref(); virtual bool deref(); Value evaluate(ExecState *exec); Identifier ident() { return id; } ParameterNode *nextParam() { return next; } virtual void streamTo(SourceStream &s) const; private: friend class FuncDeclNode; friend class FuncExprNode; Identifier id; ParameterNode *next; }; // inherited by ProgramNode class FunctionBodyNode : public BlockNode { public: FunctionBodyNode(SourceElementsNode *s); void processFuncDecl(ExecState *exec); }; class FuncDeclNode : public StatementNode { public: FuncDeclNode(const Identifier &i, FunctionBodyNode *b) : ident(i), param(0), body(b) { } FuncDeclNode(const Identifier &i, ParameterNode *p, FunctionBodyNode *b) : ident(i), param(p->next), body(b) { p->next = 0; } virtual void ref(); virtual bool deref(); Completion execute(ExecState */*exec*/) { /* empty */ return Completion(); } void processFuncDecl(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: Identifier ident; ParameterNode *param; FunctionBodyNode *body; }; class FuncExprNode : public Node { public: FuncExprNode(FunctionBodyNode *b) : param(0), body(b) { } FuncExprNode(ParameterNode *p, FunctionBodyNode *b) : param(p->next), body(b) { p->next = 0; } virtual void ref(); virtual bool deref(); Value evaluate(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: ParameterNode *param; FunctionBodyNode *body; }; // A linked list of source element nodes class SourceElementsNode : public StatementNode { public: // list pointer is tail of a circular list, cracked in the BlockNode (or subclass) ctor SourceElementsNode(StatementNode *s1); SourceElementsNode(SourceElementsNode *s1, StatementNode *s2); virtual void ref(); virtual bool deref(); Completion execute(ExecState *exec); void processFuncDecl(ExecState *exec); virtual void processVarDecls(ExecState *exec); virtual void streamTo(SourceStream &s) const; private: friend class BlockNode; StatementNode *element; // 'this' element SourceElementsNode *elements; // pointer to next }; class ProgramNode : public FunctionBodyNode { public: ProgramNode(SourceElementsNode *s); };}; // namespace#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -