nodes.h

来自「将konqueror浏览器移植到ARM9 2410中」· C头文件 代码 · 共 790 行 · 第 1/2 页

H
790
字号
/* *  This file is part of the KDE libraries *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org) * *  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 "ustring.h"#include "object.h"#include "types.h"#include "debugger.h"namespace KJS {  class KJSO;  class RegExp;  class SourceElementsNode;  class ProgramNode;  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 KJSO evaluate() = 0;    int lineNo() const { return line; }    static Node *firstNode() { return first; }    static void setFirstNode(Node *n) { first = n; }    static void deleteAllNodes();#ifdef KJS_DEBUGGER    static bool setBreakpoint(Node *firstNode, int id, int line, bool set);    virtual bool setBreakpoint(int, int, bool) { return false; }#endif  protected:    KJSO throwError(ErrorType e, const char *msg);  private:    // disallow assignment and copy-construction    Node(const Node &);    Node& operator=(const Node&);    int line;    static  int nodeCount;    static Node *first;    Node *next, *prev;  };  class StatementNode : public Node {  public:#ifdef KJS_DEBUGGER    StatementNode() : l0(-1), l1(-1), sid(-1), breakPoint(false) { }    void setLoc(int line0, int line1);    int firstLine() const { return l0; }    int lastLine() const { return l1; }    int sourceId() const { return sid; }    bool hitStatement();    bool abortStatement();    virtual bool setBreakpoint(int id, int line, bool set);#endif    virtual Completion execute() = 0;    void pushLabel(const UString *id) {      if (id) ls.push(*id);    }  protected:    LabelStack ls;  private:    KJSO evaluate() { return Undefined(); }#ifdef KJS_DEBUGGER    int l0, l1;    int sid;    bool breakPoint;#endif  };  class NullNode : public Node {  public:    KJSO evaluate();  };  class BooleanNode : public Node {  public:    BooleanNode(bool v) : value(v) {}    KJSO evaluate();  private:    bool value;  };  class NumberNode : public Node {  public:    NumberNode(double v) : value(v) { }    KJSO evaluate();  private:    double value;  };  class StringNode : public Node {  public:    StringNode(const UString *v) { value = *v; }    KJSO evaluate();  private:    UString value;  };  class RegExpNode : public Node {  public:    RegExpNode(const UString &p, const UString &f)      : pattern(p), flags(f) { }    KJSO evaluate();  private:    UString pattern, flags;  };  class ThisNode : public Node {  public:    KJSO evaluate();  };  class ResolveNode : public Node {  public:    ResolveNode(const UString *s) : ident(*s) { }    KJSO evaluate();  private:    UString ident;  };  class GroupNode : public Node {  public:    GroupNode(Node *g) : group(g) { }    KJSO evaluate();  private:    Node *group;  };  class ElisionNode : public Node {  public:    ElisionNode(ElisionNode *e) : elision(e) { }    KJSO evaluate();  private:    ElisionNode *elision;  };  class ElementNode : public Node {  public:    ElementNode(ElisionNode *e, Node *n) : list(0l), elision(e), node(n) { }    ElementNode(ElementNode *l, ElisionNode *e, Node *n)      : list(l), elision(e), node(n) { }    KJSO evaluate();  private:    ElementNode *list;    ElisionNode *elision;    Node *node;  };  class ArrayNode : public Node {  public:    ArrayNode(ElisionNode *e) : element(0L), elision(e), opt(true) { }    ArrayNode(ElementNode *ele)      : element(ele), elision(0), opt(false) { }    ArrayNode(ElisionNode *eli, ElementNode *ele)      : element(ele), elision(eli), opt(true) { }    KJSO evaluate();  private:    ElementNode *element;    ElisionNode *elision;    bool opt;  };  class ObjectLiteralNode : public Node {  public:    ObjectLiteralNode(Node *l) : list(l) { }    KJSO evaluate();  private:    Node *list;  };  class PropertyValueNode : public Node {  public:    PropertyValueNode(Node *n, Node *a, Node *l = 0L)      : name(n), assign(a), list(l) { }    KJSO evaluate();  private:    Node *name, *assign, *list;  };  class PropertyNode : public Node {  public:    PropertyNode(double d) : numeric(d) { }    PropertyNode(const UString *s) : str(*s) { }    KJSO evaluate();  private:    double numeric;    UString str;  };  class AccessorNode1 : public Node {  public:    AccessorNode1(Node *e1, Node *e2) : expr1(e1), expr2(e2) {}    KJSO evaluate();  private:    Node *expr1;    Node *expr2;  };  class AccessorNode2 : public Node {  public:    AccessorNode2(Node *e, const UString *s) : expr(e), ident(*s) { }    KJSO evaluate();  private:    Node *expr;    UString ident;  };  class ArgumentListNode : public Node {  public:    ArgumentListNode(Node *e);    ArgumentListNode(ArgumentListNode *l, Node *e);    KJSO evaluate();    List *evaluateList();  private:    ArgumentListNode *list;    Node *expr;  };  class ArgumentsNode : public Node {  public:    ArgumentsNode(ArgumentListNode *l);    KJSO evaluate();    List *evaluateList();  private:    ArgumentListNode *list;  };  class NewExprNode : public Node {  public:    NewExprNode(Node *e) : expr(e), args(0L) {}    NewExprNode(Node *e, ArgumentsNode *a) : expr(e), args(a) {}    KJSO evaluate();  private:    Node *expr;    ArgumentsNode *args;  };  class FunctionCallNode : public Node {  public:    FunctionCallNode(Node *e, ArgumentsNode *a) : expr(e), args(a) {}    KJSO evaluate();#ifdef KJS_DEBUGGER    void steppingInto(bool in);    Debugger::Mode previousMode;#endif  private:    Node *expr;    ArgumentsNode *args;  };  class PostfixNode : public Node {  public:    PostfixNode(Node *e, Operator o) : expr(e), oper(o) {}    KJSO evaluate();  private:    Node *expr;    Operator oper;  };  class DeleteNode : public Node {  public:    DeleteNode(Node *e) : expr(e) {}    KJSO evaluate();  private:    Node *expr;  };  class VoidNode : public Node {  public:    VoidNode(Node *e) : expr(e) {}    KJSO evaluate();  private:    Node *expr;  };  class TypeOfNode : public Node {  public:    TypeOfNode(Node *e) : expr(e) {}    KJSO evaluate();  private:    Node *expr;  };  class PrefixNode : public Node {  public:    PrefixNode(Operator o, Node *e) : oper(o), expr(e) {}    KJSO evaluate();  private:    Operator oper;    Node *expr;  };  class UnaryPlusNode : public Node {  public:    UnaryPlusNode(Node *e) : expr(e) {}    KJSO evaluate();  private:    Node *expr;  };  class NegateNode : public Node {  public:    NegateNode(Node *e) : expr(e) {}    KJSO evaluate();  private:    Node *expr;  };  class BitwiseNotNode : public Node {  public:    BitwiseNotNode(Node *e) : expr(e) {}    KJSO evaluate();  private:    Node *expr;  };  class LogicalNotNode : public Node {  public:    LogicalNotNode(Node *e) : expr(e) {}    KJSO evaluate();  private:    Node *expr;  };  class MultNode : public Node {  public:    MultNode(Node *t1, Node *t2, char op) : term1(t1), term2(t2), oper(op) {}    KJSO evaluate();  private:    Node *term1, *term2;    char oper;  };  class AddNode : public Node {  public:    AddNode(Node *t1, Node *t2, char op) : term1(t1), term2(t2), oper(op) {}    KJSO evaluate();  private:    Node *term1, *term2;    char oper;  };  class ShiftNode : public Node {  public:    ShiftNode(Node *t1, Operator o, Node *t2)

⌨️ 快捷键说明

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