blob: eb7ffcab477ae6b505288c4aaf6c540d8d2cd54c [file] [log] [blame]
Ben Murdoch097c5b22016-05-18 11:27:45 +01001// 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
12namespace v8 {
13namespace internal {
14
15class 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_