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 6211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6222 // Type", https://bugs.ecmascript.org/show_bug.cgi?id=1584 | 6222 // Type", https://bugs.ecmascript.org/show_bug.cgi?id=1584 |
6223 flags |= ALLOW_OCTAL | ALLOW_BINARY; | 6223 flags |= ALLOW_OCTAL | ALLOW_BINARY; |
6224 } | 6224 } |
6225 | 6225 |
6226 return *isolate->factory()->NewNumber(StringToDouble( | 6226 return *isolate->factory()->NewNumber(StringToDouble( |
6227 isolate->unicode_cache(), *subject, flags)); | 6227 isolate->unicode_cache(), *subject, flags)); |
6228 } | 6228 } |
6229 | 6229 |
6230 | 6230 |
6231 RUNTIME_FUNCTION(MaybeObject*, Runtime_NewString) { | 6231 RUNTIME_FUNCTION(MaybeObject*, Runtime_NewString) { |
6232 SealHandleScope shs(isolate); | 6232 HandleScope scope(isolate); |
6233 CONVERT_SMI_ARG_CHECKED(length, 0); | 6233 CONVERT_SMI_ARG_CHECKED(length, 0); |
6234 CONVERT_BOOLEAN_ARG_CHECKED(is_one_byte, 1); | 6234 CONVERT_BOOLEAN_ARG_CHECKED(is_one_byte, 1); |
6235 if (length == 0) return isolate->heap()->empty_string(); | 6235 if (length == 0) return isolate->heap()->empty_string(); |
6236 if (is_one_byte) { | 6236 if (is_one_byte) { |
6237 return isolate->heap()->AllocateRawOneByteString(length); | 6237 return *isolate->factory()->NewRawOneByteString(length); |
6238 } else { | 6238 } else { |
6239 return isolate->heap()->AllocateRawTwoByteString(length); | 6239 return *isolate->factory()->NewRawTwoByteString(length); |
6240 } | 6240 } |
6241 } | 6241 } |
6242 | 6242 |
6243 | 6243 |
6244 RUNTIME_FUNCTION(MaybeObject*, Runtime_TruncateString) { | 6244 RUNTIME_FUNCTION(MaybeObject*, Runtime_TruncateString) { |
6245 HandleScope scope(isolate); | 6245 HandleScope scope(isolate); |
6246 CONVERT_ARG_HANDLE_CHECKED(SeqString, string, 0); | 6246 CONVERT_ARG_HANDLE_CHECKED(SeqString, string, 0); |
6247 CONVERT_SMI_ARG_CHECKED(new_length, 1); | 6247 CONVERT_SMI_ARG_CHECKED(new_length, 1); |
6248 return *SeqString::Truncate(string, new_length); | 6248 return *SeqString::Truncate(string, new_length); |
6249 } | 6249 } |
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6598 DisallowHeapAllocation no_gc; | 6598 DisallowHeapAllocation no_gc; |
6599 String::FlatContent flat_content = s->GetFlatContent(); | 6599 String::FlatContent flat_content = s->GetFlatContent(); |
6600 ASSERT(flat_content.IsFlat()); | 6600 ASSERT(flat_content.IsFlat()); |
6601 bool has_changed_character = false; | 6601 bool has_changed_character = false; |
6602 bool is_ascii = FastAsciiConvert<Converter>( | 6602 bool is_ascii = FastAsciiConvert<Converter>( |
6603 reinterpret_cast<char*>(result->GetChars()), | 6603 reinterpret_cast<char*>(result->GetChars()), |
6604 reinterpret_cast<const char*>(flat_content.ToOneByteVector().start()), | 6604 reinterpret_cast<const char*>(flat_content.ToOneByteVector().start()), |
6605 length, | 6605 length, |
6606 &has_changed_character); | 6606 &has_changed_character); |
6607 // If not ASCII, we discard the result and take the 2 byte path. | 6607 // If not ASCII, we discard the result and take the 2 byte path. |
6608 if (is_ascii) return has_changed_character ? *result : *s; | 6608 if (is_ascii) return has_changed_character ? *result : *s; |
6609 } | 6609 } |
6610 | 6610 |
6611 Handle<SeqString> result; // Same length as input. | 6611 Handle<SeqString> result; // Same length as input. |
6612 if (s->IsOneByteRepresentation()) { | 6612 if (s->IsOneByteRepresentation()) { |
6613 result = isolate->factory()->NewRawOneByteString(length).ToHandleChecked(); | 6613 result = isolate->factory()->NewRawOneByteString(length).ToHandleChecked(); |
6614 } else { | 6614 } else { |
6615 result = isolate->factory()->NewRawTwoByteString(length).ToHandleChecked(); | 6615 result = isolate->factory()->NewRawTwoByteString(length).ToHandleChecked(); |
6616 } | 6616 } |
6617 | 6617 |
6618 MaybeObject* maybe = ConvertCaseHelper(isolate, *s, *result, length, mapping); | 6618 MaybeObject* maybe = ConvertCaseHelper(isolate, *s, *result, length, mapping); |
(...skipping 1403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8022 return *result; | 8022 return *result; |
8023 } | 8023 } |
8024 | 8024 |
8025 | 8025 |
8026 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_NewClosureFromStubFailure) { | 8026 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_NewClosureFromStubFailure) { |
8027 HandleScope scope(isolate); | 8027 HandleScope scope(isolate); |
8028 ASSERT(args.length() == 1); | 8028 ASSERT(args.length() == 1); |
8029 CONVERT_ARG_HANDLE_CHECKED(SharedFunctionInfo, shared, 0); | 8029 CONVERT_ARG_HANDLE_CHECKED(SharedFunctionInfo, shared, 0); |
8030 Handle<Context> context(isolate->context()); | 8030 Handle<Context> context(isolate->context()); |
8031 PretenureFlag pretenure_flag = NOT_TENURED; | 8031 PretenureFlag pretenure_flag = NOT_TENURED; |
8032 Handle<JSFunction> result = | 8032 return *isolate->factory()->NewFunctionFromSharedFunctionInfo( |
8033 isolate->factory()->NewFunctionFromSharedFunctionInfo(shared, | 8033 shared, context, pretenure_flag); |
8034 context, | |
8035 pretenure_flag); | |
8036 return *result; | |
8037 } | 8034 } |
8038 | 8035 |
8039 | 8036 |
8040 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_NewClosure) { | 8037 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_NewClosure) { |
8041 HandleScope scope(isolate); | 8038 HandleScope scope(isolate); |
8042 ASSERT(args.length() == 3); | 8039 ASSERT(args.length() == 3); |
8043 CONVERT_ARG_HANDLE_CHECKED(Context, context, 0); | 8040 CONVERT_ARG_HANDLE_CHECKED(Context, context, 0); |
8044 CONVERT_ARG_HANDLE_CHECKED(SharedFunctionInfo, shared, 1); | 8041 CONVERT_ARG_HANDLE_CHECKED(SharedFunctionInfo, shared, 1); |
8045 CONVERT_BOOLEAN_ARG_CHECKED(pretenure, 2); | 8042 CONVERT_BOOLEAN_ARG_CHECKED(pretenure, 2); |
8046 | 8043 |
8047 // The caller ensures that we pretenure closures that are assigned | 8044 // The caller ensures that we pretenure closures that are assigned |
8048 // directly to properties. | 8045 // directly to properties. |
8049 PretenureFlag pretenure_flag = pretenure ? TENURED : NOT_TENURED; | 8046 PretenureFlag pretenure_flag = pretenure ? TENURED : NOT_TENURED; |
8050 Handle<JSFunction> result = | 8047 return *isolate->factory()->NewFunctionFromSharedFunctionInfo( |
8051 isolate->factory()->NewFunctionFromSharedFunctionInfo(shared, | 8048 shared, context, pretenure_flag); |
8052 context, | |
8053 pretenure_flag); | |
8054 return *result; | |
8055 } | 8049 } |
8056 | 8050 |
8057 | 8051 |
8058 // Find the arguments of the JavaScript function invocation that called | 8052 // Find the arguments of the JavaScript function invocation that called |
8059 // into C++ code. Collect these in a newly allocated array of handles (possibly | 8053 // into C++ code. Collect these in a newly allocated array of handles (possibly |
8060 // prefixed by a number of empty handles). | 8054 // prefixed by a number of empty handles). |
8061 static SmartArrayPointer<Handle<Object> > GetCallerArguments( | 8055 static SmartArrayPointer<Handle<Object> > GetCallerArguments( |
8062 Isolate* isolate, | 8056 Isolate* isolate, |
8063 int prefix_argc, | 8057 int prefix_argc, |
8064 int* total_argc) { | 8058 int* total_argc) { |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8314 HandleScope scope(isolate); | 8308 HandleScope scope(isolate); |
8315 ASSERT(args.length() == 2); | 8309 ASSERT(args.length() == 2); |
8316 | 8310 |
8317 Handle<Object> constructor = args.at<Object>(1); | 8311 Handle<Object> constructor = args.at<Object>(1); |
8318 Handle<Object> feedback = args.at<Object>(0); | 8312 Handle<Object> feedback = args.at<Object>(0); |
8319 Handle<AllocationSite> site; | 8313 Handle<AllocationSite> site; |
8320 if (feedback->IsAllocationSite()) { | 8314 if (feedback->IsAllocationSite()) { |
8321 // The feedback can be an AllocationSite or undefined. | 8315 // The feedback can be an AllocationSite or undefined. |
8322 site = Handle<AllocationSite>::cast(feedback); | 8316 site = Handle<AllocationSite>::cast(feedback); |
8323 } | 8317 } |
8324 return Runtime_NewObjectHelper(isolate, | 8318 return Runtime_NewObjectHelper(isolate, constructor, site); |
8325 constructor, | |
8326 site); | |
8327 } | 8319 } |
8328 | 8320 |
8329 | 8321 |
8330 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_FinalizeInstanceSize) { | 8322 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_FinalizeInstanceSize) { |
8331 HandleScope scope(isolate); | 8323 HandleScope scope(isolate); |
8332 ASSERT(args.length() == 1); | 8324 ASSERT(args.length() == 1); |
8333 | 8325 |
8334 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); | 8326 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); |
8335 function->shared()->CompleteInobjectSlackTracking(); | 8327 function->shared()->CompleteInobjectSlackTracking(); |
8336 | 8328 |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8528 SealHandleScope shs(isolate); | 8520 SealHandleScope shs(isolate); |
8529 #if defined(USE_SIMULATOR) | 8521 #if defined(USE_SIMULATOR) |
8530 return isolate->heap()->true_value(); | 8522 return isolate->heap()->true_value(); |
8531 #else | 8523 #else |
8532 return isolate->heap()->false_value(); | 8524 return isolate->heap()->false_value(); |
8533 #endif | 8525 #endif |
8534 } | 8526 } |
8535 | 8527 |
8536 | 8528 |
8537 RUNTIME_FUNCTION(MaybeObject*, Runtime_IsConcurrentRecompilationSupported) { | 8529 RUNTIME_FUNCTION(MaybeObject*, Runtime_IsConcurrentRecompilationSupported) { |
8538 HandleScope scope(isolate); | 8530 SealHandleScope shs(isolate); |
8539 return isolate->concurrent_recompilation_enabled() | 8531 return isolate->heap()->ToBoolean( |
8540 ? isolate->heap()->true_value() : isolate->heap()->false_value(); | 8532 isolate->concurrent_recompilation_enabled()); |
8541 } | 8533 } |
8542 | 8534 |
8543 | 8535 |
8544 RUNTIME_FUNCTION(MaybeObject*, Runtime_OptimizeFunctionOnNextCall) { | 8536 RUNTIME_FUNCTION(MaybeObject*, Runtime_OptimizeFunctionOnNextCall) { |
8545 HandleScope scope(isolate); | 8537 HandleScope scope(isolate); |
8546 RUNTIME_ASSERT(args.length() == 1 || args.length() == 2); | 8538 RUNTIME_ASSERT(args.length() == 1 || args.length() == 2); |
8547 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); | 8539 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); |
8548 | 8540 |
8549 if (!function->IsOptimizable() && | 8541 if (!function->IsOptimizable() && |
8550 !function->IsMarkedForConcurrentOptimization() && | 8542 !function->IsMarkedForConcurrentOptimization() && |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8903 return *result; | 8895 return *result; |
8904 } | 8896 } |
8905 | 8897 |
8906 | 8898 |
8907 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_NewFunctionContext) { | 8899 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_NewFunctionContext) { |
8908 HandleScope scope(isolate); | 8900 HandleScope scope(isolate); |
8909 ASSERT(args.length() == 1); | 8901 ASSERT(args.length() == 1); |
8910 | 8902 |
8911 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); | 8903 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); |
8912 int length = function->shared()->scope_info()->ContextLength(); | 8904 int length = function->shared()->scope_info()->ContextLength(); |
8913 Handle<Context> context = | 8905 return *isolate->factory()->NewFunctionContext(length, function); |
8914 isolate->factory()->NewFunctionContext(length, function); | |
8915 return *context; | |
8916 } | 8906 } |
8917 | 8907 |
8918 | 8908 |
8919 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_PushWithContext) { | 8909 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_PushWithContext) { |
8920 HandleScope scope(isolate); | 8910 HandleScope scope(isolate); |
8921 ASSERT(args.length() == 2); | 8911 ASSERT(args.length() == 2); |
8922 Handle<JSReceiver> extension_object; | 8912 Handle<JSReceiver> extension_object; |
8923 if (args[0]->IsJSReceiver()) { | 8913 if (args[0]->IsJSReceiver()) { |
8924 extension_object = args.at<JSReceiver>(0); | 8914 extension_object = args.at<JSReceiver>(0); |
8925 } else { | 8915 } else { |
(...skipping 1989 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
10915 CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); | 10905 CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); |
10916 RUNTIME_ASSERT(obj->HasIndexedInterceptor()); | 10906 RUNTIME_ASSERT(obj->HasIndexedInterceptor()); |
10917 CONVERT_NUMBER_CHECKED(uint32_t, index, Uint32, args[1]); | 10907 CONVERT_NUMBER_CHECKED(uint32_t, index, Uint32, args[1]); |
10918 Handle<Object> result; | 10908 Handle<Object> result; |
10919 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 10909 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
10920 isolate, result, JSObject::GetElementWithInterceptor(obj, obj, index)); | 10910 isolate, result, JSObject::GetElementWithInterceptor(obj, obj, index)); |
10921 return *result; | 10911 return *result; |
10922 } | 10912 } |
10923 | 10913 |
10924 | 10914 |
10915 static bool CheckExecutionState(Isolate* isolate, int break_id) { | |
Jakob Kummerow
2014/04/17 10:45:51
Yes! Enthusiastic +1!
| |
10916 return (isolate->debug()->break_id() != 0 && | |
10917 break_id == isolate->debug()->break_id()); | |
10918 } | |
10919 | |
10920 | |
10925 RUNTIME_FUNCTION(MaybeObject*, Runtime_CheckExecutionState) { | 10921 RUNTIME_FUNCTION(MaybeObject*, Runtime_CheckExecutionState) { |
10926 SealHandleScope shs(isolate); | 10922 SealHandleScope shs(isolate); |
10927 ASSERT(args.length() >= 1); | 10923 ASSERT(args.length() == 1); |
10928 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); | 10924 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); |
10929 // Check that the break id is valid. | 10925 RUNTIME_ASSERT(CheckExecutionState(isolate, break_id)); |
10930 if (isolate->debug()->break_id() == 0 || | |
10931 break_id != isolate->debug()->break_id()) { | |
10932 return isolate->Throw( | |
10933 isolate->heap()->illegal_execution_state_string()); | |
Jakob Kummerow
2014/04/17 10:45:51
Turning this into a RUNTIME_ASSERT changes the err
Yang
2014/04/17 10:56:42
Yes. It should never happen. If it then indeed hap
| |
10934 } | |
10935 | |
10936 return isolate->heap()->true_value(); | 10926 return isolate->heap()->true_value(); |
10937 } | 10927 } |
10938 | 10928 |
10939 | 10929 |
10940 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFrameCount) { | 10930 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFrameCount) { |
10941 HandleScope scope(isolate); | 10931 HandleScope scope(isolate); |
10942 ASSERT(args.length() == 1); | 10932 ASSERT(args.length() == 1); |
10943 | 10933 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); |
10944 // Check arguments. | 10934 RUNTIME_ASSERT(CheckExecutionState(isolate, break_id)); |
10945 Object* result; | |
10946 { MaybeObject* maybe_result = Runtime_CheckExecutionState( | |
10947 RUNTIME_ARGUMENTS(isolate, args)); | |
10948 if (!maybe_result->ToObject(&result)) return maybe_result; | |
10949 } | |
10950 | 10935 |
10951 // Count all frames which are relevant to debugging stack trace. | 10936 // Count all frames which are relevant to debugging stack trace. |
10952 int n = 0; | 10937 int n = 0; |
10953 StackFrame::Id id = isolate->debug()->break_frame_id(); | 10938 StackFrame::Id id = isolate->debug()->break_frame_id(); |
10954 if (id == StackFrame::NO_ID) { | 10939 if (id == StackFrame::NO_ID) { |
10955 // If there is no JavaScript stack frame count is 0. | 10940 // If there is no JavaScript stack frame count is 0. |
10956 return Smi::FromInt(0); | 10941 return Smi::FromInt(0); |
10957 } | 10942 } |
10958 | 10943 |
10959 for (JavaScriptFrameIterator it(isolate, id); !it.done(); it.Advance()) { | 10944 for (JavaScriptFrameIterator it(isolate, id); !it.done(); it.Advance()) { |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
11076 // 5: Source position | 11061 // 5: Source position |
11077 // 6: Constructor call | 11062 // 6: Constructor call |
11078 // 7: Is at return | 11063 // 7: Is at return |
11079 // 8: Flags | 11064 // 8: Flags |
11080 // Arguments name, value | 11065 // Arguments name, value |
11081 // Locals name, value | 11066 // Locals name, value |
11082 // Return value if any | 11067 // Return value if any |
11083 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFrameDetails) { | 11068 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFrameDetails) { |
11084 HandleScope scope(isolate); | 11069 HandleScope scope(isolate); |
11085 ASSERT(args.length() == 2); | 11070 ASSERT(args.length() == 2); |
11071 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); | |
11072 RUNTIME_ASSERT(CheckExecutionState(isolate, break_id)); | |
11086 | 11073 |
11087 // Check arguments. | |
11088 Object* check; | |
11089 { MaybeObject* maybe_check = Runtime_CheckExecutionState( | |
11090 RUNTIME_ARGUMENTS(isolate, args)); | |
11091 if (!maybe_check->ToObject(&check)) return maybe_check; | |
11092 } | |
11093 CONVERT_NUMBER_CHECKED(int, index, Int32, args[1]); | 11074 CONVERT_NUMBER_CHECKED(int, index, Int32, args[1]); |
11094 Heap* heap = isolate->heap(); | 11075 Heap* heap = isolate->heap(); |
11095 | 11076 |
11096 // Find the relevant frame with the requested index. | 11077 // Find the relevant frame with the requested index. |
11097 StackFrame::Id id = isolate->debug()->break_frame_id(); | 11078 StackFrame::Id id = isolate->debug()->break_frame_id(); |
11098 if (id == StackFrame::NO_ID) { | 11079 if (id == StackFrame::NO_ID) { |
11099 // If there are no JavaScript stack frames return undefined. | 11080 // If there are no JavaScript stack frames return undefined. |
11100 return heap->undefined_value(); | 11081 return heap->undefined_value(); |
11101 } | 11082 } |
11102 | 11083 |
(...skipping 1003 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
12106 } | 12087 } |
12107 } | 12088 } |
12108 | 12089 |
12109 DISALLOW_IMPLICIT_CONSTRUCTORS(ScopeIterator); | 12090 DISALLOW_IMPLICIT_CONSTRUCTORS(ScopeIterator); |
12110 }; | 12091 }; |
12111 | 12092 |
12112 | 12093 |
12113 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetScopeCount) { | 12094 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetScopeCount) { |
12114 HandleScope scope(isolate); | 12095 HandleScope scope(isolate); |
12115 ASSERT(args.length() == 2); | 12096 ASSERT(args.length() == 2); |
12097 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); | |
12098 RUNTIME_ASSERT(CheckExecutionState(isolate, break_id)); | |
12116 | 12099 |
12117 // Check arguments. | |
12118 Object* check; | |
12119 { MaybeObject* maybe_check = Runtime_CheckExecutionState( | |
12120 RUNTIME_ARGUMENTS(isolate, args)); | |
12121 if (!maybe_check->ToObject(&check)) return maybe_check; | |
12122 } | |
12123 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); | 12100 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); |
12124 | 12101 |
12125 // Get the frame where the debugging is performed. | 12102 // Get the frame where the debugging is performed. |
12126 StackFrame::Id id = UnwrapFrameId(wrapped_id); | 12103 StackFrame::Id id = UnwrapFrameId(wrapped_id); |
12127 JavaScriptFrameIterator it(isolate, id); | 12104 JavaScriptFrameIterator it(isolate, id); |
12128 JavaScriptFrame* frame = it.frame(); | 12105 JavaScriptFrame* frame = it.frame(); |
12129 | 12106 |
12130 // Count the visible scopes. | 12107 // Count the visible scopes. |
12131 int n = 0; | 12108 int n = 0; |
12132 for (ScopeIterator it(isolate, frame, 0); | 12109 for (ScopeIterator it(isolate, frame, 0); |
12133 !it.Done(); | 12110 !it.Done(); |
12134 it.Next()) { | 12111 it.Next()) { |
12135 n++; | 12112 n++; |
12136 } | 12113 } |
12137 | 12114 |
12138 return Smi::FromInt(n); | 12115 return Smi::FromInt(n); |
12139 } | 12116 } |
12140 | 12117 |
12141 | 12118 |
12142 // Returns the list of step-in positions (text offset) in a function of the | 12119 // Returns the list of step-in positions (text offset) in a function of the |
12143 // stack frame in a range from the current debug break position to the end | 12120 // stack frame in a range from the current debug break position to the end |
12144 // of the corresponding statement. | 12121 // of the corresponding statement. |
12145 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetStepInPositions) { | 12122 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetStepInPositions) { |
12146 HandleScope scope(isolate); | 12123 HandleScope scope(isolate); |
12147 ASSERT(args.length() == 2); | 12124 ASSERT(args.length() == 2); |
12125 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); | |
12126 RUNTIME_ASSERT(CheckExecutionState(isolate, break_id)); | |
12148 | 12127 |
12149 // Check arguments. | |
12150 Object* check; | |
12151 { MaybeObject* maybe_check = Runtime_CheckExecutionState( | |
12152 RUNTIME_ARGUMENTS(isolate, args)); | |
12153 if (!maybe_check->ToObject(&check)) return maybe_check; | |
12154 } | |
12155 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); | 12128 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); |
12156 | 12129 |
12157 // Get the frame where the debugging is performed. | 12130 // Get the frame where the debugging is performed. |
12158 StackFrame::Id id = UnwrapFrameId(wrapped_id); | 12131 StackFrame::Id id = UnwrapFrameId(wrapped_id); |
12159 JavaScriptFrameIterator frame_it(isolate, id); | 12132 JavaScriptFrameIterator frame_it(isolate, id); |
12160 RUNTIME_ASSERT(!frame_it.done()); | 12133 RUNTIME_ASSERT(!frame_it.done()); |
12161 | 12134 |
12162 JavaScriptFrame* frame = frame_it.frame(); | 12135 JavaScriptFrame* frame = frame_it.frame(); |
12163 | 12136 |
12164 Handle<JSFunction> fun = | 12137 Handle<JSFunction> fun = |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
12249 // args[1]: number: frame index | 12222 // args[1]: number: frame index |
12250 // args[2]: number: inlined frame index | 12223 // args[2]: number: inlined frame index |
12251 // args[3]: number: scope index | 12224 // args[3]: number: scope index |
12252 // | 12225 // |
12253 // The array returned contains the following information: | 12226 // The array returned contains the following information: |
12254 // 0: Scope type | 12227 // 0: Scope type |
12255 // 1: Scope object | 12228 // 1: Scope object |
12256 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetScopeDetails) { | 12229 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetScopeDetails) { |
12257 HandleScope scope(isolate); | 12230 HandleScope scope(isolate); |
12258 ASSERT(args.length() == 4); | 12231 ASSERT(args.length() == 4); |
12232 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); | |
12233 RUNTIME_ASSERT(CheckExecutionState(isolate, break_id)); | |
12259 | 12234 |
12260 // Check arguments. | |
12261 Object* check; | |
12262 { MaybeObject* maybe_check = Runtime_CheckExecutionState( | |
12263 RUNTIME_ARGUMENTS(isolate, args)); | |
12264 if (!maybe_check->ToObject(&check)) return maybe_check; | |
12265 } | |
12266 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); | 12235 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); |
12267 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]); | 12236 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]); |
12268 CONVERT_NUMBER_CHECKED(int, index, Int32, args[3]); | 12237 CONVERT_NUMBER_CHECKED(int, index, Int32, args[3]); |
12269 | 12238 |
12270 // Get the frame where the debugging is performed. | 12239 // Get the frame where the debugging is performed. |
12271 StackFrame::Id id = UnwrapFrameId(wrapped_id); | 12240 StackFrame::Id id = UnwrapFrameId(wrapped_id); |
12272 JavaScriptFrameIterator frame_it(isolate, id); | 12241 JavaScriptFrameIterator frame_it(isolate, id); |
12273 JavaScriptFrame* frame = frame_it.frame(); | 12242 JavaScriptFrame* frame = frame_it.frame(); |
12274 | 12243 |
12275 // Find the requested scope. | 12244 // Find the requested scope. |
(...skipping 17 matching lines...) Expand all Loading... | |
12293 // args[1]: number: frame index | 12262 // args[1]: number: frame index |
12294 // args[2]: number: inlined frame index | 12263 // args[2]: number: inlined frame index |
12295 // args[3]: boolean: ignore nested scopes | 12264 // args[3]: boolean: ignore nested scopes |
12296 // | 12265 // |
12297 // The array returned contains arrays with the following information: | 12266 // The array returned contains arrays with the following information: |
12298 // 0: Scope type | 12267 // 0: Scope type |
12299 // 1: Scope object | 12268 // 1: Scope object |
12300 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetAllScopesDetails) { | 12269 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetAllScopesDetails) { |
12301 HandleScope scope(isolate); | 12270 HandleScope scope(isolate); |
12302 ASSERT(args.length() == 3 || args.length() == 4); | 12271 ASSERT(args.length() == 3 || args.length() == 4); |
12272 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); | |
12273 RUNTIME_ASSERT(CheckExecutionState(isolate, break_id)); | |
12303 | 12274 |
12304 // Check arguments. | |
12305 Object* check; | |
12306 { MaybeObject* maybe_check = Runtime_CheckExecutionState( | |
12307 RUNTIME_ARGUMENTS(isolate, args)); | |
12308 if (!maybe_check->ToObject(&check)) return maybe_check; | |
12309 } | |
12310 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); | 12275 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); |
12311 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]); | 12276 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]); |
12312 | 12277 |
12313 bool ignore_nested_scopes = false; | 12278 bool ignore_nested_scopes = false; |
12314 if (args.length() == 4) { | 12279 if (args.length() == 4) { |
12315 CONVERT_BOOLEAN_ARG_CHECKED(flag, 3); | 12280 CONVERT_BOOLEAN_ARG_CHECKED(flag, 3); |
12316 ignore_nested_scopes = flag; | 12281 ignore_nested_scopes = flag; |
12317 } | 12282 } |
12318 | 12283 |
12319 // Get the frame where the debugging is performed. | 12284 // Get the frame where the debugging is performed. |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
12407 HandleScope scope(isolate); | 12372 HandleScope scope(isolate); |
12408 ASSERT(args.length() == 6); | 12373 ASSERT(args.length() == 6); |
12409 | 12374 |
12410 // Check arguments. | 12375 // Check arguments. |
12411 CONVERT_NUMBER_CHECKED(int, index, Int32, args[3]); | 12376 CONVERT_NUMBER_CHECKED(int, index, Int32, args[3]); |
12412 CONVERT_ARG_HANDLE_CHECKED(String, variable_name, 4); | 12377 CONVERT_ARG_HANDLE_CHECKED(String, variable_name, 4); |
12413 Handle<Object> new_value = args.at<Object>(5); | 12378 Handle<Object> new_value = args.at<Object>(5); |
12414 | 12379 |
12415 bool res; | 12380 bool res; |
12416 if (args[0]->IsNumber()) { | 12381 if (args[0]->IsNumber()) { |
12417 Object* check; | 12382 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); |
12418 { MaybeObject* maybe_check = Runtime_CheckExecutionState( | 12383 RUNTIME_ASSERT(CheckExecutionState(isolate, break_id)); |
12419 RUNTIME_ARGUMENTS(isolate, args)); | 12384 |
12420 if (!maybe_check->ToObject(&check)) return maybe_check; | |
12421 } | |
12422 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); | 12385 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); |
12423 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]); | 12386 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]); |
12424 | 12387 |
12425 // Get the frame where the debugging is performed. | 12388 // Get the frame where the debugging is performed. |
12426 StackFrame::Id id = UnwrapFrameId(wrapped_id); | 12389 StackFrame::Id id = UnwrapFrameId(wrapped_id); |
12427 JavaScriptFrameIterator frame_it(isolate, id); | 12390 JavaScriptFrameIterator frame_it(isolate, id); |
12428 JavaScriptFrame* frame = frame_it.frame(); | 12391 JavaScriptFrame* frame = frame_it.frame(); |
12429 | 12392 |
12430 ScopeIterator it(isolate, frame, inlined_jsframe_index); | 12393 ScopeIterator it(isolate, frame, inlined_jsframe_index); |
12431 res = SetScopeVariableValue(&it, index, variable_name, new_value); | 12394 res = SetScopeVariableValue(&it, index, variable_name, new_value); |
(...skipping 21 matching lines...) Expand all Loading... | |
12453 it.DebugPrint(); | 12416 it.DebugPrint(); |
12454 } | 12417 } |
12455 #endif | 12418 #endif |
12456 return isolate->heap()->undefined_value(); | 12419 return isolate->heap()->undefined_value(); |
12457 } | 12420 } |
12458 | 12421 |
12459 | 12422 |
12460 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetThreadCount) { | 12423 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetThreadCount) { |
12461 HandleScope scope(isolate); | 12424 HandleScope scope(isolate); |
12462 ASSERT(args.length() == 1); | 12425 ASSERT(args.length() == 1); |
12463 | 12426 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); |
12464 // Check arguments. | 12427 RUNTIME_ASSERT(CheckExecutionState(isolate, break_id)); |
12465 Object* result; | |
12466 { MaybeObject* maybe_result = Runtime_CheckExecutionState( | |
12467 RUNTIME_ARGUMENTS(isolate, args)); | |
12468 if (!maybe_result->ToObject(&result)) return maybe_result; | |
12469 } | |
12470 | 12428 |
12471 // Count all archived V8 threads. | 12429 // Count all archived V8 threads. |
12472 int n = 0; | 12430 int n = 0; |
12473 for (ThreadState* thread = | 12431 for (ThreadState* thread = |
12474 isolate->thread_manager()->FirstThreadStateInUse(); | 12432 isolate->thread_manager()->FirstThreadStateInUse(); |
12475 thread != NULL; | 12433 thread != NULL; |
12476 thread = thread->Next()) { | 12434 thread = thread->Next()) { |
12477 n++; | 12435 n++; |
12478 } | 12436 } |
12479 | 12437 |
12480 // Total number of threads is current thread and archived threads. | 12438 // Total number of threads is current thread and archived threads. |
12481 return Smi::FromInt(n + 1); | 12439 return Smi::FromInt(n + 1); |
12482 } | 12440 } |
12483 | 12441 |
12484 | 12442 |
12485 static const int kThreadDetailsCurrentThreadIndex = 0; | 12443 static const int kThreadDetailsCurrentThreadIndex = 0; |
12486 static const int kThreadDetailsThreadIdIndex = 1; | 12444 static const int kThreadDetailsThreadIdIndex = 1; |
12487 static const int kThreadDetailsSize = 2; | 12445 static const int kThreadDetailsSize = 2; |
12488 | 12446 |
12489 // Return an array with thread details | 12447 // Return an array with thread details |
12490 // args[0]: number: break id | 12448 // args[0]: number: break id |
12491 // args[1]: number: thread index | 12449 // args[1]: number: thread index |
12492 // | 12450 // |
12493 // The array returned contains the following information: | 12451 // The array returned contains the following information: |
12494 // 0: Is current thread? | 12452 // 0: Is current thread? |
12495 // 1: Thread id | 12453 // 1: Thread id |
12496 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetThreadDetails) { | 12454 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetThreadDetails) { |
12497 HandleScope scope(isolate); | 12455 HandleScope scope(isolate); |
12498 ASSERT(args.length() == 2); | 12456 ASSERT(args.length() == 2); |
12457 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); | |
12458 RUNTIME_ASSERT(CheckExecutionState(isolate, break_id)); | |
12499 | 12459 |
12500 // Check arguments. | |
12501 Object* check; | |
12502 { MaybeObject* maybe_check = Runtime_CheckExecutionState( | |
12503 RUNTIME_ARGUMENTS(isolate, args)); | |
12504 if (!maybe_check->ToObject(&check)) return maybe_check; | |
12505 } | |
12506 CONVERT_NUMBER_CHECKED(int, index, Int32, args[1]); | 12460 CONVERT_NUMBER_CHECKED(int, index, Int32, args[1]); |
12507 | 12461 |
12508 // Allocate array for result. | 12462 // Allocate array for result. |
12509 Handle<FixedArray> details = | 12463 Handle<FixedArray> details = |
12510 isolate->factory()->NewFixedArray(kThreadDetailsSize); | 12464 isolate->factory()->NewFixedArray(kThreadDetailsSize); |
12511 | 12465 |
12512 // Thread index 0 is current thread. | 12466 // Thread index 0 is current thread. |
12513 if (index == 0) { | 12467 if (index == 0) { |
12514 // Fill the details. | 12468 // Fill the details. |
12515 details->set(kThreadDetailsCurrentThreadIndex, | 12469 details->set(kThreadDetailsCurrentThreadIndex, |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
12686 | 12640 |
12687 | 12641 |
12688 // Prepare for stepping | 12642 // Prepare for stepping |
12689 // args[0]: break id for checking execution state | 12643 // args[0]: break id for checking execution state |
12690 // args[1]: step action from the enumeration StepAction | 12644 // args[1]: step action from the enumeration StepAction |
12691 // args[2]: number of times to perform the step, for step out it is the number | 12645 // args[2]: number of times to perform the step, for step out it is the number |
12692 // of frames to step down. | 12646 // of frames to step down. |
12693 RUNTIME_FUNCTION(MaybeObject*, Runtime_PrepareStep) { | 12647 RUNTIME_FUNCTION(MaybeObject*, Runtime_PrepareStep) { |
12694 HandleScope scope(isolate); | 12648 HandleScope scope(isolate); |
12695 ASSERT(args.length() == 4); | 12649 ASSERT(args.length() == 4); |
12696 // Check arguments. | 12650 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); |
12697 Object* check; | 12651 RUNTIME_ASSERT(CheckExecutionState(isolate, break_id)); |
12698 { MaybeObject* maybe_check = Runtime_CheckExecutionState( | 12652 |
12699 RUNTIME_ARGUMENTS(isolate, args)); | |
12700 if (!maybe_check->ToObject(&check)) return maybe_check; | |
12701 } | |
12702 if (!args[1]->IsNumber() || !args[2]->IsNumber()) { | 12653 if (!args[1]->IsNumber() || !args[2]->IsNumber()) { |
12703 return isolate->Throw(isolate->heap()->illegal_argument_string()); | 12654 return isolate->Throw(isolate->heap()->illegal_argument_string()); |
12704 } | 12655 } |
12705 | 12656 |
12706 CONVERT_NUMBER_CHECKED(int, wrapped_frame_id, Int32, args[3]); | 12657 CONVERT_NUMBER_CHECKED(int, wrapped_frame_id, Int32, args[3]); |
12707 | 12658 |
12708 StackFrame::Id frame_id; | 12659 StackFrame::Id frame_id; |
12709 if (wrapped_frame_id == 0) { | 12660 if (wrapped_frame_id == 0) { |
12710 frame_id = StackFrame::NO_ID; | 12661 frame_id = StackFrame::NO_ID; |
12711 } else { | 12662 } else { |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
12824 // debugging. Things that need special attention are: | 12775 // debugging. Things that need special attention are: |
12825 // - Parameters and stack-allocated locals need to be materialized. Altered | 12776 // - Parameters and stack-allocated locals need to be materialized. Altered |
12826 // values need to be written back to the stack afterwards. | 12777 // values need to be written back to the stack afterwards. |
12827 // - The arguments object needs to materialized. | 12778 // - The arguments object needs to materialized. |
12828 RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugEvaluate) { | 12779 RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugEvaluate) { |
12829 HandleScope scope(isolate); | 12780 HandleScope scope(isolate); |
12830 | 12781 |
12831 // Check the execution state and decode arguments frame and source to be | 12782 // Check the execution state and decode arguments frame and source to be |
12832 // evaluated. | 12783 // evaluated. |
12833 ASSERT(args.length() == 6); | 12784 ASSERT(args.length() == 6); |
12834 Object* check_result; | 12785 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); |
12835 { MaybeObject* maybe_result = Runtime_CheckExecutionState( | 12786 RUNTIME_ASSERT(CheckExecutionState(isolate, break_id)); |
12836 RUNTIME_ARGUMENTS(isolate, args)); | 12787 |
12837 if (!maybe_result->ToObject(&check_result)) return maybe_result; | |
12838 } | |
12839 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); | 12788 CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); |
12840 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]); | 12789 CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]); |
12841 CONVERT_ARG_HANDLE_CHECKED(String, source, 3); | 12790 CONVERT_ARG_HANDLE_CHECKED(String, source, 3); |
12842 CONVERT_BOOLEAN_ARG_CHECKED(disable_break, 4); | 12791 CONVERT_BOOLEAN_ARG_CHECKED(disable_break, 4); |
12843 Handle<Object> context_extension(args[5], isolate); | 12792 Handle<Object> context_extension(args[5], isolate); |
12844 | 12793 |
12845 // Handle the processing of break. | 12794 // Handle the processing of break. |
12846 DisableBreak disable_break_save(isolate, disable_break); | 12795 DisableBreak disable_break_save(isolate, disable_break); |
12847 | 12796 |
12848 // Get the frame where the debugging is performed. | 12797 // Get the frame where the debugging is performed. |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
12892 return *result; | 12841 return *result; |
12893 } | 12842 } |
12894 | 12843 |
12895 | 12844 |
12896 RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugEvaluateGlobal) { | 12845 RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugEvaluateGlobal) { |
12897 HandleScope scope(isolate); | 12846 HandleScope scope(isolate); |
12898 | 12847 |
12899 // Check the execution state and decode arguments frame and source to be | 12848 // Check the execution state and decode arguments frame and source to be |
12900 // evaluated. | 12849 // evaluated. |
12901 ASSERT(args.length() == 4); | 12850 ASSERT(args.length() == 4); |
12902 Object* check_result; | 12851 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); |
12903 { MaybeObject* maybe_result = Runtime_CheckExecutionState( | 12852 RUNTIME_ASSERT(CheckExecutionState(isolate, break_id)); |
12904 RUNTIME_ARGUMENTS(isolate, args)); | 12853 |
12905 if (!maybe_result->ToObject(&check_result)) return maybe_result; | |
12906 } | |
12907 CONVERT_ARG_HANDLE_CHECKED(String, source, 1); | 12854 CONVERT_ARG_HANDLE_CHECKED(String, source, 1); |
12908 CONVERT_BOOLEAN_ARG_CHECKED(disable_break, 2); | 12855 CONVERT_BOOLEAN_ARG_CHECKED(disable_break, 2); |
12909 Handle<Object> context_extension(args[3], isolate); | 12856 Handle<Object> context_extension(args[3], isolate); |
12910 | 12857 |
12911 // Handle the processing of break. | 12858 // Handle the processing of break. |
12912 DisableBreak disable_break_save(isolate, disable_break); | 12859 DisableBreak disable_break_save(isolate, disable_break); |
12913 | 12860 |
12914 // Enter the top context from before the debugger was invoked. | 12861 // Enter the top context from before the debugger was invoked. |
12915 SaveContext save(isolate); | 12862 SaveContext save(isolate); |
12916 SaveContext* top = &save; | 12863 SaveContext* top = &save; |
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
13481 return *LiveEdit::CompareStrings(s1, s2); | 13428 return *LiveEdit::CompareStrings(s1, s2); |
13482 } | 13429 } |
13483 | 13430 |
13484 | 13431 |
13485 // Restarts a call frame and completely drops all frames above. | 13432 // Restarts a call frame and completely drops all frames above. |
13486 // Returns true if successful. Otherwise returns undefined or an error message. | 13433 // Returns true if successful. Otherwise returns undefined or an error message. |
13487 RUNTIME_FUNCTION(MaybeObject*, Runtime_LiveEditRestartFrame) { | 13434 RUNTIME_FUNCTION(MaybeObject*, Runtime_LiveEditRestartFrame) { |
13488 HandleScope scope(isolate); | 13435 HandleScope scope(isolate); |
13489 CHECK(isolate->debugger()->live_edit_enabled()); | 13436 CHECK(isolate->debugger()->live_edit_enabled()); |
13490 ASSERT(args.length() == 2); | 13437 ASSERT(args.length() == 2); |
13438 CONVERT_NUMBER_CHECKED(int, break_id, Int32, args[0]); | |
13439 RUNTIME_ASSERT(CheckExecutionState(isolate, break_id)); | |
13491 | 13440 |
13492 // Check arguments. | |
13493 Object* check; | |
13494 { MaybeObject* maybe_check = Runtime_CheckExecutionState( | |
13495 RUNTIME_ARGUMENTS(isolate, args)); | |
13496 if (!maybe_check->ToObject(&check)) return maybe_check; | |
13497 } | |
13498 CONVERT_NUMBER_CHECKED(int, index, Int32, args[1]); | 13441 CONVERT_NUMBER_CHECKED(int, index, Int32, args[1]); |
13499 Heap* heap = isolate->heap(); | 13442 Heap* heap = isolate->heap(); |
13500 | 13443 |
13501 // Find the relevant frame with the requested index. | 13444 // Find the relevant frame with the requested index. |
13502 StackFrame::Id id = isolate->debug()->break_frame_id(); | 13445 StackFrame::Id id = isolate->debug()->break_frame_id(); |
13503 if (id == StackFrame::NO_ID) { | 13446 if (id == StackFrame::NO_ID) { |
13504 // If there are no JavaScript stack frames return undefined. | 13447 // If there are no JavaScript stack frames return undefined. |
13505 return heap->undefined_value(); | 13448 return heap->undefined_value(); |
13506 } | 13449 } |
13507 | 13450 |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
13817 } | 13760 } |
13818 | 13761 |
13819 | 13762 |
13820 RUNTIME_FUNCTION(MaybeObject*, Runtime_IsInitializedIntlObject) { | 13763 RUNTIME_FUNCTION(MaybeObject*, Runtime_IsInitializedIntlObject) { |
13821 HandleScope scope(isolate); | 13764 HandleScope scope(isolate); |
13822 | 13765 |
13823 ASSERT(args.length() == 1); | 13766 ASSERT(args.length() == 1); |
13824 | 13767 |
13825 CONVERT_ARG_HANDLE_CHECKED(Object, input, 0); | 13768 CONVERT_ARG_HANDLE_CHECKED(Object, input, 0); |
13826 | 13769 |
13827 if (!input->IsJSObject()) return isolate->heap()->ToBoolean(false); | 13770 if (!input->IsJSObject()) return isolate->heap()->false_value(); |
13828 Handle<JSObject> obj = Handle<JSObject>::cast(input); | 13771 Handle<JSObject> obj = Handle<JSObject>::cast(input); |
13829 | 13772 |
13830 Handle<String> marker = isolate->factory()->intl_initialized_marker_string(); | 13773 Handle<String> marker = isolate->factory()->intl_initialized_marker_string(); |
13831 Handle<Object> tag(obj->GetHiddenProperty(*marker), isolate); | 13774 Handle<Object> tag(obj->GetHiddenProperty(*marker), isolate); |
13832 return isolate->heap()->ToBoolean(!tag->IsTheHole()); | 13775 return isolate->heap()->ToBoolean(!tag->IsTheHole()); |
13833 } | 13776 } |
13834 | 13777 |
13835 | 13778 |
13836 RUNTIME_FUNCTION(MaybeObject*, Runtime_IsInitializedIntlObjectOfType) { | 13779 RUNTIME_FUNCTION(MaybeObject*, Runtime_IsInitializedIntlObjectOfType) { |
13837 HandleScope scope(isolate); | 13780 HandleScope scope(isolate); |
13838 | 13781 |
13839 ASSERT(args.length() == 2); | 13782 ASSERT(args.length() == 2); |
13840 | 13783 |
13841 CONVERT_ARG_HANDLE_CHECKED(Object, input, 0); | 13784 CONVERT_ARG_HANDLE_CHECKED(Object, input, 0); |
13842 CONVERT_ARG_HANDLE_CHECKED(String, expected_type, 1); | 13785 CONVERT_ARG_HANDLE_CHECKED(String, expected_type, 1); |
13843 | 13786 |
13844 if (!input->IsJSObject()) return isolate->heap()->ToBoolean(false); | 13787 if (!input->IsJSObject()) return isolate->heap()->false_value(); |
13845 Handle<JSObject> obj = Handle<JSObject>::cast(input); | 13788 Handle<JSObject> obj = Handle<JSObject>::cast(input); |
13846 | 13789 |
13847 Handle<String> marker = isolate->factory()->intl_initialized_marker_string(); | 13790 Handle<String> marker = isolate->factory()->intl_initialized_marker_string(); |
13848 Handle<Object> tag(obj->GetHiddenProperty(*marker), isolate); | 13791 Handle<Object> tag(obj->GetHiddenProperty(*marker), isolate); |
13849 return isolate->heap()->ToBoolean( | 13792 return isolate->heap()->ToBoolean( |
13850 tag->IsString() && String::cast(*tag)->Equals(*expected_type)); | 13793 tag->IsString() && String::cast(*tag)->Equals(*expected_type)); |
13851 } | 13794 } |
13852 | 13795 |
13853 | 13796 |
13854 RUNTIME_FUNCTION(MaybeObject*, Runtime_MarkAsInitializedIntlObjectOfType) { | 13797 RUNTIME_FUNCTION(MaybeObject*, Runtime_MarkAsInitializedIntlObjectOfType) { |
(...skipping 1242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
15097 } | 15040 } |
15098 } | 15041 } |
15099 | 15042 |
15100 | 15043 |
15101 void Runtime::OutOfMemory() { | 15044 void Runtime::OutOfMemory() { |
15102 Heap::FatalProcessOutOfMemory("CALL_AND_RETRY_LAST", true); | 15045 Heap::FatalProcessOutOfMemory("CALL_AND_RETRY_LAST", true); |
15103 UNREACHABLE(); | 15046 UNREACHABLE(); |
15104 } | 15047 } |
15105 | 15048 |
15106 } } // namespace v8::internal | 15049 } } // namespace v8::internal |
OLD | NEW |