Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/compiler.h" | 5 #include "src/compiler.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "src/asmjs/asm-js.h" | 9 #include "src/asmjs/asm-js.h" |
| 10 #include "src/asmjs/asm-typer.h" | 10 #include "src/asmjs/asm-typer.h" |
| (...skipping 1742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1753 shared->set_feedback_metadata(fun->shared()->feedback_metadata()); | 1753 shared->set_feedback_metadata(fun->shared()->feedback_metadata()); |
| 1754 | 1754 |
| 1755 // Copy the function data to the shared function info. | 1755 // Copy the function data to the shared function info. |
| 1756 shared->set_function_data(fun->shared()->function_data()); | 1756 shared->set_function_data(fun->shared()->function_data()); |
| 1757 int parameters = fun->shared()->internal_formal_parameter_count(); | 1757 int parameters = fun->shared()->internal_formal_parameter_count(); |
| 1758 shared->set_internal_formal_parameter_count(parameters); | 1758 shared->set_internal_formal_parameter_count(parameters); |
| 1759 | 1759 |
| 1760 return shared; | 1760 return shared; |
| 1761 } | 1761 } |
| 1762 | 1762 |
| 1763 namespace { | |
| 1764 | |
| 1765 bool CodeGenerationFromStringsAllowed(Isolate* isolate, | |
| 1766 Handle<Context> context) { | |
| 1767 DCHECK(context->allow_code_gen_from_strings()->IsFalse(isolate)); | |
| 1768 // Check with callback if set. | |
| 1769 AllowCodeGenerationFromStringsCallback callback = | |
| 1770 isolate->allow_code_gen_callback(); | |
| 1771 if (callback == NULL) { | |
| 1772 // No callback set and code generation disallowed. | |
| 1773 return false; | |
| 1774 } else { | |
| 1775 // Callback set. Let it decide if code generation is allowed. | |
| 1776 VMState<EXTERNAL> state(isolate); | |
| 1777 return callback(v8::Utils::ToLocal(context)); | |
| 1778 } | |
| 1779 } | |
| 1780 | |
| 1781 } // namespace | |
| 1782 | |
| 1783 MaybeHandle<JSFunction> Compiler::CompileString(Handle<Context> context, | |
|
Michael Starzinger
2016/07/20 12:03:35
Likewise, please move this to after GetFunctionFro
jgruber
2016/07/20 12:42:11
Done.
| |
| 1784 Handle<String> source, | |
| 1785 ParseRestriction restriction) { | |
| 1786 Isolate* const isolate = context->GetIsolate(); | |
| 1787 Handle<Context> native_context(context->native_context(), isolate); | |
| 1788 | |
| 1789 // Check if native context allows code generation from | |
| 1790 // strings. Throw an exception if it doesn't. | |
| 1791 if (native_context->allow_code_gen_from_strings()->IsFalse(isolate) && | |
| 1792 !CodeGenerationFromStringsAllowed(isolate, native_context)) { | |
| 1793 Handle<Object> error_message = | |
| 1794 native_context->ErrorMessageForCodeGenerationFromStrings(); | |
| 1795 THROW_NEW_ERROR(isolate, NewEvalError(MessageTemplate::kCodeGenFromStrings, | |
| 1796 error_message), | |
| 1797 JSFunction); | |
| 1798 } | |
| 1799 | |
| 1800 // Compile source string in the native context. | |
| 1801 int eval_scope_position = 0; | |
| 1802 int eval_position = kNoSourcePosition; | |
| 1803 Handle<SharedFunctionInfo> outer_info(native_context->closure()->shared()); | |
| 1804 return Compiler::GetFunctionFromEval(source, outer_info, native_context, | |
| 1805 SLOPPY, restriction, eval_scope_position, | |
| 1806 eval_position); | |
| 1807 } | |
| 1808 | |
| 1763 MaybeHandle<Code> Compiler::GetOptimizedCodeForOSR(Handle<JSFunction> function, | 1809 MaybeHandle<Code> Compiler::GetOptimizedCodeForOSR(Handle<JSFunction> function, |
| 1764 BailoutId osr_ast_id, | 1810 BailoutId osr_ast_id, |
| 1765 JavaScriptFrame* osr_frame) { | 1811 JavaScriptFrame* osr_frame) { |
| 1766 DCHECK(!osr_ast_id.IsNone()); | 1812 DCHECK(!osr_ast_id.IsNone()); |
| 1767 DCHECK_NOT_NULL(osr_frame); | 1813 DCHECK_NOT_NULL(osr_frame); |
| 1768 return GetOptimizedCode(function, NOT_CONCURRENT, osr_ast_id, osr_frame); | 1814 return GetOptimizedCode(function, NOT_CONCURRENT, osr_ast_id, osr_frame); |
| 1769 } | 1815 } |
| 1770 | 1816 |
| 1771 void Compiler::FinalizeCompilationJob(CompilationJob* raw_job) { | 1817 void Compiler::FinalizeCompilationJob(CompilationJob* raw_job) { |
| 1772 // Take ownership of compilation job. Deleting job also tears down the zone. | 1818 // Take ownership of compilation job. Deleting job also tears down the zone. |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1843 DCHECK(shared->is_compiled()); | 1889 DCHECK(shared->is_compiled()); |
| 1844 function->set_literals(cached.literals); | 1890 function->set_literals(cached.literals); |
| 1845 } else if (shared->is_compiled()) { | 1891 } else if (shared->is_compiled()) { |
| 1846 // TODO(mvstanton): pass pretenure flag to EnsureLiterals. | 1892 // TODO(mvstanton): pass pretenure flag to EnsureLiterals. |
| 1847 JSFunction::EnsureLiterals(function); | 1893 JSFunction::EnsureLiterals(function); |
| 1848 } | 1894 } |
| 1849 } | 1895 } |
| 1850 | 1896 |
| 1851 } // namespace internal | 1897 } // namespace internal |
| 1852 } // namespace v8 | 1898 } // namespace v8 |
| OLD | NEW |