MIPS: Implement structural function and array types

Port r20817 (e7a84c1)

Original commit message:
Just wanted to add two constructors to a datatype, how ugly can it get?

BUG=
R=plind44@gmail.com

Review URL: https://codereview.chromium.org/240463004

Patch from Balazs Kilvady <kilvadyb@homejinni.com>.

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20822 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
plind44@gmail.com 2014-04-16 19:02:58 +00:00
parent fe3e57068e
commit 4635a12525

View File

@ -417,7 +417,7 @@ void StoreStubCompiler::GenerateStoreTransition(MacroAssembler* masm,
} else if (representation.IsHeapObject()) { } else if (representation.IsHeapObject()) {
HeapType* field_type = descriptors->GetFieldType(descriptor); HeapType* field_type = descriptors->GetFieldType(descriptor);
if (field_type->IsClass()) { if (field_type->IsClass()) {
__ CheckMap(value_reg, scratch1, field_type->AsClass(), __ CheckMap(value_reg, scratch1, field_type->AsClass()->Map(),
miss_label, DO_SMI_CHECK); miss_label, DO_SMI_CHECK);
} else { } else {
ASSERT(HeapType::Any()->Is(field_type)); ASSERT(HeapType::Any()->Is(field_type));
@ -587,7 +587,7 @@ void StoreStubCompiler::GenerateStoreField(MacroAssembler* masm,
} else if (representation.IsHeapObject()) { } else if (representation.IsHeapObject()) {
HeapType* field_type = lookup->GetFieldType(); HeapType* field_type = lookup->GetFieldType();
if (field_type->IsClass()) { if (field_type->IsClass()) {
__ CheckMap(value_reg, scratch1, field_type->AsClass(), __ CheckMap(value_reg, scratch1, field_type->AsClass()->Map(),
miss_label, DO_SMI_CHECK); miss_label, DO_SMI_CHECK);
} else { } else {
ASSERT(HeapType::Any()->Is(field_type)); ASSERT(HeapType::Any()->Is(field_type));
@ -838,7 +838,9 @@ Register StubCompiler::CheckPrototypes(Handle<HeapType> type,
int depth = 0; int depth = 0;
Handle<JSObject> current = Handle<JSObject>::null(); Handle<JSObject> current = Handle<JSObject>::null();
if (type->IsConstant()) current = Handle<JSObject>::cast(type->AsConstant()); if (type->IsConstant()) {
current = Handle<JSObject>::cast(type->AsConstant()->Value());
}
Handle<JSObject> prototype = Handle<JSObject>::null(); Handle<JSObject> prototype = Handle<JSObject>::null();
Handle<Map> current_map = receiver_map; Handle<Map> current_map = receiver_map;
Handle<Map> holder_map(holder->map()); Handle<Map> holder_map(holder->map());