Home | History | Annotate | Download | only in runtime
      1 /*
      2  * Copyright (C) 2009 Apple Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #ifndef PropertyDescriptor_h
     27 #define PropertyDescriptor_h
     28 
     29 #include "JSValue.h"
     30 
     31 namespace JSC {
     32     class PropertyDescriptor {
     33     public:
     34         PropertyDescriptor()
     35             : m_attributes(defaultAttributes)
     36             , m_seenAttributes(0)
     37         {
     38         }
     39         bool writable() const;
     40         bool enumerable() const;
     41         bool configurable() const;
     42         bool isDataDescriptor() const;
     43         bool isGenericDescriptor() const;
     44         bool isAccessorDescriptor() const;
     45         unsigned attributes() const { return m_attributes; }
     46         JSValue value() const { return m_value; }
     47         JSValue getter() const;
     48         JSValue setter() const;
     49         void setUndefined();
     50         void setDescriptor(JSValue value, unsigned attributes);
     51         void setAccessorDescriptor(JSValue getter, JSValue setter, unsigned attributes);
     52         void setWritable(bool);
     53         void setEnumerable(bool);
     54         void setConfigurable(bool);
     55         void setValue(JSValue value) { m_value = value; }
     56         void setSetter(JSValue);
     57         void setGetter(JSValue);
     58         bool isEmpty() const { return !(m_value || m_getter || m_setter || m_seenAttributes); }
     59         bool writablePresent() const { return m_seenAttributes & WritablePresent; }
     60         bool enumerablePresent() const { return m_seenAttributes & EnumerablePresent; }
     61         bool configurablePresent() const { return m_seenAttributes & ConfigurablePresent; }
     62         bool setterPresent() const { return m_setter; }
     63         bool getterPresent() const { return m_getter; }
     64         bool equalTo(ExecState* exec, const PropertyDescriptor& other) const;
     65         bool attributesEqual(const PropertyDescriptor& other) const;
     66         unsigned attributesWithOverride(const PropertyDescriptor& other) const;
     67     private:
     68         static unsigned defaultAttributes;
     69         bool operator==(const PropertyDescriptor&){ return false; }
     70         enum { WritablePresent = 1, EnumerablePresent = 2, ConfigurablePresent = 4};
     71         // May be a getter/setter
     72         JSValue m_value;
     73         JSValue m_getter;
     74         JSValue m_setter;
     75         unsigned m_attributes;
     76         unsigned m_seenAttributes;
     77     };
     78 }
     79 
     80 #endif
     81