interpreter.h
来自「konqueror3 embedded版本, KDE环境下的当家浏览器的嵌入式版」· C头文件 代码 · 共 499 行 · 第 1/2 页
H
499 行
// -*- c-basic-offset: 2 -*-/* * This file is part of the KDE libraries * Copyright (C) 1999-2001 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., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. * */#ifndef _KJS_INTERPRETER_H_#define _KJS_INTERPRETER_H_#include "value.h"#include "object.h"#include "types.h"namespace KJS { class ContextImp; class InterpreterImp; /** * The three different types of code that can be executed in a Context. * These are: * <ul> * <li>GlobalCode - code executed as a result of a call to * Interpreter::evaluate().</li> * <li>EvalCode - executed by a call to the builtin eval() function</li> * <li>FunctionCode - inside a function call (ECMAScript functions only; * does not include builtin native functions or funcitons supplied by the * host environment</li> * </ul> */ enum CodeType { GlobalCode = 0, EvalCode = 1, FunctionCode = 2 }; /** * Represents an execution context, as specified by section 10 of the ECMA * spec. * * An execution context contains information about the current state of the * script - the scope for variable lookup, the value of "this", etc. A new * execution context is entered whenever global code is executed (e.g. with * Interpreter::evaluate()), a function is called (see * Object::call()), or the builtin "eval" function is executed. * * Most inheritable functions in the KJS api take a ExecState pointer as * their first parameter. This can be used to obtain a handle to the current * execution context. * * Note: Context objects are wrapper classes/smart pointers for the internal * KJS ContextImp type. When one context variable is assigned to another, it * is still referencing the same internal object. */ class KJS_EXPORT Context { public: Context(ContextImp *i) : rep(i) { } ContextImp *imp() const { return rep; } /** * Returns the scope chain for this execution context. This is used for * variable lookup, with the list being searched from start to end until a * variable is found. * * @return The execution context's scope chain */ const ScopeChain &scopeChain() const; /** * Returns the variable object for the execution context. This contains a * property for each variable declared in the execution context. * * @return The execution context's variable object */ Object variableObject() const; /** * Returns the "this" value for the execution context. This is the value * returned when a script references the special variable "this". It should * always be an Object, unless application-specific code has passed in a * different type. * * The object that is used as the "this" value depends on the type of * execution context - for global contexts, the global object is used. For * function objewcts, the value is given by the caller (e.g. in the case of * obj.func(), obj would be the "this" value). For code executed by the * built-in "eval" function, the this value is the same as the calling * context. * * @return The execution context's "this" value */ Object thisValue() const; /** * Returns the context from which the current context was invoked. For * global code this will be a null context (i.e. one for which * isNull() returns true). You should check isNull() on the returned * value before calling any of it's methods. * * @return The calling execution context */ const Context callingContext() const; /** * The type of code being executed in this context. One of GlobalCode, * EvalCode or FunctionCode */ CodeType codeType() const; /** * The identifier of the source code fragment containing the code being * executed */ int sourceId() const; /** * The line number on which the current statement begins */ int curStmtFirstLine() const; /** * The line number on which the current statement ends */ int curStmtLastLine() const; /** * In the case of FunctionCode, the function objects being called */ Object function() const; /** * In the case of FunctionCode, the name of the function being called */ Identifier functionName() const; /** * In the case of FunctionCode, the arguments passed to the function */ List args() const; private: ContextImp *rep; }; bool operator==(const Context &c1, const Context &c2); bool operator!=(const Context &c1, const Context &c2); /** * Interpreter objects can be used to evaluate ECMAScript code. Each * interpreter has a global object which is used for the purposes of code * evaluation, and also provides access to built-in properties such as * " Object" and "Number". */ class KJS_EXPORT Interpreter { public: /** * Creates a new interpreter. The supplied object will be used as the global * object for all scripts executed with this interpreter. During * constuction, all the standard properties such as "Object" and "Number" * will be added to the global object. * * Note: You should not use the same global object for multiple * interpreters. * * This is due do the fact that the built-in properties are set in the * constructor, and if these objects have been modified from another * interpreter (e.g. a script modifying String.prototype), the changes will * be overridden. * * @param global The object to use as the global object for this interpreter */ Interpreter(const Object &global); /** * Creates a new interpreter. A global object will be created and * initialized with the standard global properties. */ Interpreter(); virtual ~Interpreter(); /** * Returns the object that is used as the global object during all script * execution performed by this interpreter */ Object &globalObject() const; void initGlobalObject(); static void lock(); static void unlock(); /** * Returns the execution state object which can be used to execute * scripts using this interpreter at a the "global" level, i.e. one * with a execution context that has the global object as the "this" * value, and who's scope chain contains only the global object. * * Note: this pointer remains constant for the life of the interpreter * and should not be manually deleted. * * @return The interpreter global execution state object */ ExecState *globalExec(); /** * Parses the supplied ECMAScript code and checks for syntax errors. * * @param code The code to check * @param errLine Returns the line the error was on (if there was one). * @param errMsg Returns the error message (if there was one). * @return true if there were no syntax errors in the code, otherwise false */ bool checkSyntax(const UString &code, int *errLine, UString *errMsg); /** * Parses the supplied ECMAScript code and checks for syntax errors. * * @param code The code to check * @return true if there were no syntax errors in the code, otherwise false */ bool checkSyntax(const UString &code); /** * Evaluates the supplied ECMAScript code. * * Since this method returns a Completion, you should check the type of * completion to detect an error or before attempting to access the returned * value. For example, if an error occurs during script execution and is not * caught by the script, the completion type will be Throw. * * If the supplied code is invalid, a SyntaxError will be thrown. *
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?