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

📄 object.h

📁 khtml在gtk上的移植版本
💻 H
📖 第 1 页 / 共 2 页
字号:
// -*- 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., 59 Temple Place - Suite 330, *  Boston, MA 02111-1307, USA. * */#ifndef _KJS_OBJECT_H_#define _KJS_OBJECT_H_// Objects// maximum global call stack size. Protects against accidental or// malicious infinite recursions. Define to -1 if you want no limit.#if APPLE_CHANGES// Given OS X stack sizes we run out of stack at about 350 levels.// If we improve our stack usage, we can bump this number.#define KJS_MAX_STACK 100#else#define KJS_MAX_STACK 1000#endif#include "value.h"#include "types.h"#include "reference_list.h"#include "property_map.h"#include "scope_chain.h"namespace KJS {  class HashTable;  class HashEntry;  class ListImp;  class ReferenceList;  // ECMA 262-3 8.6.1  // Attributes (only applicable to the Object type)  enum Attribute { None       = 0,                   ReadOnly   = 1 << 1, // property can be only read, not written                   DontEnum   = 1 << 2, // property doesn't appear in (for .. in ..)                   DontDelete = 1 << 3, // property can't be deleted                   Internal   = 1 << 4, // an internal property, set to by pass checks                   Function   = 1 << 5 }; // property is a function - only used by static hashtables  /**   * Class Information   */  struct ClassInfo {    /**     * A string denoting the class name. Example: "Window".     */    const char* className;    /**     * Pointer to the class information of the base class.     * 0L if there is none.     */    const ClassInfo *parentClass;    /**     * Static hash-table of properties.     */    const HashTable *propHashTable;    /**     * Reserved for future extension.     */    void *dummy;  };    /**   * Represents an Object. This is a wrapper for ObjectImp   */  class Object : public Value {  public:    Object() { }    explicit Object(ObjectImp *v);        ObjectImp *imp() const;    const ClassInfo *classInfo() const;    bool inherits(const ClassInfo *cinfo) const;    /**     * Converts a Value into an Object. If the value's type is not ObjectType,     * a null object will be returned (i.e. one with it's internal pointer set     * to 0). If you do not know for sure whether the value is of type     * ObjectType, you should check the @ref isNull() methods afterwards before     * calling any methods on the Object.     *     * @return The value converted to an object     */    static Object dynamicCast(const Value &v);    /**     * Returns the prototype of this object. Note that this is not the same as     * the "prototype" property.     *     * See ECMA 8.6.2     *     * @return The object's prototype     */    Value prototype() const;    /**     * Returns the class name of the object     *     * See ECMA 8.6.2     *     * @return The object's class name     */    UString className() const;    /**     * Retrieves the specified property from the object. If neither the object     * or any other object in it's prototype chain have the property, this     * function will return Undefined.     *     * See ECMA 8.6.2.1     *     * @param exec The current execution state     * @param propertyName The name of the property to retrieve     *     * @return The specified property, or Undefined     */    Value get(ExecState *exec, const Identifier &propertyName) const;    Value get(ExecState *exec, unsigned propertyName) const;    /**     * Sets the specified property.     *     * See ECMA 8.6.2.2     *     * @param exec The current execution state     * @param propertyName The name of the property to set     * @param propertyValue The value to set     */    void put(ExecState *exec, const Identifier &propertyName,             const Value &value, int attr = None);    void put(ExecState *exec, unsigned propertyName,             const Value &value, int attr = None);    /**     * Used to check whether or not a particular property is allowed to be set     * on an object     *     * See ECMA 8.6.2.3     *     * @param exec The current execution state     * @param propertyName The name of the property     * @return true if the property can be set, otherwise false     */    bool canPut(ExecState *exec, const Identifier &propertyName) const;    /**     * Checks to see whether the object (or any object in it's prototype chain)     * has a property with the specified name.     *     * See ECMA 8.6.2.4     *     * @param exec The current execution state     * @param propertyName The name of the property to check for     * @return true if the object has the property, otherwise false     */    bool hasProperty(ExecState *exec, const Identifier &propertyName) const;    bool hasProperty(ExecState *exec, unsigned propertyName) const;    /**     * Removes the specified property from the object.     *     * See ECMA 8.6.2.5     *     * @param exec The current execution state     * @param propertyName The name of the property to delete     * @return true if the property was successfully deleted or did not     * exist on the object. false if deleting the specified property is not     * allowed.     */    bool deleteProperty(ExecState *exec, const Identifier &propertyName);    bool deleteProperty(ExecState *exec, unsigned propertyName);    /**     * Converts the object into a primitive value. The value return may differ     * depending on the supplied hint     *     * See ECMA 8.6.2.6     *     * @param exec The current execution state     * @param hint The desired primitive type to convert to     * @return A primitive value converted from the objetc. Note that the     * type of primitive value returned may not be the same as the requested     * hint.     */    Value defaultValue(ExecState *exec, Type hint) const;    /**     * Whether or not the object implements the construct() method. If this     * returns false you should not call the construct() method on this     * object (typically, an assertion will fail to indicate this).     *     * @return true if this object implements the construct() method, otherwise     * false     */    bool implementsConstruct() const;    /**     * Creates a new object based on this object. Typically this means the     * following:     * 1. A new object is created     * 2. The prototype of the new object is set to the value of this object's     *    "prototype" property     * 3. The call() method of this object is called, with the new object     *    passed as the this value     * 4. The new object is returned     *     * In some cases, Host objects may differ from these semantics, although     * this is discouraged.     *     * If an error occurs during construction, the execution state's exception     * will be set. This can be tested for with @ref ExecState::hadException().     * Under some circumstances, the exception object may also be returned.     *     * Note: This function should not be called if implementsConstruct() returns     * false, in which case it will result in an assertion failure.     *     * @param exec The current execution state     * @param args The arguments to be passed to call() once the new object has     * been created     * @return The newly created &amp; initialized object     */    Object construct(ExecState *exec, const List &args);    /**     * Whether or not the object implements the call() method. If this returns     * false you should not call the call() method on this object (typically,     * an assertion will fail to indicate this).     *     * @return true if this object implements the call() method, otherwise     * false     */    bool implementsCall() const;    /**     * Calls this object as if it is a function.     *     * Note: This function should not be called if implementsCall() returns     * false, in which case it will result in an assertion failure.     *     * See ECMA 8.6.2.3     *     * @param exec The current execution state     * @param thisObj The obj to be used as "this" within function execution.     * Note that in most cases this will be different from the C++ "this"     * object. For example, if the ECMAScript code "window.location.toString()"     * is executed, call() will be invoked on the C++ object which implements     * the toString method, with the thisObj being window.location     * @param args List of arguments to be passed to the function     * @return The return value from the function     */    Value call(ExecState *exec, Object &thisObj, const List &args);    /**     * Whether or not the object implements the hasInstance() method. If this     * returns false you should not call the hasInstance() method on this     * object (typically, an assertion will fail to indicate this).     *     * @return true if this object implements the hasInstance() method,     * otherwise false     */    bool implementsHasInstance() const;    /**     * Checks whether value delegates behaviour to this object. Used by the     * instanceof operator.     *     * @param exec The current execution state     * @param value The value to check     * @return true if value delegates behaviour to this object, otherwise     * false     */    Boolean hasInstance(ExecState *exec, const Value &value);    /**     * Returns the scope of this object. This is used when execution declared     * functions - the execution context for the function is initialized with     * extra object in it's scope. An example of this is functions declared     * inside other functions:     *     * function f() {     *     *   function b() {     *     return prototype;     *   }     *     *   var x = 4;     *   // do some stuff     * }     * f.prototype = new String();     *     * When the function f.b is executed, its scope will include properties of     * f. So in the example above the return value of f.b() would be the new     * String object that was assigned to f.prototype.     *     * @param exec The current execution state     * @return The function's scope     */    const ScopeChain &scope() const;    void setScope(const ScopeChain &s);    /**     * Returns a List of References to all the properties of the object. Used     * in "for x in y" statements. The list is created new, so it can be freely     * modified without affecting the object's properties. It should be deleted     * by the caller.     *     * Subclasses can override this method in ObjectImpl to provide the     * appearance of     * having extra properties other than those set specifically with put().     *     * @param exec The current execution state     * @param recursive Whether or not properties in the object's prototype     * chain should be     * included in the list.     * @return A List of References to properties of the object.     **/    ReferenceList propList(ExecState *exec, bool recursive = true);    /**     * Returns the internal value of the object. This is used for objects such     * as String and Boolean which are wrappers for native types. The interal     * value is the actual value represented by the wrapper objects.     *     * @see ECMA 8.6.2     * @return The internal value of the object     */    Value internalValue() const;    /**     * Sets the internal value of the object     *     * @see internalValue()     *     * @param v The new internal value     */    void setInternalValue(const Value &v);    void saveProperties(SavedProperties &p) const;    void restoreProperties(const SavedProperties &p);  };

⌨️ 快捷键说明

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