1// Copyright 2015 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// Flags: --expose-debug-as debug --harmony-proxies 6 7Debug = debug.Debug 8 9var exception = null; 10var log = []; 11 12function listener(event, exec_state, event_data, data) { 13 if (event != Debug.DebugEvent.Break) return; 14 try { 15 print(event_data.sourceLineText()); 16 var entry = ""; 17 for (var i = 0; i < exec_state.frameCount(); i++) { 18 entry += exec_state.frame(i).sourceLineText().substr(-1); 19 entry += exec_state.frame(i).sourceColumn(); 20 } 21 log.push(entry); 22 exec_state.prepareStep(Debug.StepAction.StepIn); 23 } catch (e) { 24 exception = e; 25 } 26}; 27 28var target = {}; 29var handler = { 30 has: function(target, name) { 31 return true; // h 32 }, // i 33 get: function(target, name) { 34 return 42; // j 35 }, // k 36 set: function(target, name, value) { 37 return false; // l 38 }, // m 39 enumerate: function(target) { 40 function* keys() { // n 41 yield "foo"; // o 42 yield "bar"; // p 43 } // q 44 return keys(); // r 45 }, // s 46} 47 48var proxy = new Proxy(target, handler); 49 50Debug.setListener(listener); 51debugger; // a 52var has = "step" in proxy; // b 53var get = proxy.step; // c 54proxy.step = 43; // d 55for (var i in proxy) { // e 56 log.push(i); // f 57} 58 59Debug.setListener(null); // g 60 61assertNull(exception); 62assertTrue(has); 63assertEquals(42, get); 64 65assertEquals([ 66 "a0", 67 "b0", "h4b20", "i2b20", // [[Has]] 68 "c0", "j4c15", "k2c15", // [[Get]] 69 "d0", "l4d11", "m2d11", // [[Set]] 70 "e14", "r4e14", "q4r11e14", "s2e14", // for-in [[Enumerate]] 71 "o6e14", "q4e14", "p6e14", "q4e14", "q4e14", // exhaust iterator 72 "e9", // for-in-body 73 "h4e9","i2e9", // [[Has]] property 74 "f2","foo", "e9", // for-in-body 75 "h4e9","i2e9", // [[Has]]property 76 "f2","bar", "e9", // for-in-body 77 "g0" 78], log); 79