Commit a35616e3 authored by yangguo's avatar yangguo Committed by Commit bot

[debug] add more tests for side-effect free debug-evaluate.

R=jgruber@chromium.org
BUG=v8:5821

Review-Url: https://codereview.chromium.org/2720013003
Cr-Commit-Position: refs/heads/master@{#43487}
parent 6477f077
......@@ -504,7 +504,12 @@ bool BuiltinHasNoSideEffect(Builtins::Name id) {
static const Address accessors_with_no_side_effect[] = {
// Whitelist for accessors.
FUNCTION_ADDR(Accessors::StringLengthGetter),
FUNCTION_ADDR(Accessors::ArrayLengthGetter)};
FUNCTION_ADDR(Accessors::ArrayLengthGetter),
FUNCTION_ADDR(Accessors::FunctionLengthGetter),
FUNCTION_ADDR(Accessors::FunctionNameGetter),
FUNCTION_ADDR(Accessors::BoundFunctionLengthGetter),
FUNCTION_ADDR(Accessors::BoundFunctionNameGetter),
};
} // anonymous namespace
......
......@@ -17,8 +17,10 @@ var array = [4, 5];
var error = new Error();
function set_a() { a = 2; }
function get_a() { return a; }
var bound = get_a.bind(0);
var global_eval = eval;
function listener(event, exec_state, event_data, data) {
if (event != Debug.DebugEvent.Break) return;
......@@ -47,6 +49,8 @@ function listener(event, exec_state, event_data, data) {
success(5, "array[1]");
// Call to read-only function.
success(1, "get_a()");
success(1, "bound()");
success({}, "new get_a()");
// Call to read-only function within try-catch.
success(1, "try { get_a() } catch (e) {}");
// Call to C++ built-in.
......@@ -54,10 +58,16 @@ function listener(event, exec_state, event_data, data) {
// Call to whitelisted get accessors.
success(3, "'abc'.length");
success(2, "array.length");
success(1, "'x'.length");
success(0, "set_a.length");
success("set_a", "set_a.name");
success(0, "bound.length");
success("bound get_a", "bound.name");
// Test that non-read-only code fails.
fail("exception = 1");
// Test that calling a non-read-only function fails.
fail("set_a()");
fail("new set_a()");
// Test that implicit call to a non-read-only function fails.
fail("string2 + 'y'");
// Test that try-catch does not catch the EvalError.
......@@ -66,6 +76,10 @@ function listener(event, exec_state, event_data, data) {
fail("array.length = 4");
// Test that call to non-whitelisted get accessor fails.
fail("error.stack");
// Eval is not allowed.
fail("eval('Math.sin(1)')");
fail("eval('exception = 1')");
fail("global_eval('1')");
} catch (e) {
exception = e;
print(e, e.stack);
......
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