⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nodes.h

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 H
📖 第 1 页 / 共 5 页
字号:
            : ExpressionNode(globalData)            , m_expr1(expr1)            , m_expr2(expr2)            , m_rightHasAssignments(rightHasAssignments)        {        }        BinaryOpNode(JSGlobalData* globalData, ResultType type, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments)            : ExpressionNode(globalData, type)            , m_expr1(expr1)            , m_expr2(expr2)            , m_rightHasAssignments(rightHasAssignments)        {        }        virtual ~BinaryOpNode();        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_expr1;        RefPtr<ExpressionNode> m_expr2;        bool m_rightHasAssignments;    };    class ReverseBinaryOpNode : public BinaryOpNode {    public:        ReverseBinaryOpNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments)            : BinaryOpNode(globalData, expr1, expr2, rightHasAssignments)        {        }        ReverseBinaryOpNode(JSGlobalData* globalData, ResultType type, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments)            : BinaryOpNode(globalData, type, expr1, expr2, rightHasAssignments)        {        }        virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;    };    class MultNode : public BinaryOpNode {    public:        MultNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::numberTypeCanReuse(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_mul; }    };    class DivNode : public BinaryOpNode {    public:        DivNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::numberTypeCanReuse(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_div; }    };    class ModNode : public BinaryOpNode {    public:        ModNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::numberTypeCanReuse(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_mod; }    };    class AddNode : public BinaryOpNode {    public:        AddNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::forAdd(expr1->resultDescriptor(), expr2->resultDescriptor()), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_add; }    };    class SubNode : public BinaryOpNode {    public:        SubNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::numberTypeCanReuse(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_sub; }    };    class LeftShiftNode : public BinaryOpNode {    public:        LeftShiftNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::forBitOp(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_lshift; }    };    class RightShiftNode : public BinaryOpNode {    public:        RightShiftNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::forBitOp(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_rshift; }    };    class UnsignedRightShiftNode : public BinaryOpNode {    public:        UnsignedRightShiftNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::numberTypeCanReuse(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_urshift; }    };    class LessNode : public BinaryOpNode {    public:        LessNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::booleanType(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_less; }    };    class GreaterNode : public ReverseBinaryOpNode {    public:        GreaterNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : ReverseBinaryOpNode(globalData, ResultType::booleanType(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_less; }    };    class LessEqNode : public BinaryOpNode {    public:        LessEqNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::booleanType(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_lesseq; }    };    class GreaterEqNode : public ReverseBinaryOpNode {    public:        GreaterEqNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : ReverseBinaryOpNode(globalData, ResultType::booleanType(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_lesseq; }    };    class ThrowableBinaryOpNode : public BinaryOpNode, public ThrowableExpressionData {    public:        ThrowableBinaryOpNode(JSGlobalData* globalData, ResultType type, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, type, expr1, expr2, rightHasAssignments)        {        }        ThrowableBinaryOpNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, expr1, expr2, rightHasAssignments)        {        }        virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;    };        class InstanceOfNode : public ThrowableBinaryOpNode {    public:        InstanceOfNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : ThrowableBinaryOpNode(globalData, ResultType::booleanType(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_instanceof; }        virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;    };    class InNode : public ThrowableBinaryOpNode {    public:        InNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : ThrowableBinaryOpNode(globalData, expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_in; }    };    class EqualNode : public BinaryOpNode {    public:        EqualNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::booleanType(), expr1, expr2, rightHasAssignments)        {        }        virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_eq; }    };    class NotEqualNode : public BinaryOpNode {    public:        NotEqualNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::booleanType(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_neq; }    };    class StrictEqualNode : public BinaryOpNode {    public:        StrictEqualNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::booleanType(), expr1, expr2, rightHasAssignments)        {        }        virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_stricteq; }    };    class NotStrictEqualNode : public BinaryOpNode {    public:        NotStrictEqualNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::booleanType(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_nstricteq; }    };    class BitAndNode : public BinaryOpNode {    public:        BitAndNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::forBitOp(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_bitand; }    };    class BitOrNode : public BinaryOpNode {    public:        BitOrNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::forBitOp(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_bitor; }    };    class BitXOrNode : public BinaryOpNode {    public:        BitXOrNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) JSC_FAST_CALL            : BinaryOpNode(globalData, ResultType::forBitOp(), expr1, expr2, rightHasAssignments)        {        }        virtual OpcodeID opcodeID() const JSC_FAST_CALL { return op_bitxor; }    };    /**     * m_expr1 && m_expr2, m_expr1 || m_expr2     */    class LogicalOpNode : public ExpressionNode {    public:        LogicalOpNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, LogicalOperator oper) JSC_FAST_CALL            : ExpressionNode(globalData, ResultType::booleanType())            , m_expr1(expr1)            , m_expr2(expr2)            , m_operator(oper)        {        }        virtual ~LogicalOpNode();        virtual void releaseNodes(NodeReleaser&);        virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;    private:        RefPtr<ExpressionNode> m_expr1;        RefPtr<ExpressionNode> m_expr2;        LogicalOperator m_operator;    };    /**     * The ternary operator, "m_logical ? m_expr1 : m_expr2"     */    class ConditionalNode : public ExpressionNode {    public:        ConditionalNode(JSGlobalData* globalData, ExpressionNode* logical, ExpressionNode* expr1, ExpressionNode* expr2) JSC_FAST_CALL            : ExpressionNode(globalData)            , m_logical(logical)            , m_expr1(expr1)            , m_expr2(expr2)        {        }        virtual ~ConditionalNode();        virtual void releaseNodes(NodeReleaser&);        virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;    private:        RefPtr<ExpressionNode> m_logical;        RefPtr<ExpressionNode> m_expr1;        RefPtr<ExpressionNode> m_expr2;    };    class ReadModifyResolveNode : public ExpressionNode, public ThrowableExpressionData {    public:        ReadModifyResolveNode(JSGlobalData* globalData, const Identifier& ident, Operator oper, ExpressionNode*  right, bool rightHasAssignments, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL            : ExpressionNode(globalData)            , ThrowableExpressionData(divot, startOffset, endOffset)            , m_ident(ident)            , m_right(right)            , m_operator(oper)            , m_rightHasAssignments(rightHasAssignments)        {        }        virtual ~ReadModifyResolveNode();        virtual void releaseNodes(NodeReleaser&);        virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;    private:        Identifier m_ident;        RefPtr<ExpressionNode> m_right;        size_t m_index; // Used by ReadModifyLocalVarNode.        Operator m_operator : 31;        bool m_rightHasAssignments : 1;    };    class AssignResolveNode : public ExpressionNode, public ThrowableExpressionData {    public:        AssignResolveNode(JSGlobalData* globalData, const Identifier& ident, ExpressionNode* right, bool rightHasAssignments) JSC_FAST_CALL            : ExpressionNode(globalData)            , m_ident(ident)            , m_right(right)            , m_rightHasAssignments(rightHasAssignments)        {        }        virtual ~AssignResolveNode();        virtual void releaseNodes(NodeReleaser&);        virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;    private:        Identifier m_ident;        RefPtr<ExpressionNode> m_right;        size_t m_index; // Used by ReadModifyLocalVarNode.        bool m_rightHasAssignments;    };    class ReadModifyBracketNode : public ExpressionNode, public ThrowableSubExpressionData {    public:        ReadModifyBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript, Operator oper, ExpressionNode* right, bool subscriptHasAssignments, bool rightHasAssignments, unsigned divot, unsigned startOffset, unsigned endOffset) JSC_FAST_CALL            : ExpressionNode(globalData)            , ThrowableSubExpressionData(divot, startOffset, endOffset)            , m_base(base)            , m_subscript(subscript)            , m_right(right)            , m_operator(oper)            , m_subscriptHasAssignments(subscriptHasAssignments)            , m_rightHasAssignments(rightHasAssignments)        {        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -