| Index: src/debug/debug.js | 
| diff --git a/src/debug/debug.js b/src/debug/debug.js | 
| index cbd4dd21c75bf0e59ba36f12b06a756e3c1e767e..f55e120b76dbb4ed0b5625c8271d938fc381c1df 100644 | 
| --- a/src/debug/debug.js | 
| +++ b/src/debug/debug.js | 
| @@ -66,7 +66,8 @@ Debug.StepAction = { StepOut: 0, | 
| // The different types of scripts matching enum ScriptType in objects.h. | 
| Debug.ScriptType = { Native: 0, | 
| Extension: 1, | 
| -                     Normal: 2 }; | 
| +                     Normal: 2, | 
| +                     Wasm: 3}; | 
|  | 
| // The different types of script compilations matching enum | 
| // Script::CompilationType in objects.h. | 
| @@ -487,7 +488,7 @@ Debug.findScript = function(func_or_script_name) { | 
| if (IS_FUNCTION(func_or_script_name)) { | 
| return %FunctionGetScript(func_or_script_name); | 
| } else if (IS_REGEXP(func_or_script_name)) { | 
| -    var scripts = Debug.scripts(); | 
| +    var scripts = this.scripts(); | 
| var last_result = null; | 
| var result_count = 0; | 
| for (var i in scripts) { | 
| @@ -633,15 +634,12 @@ Debug.setBreakPointByScriptIdAndPosition = function(script_id, position, | 
| if (!enabled) { | 
| break_point.disable(); | 
| } | 
| -  var scripts = this.scripts(); | 
| -  var position_alignment = IS_UNDEFINED(opt_position_alignment) | 
| -      ? Debug.BreakPositionAlignment.Statement : opt_position_alignment; | 
| -  for (var i = 0; i < scripts.length; i++) { | 
| -    if (script_id == scripts[i].id) { | 
| -      break_point.actual_position = %SetScriptBreakPoint(scripts[i], position, | 
| -          position_alignment, break_point); | 
| -      break; | 
| -    } | 
| +  var script = scriptById(script_id); | 
| +  if (script) { | 
| +    var position_alignment = IS_UNDEFINED(opt_position_alignment) | 
| +        ? Debug.BreakPositionAlignment.Statement : opt_position_alignment; | 
| +    break_point.actual_position = %SetScriptBreakPoint(script, position, | 
| +        position_alignment, break_point); | 
| } | 
| return break_point; | 
| }; | 
| @@ -858,10 +856,31 @@ Debug.scripts = function() { | 
| }; | 
|  | 
|  | 
| +// Get a specific script currently loaded. This is based on scanning the heap. | 
| +// TODO(clemensh): Create a runtime function for this. | 
| +function scriptById(scriptId) { | 
| +  var scripts = Debug.scripts(); | 
| +  for (var script of scripts) { | 
| +    if (script.id == scriptId) return script; | 
| +  } | 
| +  return null; | 
| +}; | 
| + | 
| + | 
| Debug.debuggerFlags = function() { | 
| return debugger_flags; | 
| }; | 
|  | 
| +Debug.getWasmFunctionOffsetTable = function(scriptId) { | 
| +  var script = scriptById(scriptId); | 
| +  return script ? %GetWasmFunctionOffsetTable(script) : UNDEFINED; | 
| +} | 
| + | 
| +Debug.disassembleWasmFunction = function(scriptId) { | 
| +  var script = scriptById(scriptId); | 
| +  return script ? %DisassembleWasmFunction(script) : UNDEFINED; | 
| +} | 
| + | 
| Debug.MakeMirror = MakeMirror; | 
|  | 
| function MakeExecutionState(break_id) { | 
| @@ -2155,7 +2174,7 @@ DebugCommandProcessor.prototype.scriptsRequest_ = function(request, response) { | 
| } | 
|  | 
| // Collect all scripts in the heap. | 
| -  var scripts = %DebugGetLoadedScripts(); | 
| +  var scripts = Debug.scripts(); | 
|  | 
| response.body = []; | 
|  | 
| @@ -2205,14 +2224,7 @@ DebugCommandProcessor.prototype.changeLiveRequest_ = function( | 
| var script_id = request.arguments.script_id; | 
| var preview_only = !!request.arguments.preview_only; | 
|  | 
| -  var scripts = %DebugGetLoadedScripts(); | 
| - | 
| -  var the_script = null; | 
| -  for (var i = 0; i < scripts.length; i++) { | 
| -    if (scripts[i].id == script_id) { | 
| -      the_script = scripts[i]; | 
| -    } | 
| -  } | 
| +  var the_script = scriptById(script_id); | 
| if (!the_script) { | 
| response.failed('Script not found'); | 
| return; | 
|  |