📄 nodes.h
字号:
UString m_flags; }; class ThisNode : public ExpressionNode { public: ThisNode(JSGlobalData* globalData) JSC_FAST_CALL : ExpressionNode(globalData) { } virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; }; class ResolveNode : public ExpressionNode { public: ResolveNode(JSGlobalData* globalData, const Identifier& ident, int startOffset) JSC_FAST_CALL : ExpressionNode(globalData) , m_ident(ident) , m_startOffset(startOffset) { } virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; virtual bool isPure(BytecodeGenerator&) const JSC_FAST_CALL; virtual bool isLocation() const JSC_FAST_CALL { return true; } virtual bool isResolveNode() const JSC_FAST_CALL { return true; } const Identifier& identifier() const JSC_FAST_CALL { return m_ident; } private: Identifier m_ident; int32_t m_startOffset; }; class ElementNode : public ParserRefCounted { public: ElementNode(JSGlobalData* globalData, int elision, ExpressionNode* node) JSC_FAST_CALL : ParserRefCounted(globalData) , m_elision(elision) , m_node(node) { } ElementNode(JSGlobalData* globalData, ElementNode* l, int elision, ExpressionNode* node) JSC_FAST_CALL : ParserRefCounted(globalData) , m_elision(elision) , m_node(node) { l->m_next = this; } virtual ~ElementNode(); virtual void releaseNodes(NodeReleaser&); int elision() const { return m_elision; } ExpressionNode* value() { return m_node.get(); } ElementNode* next() { return m_next.get(); } private: RefPtr<ElementNode> m_next; int m_elision; RefPtr<ExpressionNode> m_node; }; class ArrayNode : public ExpressionNode { public: ArrayNode(JSGlobalData* globalData, int elision) JSC_FAST_CALL : ExpressionNode(globalData) , m_elision(elision) , m_optional(true) { } ArrayNode(JSGlobalData* globalData, ElementNode* element) JSC_FAST_CALL : ExpressionNode(globalData) , m_element(element) , m_elision(0) , m_optional(false) { } ArrayNode(JSGlobalData* globalData, int elision, ElementNode* element) JSC_FAST_CALL : ExpressionNode(globalData) , m_element(element) , m_elision(elision) , m_optional(true) { } virtual ~ArrayNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ElementNode> m_element; int m_elision; bool m_optional; }; class PropertyNode : public ParserRefCounted { public: enum Type { Constant, Getter, Setter }; PropertyNode(JSGlobalData* globalData, const Identifier& name, ExpressionNode* assign, Type type) JSC_FAST_CALL : ParserRefCounted(globalData) , m_name(name) , m_assign(assign) , m_type(type) { } virtual ~PropertyNode(); virtual void releaseNodes(NodeReleaser&); const Identifier& name() const { return m_name; } private: friend class PropertyListNode; Identifier m_name; RefPtr<ExpressionNode> m_assign; Type m_type; }; class PropertyListNode : public Node { public: PropertyListNode(JSGlobalData* globalData, PropertyNode* node) JSC_FAST_CALL : Node(globalData) , m_node(node) { } PropertyListNode(JSGlobalData* globalData, PropertyNode* node, PropertyListNode* list) JSC_FAST_CALL : Node(globalData) , m_node(node) { list->m_next = this; } virtual ~PropertyListNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<PropertyNode> m_node; RefPtr<PropertyListNode> m_next; }; class ObjectLiteralNode : public ExpressionNode { public: ObjectLiteralNode(JSGlobalData* globalData) JSC_FAST_CALL : ExpressionNode(globalData) { } ObjectLiteralNode(JSGlobalData* globalData, PropertyListNode* list) JSC_FAST_CALL : ExpressionNode(globalData) , m_list(list) { } virtual ~ObjectLiteralNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<PropertyListNode> m_list; }; class BracketAccessorNode : public ExpressionNode, public ThrowableExpressionData { public: BracketAccessorNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript, bool subscriptHasAssignments) JSC_FAST_CALL : ExpressionNode(globalData) , m_base(base) , m_subscript(subscript) , m_subscriptHasAssignments(subscriptHasAssignments) { } virtual ~BracketAccessorNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; virtual bool isLocation() const JSC_FAST_CALL { return true; } virtual bool isBracketAccessorNode() const JSC_FAST_CALL { return true; } ExpressionNode* base() JSC_FAST_CALL { return m_base.get(); } ExpressionNode* subscript() JSC_FAST_CALL { return m_subscript.get(); } private: RefPtr<ExpressionNode> m_base; RefPtr<ExpressionNode> m_subscript; bool m_subscriptHasAssignments; }; class DotAccessorNode : public ExpressionNode, public ThrowableExpressionData { public: DotAccessorNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident) JSC_FAST_CALL : ExpressionNode(globalData) , m_base(base) , m_ident(ident) { } virtual ~DotAccessorNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; virtual bool isLocation() const JSC_FAST_CALL { return true; } virtual bool isDotAccessorNode() const JSC_FAST_CALL { return true; } ExpressionNode* base() const JSC_FAST_CALL { return m_base.get(); } const Identifier& identifier() const JSC_FAST_CALL { return m_ident; } private: RefPtr<ExpressionNode> m_base; Identifier m_ident; }; class ArgumentListNode : public Node { public: ArgumentListNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL : Node(globalData) , m_expr(expr) { } ArgumentListNode(JSGlobalData* globalData, ArgumentListNode* listNode, ExpressionNode* expr) JSC_FAST_CALL : Node(globalData) , m_expr(expr) { listNode->m_next = this; } virtual ~ArgumentListNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; RefPtr<ArgumentListNode> m_next; RefPtr<ExpressionNode> m_expr; }; class ArgumentsNode : public ParserRefCounted { public: ArgumentsNode(JSGlobalData* globalData) JSC_FAST_CALL : ParserRefCounted(globalData) { } ArgumentsNode(JSGlobalData* globalData, ArgumentListNode* listNode) JSC_FAST_CALL : ParserRefCounted(globalData) , m_listNode(listNode) { } virtual ~ArgumentsNode(); virtual void releaseNodes(NodeReleaser&); RefPtr<ArgumentListNode> m_listNode; }; class NewExprNode : public ExpressionNode, public ThrowableExpressionData { public: NewExprNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL : ExpressionNode(globalData) , m_expr(expr) { } NewExprNode(JSGlobalData* globalData, ExpressionNode* expr, ArgumentsNode* args) JSC_FAST_CALL : ExpressionNode(globalData) , m_expr(expr) , m_args(args) { } virtual ~NewExprNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_expr; RefPtr<ArgumentsNode> m_args; }; class EvalFunctionCallNode : public ExpressionNode, public ThrowableExpressionData { public: EvalFunctionCallNode(JSGlobalData* globalData, ArgumentsNode* args, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowableExpressionData(divot, startOffset, endOffset) , m_args(args) { } virtual ~EvalFunctionCallNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ArgumentsNode> m_args; }; class FunctionCallValueNode : public ExpressionNode, public ThrowableExpressionData { public: FunctionCallValueNode(JSGlobalData* globalData, ExpressionNode* expr, ArgumentsNode* args, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowableExpressionData(divot, startOffset, endOffset) , m_expr(expr) , m_args(args) { } virtual ~FunctionCallValueNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_expr; RefPtr<ArgumentsNode> m_args; }; class FunctionCallResolveNode : public ExpressionNode, public ThrowableExpressionData { public: FunctionCallResolveNode(JSGlobalData* globalData, const Identifier& ident, ArgumentsNode* args, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowableExpressionData(divot, startOffset, endOffset) , m_ident(ident) , m_args(args) { } virtual ~FunctionCallResolveNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: Identifier m_ident; RefPtr<ArgumentsNode> m_args; size_t m_index; // Used by LocalVarFunctionCallNode. size_t m_scopeDepth; // Used by ScopedVarFunctionCallNode and NonLocalVarFunctionCallNode }; class FunctionCallBracketNode : public ExpressionNode, public ThrowableSubExpressionData { public: FunctionCallBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript, ArgumentsNode* args, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowableSubExpressionData(divot, startOffset, endOffset) , m_base(base) , m_subscript(subscript) , m_args(args) { } virtual ~FunctionCallBracketNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_base; RefPtr<ExpressionNode> m_subscript; RefPtr<ArgumentsNode> m_args; }; class FunctionCallDotNode : public ExpressionNode, public ThrowableSubExpressionData { public: FunctionCallDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident, ArgumentsNode* args, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowableSubExpressionData(divot, startOffset, endOffset)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -