| // Copyright 2015 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. | |
| Debug = debug.Debug | |
| var exception = null; | |
| var log = []; | |
| function listener(event, exec_state, event_data, data) { | |
| if (event != Debug.DebugEvent.Break) return; | |
| try { | |
| print(event_data.sourceLineText()); | |
| var entry = ""; | |
| for (var i = 0; i < exec_state.frameCount(); i++) { | |
| entry += exec_state.frame(i).sourceLineText().substr(-1); | |
| entry += exec_state.frame(i).sourceColumn(); | |
| } | |
| log.push(entry); | |
| exec_state.prepareStep(Debug.StepAction.StepIn); | |
| } catch (e) { | |
| exception = e; | |
| } | |
| }; | |
| var target = {}; | |
| var handler = { | |
| has: function(target, name) { | |
| return true; // h | |
| }, // i | |
| get: function(target, name) { | |
| return 42; // j | |
| }, // k | |
| set: function(target, name, value) { | |
| return false; // l | |
| }, // m | |
| } | |
| var proxy = new Proxy(target, handler); | |
| Debug.setListener(listener); | |
| debugger; // a | |
| var has = "step" in proxy; // b | |
| var get = proxy.step; // c | |
| proxy.step = 43; // d | |
| Debug.setListener(null); // g | |
| assertNull(exception); | |
| assertTrue(has); | |
| assertEquals(42, get); | |
| assertEquals([ | |
| "a0", | |
| "b10", "h4b17", "h16b17", // [[Has]] | |
| "c10", "j4c16", "j14c16", // [[Get]] | |
| "d0", "l4d11", "l17d11", // [[Set]] | |
| "g0" | |
| ], log); |