📄 nodes.h
字号:
, m_base(base) , m_ident(ident) , m_args(args) { } virtual ~FunctionCallDotNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_base; Identifier m_ident; RefPtr<ArgumentsNode> m_args; }; class PrePostResolveNode : public ExpressionNode, public ThrowableExpressionData { public: PrePostResolveNode(JSGlobalData* globalData, const Identifier& ident, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData, ResultType::numberType()) // could be reusable for pre? , ThrowableExpressionData(divot, startOffset, endOffset) , m_ident(ident) { } protected: Identifier m_ident; }; class PostfixResolveNode : public PrePostResolveNode { public: PostfixResolveNode(JSGlobalData* globalData, const Identifier& ident, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : PrePostResolveNode(globalData, ident, divot, startOffset, endOffset) , m_operator(oper) { } virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: Operator m_operator; }; class PostfixBracketNode : public ExpressionNode, public ThrowableSubExpressionData { public: PostfixBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowableSubExpressionData(divot, startOffset, endOffset) , m_base(base) , m_subscript(subscript) , m_operator(oper) { } virtual ~PostfixBracketNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_base; RefPtr<ExpressionNode> m_subscript; Operator m_operator; }; class PostfixDotNode : public ExpressionNode, public ThrowableSubExpressionData { public: PostfixDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowableSubExpressionData(divot, startOffset, endOffset) , m_base(base) , m_ident(ident) , m_operator(oper) { } virtual ~PostfixDotNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_base; Identifier m_ident; Operator m_operator; }; class PostfixErrorNode : public ExpressionNode, public ThrowableSubExpressionData { public: PostfixErrorNode(JSGlobalData* globalData, ExpressionNode* expr, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowableSubExpressionData(divot, startOffset, endOffset) , m_expr(expr) , m_operator(oper) { } virtual ~PostfixErrorNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_expr; Operator m_operator; }; class DeleteResolveNode : public ExpressionNode, public ThrowableExpressionData { public: DeleteResolveNode(JSGlobalData* globalData, const Identifier& ident, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowableExpressionData(divot, startOffset, endOffset) , m_ident(ident) { } virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: Identifier m_ident; }; class DeleteBracketNode : public ExpressionNode, public ThrowableExpressionData { public: DeleteBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowableExpressionData(divot, startOffset, endOffset) , m_base(base) , m_subscript(subscript) { } virtual ~DeleteBracketNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_base; RefPtr<ExpressionNode> m_subscript; }; class DeleteDotNode : public ExpressionNode, public ThrowableExpressionData { public: DeleteDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowableExpressionData(divot, startOffset, endOffset) , m_base(base) , m_ident(ident) { } virtual ~DeleteDotNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_base; Identifier m_ident; }; class DeleteValueNode : public ExpressionNode { public: DeleteValueNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL : ExpressionNode(globalData) , m_expr(expr) { } virtual ~DeleteValueNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_expr; }; class VoidNode : public ExpressionNode { public: VoidNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL : ExpressionNode(globalData) , m_expr(expr) { } virtual ~VoidNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_expr; }; class TypeOfResolveNode : public ExpressionNode { public: TypeOfResolveNode(JSGlobalData* globalData, const Identifier& ident) JSC_FAST_CALL : ExpressionNode(globalData, ResultType::stringType()) , m_ident(ident) { } virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; const Identifier& identifier() const JSC_FAST_CALL { return m_ident; } private: Identifier m_ident; }; class TypeOfValueNode : public ExpressionNode { public: TypeOfValueNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL : ExpressionNode(globalData, ResultType::stringType()) , m_expr(expr) { } virtual ~TypeOfValueNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_expr; }; class PrefixResolveNode : public PrePostResolveNode { public: PrefixResolveNode(JSGlobalData* globalData, const Identifier& ident, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : PrePostResolveNode(globalData, ident, divot, startOffset, endOffset) , m_operator(oper) { } virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: Operator m_operator; }; class PrefixBracketNode : public ExpressionNode, public ThrowablePrefixedSubExpressionData { public: PrefixBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowablePrefixedSubExpressionData(divot, startOffset, endOffset) , m_base(base) , m_subscript(subscript) , m_operator(oper) { } virtual ~PrefixBracketNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_base; RefPtr<ExpressionNode> m_subscript; Operator m_operator; }; class PrefixDotNode : public ExpressionNode, public ThrowablePrefixedSubExpressionData { public: PrefixDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowablePrefixedSubExpressionData(divot, startOffset, endOffset) , m_base(base) , m_ident(ident) , m_operator(oper) { } virtual ~PrefixDotNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_base; Identifier m_ident; Operator m_operator; }; class PrefixErrorNode : public ExpressionNode, public ThrowableExpressionData { public: PrefixErrorNode(JSGlobalData* globalData, ExpressionNode* expr, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL : ExpressionNode(globalData) , ThrowableExpressionData(divot, startOffset, endOffset) , m_expr(expr) , m_operator(oper) { } virtual ~PrefixErrorNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; private: RefPtr<ExpressionNode> m_expr; Operator m_operator; }; class UnaryOpNode : public ExpressionNode { public: UnaryOpNode(JSGlobalData* globalData, ExpressionNode* expr) : ExpressionNode(globalData) , m_expr(expr) { } UnaryOpNode(JSGlobalData* globalData, ResultType type, ExpressionNode* expr) : ExpressionNode(globalData, type) , m_expr(expr) { } virtual ~UnaryOpNode(); virtual void releaseNodes(NodeReleaser&); virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; virtual OpcodeID opcodeID() const JSC_FAST_CALL = 0; protected: RefPtr<ExpressionNode> m_expr; }; class UnaryPlusNode : public UnaryOpNode { public: UnaryPlusNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL : UnaryOpNode(globalData, ResultType::numberType(), expr) { } virtual ExpressionNode* stripUnaryPlus() { return m_expr.get(); } virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_to_jsnumber; } }; class NegateNode : public UnaryOpNode { public: NegateNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL : UnaryOpNode(globalData, ResultType::numberTypeCanReuse(), expr) { } virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_negate; } }; class BitwiseNotNode : public UnaryOpNode { public: BitwiseNotNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL : UnaryOpNode(globalData, ResultType::forBitOp(), expr) { } virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_bitnot; } }; class LogicalNotNode : public UnaryOpNode { public: LogicalNotNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL : UnaryOpNode(globalData, ResultType::booleanType(), expr) { } virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_not; } }; class BinaryOpNode : public ExpressionNode { public: BinaryOpNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -