Index: src/ic-inl.h |
diff --git a/src/ic-inl.h b/src/ic-inl.h |
index d1c31c0c8f3227e4afab1771daeed4ed7a803033..bd45c3e99d8a19a7778a6ef7439f4e4b18944ad9 100644 |
--- a/src/ic-inl.h |
+++ b/src/ic-inl.h |
@@ -120,6 +120,39 @@ HeapObject* IC::GetCodeCacheHolder(Isolate* isolate, |
} |
+InlineCacheHolderFlag IC::GetCodeCacheFlag(Type* type) { |
+ if (type->Is(Type::Boolean()) || |
+ type->Is(Type::Number()) || |
+ type->Is(Type::String()) || |
+ type->Is(Type::Symbol())) { |
+ return PROTOTYPE_MAP; |
+ } |
+ return OWN_MAP; |
+} |
+ |
+ |
+Handle<Map> IC::GetCodeCacheHolder(InlineCacheHolderFlag flag, |
+ Type* type, |
+ Isolate* isolate) { |
+ if (flag == PROTOTYPE_MAP) { |
+ Context* context = isolate->context()->native_context(); |
+ JSFunction* constructor; |
+ if (type->Is(Type::Boolean())) { |
+ constructor = context->boolean_function(); |
+ } else if (type->Is(Type::Number())) { |
+ constructor = context->number_function(); |
+ } else if (type->Is(Type::String())) { |
+ constructor = context->string_function(); |
+ } else { |
+ ASSERT(type->Is(Type::Symbol())); |
+ constructor = context->symbol_function(); |
+ } |
+ return handle(JSObject::cast(constructor->instance_prototype())->map()); |
+ } |
+ return type->AsClass(); |
+} |
+ |
+ |
} } // namespace v8::internal |
#endif // V8_IC_INL_H_ |