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

📄 nodes.h

📁 khtml在gtk上的移植版本
💻 H
📖 第 1 页 / 共 2 页
字号:
// -*- c-basic-offset: 2 -*-/* *  This file is part of the KDE libraries *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org) *  Copyright (C) 2001 Peter Kelly (pmk@post.com) *  Copyright (C) 2003 Apple Computer, Inc. * *  This library is free software; you can redistribute it and/or *  modify it under the terms of the GNU Library General Public *  License as published by the Free Software Foundation; either *  version 2 of the License, or (at your option) any later version. * *  This library is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *  Library General Public License for more details. * *  You should have received a copy of the GNU Library General Public License *  along with this library; see the file COPYING.LIB.  If not, write to *  the Free Software Foundation, Inc., 59 Temple Place - Suite 330, *  Boston, MA 02111-1307, USA. * */#ifndef _NODES_H_#define _NODES_H_#include "internal.h"//#include "debugger.h"#if !defined(NDEBUG) && !KWIQ#ifndef __osf__#include <list>#endif#endifnamespace KJS {  class RegExp;  class SourceElementsNode;  class ProgramNode;  class SourceStream;  class PropertyValueNode;  class PropertyNode;  enum Operator { OpEqual,		  OpEqEq,		  OpNotEq,		  OpStrEq,		  OpStrNEq,		  OpPlusEq,		  OpMinusEq,		  OpMultEq,		  OpDivEq,                  OpPlusPlus,		  OpMinusMinus,		  OpLess,		  OpLessEq,		  OpGreater,		  OpGreaterEq,		  OpAndEq,		  OpXOrEq,		  OpOrEq,		  OpModEq,                  OpAnd,                  OpOr,		  OpBitAnd,		  OpBitXOr,		  OpBitOr,		  OpLShift,		  OpRShift,		  OpURShift,		  OpIn,		  OpInstanceOf  };  class Node {  public:    Node();    virtual ~Node();    virtual Value evaluate(ExecState *exec) = 0;    virtual Reference evaluateReference(ExecState *exec);    UString toString() const;    virtual void streamTo(SourceStream &s) const = 0;    virtual void processVarDecls(ExecState */*exec*/) {}    int lineNo() const { return line; }  public:    // reference counting mechanism    virtual void ref() { refcount++; }#ifdef KJS_DEBUG_MEM    virtual bool deref() { assert( refcount > 0 ); return (!--refcount); }#else    virtual bool deref() { return (!--refcount); }#endif#ifdef KJS_DEBUG_MEM    static void finalCheck();#endif  protected:    Value throwError(ExecState *exec, ErrorType e, const char *msg);    Value throwError(ExecState *exec, ErrorType e, const char *msg, Value v, Node *expr);    Value throwError(ExecState *exec, ErrorType e, const char *msg, Identifier label);    int line;    UString sourceURL;    unsigned int refcount;    virtual int sourceId() const { return -1; }  private:#ifdef KJS_DEBUG_MEM    // List of all nodes, for debugging purposes. Don't remove!    static std::list<Node *> *s_nodes;#endif    // disallow assignment    Node& operator=(const Node&);    Node(const Node &other);  };  class StatementNode : public Node {  public:    StatementNode();    void setLoc(int line0, int line1, int sourceId);    int firstLine() const { return l0; }    int lastLine() const { return l1; }    int sourceId() const { return sid; }    bool hitStatement(ExecState *exec);    bool abortStatement(ExecState *exec);    virtual Completion execute(ExecState *exec) = 0;    void pushLabel(const Identifier &id) { ls.push(id); }    virtual void processFuncDecl(ExecState *exec);  protected:    LabelStack ls;  private:    Value evaluate(ExecState */*exec*/) { return Undefined(); }    int l0, l1;    int sid;    bool breakPoint;  };  class NullNode : public Node {  public:    NullNode() {}    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  };  class BooleanNode : public Node {  public:    BooleanNode(bool v) : value(v) {}    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    bool value;  };  class NumberNode : public Node {  public:    NumberNode(double v) : value(v) { }    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    double value;  };  class StringNode : public Node {  public:    StringNode(const UString *v) { value = *v; }    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    UString value;  };  class RegExpNode : public Node {  public:    RegExpNode(const UString &p, const UString &f)      : pattern(p), flags(f) { }    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    UString pattern, flags;  };  class ThisNode : public Node {  public:    ThisNode() {}    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  };  class ResolveNode : public Node {  public:    ResolveNode(const Identifier &s) : ident(s) { }    Value evaluate(ExecState *exec);    virtual Reference evaluateReference(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Identifier ident;  };  class GroupNode : public Node {  public:    GroupNode(Node *g) : group(g) { }    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const { group->streamTo(s); }  private:    Node *group;  };  class ElementNode : public Node {  public:    // list pointer is tail of a circular list, cracked in the ArrayNode ctor    ElementNode(int e, Node *n) : list(this), elision(e), node(n) { }    ElementNode(ElementNode *l, int e, Node *n)      : list(l->list), elision(e), node(n) { l->list = this; }    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    friend class ArrayNode;    ElementNode *list;    int elision;    Node *node;  };  class ArrayNode : public Node {  public:    ArrayNode(int e) : element(0), elision(e), opt(true) { }    ArrayNode(ElementNode *ele)      : element(ele->list), elision(0), opt(false) { ele->list = 0; }    ArrayNode(int eli, ElementNode *ele)      : element(ele->list), elision(eli), opt(true) { ele->list = 0; }    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    ElementNode *element;    int elision;    bool opt;  };  class PropertyValueNode : public Node {  public:    // list pointer is tail of a circular list, cracked in the ObjectLiteralNode ctor    PropertyValueNode(PropertyNode *n, Node *a)      : name(n), assign(a), list(this) { }    PropertyValueNode(PropertyNode *n, Node *a, PropertyValueNode *l)      : name(n), assign(a), list(l->list) { l->list = this; }    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    friend class ObjectLiteralNode;    PropertyNode *name;    Node *assign;    PropertyValueNode *list;  };  class ObjectLiteralNode : public Node {  public:    ObjectLiteralNode() : list(0) { }    ObjectLiteralNode(PropertyValueNode *l) : list(l->list) { l->list = 0; }    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    PropertyValueNode *list;  };  class PropertyNode : public Node {  public:    PropertyNode(double d) : numeric(d) { }    PropertyNode(const Identifier &s) : str(s) { }    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    double numeric;    Identifier str;  };  class AccessorNode1 : public Node {  public:    AccessorNode1(Node *e1, Node *e2) : expr1(e1), expr2(e2) {}    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual Reference evaluateReference(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Node *expr1;    Node *expr2;  };  class AccessorNode2 : public Node {  public:    AccessorNode2(Node *e, const Identifier &s) : expr(e), ident(s) { }    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual Reference evaluateReference(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Node *expr;    Identifier ident;  };  class ArgumentListNode : public Node {  public:    // list pointer is tail of a circular list, cracked in the ArgumentsNode ctor    ArgumentListNode(Node *e) : list(this), expr(e) { }    ArgumentListNode(ArgumentListNode *l, Node *e)      : list(l->list), expr(e) { l->list = this; }    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    List evaluateList(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    friend class ArgumentsNode;    ArgumentListNode *list;    Node *expr;  };  class ArgumentsNode : public Node {  public:    ArgumentsNode() : list(0) { }    ArgumentsNode(ArgumentListNode *l)      : list(l->list) { l->list = 0; }    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    List evaluateList(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    ArgumentListNode *list;  };  class NewExprNode : public Node {  public:    NewExprNode(Node *e) : expr(e), args(0) {}    NewExprNode(Node *e, ArgumentsNode *a) : expr(e), args(a) {}    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Node *expr;    ArgumentsNode *args;  };  class FunctionCallNode : public Node {  public:    FunctionCallNode(Node *e, ArgumentsNode *a) : expr(e), args(a) {}    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Node *expr;    ArgumentsNode *args;  };  class PostfixNode : public Node {  public:    PostfixNode(Node *e, Operator o) : expr(e), oper(o) {}    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Node *expr;    Operator oper;  };  class DeleteNode : public Node {  public:    DeleteNode(Node *e) : expr(e) {}    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Node *expr;  };  class VoidNode : public Node {  public:    VoidNode(Node *e) : expr(e) {}    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Node *expr;  };  class TypeOfNode : public Node {  public:    TypeOfNode(Node *e) : expr(e) {}    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Node *expr;  };  class PrefixNode : public Node {  public:    PrefixNode(Operator o, Node *e) : oper(o), expr(e) {}    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Operator oper;    Node *expr;  };  class UnaryPlusNode : public Node {  public:    UnaryPlusNode(Node *e) : expr(e) {}    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Node *expr;  };  class NegateNode : public Node {  public:    NegateNode(Node *e) : expr(e) {}    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Node *expr;  };  class BitwiseNotNode : public Node {  public:    BitwiseNotNode(Node *e) : expr(e) {}    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Node *expr;  };  class LogicalNotNode : public Node {  public:    LogicalNotNode(Node *e) : expr(e) {}    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Node *expr;  };  class MultNode : public Node {  public:    MultNode(Node *t1, Node *t2, char op) : term1(t1), term2(t2), oper(op) {}    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Node *term1, *term2;    char oper;  };  class AddNode : public Node {  public:    AddNode(Node *t1, Node *t2, char op) : term1(t1), term2(t2), oper(op) {}    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Node *term1, *term2;    char oper;  };  class ShiftNode : public Node {  public:    ShiftNode(Node *t1, Operator o, Node *t2)      : term1(t1), term2(t2), oper(o) {}    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Node *term1, *term2;    Operator oper;  };  class RelationalNode : public Node {  public:    RelationalNode(Node *e1, Operator o, Node *e2) :      expr1(e1), expr2(e2), oper(o) {}    virtual void ref();    virtual bool deref();    Value evaluate(ExecState *exec);    virtual void streamTo(SourceStream &s) const;  private:    Node *expr1, *expr2;    Operator oper;  };

⌨️ 快捷键说明

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