| Index: src/types.cc
|
| diff --git a/src/types.cc b/src/types.cc
|
| index e1355209e3b2f99b5e68c98e353e44d2708c9bc5..dd090565d8a877c38494494b19ad54d23e19641a 100644
|
| --- a/src/types.cc
|
| +++ b/src/types.cc
|
| @@ -1210,62 +1210,6 @@ void TypeImpl<Config>::Iterator<T>::Advance() {
|
|
|
|
|
| // -----------------------------------------------------------------------------
|
| -// Conversion between low-level representations.
|
| -
|
| -template<class Config>
|
| -template<class OtherType>
|
| -typename TypeImpl<Config>::TypeHandle TypeImpl<Config>::Convert(
|
| - typename OtherType::TypeHandle type, Region* region) {
|
| - if (type->IsBitset()) {
|
| - return BitsetType::New(type->AsBitset(), region);
|
| - } else if (type->IsClass()) {
|
| - return ClassType::New(type->AsClass()->Map(), region);
|
| - } else if (type->IsConstant()) {
|
| - return ConstantType::New(type->AsConstant()->Value(), region);
|
| - } else if (type->IsRange()) {
|
| - return RangeType::New(
|
| - type->AsRange()->Min(), type->AsRange()->Max(),
|
| - BitsetType::New(REPRESENTATION(type->BitsetLub()), region), region);
|
| - } else if (type->IsContext()) {
|
| - TypeHandle outer = Convert<OtherType>(type->AsContext()->Outer(), region);
|
| - return ContextType::New(outer, region);
|
| - } else if (type->IsUnion()) {
|
| - int length = type->AsUnion()->Length();
|
| - UnionHandle unioned = UnionType::New(length, region);
|
| - for (int i = 0; i < length; ++i) {
|
| - TypeHandle t = Convert<OtherType>(type->AsUnion()->Get(i), region);
|
| - unioned->Set(i, t);
|
| - }
|
| - return unioned;
|
| - } else if (type->IsArray()) {
|
| - TypeHandle element = Convert<OtherType>(type->AsArray()->Element(), region);
|
| - return ArrayType::New(element, region);
|
| - } else if (type->IsFunction()) {
|
| - TypeHandle res = Convert<OtherType>(type->AsFunction()->Result(), region);
|
| - TypeHandle rcv = Convert<OtherType>(type->AsFunction()->Receiver(), region);
|
| - FunctionHandle function = FunctionType::New(
|
| - res, rcv, type->AsFunction()->Arity(), region);
|
| - for (int i = 0; i < function->Arity(); ++i) {
|
| - TypeHandle param = Convert<OtherType>(
|
| - type->AsFunction()->Parameter(i), region);
|
| - function->InitParameter(i, param);
|
| - }
|
| - return function;
|
| - } else if (type->IsTuple()) {
|
| - TupleHandle tuple = TupleType::New(type->AsTuple()->Arity(), region);
|
| - for (int i = 0; i < tuple->Arity(); ++i) {
|
| - tuple->InitElement(
|
| - i, Convert<OtherType>(type->AsTuple()->Element(i), region));
|
| - }
|
| - return tuple;
|
| - } else {
|
| - UNREACHABLE();
|
| - return None(region);
|
| - }
|
| -}
|
| -
|
| -
|
| -// -----------------------------------------------------------------------------
|
| // Printing.
|
|
|
| template<class Config>
|
| @@ -1409,6 +1353,97 @@ void TypeImpl<Config>::BitsetType::Print(bitset bits) {
|
| }
|
| #endif
|
|
|
| +// static
|
| +FieldType* FieldType::None() {
|
| + return reinterpret_cast<FieldType*>(Smi::FromInt(0));
|
| +}
|
| +
|
| +// static
|
| +FieldType* FieldType::Any() {
|
| + return reinterpret_cast<FieldType*>(Smi::FromInt(1));
|
| +}
|
| +
|
| +// static
|
| +Handle<FieldType> FieldType::None(Isolate* isolate) {
|
| + return handle(None(), isolate);
|
| +}
|
| +
|
| +// static
|
| +Handle<FieldType> FieldType::Any(Isolate* isolate) {
|
| + return handle(Any(), isolate);
|
| +}
|
| +
|
| +// static
|
| +FieldType* FieldType::Class(i::Map* map) { return FieldType::cast(map); }
|
| +
|
| +// static
|
| +Handle<FieldType> FieldType::Class(i::Handle<i::Map> map, Isolate* isolate) {
|
| + return handle(Class(*map), isolate);
|
| +}
|
| +
|
| +// static
|
| +FieldType* FieldType::cast(Object* object) {
|
| + DCHECK(object == None() || object == Any() || object->IsMap());
|
| + return reinterpret_cast<FieldType*>(object);
|
| +}
|
| +
|
| +bool FieldType::NowContains(Object* value) {
|
| + if (this == Any()) return true;
|
| + if (this == None()) return false;
|
| + if (!value->IsHeapObject()) return false;
|
| + return HeapObject::cast(value)->map() == Map::cast(this);
|
| +}
|
| +
|
| +bool FieldType::NowContains(Handle<Object> value) {
|
| + return NowContains(*value);
|
| +}
|
| +
|
| +bool FieldType::IsClass() { return this->IsMap(); }
|
| +
|
| +Handle<i::Map> FieldType::AsClass() {
|
| + DCHECK(IsClass());
|
| + i::Map* map = Map::cast(this);
|
| + return handle(map, map->GetIsolate());
|
| +}
|
| +
|
| +bool FieldType::NowStable() {
|
| + return !this->IsClass() || this->AsClass()->is_stable();
|
| +}
|
| +
|
| +bool FieldType::NowIs(FieldType* other) {
|
| + if (other->IsAny()) return true;
|
| + if (IsNone()) return true;
|
| + if (other->IsNone()) return false;
|
| + if (IsAny()) return false;
|
| + DCHECK(IsClass());
|
| + DCHECK(other->IsClass());
|
| + return this == other;
|
| +}
|
| +
|
| +bool FieldType::NowIs(Handle<FieldType> other) { return NowIs(*other); }
|
| +
|
| +Type* FieldType::Convert(Zone* zone) {
|
| + if (IsAny()) return Type::Any();
|
| + if (IsNone()) return Type::None();
|
| + DCHECK(IsClass());
|
| + return Type::Class(AsClass(), zone);
|
| +}
|
| +
|
| +FieldType::Iterator FieldType::Classes() {
|
| + if (IsClass()) return Iterator(this->AsClass());
|
| + return Iterator();
|
| +}
|
| +
|
| +void FieldType::PrintTo(std::ostream& os) {
|
| + if (IsAny()) {
|
| + os << "Any";
|
| + } else if (IsNone()) {
|
| + os << "None";
|
| + } else {
|
| + DCHECK(IsClass());
|
| + os << "Class(" << static_cast<void*>(*AsClass()) << ")";
|
| + }
|
| +}
|
|
|
| // -----------------------------------------------------------------------------
|
| // Instantiations.
|
| @@ -1417,16 +1452,5 @@ template class TypeImpl<ZoneTypeConfig>;
|
| template class TypeImpl<ZoneTypeConfig>::Iterator<i::Map>;
|
| template class TypeImpl<ZoneTypeConfig>::Iterator<i::Object>;
|
|
|
| -template class TypeImpl<HeapTypeConfig>;
|
| -template class TypeImpl<HeapTypeConfig>::Iterator<i::Map>;
|
| -template class TypeImpl<HeapTypeConfig>::Iterator<i::Object>;
|
| -
|
| -template TypeImpl<ZoneTypeConfig>::TypeHandle
|
| - TypeImpl<ZoneTypeConfig>::Convert<HeapType>(
|
| - TypeImpl<HeapTypeConfig>::TypeHandle, TypeImpl<ZoneTypeConfig>::Region*);
|
| -template TypeImpl<HeapTypeConfig>::TypeHandle
|
| - TypeImpl<HeapTypeConfig>::Convert<Type>(
|
| - TypeImpl<ZoneTypeConfig>::TypeHandle, TypeImpl<HeapTypeConfig>::Region*);
|
| -
|
| } // namespace internal
|
| } // namespace v8
|
|
|