1 // Copyright 2016 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_FIELD_TYPE_H_ 6 #define V8_FIELD_TYPE_H_ 7 8 #include "src/handles.h" 9 #include "src/objects.h" 10 #include "src/ostreams.h" 11 12 namespace v8 { 13 namespace internal { 14 15 class FieldType : public Object { 16 public: 17 static FieldType* None(); 18 static FieldType* Any(); 19 static Handle<FieldType> None(Isolate* isolate); 20 static Handle<FieldType> Any(Isolate* isolate); 21 static FieldType* Class(i::Map* map); 22 static Handle<FieldType> Class(i::Handle<i::Map> map, Isolate* isolate); 23 static FieldType* cast(Object* object); 24 NowContains(Object * value)25 bool NowContains(Object* value) { 26 if (this == Any()) return true; 27 if (this == None()) return false; 28 if (!value->IsHeapObject()) return false; 29 return HeapObject::cast(value)->map() == Map::cast(this); 30 } 31 NowContains(Handle<Object> value)32 bool NowContains(Handle<Object> value) { return NowContains(*value); } 33 34 bool IsClass(); 35 Handle<i::Map> AsClass(); IsNone()36 bool IsNone() { return this == None(); } IsAny()37 bool IsAny() { return this == Any(); } 38 bool NowStable(); 39 bool NowIs(FieldType* other); 40 bool NowIs(Handle<FieldType> other); 41 Type* Convert(Zone* zone); 42 43 void PrintTo(std::ostream& os); 44 }; 45 46 } // namespace internal 47 } // namespace v8 48 49 #endif // V8_FIELD_TYPE_H_ 50