OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 12809 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12820 return isolate->heap()->ToBoolean(obj1->map() == obj2->map()); | 12820 return isolate->heap()->ToBoolean(obj1->map() == obj2->map()); |
12821 } | 12821 } |
12822 | 12822 |
12823 | 12823 |
12824 RUNTIME_FUNCTION(MaybeObject*, Runtime_IsObserved) { | 12824 RUNTIME_FUNCTION(MaybeObject*, Runtime_IsObserved) { |
12825 NoHandleAllocation ha(isolate); | 12825 NoHandleAllocation ha(isolate); |
12826 ASSERT(args.length() == 1); | 12826 ASSERT(args.length() == 1); |
12827 CONVERT_ARG_CHECKED(JSReceiver, obj, 0); | 12827 CONVERT_ARG_CHECKED(JSReceiver, obj, 0); |
12828 if (obj->IsJSGlobalProxy()) { | 12828 if (obj->IsJSGlobalProxy()) { |
12829 Object* proto = obj->GetPrototype(); | 12829 Object* proto = obj->GetPrototype(); |
12830 if (obj->IsNull()) return isolate->heap()->false_value(); | 12830 if (proto->IsNull()) return isolate->heap()->false_value(); |
12831 ASSERT(proto->IsJSGlobalObject()); | 12831 ASSERT(proto->IsJSGlobalObject()); |
12832 obj = JSReceiver::cast(proto); | 12832 obj = JSReceiver::cast(proto); |
12833 } | 12833 } |
12834 return isolate->heap()->ToBoolean(obj->map()->is_observed()); | 12834 return isolate->heap()->ToBoolean(obj->map()->is_observed()); |
12835 } | 12835 } |
12836 | 12836 |
12837 | 12837 |
12838 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetIsObserved) { | 12838 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetIsObserved) { |
12839 NoHandleAllocation ha(isolate); | 12839 NoHandleAllocation ha(isolate); |
12840 ASSERT(args.length() == 2); | 12840 ASSERT(args.length() == 2); |
12841 CONVERT_ARG_CHECKED(JSReceiver, obj, 0); | 12841 CONVERT_ARG_CHECKED(JSReceiver, obj, 0); |
12842 CONVERT_BOOLEAN_ARG_CHECKED(is_observed, 1); | 12842 CONVERT_BOOLEAN_ARG_CHECKED(is_observed, 1); |
12843 if (obj->IsJSGlobalProxy()) { | 12843 if (obj->IsJSGlobalProxy()) { |
12844 Object* proto = obj->GetPrototype(); | 12844 Object* proto = obj->GetPrototype(); |
12845 if (obj->IsNull()) return isolate->heap()->undefined_value(); | 12845 if (proto->IsNull()) return isolate->heap()->undefined_value(); |
12846 ASSERT(proto->IsJSGlobalObject()); | 12846 ASSERT(proto->IsJSGlobalObject()); |
12847 obj = JSReceiver::cast(proto); | 12847 obj = JSReceiver::cast(proto); |
12848 } | 12848 } |
12849 ASSERT(!(obj->map()->is_observed() && obj->IsJSObject() && | 12849 ASSERT(!(obj->map()->is_observed() && obj->IsJSObject() && |
12850 JSObject::cast(obj)->HasFastElements())); | 12850 JSObject::cast(obj)->HasFastElements())); |
12851 if (obj->map()->is_observed() != is_observed) { | 12851 if (obj->map()->is_observed() != is_observed) { |
12852 if (is_observed && obj->IsJSObject() && | 12852 if (is_observed && obj->IsJSObject() && |
12853 !JSObject::cast(obj)->HasExternalArrayElements()) { | 12853 !JSObject::cast(obj)->HasExternalArrayElements()) { |
12854 // Go to dictionary mode, so that we don't skip map checks. | 12854 // Go to dictionary mode, so that we don't skip map checks. |
12855 MaybeObject* maybe = JSObject::cast(obj)->NormalizeElements(); | 12855 MaybeObject* maybe = JSObject::cast(obj)->NormalizeElements(); |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12986 // Handle last resort GC and make sure to allow future allocations | 12986 // Handle last resort GC and make sure to allow future allocations |
12987 // to grow the heap without causing GCs (if possible). | 12987 // to grow the heap without causing GCs (if possible). |
12988 isolate->counters()->gc_last_resort_from_js()->Increment(); | 12988 isolate->counters()->gc_last_resort_from_js()->Increment(); |
12989 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, | 12989 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, |
12990 "Runtime::PerformGC"); | 12990 "Runtime::PerformGC"); |
12991 } | 12991 } |
12992 } | 12992 } |
12993 | 12993 |
12994 | 12994 |
12995 } } // namespace v8::internal | 12995 } } // namespace v8::internal |
OLD | NEW |