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 + -
显示快捷键?