Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(663)

Unified Diff: src/types.h

Issue 73193004: Provide Type::Of and Type::CurrentOf operators (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Comment Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/types.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/types.h
diff --git a/src/types.h b/src/types.h
index 5d437e26b243654691102507ca6a6986f2e46fad..2e21a9e7b8422a19213414a5934df632d38c8bf0 100644
--- a/src/types.h
+++ b/src/types.h
@@ -144,11 +144,11 @@ class Type : public Object {
TYPE_LIST(DEFINE_TYPE_CONSTRUCTOR)
#undef DEFINE_TYPE_CONSTRUCTOR
- static Type* Class(Handle<Map> map) { return from_handle(map); }
- static Type* Constant(Handle<HeapObject> value) {
+ static Type* Class(Handle<i::Map> map) { return from_handle(map); }
+ static Type* Constant(Handle<i::HeapObject> value) {
return Constant(value, value->GetIsolate());
}
- static Type* Constant(Handle<v8::internal::Object> value, Isolate* isolate) {
+ static Type* Constant(Handle<i::Object> value, Isolate* isolate) {
return from_handle(isolate->factory()->NewBox(value));
}
@@ -156,6 +156,11 @@ class Type : public Object {
static Type* Intersect(Handle<Type> type1, Handle<Type> type2);
static Type* Optional(Handle<Type> type); // type \/ Undefined
+ static Type* Of(Handle<i::Object> value) {
+ return from_bitset(LubBitset(*value));
+ }
+ static Type* CurrentOf(Handle<i::Object> value);
+
bool Is(Type* that) { return (this == that) ? true : SlowIs(that); }
bool Is(Handle<Type> that) { return this->Is(*that); }
bool Maybe(Type* that);
@@ -163,8 +168,8 @@ class Type : public Object {
bool IsClass() { return is_class(); }
bool IsConstant() { return is_constant(); }
- Handle<Map> AsClass() { return as_class(); }
- Handle<v8::internal::Object> AsConstant() { return as_constant(); }
+ Handle<i::Map> AsClass() { return as_class(); }
+ Handle<i::Object> AsConstant() { return as_constant(); }
int NumClasses();
int NumConstants();
@@ -191,16 +196,16 @@ class Type : public Object {
int index_;
};
- Iterator<Map> Classes() {
- if (this->is_bitset()) return Iterator<Map>();
- return Iterator<Map>(this->handle());
+ Iterator<i::Map> Classes() {
+ if (this->is_bitset()) return Iterator<i::Map>();
+ return Iterator<i::Map>(this->handle());
}
- Iterator<v8::internal::Object> Constants() {
- if (this->is_bitset()) return Iterator<v8::internal::Object>();
- return Iterator<v8::internal::Object>(this->handle());
+ Iterator<i::Object> Constants() {
+ if (this->is_bitset()) return Iterator<i::Object>();
+ return Iterator<i::Object>(this->handle());
}
- static Type* cast(v8::internal::Object* object) {
+ static Type* cast(i::Object* object) {
Type* t = static_cast<Type*>(object);
ASSERT(t->is_bitset() || t->is_class() ||
t->is_constant() || t->is_union());
@@ -235,24 +240,24 @@ class Type : public Object {
bool SlowIs(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() {
- Handle<Box> box = Handle<Box>::cast(handle());
- return v8::internal::handle(box->value(), box->GetIsolate());
+ Handle<i::Map> as_class() { return Handle<i::Map>::cast(handle()); }
+ Handle<i::Object> as_constant() {
+ Handle<i::Box> box = Handle<i::Box>::cast(handle());
+ return i::handle(box->value(), box->GetIsolate());
}
Handle<Unioned> as_union() { return Handle<Unioned>::cast(handle()); }
Handle<Type> handle() { return handle_via_isolate_of(this); }
Handle<Type> handle_via_isolate_of(Type* type) {
ASSERT(type->IsHeapObject());
- return v8::internal::handle(this, HeapObject::cast(type)->GetIsolate());
+ return i::handle(this, i::HeapObject::cast(type)->GetIsolate());
}
static Type* from_bitset(int bitset) {
- return static_cast<Type*>(Object::cast(Smi::FromInt(bitset)));
+ return static_cast<Type*>(i::Object::cast(i::Smi::FromInt(bitset)));
}
- static Type* from_handle(Handle<HeapObject> handle) {
- return static_cast<Type*>(Object::cast(*handle));
+ static Type* from_handle(Handle<i::HeapObject> handle) {
+ return static_cast<Type*>(i::Object::cast(*handle));
}
static Handle<Type> union_get(Handle<Unioned> unioned, int i) {
@@ -263,6 +268,10 @@ class Type : public Object {
int LubBitset(); // least upper bound that's a bitset
int GlbBitset(); // greatest lower bound that's a bitset
+
+ static int LubBitset(i::Object* value);
+ static int LubBitset(i::Map* map);
+
bool InUnion(Handle<Unioned> unioned, int current_size);
int ExtendUnion(Handle<Unioned> unioned, int current_size);
int ExtendIntersection(
« no previous file with comments | « no previous file | src/types.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698