Home | History | Annotate | Download | only in src
      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 
     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 
     32   bool NowContains(Handle<Object> value) { return NowContains(*value); }
     33 
     34   bool IsClass();
     35   Handle<i::Map> AsClass();
     36   bool IsNone() { return this == None(); }
     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