Home | History | Annotate | Download | only in harmony
      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 
      7 Debug = debug.Debug
      8 
      9 var exception = null;
     10 var log = [];
     11 
     12 function 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 
     28 var target = {};
     29 var 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 
     48 var proxy = new Proxy(target, handler);
     49 
     50 Debug.setListener(listener);
     51 debugger;                            // a
     52 var has = "step" in proxy;           // b
     53 var get = proxy.step;                // c
     54 proxy.step = 43;                     // d
     55 for (var i in proxy) {               // e
     56   log.push(i);                       // f
     57 }
     58 
     59 Debug.setListener(null);             // g
     60 
     61 assertNull(exception);
     62 assertTrue(has);
     63 assertEquals(42, get);
     64 
     65 assertEquals([
     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