Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(125)

Side by Side Diff: src/objects.h

Issue 332863003: Remove AccessControl from AccessorPairs, as it's an invalid usecase of AllCan* (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/factory.cc ('k') | src/objects.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_OBJECTS_H_ 5 #ifndef V8_OBJECTS_H_
6 #define V8_OBJECTS_H_ 6 #define V8_OBJECTS_H_
7 7
8 #include "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/assert-scope.h" 9 #include "src/assert-scope.h"
10 #include "src/builtins.h" 10 #include "src/builtins.h"
(...skipping 2207 matching lines...) Expand 10 before | Expand all | Expand 10 after
2218 Handle<Name> name, 2218 Handle<Name> name,
2219 AccessorComponent component); 2219 AccessorComponent component);
2220 2220
2221 // Defines an AccessorPair property on the given object. 2221 // Defines an AccessorPair property on the given object.
2222 // TODO(mstarzinger): Rename to SetAccessor() and return empty handle on 2222 // TODO(mstarzinger): Rename to SetAccessor() and return empty handle on
2223 // exception instead of letting callers check for scheduled exception. 2223 // exception instead of letting callers check for scheduled exception.
2224 static void DefineAccessor(Handle<JSObject> object, 2224 static void DefineAccessor(Handle<JSObject> object,
2225 Handle<Name> name, 2225 Handle<Name> name,
2226 Handle<Object> getter, 2226 Handle<Object> getter,
2227 Handle<Object> setter, 2227 Handle<Object> setter,
2228 PropertyAttributes attributes, 2228 PropertyAttributes attributes);
2229 v8::AccessControl access_control = v8::DEFAULT);
2230 2229
2231 // Defines an AccessorInfo property on the given object. 2230 // Defines an AccessorInfo property on the given object.
2232 MUST_USE_RESULT static MaybeHandle<Object> SetAccessor( 2231 MUST_USE_RESULT static MaybeHandle<Object> SetAccessor(
2233 Handle<JSObject> object, 2232 Handle<JSObject> object,
2234 Handle<AccessorInfo> info); 2233 Handle<AccessorInfo> info);
2235 2234
2236 MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithInterceptor( 2235 MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithInterceptor(
2237 Handle<JSObject> object, 2236 Handle<JSObject> object,
2238 Handle<Object> receiver, 2237 Handle<Object> receiver,
2239 Handle<Name> name); 2238 Handle<Name> name);
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after
2814 Handle<Object> structure, 2813 Handle<Object> structure,
2815 PropertyAttributes attributes); 2814 PropertyAttributes attributes);
2816 static void SetPropertyCallback(Handle<JSObject> object, 2815 static void SetPropertyCallback(Handle<JSObject> object,
2817 Handle<Name> name, 2816 Handle<Name> name,
2818 Handle<Object> structure, 2817 Handle<Object> structure,
2819 PropertyAttributes attributes); 2818 PropertyAttributes attributes);
2820 static void DefineElementAccessor(Handle<JSObject> object, 2819 static void DefineElementAccessor(Handle<JSObject> object,
2821 uint32_t index, 2820 uint32_t index,
2822 Handle<Object> getter, 2821 Handle<Object> getter,
2823 Handle<Object> setter, 2822 Handle<Object> setter,
2824 PropertyAttributes attributes, 2823 PropertyAttributes attributes);
2825 v8::AccessControl access_control);
2826 static Handle<AccessorPair> CreateAccessorPairFor(Handle<JSObject> object, 2824 static Handle<AccessorPair> CreateAccessorPairFor(Handle<JSObject> object,
2827 Handle<Name> name); 2825 Handle<Name> name);
2828 static void DefinePropertyAccessor(Handle<JSObject> object, 2826 static void DefinePropertyAccessor(Handle<JSObject> object,
2829 Handle<Name> name, 2827 Handle<Name> name,
2830 Handle<Object> getter, 2828 Handle<Object> getter,
2831 Handle<Object> setter, 2829 Handle<Object> setter,
2832 PropertyAttributes attributes, 2830 PropertyAttributes attributes);
2833 v8::AccessControl access_control);
2834 2831
2835 // Try to define a single accessor paying attention to map transitions. 2832 // Try to define a single accessor paying attention to map transitions.
2836 // Returns false if this was not possible and we have to use the slow case. 2833 // Returns false if this was not possible and we have to use the slow case.
2837 static bool DefineFastAccessor(Handle<JSObject> object, 2834 static bool DefineFastAccessor(Handle<JSObject> object,
2838 Handle<Name> name, 2835 Handle<Name> name,
2839 AccessorComponent component, 2836 AccessorComponent component,
2840 Handle<Object> accessor, 2837 Handle<Object> accessor,
2841 PropertyAttributes attributes); 2838 PropertyAttributes attributes);
2842 2839
2843 2840
(...skipping 7881 matching lines...) Expand 10 before | Expand all | Expand 10 after
10725 DISALLOW_IMPLICIT_CONSTRUCTORS(ExecutableAccessorInfo); 10722 DISALLOW_IMPLICIT_CONSTRUCTORS(ExecutableAccessorInfo);
10726 }; 10723 };
10727 10724
10728 10725
10729 // Support for JavaScript accessors: A pair of a getter and a setter. Each 10726 // Support for JavaScript accessors: A pair of a getter and a setter. Each
10730 // accessor can either be 10727 // accessor can either be
10731 // * a pointer to a JavaScript function or proxy: a real accessor 10728 // * a pointer to a JavaScript function or proxy: a real accessor
10732 // * undefined: considered an accessor by the spec, too, strangely enough 10729 // * undefined: considered an accessor by the spec, too, strangely enough
10733 // * the hole: an accessor which has not been set 10730 // * the hole: an accessor which has not been set
10734 // * a pointer to a map: a transition used to ensure map sharing 10731 // * a pointer to a map: a transition used to ensure map sharing
10735 // access_flags provides the ability to override access checks on access check
10736 // failure.
10737 class AccessorPair: public Struct { 10732 class AccessorPair: public Struct {
10738 public: 10733 public:
10739 DECL_ACCESSORS(getter, Object) 10734 DECL_ACCESSORS(getter, Object)
10740 DECL_ACCESSORS(setter, Object) 10735 DECL_ACCESSORS(setter, Object)
10741 DECL_ACCESSORS(access_flags, Smi)
10742
10743 inline void set_access_flags(v8::AccessControl access_control);
10744 inline bool all_can_read();
10745 inline bool all_can_write();
10746 10736
10747 static inline AccessorPair* cast(Object* obj); 10737 static inline AccessorPair* cast(Object* obj);
10748 10738
10749 static Handle<AccessorPair> Copy(Handle<AccessorPair> pair); 10739 static Handle<AccessorPair> Copy(Handle<AccessorPair> pair);
10750 10740
10751 Object* get(AccessorComponent component) { 10741 Object* get(AccessorComponent component) {
10752 return component == ACCESSOR_GETTER ? getter() : setter(); 10742 return component == ACCESSOR_GETTER ? getter() : setter();
10753 } 10743 }
10754 10744
10755 void set(AccessorComponent component, Object* value) { 10745 void set(AccessorComponent component, Object* value) {
(...skipping 16 matching lines...) Expand all
10772 bool ContainsAccessor() { 10762 bool ContainsAccessor() {
10773 return IsJSAccessor(getter()) || IsJSAccessor(setter()); 10763 return IsJSAccessor(getter()) || IsJSAccessor(setter());
10774 } 10764 }
10775 10765
10776 // Dispatched behavior. 10766 // Dispatched behavior.
10777 DECLARE_PRINTER(AccessorPair) 10767 DECLARE_PRINTER(AccessorPair)
10778 DECLARE_VERIFIER(AccessorPair) 10768 DECLARE_VERIFIER(AccessorPair)
10779 10769
10780 static const int kGetterOffset = HeapObject::kHeaderSize; 10770 static const int kGetterOffset = HeapObject::kHeaderSize;
10781 static const int kSetterOffset = kGetterOffset + kPointerSize; 10771 static const int kSetterOffset = kGetterOffset + kPointerSize;
10782 static const int kAccessFlagsOffset = kSetterOffset + kPointerSize; 10772 static const int kSize = kSetterOffset + kPointerSize;
10783 static const int kSize = kAccessFlagsOffset + kPointerSize;
10784 10773
10785 private: 10774 private:
10786 static const int kAllCanReadBit = 0;
10787 static const int kAllCanWriteBit = 1;
10788
10789 // Strangely enough, in addition to functions and harmony proxies, the spec 10775 // Strangely enough, in addition to functions and harmony proxies, the spec
10790 // requires us to consider undefined as a kind of accessor, too: 10776 // requires us to consider undefined as a kind of accessor, too:
10791 // var obj = {}; 10777 // var obj = {};
10792 // Object.defineProperty(obj, "foo", {get: undefined}); 10778 // Object.defineProperty(obj, "foo", {get: undefined});
10793 // assertTrue("foo" in obj); 10779 // assertTrue("foo" in obj);
10794 bool IsJSAccessor(Object* obj) { 10780 bool IsJSAccessor(Object* obj) {
10795 return obj->IsSpecFunction() || obj->IsUndefined(); 10781 return obj->IsSpecFunction() || obj->IsUndefined();
10796 } 10782 }
10797 10783
10798 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessorPair); 10784 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessorPair);
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
11249 } else { 11235 } else {
11250 value &= ~(1 << bit_position); 11236 value &= ~(1 << bit_position);
11251 } 11237 }
11252 return value; 11238 return value;
11253 } 11239 }
11254 }; 11240 };
11255 11241
11256 } } // namespace v8::internal 11242 } } // namespace v8::internal
11257 11243
11258 #endif // V8_OBJECTS_H_ 11244 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/factory.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698