| Index: src/d8.js | 
| =================================================================== | 
| --- src/d8.js	(revision 1220) | 
| +++ src/d8.js	(working copy) | 
| @@ -79,7 +79,7 @@ | 
|  | 
|  | 
| // Debug events which can occour in the V8 JavaScript engine. These originate | 
| -// from the API include file debug.h. | 
| +// from the API include file v8-debug.h. | 
| Debug.DebugEvent = { Break: 1, | 
| Exception: 2, | 
| NewFunction: 3, | 
| @@ -99,75 +99,91 @@ | 
| currentFrame: kNoFrame, | 
| currentSourceLine: -1 | 
| } | 
| +var trace_compile = false;  // Tracing all compile events? | 
|  | 
|  | 
| function DebugEventToText(event) { | 
| -  if (event.eventType() == 1) { | 
| -    // Build the break details. | 
| -    var details = ''; | 
| -    if (event.breakPointsHit()) { | 
| -      details += 'breakpoint'; | 
| -      if (event.breakPointsHit().length > 1) { | 
| -        details += 's'; | 
| -      } | 
| -      details += ' #'; | 
| -      for (var i = 0; i < event.breakPointsHit().length; i++) { | 
| -        if (i > 0) { | 
| -          details += ', #'; | 
| +  switch (event.eventType()) { | 
| +    case Debug.DebugEvent.Break: | 
| +      // Build the break details. | 
| +      var details = ''; | 
| +      if (event.breakPointsHit()) { | 
| +        details += 'breakpoint'; | 
| +        if (event.breakPointsHit().length > 1) { | 
| +          details += 's'; | 
| } | 
| -        // Find the break point number. For break points originating from a | 
| -        // script break point display the script break point number. | 
| -        var break_point = event.breakPointsHit()[i]; | 
| -        var script_break_point = break_point.script_break_point(); | 
| -        if (script_break_point) { | 
| -          details += script_break_point.number(); | 
| -        } else { | 
| -          details += break_point.number(); | 
| +        details += ' #'; | 
| +        for (var i = 0; i < event.breakPointsHit().length; i++) { | 
| +          if (i > 0) { | 
| +            details += ', #'; | 
| +          } | 
| +          // Find the break point number. For break points originating from a | 
| +          // script break point display the script break point number. | 
| +          var break_point = event.breakPointsHit()[i]; | 
| +          var script_break_point = break_point.script_break_point(); | 
| +          if (script_break_point) { | 
| +            details += script_break_point.number(); | 
| +          } else { | 
| +            details += break_point.number(); | 
| +          } | 
| } | 
| +      } else { | 
| +        details += 'break'; | 
| } | 
| -    } else { | 
| -      details += 'break'; | 
| -    } | 
| -    details += ' in '; | 
| -    details += event.executionState().frame(0).invocationText(); | 
| -    details += ' at '; | 
| -    details += event.executionState().frame(0).sourceAndPositionText(); | 
| -    details += '\n' | 
| -    if (event.func().script()) { | 
| -      details += FrameSourceUnderline(event.executionState().frame(0)); | 
| -    } | 
| -    Debug.State.currentSourceLine = | 
| -        event.executionState().frame(0).sourceLine(); | 
| -    Debug.State.currentFrame = 0; | 
| -    return details; | 
| -  } else if (event.eventType() == 2) { | 
| -    var details = ''; | 
| -    if (event.uncaught_) { | 
| -      details += 'Uncaught: '; | 
| -    } else { | 
| -      details += 'Exception: '; | 
| -    } | 
| - | 
| -    details += '"'; | 
| -    details += event.exception(); | 
| -    details += '"'; | 
| -    if (event.executionState().frameCount() > 0) { | 
| -      details += '"'; | 
| -      details += event.exception(); | 
| +      details += ' in '; | 
| +      details += event.executionState().frame(0).invocationText(); | 
| details += ' at '; | 
| details += event.executionState().frame(0).sourceAndPositionText(); | 
| -      details += '\n'; | 
| -      details += FrameSourceUnderline(event.executionState().frame(0)); | 
| +      details += '\n' | 
| +      if (event.func().script()) { | 
| +        details += FrameSourceUnderline(event.executionState().frame(0)); | 
| +      } | 
| Debug.State.currentSourceLine = | 
| event.executionState().frame(0).sourceLine(); | 
| Debug.State.currentFrame = 0; | 
| -    } else { | 
| -      details += ' (empty stack)'; | 
| -      Debug.State.currentSourceLine = -1; | 
| -      Debug.State.currentFrame = kNoFrame; | 
| -    } | 
| +      return details; | 
|  | 
| -    return details; | 
| +    case Debug.DebugEvent.Exception: | 
| +      var details = ''; | 
| +      if (event.uncaught_) { | 
| +        details += 'Uncaught: '; | 
| +      } else { | 
| +        details += 'Exception: '; | 
| +      } | 
| + | 
| +      details += '"'; | 
| +      details += event.exception(); | 
| +      details += '"'; | 
| +      if (event.executionState().frameCount() > 0) { | 
| +        details += '"'; | 
| +        details += event.exception(); | 
| +        details += ' at '; | 
| +        details += event.executionState().frame(0).sourceAndPositionText(); | 
| +        details += '\n'; | 
| +        details += FrameSourceUnderline(event.executionState().frame(0)); | 
| +        Debug.State.currentSourceLine = | 
| +            event.executionState().frame(0).sourceLine(); | 
| +        Debug.State.currentFrame = 0; | 
| +      } else { | 
| +        details += ' (empty stack)'; | 
| +        Debug.State.currentSourceLine = -1; | 
| +        Debug.State.currentFrame = kNoFrame; | 
| +      } | 
| +      return details; | 
| + | 
| +    case Debug.DebugEvent.AfterCompile: | 
| +      if (trace_compile) { | 
| +        details = 'Source ' + event.script().name() + ' compiled:\n' | 
| +        var source = event.script().source(); | 
| +        if (!(source[source.length - 1] == '\n')) { | 
| +          details += source; | 
| +        } else { | 
| +          details += source.substring(0, source.length - 1); | 
| +        } | 
| +        return details; | 
| +      } else { | 
| +        return ''; | 
| +      } | 
| } | 
|  | 
| return 'Unknown debug event ' + event.eventType(); | 
| @@ -283,11 +299,17 @@ | 
| this.request_ = this.clearCommandToJSONRequest_(args); | 
| break; | 
|  | 
| +    case 'trace': | 
| +      // Return undefined to indicate command handled internally (no JSON). | 
| +      this.request_ = void 0; | 
| +      this.traceCommand_(args); | 
| +      break; | 
| + | 
| case 'help': | 
| case '?': | 
| this.helpCommand_(args); | 
| -      // Return null to indicate no JSON to send (command handled internally). | 
| -      this.request_ = void 0; | 
| +      // Return undefined to indicate command handled internally (no JSON). | 
| +      this.request_ = void 0; | 
| break; | 
|  | 
| default: | 
| @@ -597,7 +619,22 @@ | 
| }; | 
|  | 
|  | 
| -// Create a JSON request for the break command. | 
| +// Handle the trace command. | 
| +DebugRequest.prototype.traceCommand_ = function(args) { | 
| +  // Process arguments. | 
| +  if (args && args.length > 0) { | 
| +    if (args == 'compile') { | 
| +      trace_compile = !trace_compile; | 
| +      print('Tracing of compiled scripts ' + (trace_compile ? 'on' : 'off')); | 
| +    } else { | 
| +      throw new Error('Invalid trace arguments.'); | 
| +    } | 
| +  } else { | 
| +    throw new Error('Invalid trace arguments.'); | 
| +  } | 
| +} | 
| + | 
| +// Handle the help command. | 
| DebugRequest.prototype.helpCommand_ = function(args) { | 
| // Help os quite simple. | 
| if (args && args.length > 0) { | 
| @@ -613,6 +650,7 @@ | 
| print('source [from line [num lines]]'); | 
| print('scripts'); | 
| print('continue'); | 
| +  print('trace compile'); | 
| print('help'); | 
| } | 
|  | 
|  |