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

Side by Side Diff: src/objects.h

Issue 1358423002: [es6] Introduce spec compliant IsConstructor. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix stupid fuzzer failure (constructor bit set on sloppy/strict arguments). Fix MIPS/MIPS64 typos, … Created 5 years, 2 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
« no previous file with comments | « src/mips64/builtins-mips64.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 <iosfwd> 8 #include <iosfwd>
9 9
10 #include "src/allocation.h" 10 #include "src/allocation.h"
(...skipping 1015 matching lines...) Expand 10 before | Expand all | Expand 10 after
1026 1026
1027 INLINE(bool IsStruct() const); 1027 INLINE(bool IsStruct() const);
1028 #define DECLARE_STRUCT_PREDICATE(NAME, Name, name) \ 1028 #define DECLARE_STRUCT_PREDICATE(NAME, Name, name) \
1029 INLINE(bool Is##Name() const); 1029 INLINE(bool Is##Name() const);
1030 STRUCT_LIST(DECLARE_STRUCT_PREDICATE) 1030 STRUCT_LIST(DECLARE_STRUCT_PREDICATE)
1031 #undef DECLARE_STRUCT_PREDICATE 1031 #undef DECLARE_STRUCT_PREDICATE
1032 1032
1033 // ES6, section 7.2.3 IsCallable. 1033 // ES6, section 7.2.3 IsCallable.
1034 INLINE(bool IsCallable() const); 1034 INLINE(bool IsCallable() const);
1035 1035
1036 // ES6, section 7.2.4 IsConstructor.
1037 INLINE(bool IsConstructor() const);
1038
1036 INLINE(bool IsSpecObject()) const; 1039 INLINE(bool IsSpecObject()) const;
1037 INLINE(bool IsTemplateInfo()) const; 1040 INLINE(bool IsTemplateInfo()) const;
1038 INLINE(bool IsNameDictionary() const); 1041 INLINE(bool IsNameDictionary() const);
1039 INLINE(bool IsGlobalDictionary() const); 1042 INLINE(bool IsGlobalDictionary() const);
1040 INLINE(bool IsSeededNumberDictionary() const); 1043 INLINE(bool IsSeededNumberDictionary() const);
1041 INLINE(bool IsUnseededNumberDictionary() const); 1044 INLINE(bool IsUnseededNumberDictionary() const);
1042 INLINE(bool IsOrderedHashSet() const); 1045 INLINE(bool IsOrderedHashSet() const);
1043 INLINE(bool IsOrderedHashMap() const); 1046 INLINE(bool IsOrderedHashMap() const);
1044 static bool IsPromise(Handle<Object> object); 1047 static bool IsPromise(Handle<Object> object);
1045 1048
(...skipping 4309 matching lines...) Expand 10 before | Expand all | Expand 10 after
5355 static const int kRetainingCounterEnd = 0; 5358 static const int kRetainingCounterEnd = 0;
5356 5359
5357 // Tells whether the object in the prototype property will be used 5360 // Tells whether the object in the prototype property will be used
5358 // for instances created from this function. If the prototype 5361 // for instances created from this function. If the prototype
5359 // property is set to a value that is not a JSObject, the prototype 5362 // property is set to a value that is not a JSObject, the prototype
5360 // property will not be used to create instances of the function. 5363 // property will not be used to create instances of the function.
5361 // See ECMA-262, 13.2.2. 5364 // See ECMA-262, 13.2.2.
5362 inline void set_non_instance_prototype(bool value); 5365 inline void set_non_instance_prototype(bool value);
5363 inline bool has_non_instance_prototype(); 5366 inline bool has_non_instance_prototype();
5364 5367
5365 // Tells whether function has special prototype property. If not, prototype 5368 // Tells whether the instance has a [[Construct]] internal method.
5366 // property will not be created when accessed (will return undefined), 5369 // This property is implemented according to ES6, section 7.2.4.
5367 // and construction from this function will not be allowed. 5370 inline void set_is_constructor(bool value);
5368 inline void set_function_with_prototype(bool value); 5371 inline bool is_constructor() const;
5369 inline bool function_with_prototype();
5370 5372
5371 // Tells whether the instance with this map should be ignored by the 5373 // Tells whether the instance with this map should be ignored by the
5372 // Object.getPrototypeOf() function and the __proto__ accessor. 5374 // Object.getPrototypeOf() function and the __proto__ accessor.
5373 inline void set_is_hidden_prototype(); 5375 inline void set_is_hidden_prototype();
5374 inline bool is_hidden_prototype() const; 5376 inline bool is_hidden_prototype() const;
5375 5377
5376 // Records and queries whether the instance has a named interceptor. 5378 // Records and queries whether the instance has a named interceptor.
5377 inline void set_has_named_interceptor(); 5379 inline void set_has_named_interceptor();
5378 inline bool has_named_interceptor(); 5380 inline bool has_named_interceptor();
5379 5381
5380 // Records and queries whether the instance has an indexed interceptor. 5382 // Records and queries whether the instance has an indexed interceptor.
5381 inline void set_has_indexed_interceptor(); 5383 inline void set_has_indexed_interceptor();
5382 inline bool has_indexed_interceptor(); 5384 inline bool has_indexed_interceptor();
5383 5385
5384 // Tells whether the instance is undetectable. 5386 // Tells whether the instance is undetectable.
5385 // An undetectable object is a special class of JSObject: 'typeof' operator 5387 // An undetectable object is a special class of JSObject: 'typeof' operator
5386 // returns undefined, ToBoolean returns false. Otherwise it behaves like 5388 // returns undefined, ToBoolean returns false. Otherwise it behaves like
5387 // a normal JS object. It is useful for implementing undetectable 5389 // a normal JS object. It is useful for implementing undetectable
5388 // document.all in Firefox & Safari. 5390 // document.all in Firefox & Safari.
5389 // See https://bugzilla.mozilla.org/show_bug.cgi?id=248549. 5391 // See https://bugzilla.mozilla.org/show_bug.cgi?id=248549.
5390 inline void set_is_undetectable(); 5392 inline void set_is_undetectable();
5391 inline bool is_undetectable(); 5393 inline bool is_undetectable();
5392 5394
5393 // Tells whether the instance has a call-as-function handler. 5395 // Tells whether the instance has a call-as-function handler.
5394 inline void set_is_observed(); 5396 inline void set_is_observed();
5395 inline bool is_observed(); 5397 inline bool is_observed();
5396 5398
5397 // Tells whether the instance has a [[Call]] internal field. 5399 // Tells whether the instance has a [[Call]] internal method.
5398 // This property is implemented according to ES6, section 7.2.3. 5400 // This property is implemented according to ES6, section 7.2.3.
5399 inline void set_is_callable(); 5401 inline void set_is_callable();
5400 inline bool is_callable() const; 5402 inline bool is_callable() const;
5401 5403
5402 inline void set_is_strong(); 5404 inline void set_is_strong();
5403 inline bool is_strong(); 5405 inline bool is_strong();
5404 inline void set_is_extensible(bool value); 5406 inline void set_is_extensible(bool value);
5405 inline bool is_extensible(); 5407 inline bool is_extensible();
5406 inline void set_is_prototype_map(bool value); 5408 inline void set_is_prototype_map(bool value);
5407 inline bool is_prototype_map() const; 5409 inline bool is_prototype_map() const;
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
5716 // elements_kind that's found in |candidates|, or null handle if no match is 5718 // elements_kind that's found in |candidates|, or null handle if no match is
5717 // found at all. 5719 // found at all.
5718 static Handle<Map> FindTransitionedMap(Handle<Map> map, 5720 static Handle<Map> FindTransitionedMap(Handle<Map> map,
5719 MapHandleList* candidates); 5721 MapHandleList* candidates);
5720 5722
5721 inline bool CanTransition(); 5723 inline bool CanTransition();
5722 5724
5723 inline bool IsPrimitiveMap(); 5725 inline bool IsPrimitiveMap();
5724 inline bool IsJSObjectMap(); 5726 inline bool IsJSObjectMap();
5725 inline bool IsJSArrayMap(); 5727 inline bool IsJSArrayMap();
5728 inline bool IsJSFunctionMap();
5726 inline bool IsStringMap(); 5729 inline bool IsStringMap();
5727 inline bool IsJSProxyMap(); 5730 inline bool IsJSProxyMap();
5728 inline bool IsJSGlobalProxyMap(); 5731 inline bool IsJSGlobalProxyMap();
5729 inline bool IsJSGlobalObjectMap(); 5732 inline bool IsJSGlobalObjectMap();
5730 inline bool IsGlobalObjectMap(); 5733 inline bool IsGlobalObjectMap();
5731 5734
5732 inline bool CanOmitMapChecks(); 5735 inline bool CanOmitMapChecks();
5733 5736
5734 static void AddDependentCode(Handle<Map> map, 5737 static void AddDependentCode(Handle<Map> map,
5735 DependentCode::DependencyGroup group, 5738 DependentCode::DependencyGroup group,
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
5820 Internals::kMapInstanceTypeAndBitFieldOffset); 5823 Internals::kMapInstanceTypeAndBitFieldOffset);
5821 5824
5822 // Bit positions for bit field. 5825 // Bit positions for bit field.
5823 static const int kHasNonInstancePrototype = 0; 5826 static const int kHasNonInstancePrototype = 0;
5824 static const int kIsCallable = 1; 5827 static const int kIsCallable = 1;
5825 static const int kHasNamedInterceptor = 2; 5828 static const int kHasNamedInterceptor = 2;
5826 static const int kHasIndexedInterceptor = 3; 5829 static const int kHasIndexedInterceptor = 3;
5827 static const int kIsUndetectable = 4; 5830 static const int kIsUndetectable = 4;
5828 static const int kIsObserved = 5; 5831 static const int kIsObserved = 5;
5829 static const int kIsAccessCheckNeeded = 6; 5832 static const int kIsAccessCheckNeeded = 6;
5830 class FunctionWithPrototype: public BitField<bool, 7, 1> {}; 5833 static const int kIsConstructor = 7;
5831 5834
5832 // Bit positions for bit field 2 5835 // Bit positions for bit field 2
5833 static const int kIsExtensible = 0; 5836 static const int kIsExtensible = 0;
5834 // Bit 1 is free. 5837 // Bit 1 is free.
5835 class IsPrototypeMapBits : public BitField<bool, 2, 1> {}; 5838 class IsPrototypeMapBits : public BitField<bool, 2, 1> {};
5836 class ElementsKindBits: public BitField<ElementsKind, 3, 5> {}; 5839 class ElementsKindBits: public BitField<ElementsKind, 3, 5> {};
5837 5840
5838 // Derived values from bit field 2 5841 // Derived values from bit field 2
5839 static const int8_t kMaximumBitField2FastElementValue = static_cast<int8_t>( 5842 static const int8_t kMaximumBitField2FastElementValue = static_cast<int8_t>(
5840 (FAST_ELEMENTS + 1) << Map::ElementsKindBits::kShift) - 1; 5843 (FAST_ELEMENTS + 1) << Map::ElementsKindBits::kShift) - 1;
(...skipping 1294 matching lines...) Expand 10 before | Expand all | Expand 10 after
7135 Handle<Object> value); 7138 Handle<Object> value);
7136 7139
7137 // Creates a new closure for the fucntion with the same bindings, 7140 // Creates a new closure for the fucntion with the same bindings,
7138 // bound values, and prototype. An equivalent of spec operations 7141 // bound values, and prototype. An equivalent of spec operations
7139 // ``CloneMethod`` and ``CloneBoundFunction``. 7142 // ``CloneMethod`` and ``CloneBoundFunction``.
7140 static Handle<JSFunction> CloneClosure(Handle<JSFunction> function); 7143 static Handle<JSFunction> CloneClosure(Handle<JSFunction> function);
7141 7144
7142 // After prototype is removed, it will not be created when accessed, and 7145 // After prototype is removed, it will not be created when accessed, and
7143 // [[Construct]] from this function will not be allowed. 7146 // [[Construct]] from this function will not be allowed.
7144 bool RemovePrototype(); 7147 bool RemovePrototype();
7145 inline bool should_have_prototype();
7146 7148
7147 // Accessor for this function's initial map's [[class]] 7149 // Accessor for this function's initial map's [[class]]
7148 // property. This is primarily used by ECMA native functions. This 7150 // property. This is primarily used by ECMA native functions. This
7149 // method sets the class_name field of this function's initial map 7151 // method sets the class_name field of this function's initial map
7150 // to a given value. It creates an initial map if this function does 7152 // to a given value. It creates an initial map if this function does
7151 // not have one. Note that this method does not copy the initial map 7153 // not have one. Note that this method does not copy the initial map
7152 // if it has one already, but simply replaces it with the new value. 7154 // if it has one already, but simply replaces it with the new value.
7153 // Instances created afterwards will have a map whose [[class]] is 7155 // Instances created afterwards will have a map whose [[class]] is
7154 // set to 'value', but there is no guarantees on instances created 7156 // set to 'value', but there is no guarantees on instances created
7155 // before. 7157 // before.
(...skipping 3415 matching lines...) Expand 10 before | Expand all | Expand 10 after
10571 10573
10572 Isolate* isolate_; 10574 Isolate* isolate_;
10573 Handle<FixedArray> keys_; 10575 Handle<FixedArray> keys_;
10574 Handle<OrderedHashSet> set_; 10576 Handle<OrderedHashSet> set_;
10575 int length_; 10577 int length_;
10576 DISALLOW_COPY_AND_ASSIGN(KeyAccumulator); 10578 DISALLOW_COPY_AND_ASSIGN(KeyAccumulator);
10577 }; 10579 };
10578 } } // namespace v8::internal 10580 } } // namespace v8::internal
10579 10581
10580 #endif // V8_OBJECTS_H_ 10582 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/mips64/builtins-mips64.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698