| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index 51c1ba233abf868a15260eb5d8b7db8f93b621d3..4f68a658e060dd0650fd75a694282ac3b762b892 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -1405,16 +1405,18 @@ static Object* Runtime_SetCode(Arguments args) {
|
| if (!code->IsNull()) {
|
| RUNTIME_ASSERT(code->IsJSFunction());
|
| Handle<JSFunction> fun = Handle<JSFunction>::cast(code);
|
| - SetExpectedNofProperties(target, fun->shared()->expected_nof_properties());
|
| - if (!fun->is_compiled() && !CompileLazy(fun, KEEP_EXCEPTION)) {
|
| + Handle<SharedFunctionInfo> shared(fun->shared());
|
| + SetExpectedNofProperties(target, shared->expected_nof_properties());
|
| +
|
| + if (!EnsureCompiled(shared, KEEP_EXCEPTION)) {
|
| return Failure::Exception();
|
| }
|
| // Set the code, formal parameter count, and the length of the target
|
| // function.
|
| target->set_code(fun->code());
|
| - target->shared()->set_length(fun->shared()->length());
|
| + target->shared()->set_length(shared->length());
|
| target->shared()->set_formal_parameter_count(
|
| - fun->shared()->formal_parameter_count());
|
| + shared->formal_parameter_count());
|
| // Set the source code of the target function to undefined.
|
| // SetCode is only used for built-in constructors like String,
|
| // Array, and Object, and some web code
|
| @@ -4826,12 +4828,8 @@ static Object* Runtime_NewObject(Arguments args) {
|
| }
|
|
|
| // The function should be compiled for the optimization hints to be available.
|
| - if (!function->shared()->is_compiled()) {
|
| - CompileLazyShared(Handle<SharedFunctionInfo>(function->shared()),
|
| - CLEAR_EXCEPTION,
|
| - 0);
|
| - LOG(FunctionCreateEvent(*function));
|
| - }
|
| + Handle<SharedFunctionInfo> shared(function->shared());
|
| + EnsureCompiled(shared, CLEAR_EXCEPTION);
|
|
|
| bool first_allocation = !function->has_initial_map();
|
| Handle<JSObject> result = Factory::NewJSObject(function);
|
| @@ -4870,7 +4868,7 @@ static Object* Runtime_LazyCompile(Arguments args) {
|
| // this means that things called through constructors are never known to
|
| // be in loops. We compile them as if they are in loops here just in case.
|
| ASSERT(!function->is_compiled());
|
| - if (!CompileLazyInLoop(function, KEEP_EXCEPTION)) {
|
| + if (!CompileLazyInLoop(function, Handle<Object>::null(), KEEP_EXCEPTION)) {
|
| return Failure::Exception();
|
| }
|
|
|
| @@ -7278,7 +7276,7 @@ Object* Runtime::FindSharedFunctionInfoInScript(Handle<Script> script,
|
| if (!done) {
|
| // If the candidate is not compiled compile it to reveal any inner
|
| // functions which might contain the requested source position.
|
| - CompileLazyShared(target, KEEP_EXCEPTION, 0);
|
| + CompileLazyShared(target, KEEP_EXCEPTION);
|
| }
|
| }
|
|
|
| @@ -7864,7 +7862,8 @@ static Object* Runtime_DebugDisassembleFunction(Arguments args) {
|
| ASSERT(args.length() == 1);
|
| // Get the function and make sure it is compiled.
|
| CONVERT_ARG_CHECKED(JSFunction, func, 0);
|
| - if (!func->is_compiled() && !CompileLazy(func, KEEP_EXCEPTION)) {
|
| + Handle<SharedFunctionInfo> shared(func->shared());
|
| + if (!EnsureCompiled(shared, KEEP_EXCEPTION)) {
|
| return Failure::Exception();
|
| }
|
| func->code()->PrintLn();
|
| @@ -7879,10 +7878,11 @@ static Object* Runtime_DebugDisassembleConstructor(Arguments args) {
|
| ASSERT(args.length() == 1);
|
| // Get the function and make sure it is compiled.
|
| CONVERT_ARG_CHECKED(JSFunction, func, 0);
|
| - if (!func->is_compiled() && !CompileLazy(func, KEEP_EXCEPTION)) {
|
| + Handle<SharedFunctionInfo> shared(func->shared());
|
| + if (!EnsureCompiled(shared, KEEP_EXCEPTION)) {
|
| return Failure::Exception();
|
| }
|
| - func->shared()->construct_stub()->PrintLn();
|
| + shared->construct_stub()->PrintLn();
|
| #endif // DEBUG
|
| return Heap::undefined_value();
|
| }
|
|
|