Index: include/v8.h |
diff --git a/include/v8.h b/include/v8.h |
index 9bda3dc9faa7bfa79190c1483345d93057120349..5bc9bf827ce0d733cc617f946dc6b6d7d5fdb2af 100644 |
--- a/include/v8.h |
+++ b/include/v8.h |
@@ -108,6 +108,7 @@ class ObjectTemplate; |
class Platform; |
class Primitive; |
class RawOperationDescriptor; |
+class Script; |
class Signature; |
class StackFrame; |
class StackTrace; |
@@ -1146,95 +1147,153 @@ class ScriptOrigin { |
/** |
- * A compiled JavaScript script. |
+ * A compiled JavaScript script, not yet tied to a Context. |
*/ |
-class V8_EXPORT Script { |
+class V8_EXPORT UnboundScript { |
public: |
/** |
- * Compiles the specified script (context-independent). |
- * |
- * \param source Script source code. |
- * \param origin Script origin, owned by caller, no references are kept |
- * when New() returns |
- * \param pre_data Pre-parsing data, as obtained by ScriptData::PreCompile() |
- * using pre_data speeds compilation if it's done multiple times. |
- * Owned by caller, no references are kept when New() returns. |
- * \return Compiled script object (context independent; when run it |
- * will use the currently entered context). |
+ * Binds the script to the currently entered context. |
*/ |
- static Local<Script> New(Handle<String> source, |
- ScriptOrigin* origin = NULL, |
- ScriptData* pre_data = NULL); |
+ Local<Script> BindToCurrentContext(); |
+ |
+ int GetId(); |
+ Handle<Value> GetScriptName(); |
/** |
- * Compiles the specified script using the specified file name |
- * object (typically a string) as the script's origin. |
- * |
- * \param source Script source code. |
- * \param file_name file name object (typically a string) to be used |
- * as the script's origin. |
- * \return Compiled script object (context independent; when run it |
- * will use the currently entered context). |
+ * Returns zero based line number of the code_pos location in the script. |
+ * -1 will be returned if no information available. |
*/ |
- static Local<Script> New(Handle<String> source, |
- Handle<Value> file_name); |
+ int GetLineNumber(int code_pos); |
+ |
+ static const int kNoScriptId = 0; |
+}; |
+ |
+/** |
+ * A compiled JavaScript script, tied to a Context which was active when the |
+ * script was compiled. |
+ */ |
+class V8_EXPORT Script { |
+ public: |
/** |
- * Compiles the specified script (bound to current context). |
- * |
- * \param source Script source code. |
- * \param origin Script origin, owned by caller, no references are kept |
- * when Compile() returns |
- * \param pre_data Pre-parsing data, as obtained by ScriptData::PreCompile() |
- * using pre_data speeds compilation if it's done multiple times. |
- * Owned by caller, no references are kept when Compile() returns. |
- * \return Compiled script object, bound to the context that was active |
- * when this function was called. When run it will always use this |
- * context. |
+ * A shorthand for ScriptCompiler::CompileBound(). |
*/ |
static Local<Script> Compile(Handle<String> source, |
- ScriptOrigin* origin = NULL, |
- ScriptData* pre_data = NULL); |
+ ScriptOrigin* origin = NULL); |
- /** |
- * Compiles the specified script using the specified file name |
- * object (typically a string) as the script's origin. |
- * |
- * \param source Script source code. |
- * \param file_name File name to use as script's origin |
- * \return Compiled script object, bound to the context that was active |
- * when this function was called. When run it will always use this |
- * context. |
- */ |
+ // To be decprecated, use the Compile above. |
static Local<Script> Compile(Handle<String> source, |
- Handle<Value> file_name); |
+ Handle<String> file_name); |
/** |
- * Runs the script returning the resulting value. If the script is |
- * context independent (created using ::New) it will be run in the |
- * currently entered context. If it is context specific (created |
- * using ::Compile) it will be run in the context in which it was |
- * compiled. |
+ * Runs the script returning the resulting value. It will be run in the |
+ * context in which it was created (ScriptCompiler::CompileBound or |
+ * UnboundScript::BindToGlobalContext()). |
*/ |
Local<Value> Run(); |
/** |
- * Returns the script id. |
+ * Returns the corresponding context-unbound script. |
*/ |
- int GetId(); |
+ Local<UnboundScript> GetUnboundScript(); |
- /** |
- * Returns the name value of one Script. |
- */ |
- Handle<Value> GetScriptName(); |
+ // To be deprecated; use GetUnboundScript()->GetId(); |
+ int GetId() { |
+ return GetUnboundScript()->GetId(); |
+ } |
+ |
+ // Use GetUnboundScript()->GetId(); |
+ V8_DEPRECATED("Use GetUnboundScript()->GetId()", |
+ Handle<Value> GetScriptName()) { |
+ return GetUnboundScript()->GetScriptName(); |
+ } |
/** |
* Returns zero based line number of the code_pos location in the script. |
* -1 will be returned if no information available. |
*/ |
- int GetLineNumber(int code_pos); |
+ V8_DEPRECATED("Use GetUnboundScript()->GetLineNumber()", |
+ int GetLineNumber(int code_pos)) { |
+ return GetUnboundScript()->GetLineNumber(code_pos); |
+ } |
+}; |
- static const int kNoScriptId = 0; |
+ |
+/** |
+ * For compiling scripts. |
+ */ |
+class V8_EXPORT ScriptCompiler { |
+ public: |
+ /** |
+ * Compilation data that the embedder can cache and pass back to speed up |
+ * future compilations. The data is produced if the CompilerOptions passed to |
+ * the compilation functions in ScriptCompiler contains produce_data_to_cache |
+ * = true. The data to cache can then can be retrieved from |
+ * UnboundScript. |
+ */ |
+ struct V8_EXPORT CachedData { |
+ CachedData() : data(NULL), length(0) {} |
+ // Caller keeps the ownership of data and guarantees that the data stays |
+ // alive long enough. |
+ CachedData(const uint8_t* data, int length) : data(data), length(length) {} |
+ // TODO(marja): Async compilation; add constructors which take a callback |
+ // which will be called when V8 no longer needs the data. |
+ const uint8_t* data; |
+ int length; |
+ }; |
+ |
+ /** |
+ * Source code which can be then compiled to a UnboundScript or |
+ * BoundScript. |
+ */ |
+ struct V8_EXPORT Source { |
+ Source(Local<String> source_string, const ScriptOrigin& origin, |
+ const CachedData& cached_data = CachedData()); |
+ Source(Local<String> source_string, |
+ const CachedData& cached_data = CachedData()); |
+ |
+ Local<String> source_string; |
+ |
+ // Origin information |
+ Handle<Value> resource_name; |
+ Handle<Integer> resource_line_offset; |
+ Handle<Integer> resource_column_offset; |
+ Handle<Boolean> resource_is_shared_cross_origin; |
+ |
+ // Cached data from previous compilation (if any). |
+ CachedData cached_data; |
+ }; |
+ |
+ enum CompileOptions { |
+ kNoCompileOptions, |
+ kProduceDataToCache = 1 << 0 |
+ }; |
+ |
+ /** |
+ * Compiles the specified script (context-independent). |
+ * |
+ * \param source Script source code. |
+ * \return Compiled script object (context independent; for running it must be |
+ * bound to a context). |
+ */ |
+ static Local<UnboundScript> CompileUnbound( |
+ Isolate* isolate, const Source& source, |
+ CompileOptions options = kNoCompileOptions); |
+ |
+ /** |
+ * Compiles the specified script (bound to current context). |
+ * |
+ * \param source Script source code. |
+ * \param pre_data Pre-parsing data, as obtained by ScriptData::PreCompile() |
+ * using pre_data speeds compilation if it's done multiple times. |
+ * Owned by caller, no references are kept when this function returns. |
+ * \return Compiled script object, bound to the context that was active |
+ * when this function was called. When run it will always use this |
+ * context. |
+ */ |
+ static Local<Script> Compile( |
+ Isolate* isolate, const Source& source, |
+ CompileOptions options = kNoCompileOptions); |
}; |