📄 nodes.h
字号:
virtual ~ReadModifyBracketNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_base; RefPtr<ExpressionNode> m_subscript; RefPtr<ExpressionNode> m_right; Operator m_operator : 30; bool m_subscriptHasAssignments : 1; bool m_rightHasAssignments : 1; }; class AssignBracketNode : public ExpressionNode, public ThrowableExpressionData { public: AssignBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript, ExpressionNode* right, bool subscriptHasAssignments, bool rightHasAssignments, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowableExpressionData(divot, startOffset, endOffset) , m_base(base) , m_subscript(subscript) , m_right(right) , m_subscriptHasAssignments(subscriptHasAssignments) , m_rightHasAssignments(rightHasAssignments) { } virtual ~AssignBracketNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_base; RefPtr<ExpressionNode> m_subscript; RefPtr<ExpressionNode> m_right; bool m_subscriptHasAssignments : 1; bool m_rightHasAssignments : 1; }; class AssignDotNode : public ExpressionNode, public ThrowableExpressionData { public: AssignDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident, ExpressionNode* right, bool rightHasAssignments, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowableExpressionData(divot, startOffset, endOffset) , m_base(base) , m_ident(ident) , m_right(right) , m_rightHasAssignments(rightHasAssignments) { } virtual ~AssignDotNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_base; Identifier m_ident; RefPtr<ExpressionNode> m_right; bool m_rightHasAssignments; }; class ReadModifyDotNode : public ExpressionNode, public ThrowableSubExpressionData { public: ReadModifyDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident, Operator oper, ExpressionNode* right, bool rightHasAssignments, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowableSubExpressionData(divot, startOffset, endOffset) , m_base(base) , m_ident(ident) , m_right(right) , m_operator(oper) , m_rightHasAssignments(rightHasAssignments) { } virtual ~ReadModifyDotNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_base; Identifier m_ident; RefPtr<ExpressionNode> m_right; Operator m_operator : 31; bool m_rightHasAssignments : 1; }; class AssignErrorNode : public ExpressionNode, public ThrowableExpressionData { public: AssignErrorNode(JSGlobalData* globalData, ExpressionNode* left, Operator oper, ExpressionNode* right, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowableExpressionData(divot, startOffset, endOffset) , m_left(left) , m_operator(oper) , m_right(right) { } virtual ~AssignErrorNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_left; Operator m_operator; RefPtr<ExpressionNode> m_right; }; class CommaNode : public ExpressionNode { public: CommaNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2) JSC_FAST_CALL : ExpressionNode(globalData) , m_expr1(expr1) , m_expr2(expr2) { } virtual ~CommaNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_expr1; RefPtr<ExpressionNode> m_expr2; }; class VarDeclCommaNode : public CommaNode { public: VarDeclCommaNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2) JSC_FAST_CALL : CommaNode(globalData, expr1, expr2) { } }; class ConstDeclNode : public ExpressionNode { public: ConstDeclNode(JSGlobalData* globalData, const Identifier& ident, ExpressionNode* in) JSC_FAST_CALL; virtual ~ConstDeclNode(); virtual void releaseNodes(NodeReleaser&); Identifier m_ident; RefPtr<ConstDeclNode> m_next; RefPtr<ExpressionNode> m_init; virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; virtual RegisterID* emitCodeSingle(BytecodeGenerator&) JSC_FAST_CALL; }; class ConstStatementNode : public StatementNode { public: ConstStatementNode(JSGlobalData* globalData, ConstDeclNode* next) JSC_FAST_CALL : StatementNode(globalData) , m_next(next) { } virtual ~ConstStatementNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ConstDeclNode> m_next; }; typedef Vector<RefPtr<StatementNode> > StatementVector; class SourceElements : public ParserRefCounted { public: SourceElements(JSGlobalData* globalData) : ParserRefCounted(globalData) {} void append(PassRefPtr<StatementNode>); void releaseContentsIntoVector(StatementVector& destination) { ASSERT(destination.isEmpty()); m_statements.swap(destination); destination.shrinkToFit(); } private: StatementVector m_statements; }; class BlockNode : public StatementNode { public: BlockNode(JSGlobalData*, SourceElements* children) JSC_FAST_CALL; virtual ~BlockNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; StatementVector& children() { return m_children; } virtual bool isBlock() const JSC_FAST_CALL { return true; } private: StatementVector m_children; }; class EmptyStatementNode : public StatementNode { public: EmptyStatementNode(JSGlobalData* globalData) JSC_FAST_CALL // debug : StatementNode(globalData) { } virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; virtual bool isEmptyStatement() const JSC_FAST_CALL { return true; } }; class DebuggerStatementNode : public StatementNode { public: DebuggerStatementNode(JSGlobalData* globalData) JSC_FAST_CALL : StatementNode(globalData) { } virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; }; class ExprStatementNode : public StatementNode { public: ExprStatementNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL : StatementNode(globalData) , m_expr(expr) { } virtual bool isExprStatement() const JSC_FAST_CALL { return true; } virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; ExpressionNode* expr() const { return m_expr.get(); } private: RefPtr<ExpressionNode> m_expr; }; class VarStatementNode : public StatementNode { public: VarStatementNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL : StatementNode(globalData) , m_expr(expr) { } virtual ~VarStatementNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_expr; }; class IfNode : public StatementNode { public: IfNode(JSGlobalData* globalData, ExpressionNode* condition, StatementNode* ifBlock) JSC_FAST_CALL : StatementNode(globalData) , m_condition(condition) , m_ifBlock(ifBlock) { } virtual ~IfNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; protected: RefPtr<ExpressionNode> m_condition; RefPtr<StatementNode> m_ifBlock; }; class IfElseNode : public IfNode { public: IfElseNode(JSGlobalData* globalData, ExpressionNode* condition, StatementNode* ifBlock, StatementNode* elseBlock) JSC_FAST_CALL : IfNode(globalData, condition, ifBlock) , m_elseBlock(elseBlock) { } virtual ~IfElseNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<StatementNode> m_elseBlock; }; class DoWhileNode : public StatementNode { public: DoWhileNode(JSGlobalData* globalData, StatementNode* statement, ExpressionNode* expr) JSC_FAST_CALL : StatementNode(globalData) , m_statement(statement) , m_expr(expr) { } virtual ~DoWhileNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<StatementNode> m_statement; RefPtr<ExpressionNode> m_expr; }; class WhileNode : public StatementNode { public: WhileNode(JSGlobalData* globalData, ExpressionNode* expr, StatementNode* statement) JSC_FAST_CALL : StatementNode(globalData) , m_expr(expr) , m_statement(statement) { } virtual ~WhileNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_expr; RefPtr<StatementNode> m_statement; }; class ForNode : public StatementNode { public: ForNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, ExpressionNode* expr3, StatementNode* statement, bool expr1WasVarDecl) JSC_FAST_CALL : StatementNode(globalData) , m_expr1(expr1) , m_expr2(expr2) , m_expr3(expr3) , m_statement(statement) , m_expr1WasVarDecl(expr1 && expr1WasVarDecl) { ASSERT(statement); } virtual ~ForNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_expr1; RefPtr<ExpressionNode> m_expr2; RefPtr<ExpressionNode> m_expr3; RefPtr<StatementNode> m_statement; bool m_expr1WasVarDecl; }; class ForInNode : public StatementNode, public ThrowableExpressionData { public: ForInNode(JSGlobalData*, ExpressionNode*, ExpressionNode*, StatementNode*) JSC_FAST_CALL; ForInNode(JSGlobalData*, const Identifier&, ExpressionNode*, ExpressionNode*, StatementNode*, int divot, int startOffset, int endOffset) JSC_FAST_CALL; virtual ~ForInNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: Identifier m_ident; RefPtr<E
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -