| Index: src/runtime.cc
|
| ===================================================================
|
| --- src/runtime.cc (revision 636)
|
| +++ src/runtime.cc (working copy)
|
| @@ -320,9 +320,19 @@
|
| static Object* Runtime_GetTemplateField(Arguments args) {
|
| ASSERT(args.length() == 2);
|
| CONVERT_CHECKED(HeapObject, templ, args[0]);
|
| - RUNTIME_ASSERT(templ->IsStruct());
|
| CONVERT_CHECKED(Smi, field, args[1]);
|
| - return HeapObject::GetHeapObjectField(templ, field->value());
|
| + int index = field->value();
|
| + int offset = index * kPointerSize + HeapObject::kHeaderSize;
|
| + InstanceType type = templ->map()->instance_type();
|
| + RUNTIME_ASSERT(type == FUNCTION_TEMPLATE_INFO_TYPE ||
|
| + type == OBJECT_TEMPLATE_INFO_TYPE);
|
| + RUNTIME_ASSERT(offset > 0);
|
| + if (type == FUNCTION_TEMPLATE_INFO_TYPE) {
|
| + RUNTIME_ASSERT(offset < FunctionTemplateInfo::kSize);
|
| + } else {
|
| + RUNTIME_ASSERT(offset < ObjectTemplateInfo::kSize);
|
| + }
|
| + return *HeapObject::RawField(templ, offset);
|
| }
|
|
|
|
|
|
|