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

📄 nodes.h

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 H
📖 第 1 页 / 共 5 页
字号:
        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 + -