| Index: include/v8.h
|
| diff --git a/include/v8.h b/include/v8.h
|
| index 4ff5830115c2b8737a679b368fa97497808b7c2f..02942b6f5c69a1c7c38282e57f8cb8c4ce52f597 100644
|
| --- a/include/v8.h
|
| +++ b/include/v8.h
|
| @@ -1097,25 +1097,52 @@ class V8_EXPORT ScriptCompiler {
|
| * 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) {}
|
| + enum BufferPolicy {
|
| + BufferNotOwned,
|
| + BufferOwned
|
| + };
|
| +
|
| + CachedData() : data(NULL), length(0), buffer_policy(BufferNotOwned) {}
|
| +
|
| + // If buffer_policy is BufferNotOwned, the caller keeps the ownership of
|
| + // data and guarantees that it stays alive until the CachedData object is
|
| + // destroyed. If the policy is BufferOwned, the given data will be deleted
|
| + // (with delete[]) when the CachedData object is destroyed.
|
| + CachedData(const uint8_t* data, int length,
|
| + BufferPolicy buffer_policy = BufferNotOwned);
|
| + ~CachedData();
|
| // 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;
|
| + BufferPolicy buffer_policy;
|
| +
|
| + private:
|
| + // Prevent copying. Not implemented.
|
| + CachedData(const CachedData&);
|
| };
|
|
|
| /**
|
| * Source code which can be then compiled to a UnboundScript or
|
| * BoundScript.
|
| */
|
| - struct V8_EXPORT Source {
|
| + class V8_EXPORT Source {
|
| + public:
|
| + // Source takes ownership of CachedData.
|
| Source(Local<String> source_string, const ScriptOrigin& origin,
|
| - const CachedData& cached_data = CachedData());
|
| - Source(Local<String> source_string,
|
| - const CachedData& cached_data = CachedData());
|
| + CachedData* cached_data = NULL);
|
| + Source(Local<String> source_string, CachedData* cached_data = NULL);
|
| + ~Source();
|
| +
|
| + // Ownership of the CachedData or its buffers is *not* transferred to the
|
| + // caller. The CachedData object is alive as long as the Source object is
|
| + // alive.
|
| + const CachedData* GetCachedData() const;
|
| +
|
| + private:
|
| + friend class ScriptCompiler;
|
| + // Prevent copying. Not implemented.
|
| + Source(const Source&);
|
|
|
| Local<String> source_string;
|
|
|
| @@ -1125,8 +1152,10 @@ class V8_EXPORT ScriptCompiler {
|
| Handle<Integer> resource_column_offset;
|
| Handle<Boolean> resource_is_shared_cross_origin;
|
|
|
| - // Cached data from previous compilation (if any).
|
| - CachedData cached_data;
|
| + // Cached data from previous compilation (if any), or generated during
|
| + // compilation (if the generate_cached_data flag is passed to
|
| + // ScriptCompiler).
|
| + CachedData* cached_data;
|
| };
|
|
|
| enum CompileOptions {
|
| @@ -1142,7 +1171,7 @@ class V8_EXPORT ScriptCompiler {
|
| * bound to a context).
|
| */
|
| static Local<UnboundScript> CompileUnbound(
|
| - Isolate* isolate, const Source& source,
|
| + Isolate* isolate, Source* source,
|
| CompileOptions options = kNoCompileOptions);
|
|
|
| /**
|
| @@ -1157,7 +1186,7 @@ class V8_EXPORT ScriptCompiler {
|
| * context.
|
| */
|
| static Local<Script> Compile(
|
| - Isolate* isolate, const Source& source,
|
| + Isolate* isolate, Source* source,
|
| CompileOptions options = kNoCompileOptions);
|
| };
|
|
|
|
|