Home | History | Annotate | Download | only in mjsunit
      1 // Copyright 2014 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
      6 
      7 function f0() {
      8   var v00 = 0;              // Break 1
      9   var v01 = 1;
     10   // Normal function call in a catch scope.
     11   try {
     12     throw 1;
     13   } catch (e) {
     14     try {
     15       f1();
     16     } catch (e) {
     17       var v02 = 2;          // Break 13
     18     }
     19   }
     20   var v03 = 3;
     21   var v04 = 4;
     22   eval('var v05 = 5;        // Break 14');
     23   var v06 = 6;              // Break 15
     24 }
     25 
     26 function f1() {
     27   var v10 = 0;              // Break 2
     28   var v11 = 1;
     29   // Getter call.
     30   var v12 = o.get;
     31   var v13 = 3               // Break 4
     32   // Setter call.
     33   o.set = 2;
     34   var v14 = 4;              // Break 6
     35   // Function.prototype.call.
     36   f2.call();
     37   var v15 = 5;              // Break 12
     38   var v16 = 6;
     39   // Exit function by throw.
     40   throw 1;
     41   var v17 = 7;
     42 }
     43 
     44 function get() {
     45   var g0 = 0;               // Break 3
     46   var g1 = 1;
     47   return 3;
     48 }
     49 
     50 function set() {
     51   var s0 = 0;               // Break 5
     52   return 3;
     53 }
     54 
     55 function f2() {
     56   var v20 = 0;              // Break 7
     57   // Construct call.
     58   var v21 = new c0();
     59   var v22 = 2;              // Break 9
     60   // Bound function.
     61   b0();
     62   return 2;                 // Break 11
     63 }
     64 
     65 function c0() {
     66   this.v0 = 0;              // Break 8
     67   this.v1 = 1;
     68 }
     69 
     70 function f3() {
     71   var v30 = 0;              // Break 10
     72   var v31 = 1;
     73   return 3;
     74 }
     75 
     76 var b0 = f3.bind(o);
     77 
     78 var o = {};
     79 Object.defineProperty(o, "get", { get : get });
     80 Object.defineProperty(o, "set", { set : set });
     81 
     82 Debug = debug.Debug;
     83 var break_count = 0
     84 var exception = null;
     85 
     86 function listener(event, exec_state, event_data, data) {
     87   if (event != Debug.DebugEvent.Break) return;
     88   try {
     89     var line = exec_state.frame(0).sourceLineText();
     90     print(line);
     91     var match = line.match(/\/\/ Break (\d+)$/);
     92     assertEquals(2, match.length);
     93     assertEquals(break_count, parseInt(match[1]));
     94     break_count ++;
     95     exec_state.prepareStep(Debug.StepAction.StepFrame);
     96   } catch (e) {
     97     print(e + e.stack);
     98     exception = e;
     99   }
    100 }
    101 
    102 
    103 break_count = 0;
    104 Debug.setListener(listener);
    105 debugger;                 // Break 0
    106 f0();
    107 Debug.setListener(null);  // Break 16
    108 assertTrue(break_count > 14);
    109 
    110 assertNull(exception);
    111