OLD | NEW |
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 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 3805 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3816 return *adaptor; | 3816 return *adaptor; |
3817 } | 3817 } |
3818 | 3818 |
3819 | 3819 |
3820 static Object* Runtime_EvalReceiver(Arguments args) { | 3820 static Object* Runtime_EvalReceiver(Arguments args) { |
3821 StackFrameLocator locator; | 3821 StackFrameLocator locator; |
3822 return locator.FindJavaScriptFrame(1)->receiver(); | 3822 return locator.FindJavaScriptFrame(1)->receiver(); |
3823 } | 3823 } |
3824 | 3824 |
3825 | 3825 |
| 3826 static Object* Runtime_GlobalReceiver(Arguments args) { |
| 3827 ASSERT(args.length() == 1); |
| 3828 Object* global = args[0]; |
| 3829 if (!global->IsJSGlobalObject()) return Heap::null_value(); |
| 3830 return JSGlobalObject::cast(global)->global_receiver(); |
| 3831 } |
| 3832 |
| 3833 |
3826 static Object* Runtime_CompileString(Arguments args) { | 3834 static Object* Runtime_CompileString(Arguments args) { |
3827 HandleScope scope; | 3835 HandleScope scope; |
3828 ASSERT(args.length() == 3); | 3836 ASSERT(args.length() == 3); |
3829 CONVERT_ARG_CHECKED(String, source, 0); | 3837 CONVERT_ARG_CHECKED(String, source, 0); |
3830 CONVERT_ARG_CHECKED(Smi, line_offset, 1); | 3838 CONVERT_ARG_CHECKED(Smi, line_offset, 1); |
3831 bool contextual = args[2]->IsTrue(); | 3839 bool contextual = args[2]->IsTrue(); |
3832 RUNTIME_ASSERT(contextual || args[2]->IsFalse()); | 3840 RUNTIME_ASSERT(contextual || args[2]->IsFalse()); |
3833 | 3841 |
3834 // Compute the eval context. | 3842 // Compute the eval context. |
3835 Handle<Context> context; | 3843 Handle<Context> context; |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4109 case NULL_DESCRIPTOR: | 4117 case NULL_DESCRIPTOR: |
4110 return Heap::undefined_value(); | 4118 return Heap::undefined_value(); |
4111 default: | 4119 default: |
4112 UNREACHABLE(); | 4120 UNREACHABLE(); |
4113 } | 4121 } |
4114 UNREACHABLE(); | 4122 UNREACHABLE(); |
4115 return Heap::undefined_value(); | 4123 return Heap::undefined_value(); |
4116 } | 4124 } |
4117 | 4125 |
4118 | 4126 |
4119 static Object* Runtime_DebugGetLocalPropertyDetails(Arguments args) { | 4127 static Object* Runtime_DebugGetPropertyDetails(Arguments args) { |
4120 HandleScope scope; | 4128 HandleScope scope; |
4121 | 4129 |
4122 ASSERT(args.length() == 2); | 4130 ASSERT(args.length() == 2); |
4123 | 4131 |
4124 CONVERT_ARG_CHECKED(JSObject, obj, 0); | 4132 CONVERT_ARG_CHECKED(JSObject, obj, 0); |
4125 CONVERT_ARG_CHECKED(String, name, 1); | 4133 CONVERT_ARG_CHECKED(String, name, 1); |
4126 | 4134 |
4127 // Check if the name is trivially convertible to an index and get the element | 4135 // Check if the name is trivially convertible to an index and get the element |
4128 // if so. | 4136 // if so. |
4129 uint32_t index; | 4137 uint32_t index; |
4130 if (name->AsArrayIndex(&index)) { | 4138 if (name->AsArrayIndex(&index)) { |
4131 Handle<FixedArray> details = Factory::NewFixedArray(2); | 4139 Handle<FixedArray> details = Factory::NewFixedArray(2); |
4132 details->set(0, Runtime::GetElementOrCharAt(obj, index)); | 4140 details->set(0, Runtime::GetElementOrCharAt(obj, index)); |
4133 details->set(1, PropertyDetails(NONE, NORMAL).AsSmi()); | 4141 details->set(1, PropertyDetails(NONE, NORMAL).AsSmi()); |
4134 return *Factory::NewJSArrayWithElements(details); | 4142 return *Factory::NewJSArrayWithElements(details); |
4135 } | 4143 } |
4136 | 4144 |
4137 // Perform standard local lookup on the object. | 4145 // Perform standard local lookup on the object. |
4138 LookupResult result; | 4146 LookupResult result; |
4139 obj->LocalLookup(*name, &result); | 4147 obj->Lookup(*name, &result); |
4140 if (result.IsProperty()) { | 4148 if (result.IsProperty()) { |
4141 Handle<Object> value(DebugLookupResultValue(&result)); | 4149 Handle<Object> value(DebugLookupResultValue(&result)); |
4142 Handle<FixedArray> details = Factory::NewFixedArray(2); | 4150 Handle<FixedArray> details = Factory::NewFixedArray(2); |
4143 details->set(0, *value); | 4151 details->set(0, *value); |
4144 details->set(1, result.GetPropertyDetails().AsSmi()); | 4152 details->set(1, result.GetPropertyDetails().AsSmi()); |
4145 return *Factory::NewJSArrayWithElements(details); | 4153 return *Factory::NewJSArrayWithElements(details); |
4146 } | 4154 } |
4147 return Heap::undefined_value(); | 4155 return Heap::undefined_value(); |
4148 } | 4156 } |
4149 | 4157 |
(...skipping 731 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4881 | 4889 |
4882 // Traverse the saved contexts chain to find the active context for the | 4890 // Traverse the saved contexts chain to find the active context for the |
4883 // selected frame. | 4891 // selected frame. |
4884 SaveContext* save = Top::save_context(); | 4892 SaveContext* save = Top::save_context(); |
4885 while (save != NULL && reinterpret_cast<Address>(save) < frame->sp()) { | 4893 while (save != NULL && reinterpret_cast<Address>(save) < frame->sp()) { |
4886 save = save->prev(); | 4894 save = save->prev(); |
4887 } | 4895 } |
4888 ASSERT(save != NULL); | 4896 ASSERT(save != NULL); |
4889 SaveContext savex; | 4897 SaveContext savex; |
4890 Top::set_context(*(save->context())); | 4898 Top::set_context(*(save->context())); |
4891 Top::set_security_context(*(save->security_context())); | |
4892 | 4899 |
4893 // Create the (empty) function replacing the function on the stack frame for | 4900 // Create the (empty) function replacing the function on the stack frame for |
4894 // the purpose of evaluating in the context created below. It is important | 4901 // the purpose of evaluating in the context created below. It is important |
4895 // that this function does not describe any parameters and local variables | 4902 // that this function does not describe any parameters and local variables |
4896 // in the context. If it does then this will cause problems with the lookup | 4903 // in the context. If it does then this will cause problems with the lookup |
4897 // in Context::Lookup, where context slots for parameters and local variables | 4904 // in Context::Lookup, where context slots for parameters and local variables |
4898 // are looked at before the extension object. | 4905 // are looked at before the extension object. |
4899 Handle<JSFunction> go_between = | 4906 Handle<JSFunction> go_between = |
4900 Factory::NewFunction(Factory::empty_string(), Factory::undefined_value()); | 4907 Factory::NewFunction(Factory::empty_string(), Factory::undefined_value()); |
4901 go_between->set_context(function->context()); | 4908 go_between->set_context(function->context()); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5008 DisableBreak disable_break_save(disable_break); | 5015 DisableBreak disable_break_save(disable_break); |
5009 | 5016 |
5010 // Enter the top context from before the debugger was invoked. | 5017 // Enter the top context from before the debugger was invoked. |
5011 SaveContext save; | 5018 SaveContext save; |
5012 SaveContext* top = &save; | 5019 SaveContext* top = &save; |
5013 while (top != NULL && *top->context() == *Debug::debug_context()) { | 5020 while (top != NULL && *top->context() == *Debug::debug_context()) { |
5014 top = top->prev(); | 5021 top = top->prev(); |
5015 } | 5022 } |
5016 if (top != NULL) { | 5023 if (top != NULL) { |
5017 Top::set_context(*top->context()); | 5024 Top::set_context(*top->context()); |
5018 Top::set_security_context(*top->security_context()); | |
5019 } | 5025 } |
5020 | 5026 |
5021 // Get the global context now set to the top context from before the | 5027 // Get the global context now set to the top context from before the |
5022 // debugger was invoked. | 5028 // debugger was invoked. |
5023 Handle<Context> context = Top::global_context(); | 5029 Handle<Context> context = Top::global_context(); |
5024 | 5030 |
5025 // Compile the source to be evaluated. | 5031 // Compile the source to be evaluated. |
5026 Handle<JSFunction> boilerplate(Compiler::CompileEval(source, 0, true)); | 5032 Handle<JSFunction> boilerplate(Compiler::CompileEval(source, 0, true)); |
5027 if (boilerplate.is_null()) return Failure::Exception(); | 5033 if (boilerplate.is_null()) return Failure::Exception(); |
5028 Handle<JSFunction> compiled_function = | 5034 Handle<JSFunction> compiled_function = |
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5447 | 5453 |
5448 void Runtime::PerformGC(Object* result) { | 5454 void Runtime::PerformGC(Object* result) { |
5449 Failure* failure = Failure::cast(result); | 5455 Failure* failure = Failure::cast(result); |
5450 // Try to do a garbage collection; ignore it if it fails. The C | 5456 // Try to do a garbage collection; ignore it if it fails. The C |
5451 // entry stub will throw an out-of-memory exception in that case. | 5457 // entry stub will throw an out-of-memory exception in that case. |
5452 Heap::CollectGarbage(failure->requested(), failure->allocation_space()); | 5458 Heap::CollectGarbage(failure->requested(), failure->allocation_space()); |
5453 } | 5459 } |
5454 | 5460 |
5455 | 5461 |
5456 } } // namespace v8::internal | 5462 } } // namespace v8::internal |
OLD | NEW |