| Index: src/liveedit.cc
|
| diff --git a/src/liveedit.cc b/src/liveedit.cc
|
| index cfd2e357cc63abb6974b33796a4f1afe336649a0..ecbc115301172c0cbd5d2b0d4bdb5ac1b6b89a0b 100644
|
| --- a/src/liveedit.cc
|
| +++ b/src/liveedit.cc
|
| @@ -398,31 +398,16 @@ Handle<JSArray> LiveEdit::CompareStringsLinewise(Handle<String> s1,
|
|
|
|
|
| static void CompileScriptForTracker(Handle<Script> script) {
|
| - const bool is_eval = false;
|
| - const bool is_global = true;
|
| // TODO(635): support extensions.
|
| - Extension* extension = NULL;
|
| -
|
| PostponeInterruptsScope postpone;
|
|
|
| - // Only allow non-global compiles for eval.
|
| - ASSERT(is_eval || is_global);
|
| -
|
| // Build AST.
|
| - ScriptDataImpl* pre_data = NULL;
|
| - EagerCompilationInfo info(script, is_eval);
|
| - FunctionLiteral* lit =
|
| - Parser::MakeAST(is_global, script, extension, pre_data);
|
| -
|
| - // Check for parse errors.
|
| - if (lit == NULL) {
|
| - ASSERT(Top::has_pending_exception());
|
| - return;
|
| - }
|
| - info.set_function(lit);
|
| + CompilationInfo info(script);
|
| + info.MarkAsGlobal();
|
| + if (!Parser::Parse(&info)) return;
|
|
|
| // Compile the code.
|
| - LiveEditFunctionTracker tracker(lit);
|
| + LiveEditFunctionTracker tracker(info.function());
|
| Handle<Code> code = MakeCodeForLiveEdit(&info);
|
|
|
| // Check for stack-overflow exceptions.
|
| @@ -433,11 +418,13 @@ static void CompileScriptForTracker(Handle<Script> script) {
|
| tracker.RecordRootFunctionInfo(code);
|
| }
|
|
|
| +
|
| // Unwraps JSValue object, returning its field "value"
|
| static Handle<Object> UnwrapJSValue(Handle<JSValue> jsValue) {
|
| return Handle<Object>(jsValue->value());
|
| }
|
|
|
| +
|
| // Wraps any object into a OpaqueReference, that will hide the object
|
| // from JavaScript.
|
| static Handle<JSValue> WrapInJSValue(Object* object) {
|
| @@ -448,6 +435,7 @@ static Handle<JSValue> WrapInJSValue(Object* object) {
|
| return result;
|
| }
|
|
|
| +
|
| // Simple helper class that creates more or less typed structures over
|
| // JSArray object. This is an adhoc method of passing structures from C++
|
| // to JavaScript.
|
| @@ -468,6 +456,7 @@ class JSArrayBasedStruct {
|
| Handle<JSArray> GetJSArray() {
|
| return array_;
|
| }
|
| +
|
| protected:
|
| void SetField(int field_position, Handle<Object> value) {
|
| SetElement(array_, field_position, value);
|
| @@ -482,6 +471,7 @@ class JSArrayBasedStruct {
|
| Object* res = GetField(field_position);
|
| return Smi::cast(res)->value();
|
| }
|
| +
|
| private:
|
| Handle<JSArray> array_;
|
| };
|
| @@ -554,6 +544,7 @@ class FunctionInfoWrapper : public JSArrayBasedStruct<FunctionInfoWrapper> {
|
| friend class JSArrayBasedStruct<FunctionInfoWrapper>;
|
| };
|
|
|
| +
|
| // Wraps SharedFunctionInfo along with some of its fields for passing it
|
| // back to JavaScript. SharedFunctionInfo object itself is additionally
|
| // wrapped into BlindReference for sanitizing reasons.
|
| @@ -594,6 +585,7 @@ class SharedInfoWrapper : public JSArrayBasedStruct<SharedInfoWrapper> {
|
| friend class JSArrayBasedStruct<SharedInfoWrapper>;
|
| };
|
|
|
| +
|
| class FunctionInfoListener {
|
| public:
|
| FunctionInfoListener() {
|
| @@ -620,7 +612,6 @@ class FunctionInfoListener {
|
| current_parent_index_ = info.GetParentIndex();
|
| }
|
|
|
| - public:
|
| // Saves only function code, because for a script function we
|
| // may never create a SharedFunctionInfo object.
|
| void FunctionCode(Handle<Code> function_code) {
|
| @@ -708,6 +699,7 @@ class FunctionInfoListener {
|
| int current_parent_index_;
|
| };
|
|
|
| +
|
| static FunctionInfoListener* active_function_info_listener = NULL;
|
|
|
| JSArray* LiveEdit::GatherCompileInfo(Handle<Script> script,
|
|
|