OLD | NEW |
---|---|
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 9272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
9283 PrintName(); | 9283 PrintName(); |
9284 PrintF(" for parallel recompilation.\n"); | 9284 PrintF(" for parallel recompilation.\n"); |
9285 } | 9285 } |
9286 set_code_no_write_barrier( | 9286 set_code_no_write_barrier( |
9287 GetIsolate()->builtins()->builtin(Builtins::kInRecompileQueue)); | 9287 GetIsolate()->builtins()->builtin(Builtins::kInRecompileQueue)); |
9288 // No write barrier required, since the builtin is part of the root set. | 9288 // No write barrier required, since the builtin is part of the root set. |
9289 } | 9289 } |
9290 | 9290 |
9291 | 9291 |
9292 static bool CompileLazyHelper(CompilationInfo* info, | 9292 static bool CompileLazyHelper(CompilationInfo* info, |
9293 ClearExceptionFlag flag) { | 9293 ClearExceptionFlag flag, |
9294 bool install) { | |
Michael Starzinger
2013/07/31 14:55:50
The boolean flag is obsolete, see comments in "com
| |
9294 // Compile the source information to a code object. | 9295 // Compile the source information to a code object. |
9295 ASSERT(info->IsOptimizing() || !info->shared_info()->is_compiled()); | 9296 ASSERT(info->IsOptimizing() || !info->shared_info()->is_compiled()); |
9296 ASSERT(!info->isolate()->has_pending_exception()); | 9297 ASSERT(!info->isolate()->has_pending_exception()); |
9297 bool result = Compiler::CompileLazy(info); | 9298 bool result = Compiler::CompileLazy(info, install); |
9298 ASSERT(result != Isolate::Current()->has_pending_exception()); | 9299 ASSERT(result != Isolate::Current()->has_pending_exception()); |
9299 if (!result && flag == CLEAR_EXCEPTION) { | 9300 if (!result && flag == CLEAR_EXCEPTION) { |
9300 info->isolate()->clear_pending_exception(); | 9301 info->isolate()->clear_pending_exception(); |
9301 } | 9302 } |
9302 return result; | 9303 return result; |
9303 } | 9304 } |
9304 | 9305 |
9305 | 9306 |
9306 bool SharedFunctionInfo::CompileLazy(Handle<SharedFunctionInfo> shared, | 9307 bool SharedFunctionInfo::CompileLazy(Handle<SharedFunctionInfo> shared, |
9307 ClearExceptionFlag flag) { | 9308 ClearExceptionFlag flag) { |
9308 ASSERT(shared->allows_lazy_compilation_without_context()); | 9309 ASSERT(shared->allows_lazy_compilation_without_context()); |
9309 CompilationInfoWithZone info(shared); | 9310 CompilationInfoWithZone info(shared); |
9310 return CompileLazyHelper(&info, flag); | 9311 return CompileLazyHelper(&info, flag, true); |
9311 } | 9312 } |
9312 | 9313 |
9313 | 9314 |
9314 void SharedFunctionInfo::AddToOptimizedCodeMap( | 9315 void SharedFunctionInfo::AddToOptimizedCodeMap( |
9315 Handle<SharedFunctionInfo> shared, | 9316 Handle<SharedFunctionInfo> shared, |
9316 Handle<Context> native_context, | 9317 Handle<Context> native_context, |
9317 Handle<Code> code, | 9318 Handle<Code> code, |
9318 Handle<FixedArray> literals) { | 9319 Handle<FixedArray> literals) { |
9319 CALL_HEAP_FUNCTION_VOID( | 9320 CALL_HEAP_FUNCTION_VOID( |
9320 shared->GetIsolate(), | 9321 shared->GetIsolate(), |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
9450 | 9451 |
9451 | 9452 |
9452 bool JSFunction::CompileLazy(Handle<JSFunction> function, | 9453 bool JSFunction::CompileLazy(Handle<JSFunction> function, |
9453 ClearExceptionFlag flag) { | 9454 ClearExceptionFlag flag) { |
9454 bool result = true; | 9455 bool result = true; |
9455 if (function->shared()->is_compiled()) { | 9456 if (function->shared()->is_compiled()) { |
9456 function->ReplaceCode(function->shared()->code()); | 9457 function->ReplaceCode(function->shared()->code()); |
9457 } else { | 9458 } else { |
9458 ASSERT(function->shared()->allows_lazy_compilation()); | 9459 ASSERT(function->shared()->allows_lazy_compilation()); |
9459 CompilationInfoWithZone info(function); | 9460 CompilationInfoWithZone info(function); |
9460 result = CompileLazyHelper(&info, flag); | 9461 result = CompileLazyHelper(&info, flag, true); |
9461 ASSERT(!result || function->is_compiled()); | 9462 ASSERT(!result || function->is_compiled()); |
9462 } | 9463 } |
9463 return result; | 9464 return result; |
9464 } | 9465 } |
9465 | 9466 |
9466 | 9467 |
9467 bool JSFunction::CompileOptimized(Handle<JSFunction> function, | 9468 Handle<Code> JSFunction::CompileOsr(Handle<JSFunction> function, |
9468 BailoutId osr_ast_id, | 9469 BailoutId osr_ast_id, |
9469 ClearExceptionFlag flag) { | 9470 ClearExceptionFlag flag) { |
9470 CompilationInfoWithZone info(function); | 9471 CompilationInfoWithZone info(function); |
9471 info.SetOptimizing(osr_ast_id); | 9472 info.SetOptimizing(osr_ast_id); |
9472 return CompileLazyHelper(&info, flag); | 9473 if (CompileLazyHelper(&info, flag, false)) { |
9474 return info.code(); | |
9475 } else { | |
9476 return Handle<Code>::null(); | |
9477 } | |
9473 } | 9478 } |
9474 | 9479 |
9475 | 9480 |
9481 bool JSFunction::CompileOptimized(Handle<JSFunction> function, | |
9482 ClearExceptionFlag flag) { | |
9483 CompilationInfoWithZone info(function); | |
9484 info.SetOptimizing(BailoutId::None()); | |
9485 return CompileLazyHelper(&info, flag, true); | |
9486 } | |
9487 | |
9488 | |
9476 bool JSFunction::EnsureCompiled(Handle<JSFunction> function, | 9489 bool JSFunction::EnsureCompiled(Handle<JSFunction> function, |
9477 ClearExceptionFlag flag) { | 9490 ClearExceptionFlag flag) { |
9478 return function->is_compiled() || CompileLazy(function, flag); | 9491 return function->is_compiled() || CompileLazy(function, flag); |
9479 } | 9492 } |
9480 | 9493 |
9481 | 9494 |
9482 bool JSFunction::IsInlineable() { | 9495 bool JSFunction::IsInlineable() { |
9483 if (IsBuiltin()) return false; | 9496 if (IsBuiltin()) return false; |
9484 SharedFunctionInfo* shared_info = shared(); | 9497 SharedFunctionInfo* shared_info = shared(); |
9485 // Check that the function has a script associated with it. | 9498 // Check that the function has a script associated with it. |
(...skipping 6486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
15972 | 15985 |
15973 void PropertyCell::AddDependentCode(Handle<Code> code) { | 15986 void PropertyCell::AddDependentCode(Handle<Code> code) { |
15974 Handle<DependentCode> codes = DependentCode::Insert( | 15987 Handle<DependentCode> codes = DependentCode::Insert( |
15975 Handle<DependentCode>(dependent_code()), | 15988 Handle<DependentCode>(dependent_code()), |
15976 DependentCode::kPropertyCellChangedGroup, code); | 15989 DependentCode::kPropertyCellChangedGroup, code); |
15977 if (*codes != dependent_code()) set_dependent_code(*codes); | 15990 if (*codes != dependent_code()) set_dependent_code(*codes); |
15978 } | 15991 } |
15979 | 15992 |
15980 | 15993 |
15981 } } // namespace v8::internal | 15994 } } // namespace v8::internal |
OLD | NEW |