Commit 3247a71c authored by yangguo@chromium.org's avatar yangguo@chromium.org

Do not unnecessarily expose execution state in debug event data.

When we fire a debug event, we create duplicate execution state objects,
one as argument for the debug event listener, one as property on the
debug event data object. The latter is never used by chrome.

R=yurys@chromium.org

Review URL: https://codereview.chromium.org/355793002

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22001 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 50cc3a5b
...@@ -986,44 +986,39 @@ ExecutionState.prototype.debugCommandProcessor = function(opt_is_running) { ...@@ -986,44 +986,39 @@ ExecutionState.prototype.debugCommandProcessor = function(opt_is_running) {
}; };
function MakeBreakEvent(exec_state, break_points_hit) { function MakeBreakEvent(break_id, break_points_hit) {
return new BreakEvent(exec_state, break_points_hit); return new BreakEvent(break_id, break_points_hit);
} }
function BreakEvent(exec_state, break_points_hit) { function BreakEvent(break_id, break_points_hit) {
this.exec_state_ = exec_state; this.frame_ = new FrameMirror(break_id, 0);
this.break_points_hit_ = break_points_hit; this.break_points_hit_ = break_points_hit;
} }
BreakEvent.prototype.executionState = function() {
return this.exec_state_;
};
BreakEvent.prototype.eventType = function() { BreakEvent.prototype.eventType = function() {
return Debug.DebugEvent.Break; return Debug.DebugEvent.Break;
}; };
BreakEvent.prototype.func = function() { BreakEvent.prototype.func = function() {
return this.exec_state_.frame(0).func(); return this.frame_.func();
}; };
BreakEvent.prototype.sourceLine = function() { BreakEvent.prototype.sourceLine = function() {
return this.exec_state_.frame(0).sourceLine(); return this.frame_.sourceLine();
}; };
BreakEvent.prototype.sourceColumn = function() { BreakEvent.prototype.sourceColumn = function() {
return this.exec_state_.frame(0).sourceColumn(); return this.frame_.sourceColumn();
}; };
BreakEvent.prototype.sourceLineText = function() { BreakEvent.prototype.sourceLineText = function() {
return this.exec_state_.frame(0).sourceLineText(); return this.frame_.sourceLineText();
}; };
...@@ -1036,8 +1031,7 @@ BreakEvent.prototype.toJSONProtocol = function() { ...@@ -1036,8 +1031,7 @@ BreakEvent.prototype.toJSONProtocol = function() {
var o = { seq: next_response_seq++, var o = { seq: next_response_seq++,
type: "event", type: "event",
event: "break", event: "break",
body: { invocationText: this.exec_state_.frame(0).invocationText(), body: { invocationText: this.frame_.invocationText() }
}
}; };
// Add script related information to the event if available. // Add script related information to the event if available.
...@@ -1070,24 +1064,19 @@ BreakEvent.prototype.toJSONProtocol = function() { ...@@ -1070,24 +1064,19 @@ BreakEvent.prototype.toJSONProtocol = function() {
}; };
function MakeExceptionEvent(exec_state, exception, uncaught, promise) { function MakeExceptionEvent(break_id, exception, uncaught, promise) {
return new ExceptionEvent(exec_state, exception, uncaught, promise); return new ExceptionEvent(break_id, exception, uncaught, promise);
} }
function ExceptionEvent(exec_state, exception, uncaught, promise) { function ExceptionEvent(break_id, exception, uncaught, promise) {
this.exec_state_ = exec_state; this.exec_state_ = new ExecutionState(break_id);
this.exception_ = exception; this.exception_ = exception;
this.uncaught_ = uncaught; this.uncaught_ = uncaught;
this.promise_ = promise; this.promise_ = promise;
} }
ExceptionEvent.prototype.executionState = function() {
return this.exec_state_;
};
ExceptionEvent.prototype.eventType = function() { ExceptionEvent.prototype.eventType = function() {
return Debug.DebugEvent.Exception; return Debug.DebugEvent.Exception;
}; };
...@@ -1154,23 +1143,17 @@ ExceptionEvent.prototype.toJSONProtocol = function() { ...@@ -1154,23 +1143,17 @@ ExceptionEvent.prototype.toJSONProtocol = function() {
}; };
function MakeCompileEvent(exec_state, script, before) { function MakeCompileEvent(script, before) {
return new CompileEvent(exec_state, script, before); return new CompileEvent(script, before);
} }
function CompileEvent(exec_state, script, before) { function CompileEvent(script, before) {
this.exec_state_ = exec_state;
this.script_ = MakeMirror(script); this.script_ = MakeMirror(script);
this.before_ = before; this.before_ = before;
} }
CompileEvent.prototype.executionState = function() {
return this.exec_state_;
};
CompileEvent.prototype.eventType = function() { CompileEvent.prototype.eventType = function() {
if (this.before_) { if (this.before_) {
return Debug.DebugEvent.BeforeCompile; return Debug.DebugEvent.BeforeCompile;
...@@ -1200,13 +1183,12 @@ CompileEvent.prototype.toJSONProtocol = function() { ...@@ -1200,13 +1183,12 @@ CompileEvent.prototype.toJSONProtocol = function() {
}; };
function MakeScriptCollectedEvent(exec_state, id) { function MakeScriptCollectedEvent(id) {
return new ScriptCollectedEvent(exec_state, id); return new ScriptCollectedEvent(id);
} }
function ScriptCollectedEvent(exec_state, id) { function ScriptCollectedEvent(id) {
this.exec_state_ = exec_state;
this.id_ = id; this.id_ = id;
} }
...@@ -1216,11 +1198,6 @@ ScriptCollectedEvent.prototype.id = function() { ...@@ -1216,11 +1198,6 @@ ScriptCollectedEvent.prototype.id = function() {
}; };
ScriptCollectedEvent.prototype.executionState = function() {
return this.exec_state_;
};
ScriptCollectedEvent.prototype.toJSONProtocol = function() { ScriptCollectedEvent.prototype.toJSONProtocol = function() {
var o = new ProtocolMessage(); var o = new ProtocolMessage();
o.running = true; o.running = true;
......
...@@ -2534,10 +2534,9 @@ MaybeHandle<Object> Debug::MakeExecutionState() { ...@@ -2534,10 +2534,9 @@ MaybeHandle<Object> Debug::MakeExecutionState() {
MaybeHandle<Object> Debug::MakeBreakEvent(Handle<Object> break_points_hit) { MaybeHandle<Object> Debug::MakeBreakEvent(Handle<Object> break_points_hit) {
Handle<Object> exec_state;
if (!MakeExecutionState().ToHandle(&exec_state)) return MaybeHandle<Object>();
// Create the new break event object. // Create the new break event object.
Handle<Object> argv[] = { exec_state, break_points_hit }; Handle<Object> argv[] = { isolate_->factory()->NewNumberFromInt(break_id()),
break_points_hit };
return MakeJSObject("MakeBreakEvent", ARRAY_SIZE(argv), argv); return MakeJSObject("MakeBreakEvent", ARRAY_SIZE(argv), argv);
} }
...@@ -2545,10 +2544,8 @@ MaybeHandle<Object> Debug::MakeBreakEvent(Handle<Object> break_points_hit) { ...@@ -2545,10 +2544,8 @@ MaybeHandle<Object> Debug::MakeBreakEvent(Handle<Object> break_points_hit) {
MaybeHandle<Object> Debug::MakeExceptionEvent(Handle<Object> exception, MaybeHandle<Object> Debug::MakeExceptionEvent(Handle<Object> exception,
bool uncaught, bool uncaught,
Handle<Object> promise) { Handle<Object> promise) {
Handle<Object> exec_state;
if (!MakeExecutionState().ToHandle(&exec_state)) return MaybeHandle<Object>();
// Create the new exception event object. // Create the new exception event object.
Handle<Object> argv[] = { exec_state, Handle<Object> argv[] = { isolate_->factory()->NewNumberFromInt(break_id()),
exception, exception,
isolate_->factory()->ToBoolean(uncaught), isolate_->factory()->ToBoolean(uncaught),
promise }; promise };
...@@ -2558,23 +2555,18 @@ MaybeHandle<Object> Debug::MakeExceptionEvent(Handle<Object> exception, ...@@ -2558,23 +2555,18 @@ MaybeHandle<Object> Debug::MakeExceptionEvent(Handle<Object> exception,
MaybeHandle<Object> Debug::MakeCompileEvent(Handle<Script> script, MaybeHandle<Object> Debug::MakeCompileEvent(Handle<Script> script,
bool before) { bool before) {
Handle<Object> exec_state;
if (!MakeExecutionState().ToHandle(&exec_state)) return MaybeHandle<Object>();
// Create the compile event object. // Create the compile event object.
Handle<Object> script_wrapper = Script::GetWrapper(script); Handle<Object> script_wrapper = Script::GetWrapper(script);
Handle<Object> argv[] = { exec_state, Handle<Object> argv[] = { script_wrapper,
script_wrapper,
isolate_->factory()->ToBoolean(before) }; isolate_->factory()->ToBoolean(before) };
return MakeJSObject("MakeCompileEvent", ARRAY_SIZE(argv), argv); return MakeJSObject("MakeCompileEvent", ARRAY_SIZE(argv), argv);
} }
MaybeHandle<Object> Debug::MakeScriptCollectedEvent(int id) { MaybeHandle<Object> Debug::MakeScriptCollectedEvent(int id) {
Handle<Object> exec_state;
if (!MakeExecutionState().ToHandle(&exec_state)) return MaybeHandle<Object>();
// Create the script collected event object. // Create the script collected event object.
Handle<Object> id_object = Handle<Smi>(Smi::FromInt(id), isolate_); Handle<Object> id_object = Handle<Smi>(Smi::FromInt(id), isolate_);
Handle<Object> argv[] = { exec_state, id_object }; Handle<Object> argv[] = { id_object };
return MakeJSObject("MakeScriptCollectedEvent", ARRAY_SIZE(argv), argv); return MakeJSObject("MakeScriptCollectedEvent", ARRAY_SIZE(argv), argv);
} }
......
// Copyright 2014 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --allow-natives-syntax --crankshaft
function f() {};
f();
f();
%OptimizeFunctionOnNextCall(f);
f();
assertOptimized(f);
assertThrows(function() { assertUnoptimized(f); });
%DeoptimizeFunction(f);
assertUnoptimized(f);
assertThrows(function() { assertOptimized(f); });
quit(); // Prevent stress runs.
...@@ -259,7 +259,6 @@ ...@@ -259,7 +259,6 @@
'big-array-literal': [SKIP], 'big-array-literal': [SKIP],
'big-object-literal': [SKIP], 'big-object-literal': [SKIP],
'regress/regress-crbug-178790': [SKIP], 'regress/regress-crbug-178790': [SKIP],
'mjsunit-assertoptimized': [SKIP],
}], # 'asan == True' }], # 'asan == True'
############################################################################## ##############################################################################
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment