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/ast/ast-types.h"
      9 #include "src/handles.h"
     10 #include "src/objects.h"
     11 #include "src/ostreams.h"
     12 
     13 namespace v8 {
     14 namespace internal {
     15 
     16 class FieldType : public Object {
     17  public:
     18   static FieldType* None();
     19   static FieldType* Any();
     20   static Handle<FieldType> None(Isolate* isolate);
     21   static Handle<FieldType> Any(Isolate* isolate);
     22   static FieldType* Class(i::Map* map);
     23   static Handle<FieldType> Class(i::Handle<i::Map> map, Isolate* isolate);
     24   static FieldType* cast(Object* object);
     25 
     26   bool NowContains(Object* value) {
     27     if (this == Any()) return true;
     28     if (this == None()) return false;
     29     if (!value->IsHeapObject()) return false;
     30     return HeapObject::cast(value)->map() == Map::cast(this);
     31   }
     32 
     33   bool NowContains(Handle<Object> value) { return NowContains(*value); }
     34 
     35   bool IsClass();
     36   Handle<i::Map> AsClass();
     37   bool IsNone() { return this == None(); }
     38   bool IsAny() { return this == Any(); }
     39   bool NowStable();
     40   bool NowIs(FieldType* other);
     41   bool NowIs(Handle<FieldType> other);
     42   AstType* Convert(Zone* zone);
     43 
     44   void PrintTo(std::ostream& os);
     45 };
     46 
     47 }  // namespace internal
     48 }  // namespace v8
     49 
     50 #endif  // V8_FIELD_TYPE_H_
     51