| Index: src/compiler.h
|
| diff --git a/src/compiler.h b/src/compiler.h
|
| index 3efbd6ebb6832657efdbdfb4bd380887378e9996..b1e96391788e8a031fdda22e3843b24648cb3021 100644
|
| --- a/src/compiler.h
|
| +++ b/src/compiler.h
|
| @@ -9,7 +9,6 @@
|
| #include "src/ast/ast.h"
|
| #include "src/bailout-reason.h"
|
| #include "src/compilation-dependencies.h"
|
| -#include "src/signature.h"
|
| #include "src/source-position.h"
|
| #include "src/zone.h"
|
|
|
| @@ -17,10 +16,107 @@ namespace v8 {
|
| namespace internal {
|
|
|
| // Forward declarations.
|
| +class CompilationInfo;
|
| class JavaScriptFrame;
|
| +class OptimizedCompileJob;
|
| class ParseInfo;
|
| class ScriptData;
|
|
|
| +// The V8 compiler API.
|
| +//
|
| +// This is the central hub for dispatching to the various compilers within V8.
|
| +// Logic for which compiler to choose and how to wire compilation results into
|
| +// the object heap should be kept inside this class.
|
| +//
|
| +// General strategy: Scripts are translated into anonymous functions w/o
|
| +// parameters which then can be executed. If the source code contains other
|
| +// functions, they might be compiled and allocated as part of the compilation
|
| +// of the source code or deferred for lazy compilation at a later point.
|
| +class Compiler : public AllStatic {
|
| + public:
|
| + enum ClearExceptionFlag { KEEP_EXCEPTION, CLEAR_EXCEPTION };
|
| + enum ConcurrencyMode { NOT_CONCURRENT, CONCURRENT };
|
| +
|
| + // ===========================================================================
|
| + // The following family of methods ensures a given function is compiled. The
|
| + // general contract is that failures will be reported by returning {false},
|
| + // whereas successful compilation ensures the {is_compiled} predicate on the
|
| + // given function holds (except for live-edit, which compiles the world).
|
| +
|
| + static bool Compile(Handle<JSFunction> function, ClearExceptionFlag flag);
|
| + static bool CompileOptimized(Handle<JSFunction> function, ConcurrencyMode);
|
| + static bool CompileDebugCode(Handle<JSFunction> function);
|
| + static bool CompileDebugCode(Handle<SharedFunctionInfo> shared);
|
| + static void CompileForLiveEdit(Handle<Script> script);
|
| +
|
| + // Generate and install code from previously queued optimization job.
|
| + static void FinalizeOptimizedCompileJob(OptimizedCompileJob* job);
|
| +
|
| + // Give the compiler a chance to perform low-latency initialization tasks of
|
| + // the given {function} on its instantiation. Note that only the runtime will
|
| + // offer this chance, optimized closure instantiation will not call this.
|
| + static void PostInstantiation(Handle<JSFunction> function, PretenureFlag);
|
| +
|
| + // Parser::Parse, then Compiler::Analyze.
|
| + static bool ParseAndAnalyze(ParseInfo* info);
|
| + // Rewrite, analyze scopes, and renumber.
|
| + static bool Analyze(ParseInfo* info);
|
| + // Adds deoptimization support, requires ParseAndAnalyze.
|
| + static bool EnsureDeoptimizationSupport(CompilationInfo* info);
|
| +
|
| + // ===========================================================================
|
| + // The following family of methods instantiates new functions for scripts or
|
| + // function literals. The decision whether those functions will be compiled,
|
| + // is left to the discretion of the compiler.
|
| + //
|
| + // Please note this interface returns shared function infos. This means you
|
| + // need to call Factory::NewFunctionFromSharedFunctionInfo before you have a
|
| + // real function with a context.
|
| +
|
| + // Create a (bound) function for a String source within a context for eval.
|
| + MUST_USE_RESULT static MaybeHandle<JSFunction> GetFunctionFromEval(
|
| + Handle<String> source, Handle<SharedFunctionInfo> outer_info,
|
| + Handle<Context> context, LanguageMode language_mode,
|
| + ParseRestriction restriction, int line_offset, int column_offset = 0,
|
| + Handle<Object> script_name = Handle<Object>(),
|
| + ScriptOriginOptions options = ScriptOriginOptions());
|
| +
|
| + // Create a shared function info object for a String source within a context.
|
| + static Handle<SharedFunctionInfo> GetSharedFunctionInfoForScript(
|
| + Handle<String> source, Handle<Object> script_name, int line_offset,
|
| + int column_offset, ScriptOriginOptions resource_options,
|
| + Handle<Object> source_map_url, Handle<Context> context,
|
| + v8::Extension* extension, ScriptData** cached_data,
|
| + ScriptCompiler::CompileOptions compile_options,
|
| + NativesFlag is_natives_code, bool is_module);
|
| +
|
| + // Create a shared function info object for a Script that has already been
|
| + // parsed while the script was being loaded from a streamed source.
|
| + static Handle<SharedFunctionInfo> GetSharedFunctionInfoForStreamedScript(
|
| + Handle<Script> script, ParseInfo* info, int source_length);
|
| +
|
| + // Create a shared function info object (the code may be lazily compiled).
|
| + static Handle<SharedFunctionInfo> GetSharedFunctionInfo(
|
| + FunctionLiteral* node, Handle<Script> script, CompilationInfo* outer);
|
| +
|
| + // Create a shared function info object for a native function literal.
|
| + static Handle<SharedFunctionInfo> GetSharedFunctionInfoForNative(
|
| + v8::Extension* extension, Handle<String> name);
|
| +
|
| + // ===========================================================================
|
| + // The following family of methods provides support for OSR. Code generated
|
| + // for entry via OSR might not be suitable for normal entry, hence will be
|
| + // returned directly to the caller.
|
| + //
|
| + // Please note this interface is the only part dealing with {Code} objects
|
| + // directly. Other methods are agnostic to {Code} and can use an interpreter
|
| + // instead of generating JIT code for a function at all.
|
| +
|
| + // Generate and return optimized code for OSR, or empty handle on failure.
|
| + MUST_USE_RESULT static MaybeHandle<Code> GetOptimizedCodeForOSR(
|
| + Handle<JSFunction> function, BailoutId osr_ast_id,
|
| + JavaScriptFrame* osr_frame);
|
| +};
|
|
|
| struct InlinedFunctionInfo {
|
| InlinedFunctionInfo(int parent_id, SourcePosition inline_position,
|
| @@ -561,101 +657,6 @@ class OptimizedCompileJob: public ZoneObject {
|
| };
|
| };
|
|
|
| -// The V8 compiler API.
|
| -//
|
| -// This is the central hub for dispatching to the various compilers within V8.
|
| -// Logic for which compiler to choose and how to wire compilation results into
|
| -// the object heap should be kept inside this class.
|
| -//
|
| -// General strategy: Source code is translated into an anonymous function w/o
|
| -// parameters which then can be executed. If the source code contains other
|
| -// functions, they might be compiled and allocated as part of the compilation
|
| -// of the source code or deferred for lazy compilation at a later point.
|
| -class Compiler : public AllStatic {
|
| - public:
|
| - enum ClearExceptionFlag { KEEP_EXCEPTION, CLEAR_EXCEPTION };
|
| - enum ConcurrencyMode { NOT_CONCURRENT, CONCURRENT };
|
| -
|
| - // ===========================================================================
|
| - // The following family of methods ensures a given function is compiled. The
|
| - // general contract is that failures will be reported by returning {false},
|
| - // whereas successful compilation ensures the {is_compiled} predicate on the
|
| - // given function holds.
|
| -
|
| - static bool Compile(Handle<JSFunction> function, ClearExceptionFlag flag);
|
| - static bool CompileOptimized(Handle<JSFunction> function, ConcurrencyMode);
|
| - static bool CompileDebugCode(Handle<JSFunction> function);
|
| - static bool CompileDebugCode(Handle<SharedFunctionInfo> shared);
|
| - static void CompileForLiveEdit(Handle<Script> script);
|
| -
|
| - // Generate and install code from previously queued optimization job.
|
| - static void FinalizeOptimizedCompileJob(OptimizedCompileJob* job);
|
| -
|
| - // Give the compiler a chance to perform low-latency initialization tasks of
|
| - // the given {function} on its instantiation. Note that only the runtime will
|
| - // offer this chance, optimized closure instantiation will not call this.
|
| - static void PostInstantiation(Handle<JSFunction> function, PretenureFlag);
|
| -
|
| - // Parser::Parse, then Compiler::Analyze.
|
| - static bool ParseAndAnalyze(ParseInfo* info);
|
| - // Rewrite, analyze scopes, and renumber.
|
| - static bool Analyze(ParseInfo* info);
|
| - // Adds deoptimization support, requires ParseAndAnalyze.
|
| - static bool EnsureDeoptimizationSupport(CompilationInfo* info);
|
| -
|
| - // ===========================================================================
|
| - // The following family of methods instantiates new functions for script or
|
| - // function literals. The decision whether those functions have been compiled
|
| - // is left to the discretion of the compiler.
|
| - //
|
| - // Please note this interface returns shared function infos. This means you
|
| - // need to call Factory::NewFunctionFromSharedFunctionInfo before you have a
|
| - // real function with a context.
|
| -
|
| - // Compile a String source within a context for eval.
|
| - MUST_USE_RESULT static MaybeHandle<JSFunction> GetFunctionFromEval(
|
| - Handle<String> source, Handle<SharedFunctionInfo> outer_info,
|
| - Handle<Context> context, LanguageMode language_mode,
|
| - ParseRestriction restriction, int line_offset, int column_offset = 0,
|
| - Handle<Object> script_name = Handle<Object>(),
|
| - ScriptOriginOptions options = ScriptOriginOptions());
|
| -
|
| - // Compile a String source within a context.
|
| - static Handle<SharedFunctionInfo> CompileScript(
|
| - Handle<String> source, Handle<Object> script_name, int line_offset,
|
| - int column_offset, ScriptOriginOptions resource_options,
|
| - Handle<Object> source_map_url, Handle<Context> context,
|
| - v8::Extension* extension, ScriptData** cached_data,
|
| - ScriptCompiler::CompileOptions compile_options,
|
| - NativesFlag is_natives_code, bool is_module);
|
| -
|
| - static Handle<SharedFunctionInfo> CompileStreamedScript(Handle<Script> script,
|
| - ParseInfo* info,
|
| - int source_length);
|
| -
|
| - // Create a shared function info object (the code may be lazily compiled).
|
| - static Handle<SharedFunctionInfo> GetSharedFunctionInfo(
|
| - FunctionLiteral* node, Handle<Script> script, CompilationInfo* outer);
|
| -
|
| - // Create a shared function info object for a native function literal.
|
| - static Handle<SharedFunctionInfo> GetSharedFunctionInfoForNative(
|
| - v8::Extension* extension, Handle<String> name);
|
| -
|
| - // ===========================================================================
|
| - // The following family of methods provides support for OSR. Code generated
|
| - // for entry via OSR might not be suitable for normal entry, hence will be
|
| - // returned directly to the caller.
|
| - //
|
| - // Please note this interface is the only part dealing with {Code} objects
|
| - // directly. Other methods are agnostic to {Code} and can use an interpreter
|
| - // instead of generating JIT code for a function at all.
|
| -
|
| - // Generate and return optimized code for OSR, or empty handle on failure.
|
| - MUST_USE_RESULT static MaybeHandle<Code> GetOptimizedCodeForOSR(
|
| - Handle<JSFunction> function, BailoutId osr_ast_id,
|
| - JavaScriptFrame* osr_frame);
|
| -};
|
| -
|
| } // namespace internal
|
| } // namespace v8
|
|
|
|
|