Index: src/types.h |
diff --git a/src/types.h b/src/types.h |
index 25ed6e8f5612ca8667cf261d691f526ad377321c..a2bcda65791646c57464a5d85a908564efc5587a 100644 |
--- a/src/types.h |
+++ b/src/types.h |
@@ -126,6 +126,7 @@ class Type : public Object { |
static Type* Function() { return from_bitset(kFunction); } |
static Type* RegExp() { return from_bitset(kRegExp); } |
static Type* Proxy() { return from_bitset(kProxy); } |
+ static Type* Internal() { return from_bitset(kInternal); } |
static Type* Class(Handle<Map> map) { return from_handle(map); } |
static Type* Constant(Handle<HeapObject> value) { |
@@ -139,7 +140,7 @@ class Type : public Object { |
static Type* Intersect(Handle<Type> type1, Handle<Type> type2); |
static Type* Optional(Handle<Type> type); // type \/ Undefined |
- bool Is(Type* that); |
+ bool Is(Type* that) { return (this == that) ? true : IsSlowCase(that); } |
bool Is(Handle<Type> that) { return this->Is(*that); } |
bool Maybe(Type* that); |
bool Maybe(Handle<Type> that) { return this->Maybe(*that); } |
@@ -207,6 +208,7 @@ class Type : public Object { |
kRegExp = 1 << 13, |
kOtherObject = 1 << 14, |
kProxy = 1 << 15, |
+ kInternal = 1 << 16, |
kOddball = kBoolean | kNull | kUndefined, |
kSigned32 = kSmi | kOtherSigned32, |
@@ -218,7 +220,7 @@ class Type : public Object { |
kObject = kUndetectable | kArray | kFunction | kRegExp | kOtherObject, |
kReceiver = kObject | kProxy, |
kAllocated = kDouble | kName | kReceiver, |
- kAny = kOddball | kNumber | kAllocated, |
+ kAny = kOddball | kNumber | kAllocated | kInternal, |
kDetectable = kAllocated - kUndetectable, |
kNone = 0 |
}; |
@@ -228,6 +230,8 @@ class Type : public Object { |
bool is_constant() { return this->IsBox(); } |
bool is_union() { return this->IsFixedArray(); } |
+ bool IsSlowCase(Type* that); |
+ |
int as_bitset() { return Smi::cast(this)->value(); } |
Handle<Map> as_class() { return Handle<Map>::cast(handle()); } |
Handle<v8::internal::Object> as_constant() { |