| Index: src/messages.js
 | 
| diff --git a/src/messages.js b/src/messages.js
 | 
| deleted file mode 100644
 | 
| index 5441cfe34a71970912e7b8c1fe01730b8d573b1d..0000000000000000000000000000000000000000
 | 
| --- a/src/messages.js
 | 
| +++ /dev/null
 | 
| @@ -1,1046 +0,0 @@
 | 
| -// Copyright 2012 the V8 project authors. All rights reserved.
 | 
| -// Use of this source code is governed by a BSD-style license that can be
 | 
| -// found in the LICENSE file.
 | 
| -
 | 
| -// -------------------------------------------------------------------
 | 
| -
 | 
| -var $errorToString;
 | 
| -var MakeError;
 | 
| -var MakeEvalError;
 | 
| -var MakeRangeError;
 | 
| -var MakeReferenceError;
 | 
| -var MakeSyntaxError;
 | 
| -var MakeTypeError;
 | 
| -var MakeURIError;
 | 
| -
 | 
| -(function(global, utils) {
 | 
| -
 | 
| -%CheckIsBootstrapping();
 | 
| -
 | 
| -// -------------------------------------------------------------------
 | 
| -// Imports
 | 
| -
 | 
| -var ArrayJoin;
 | 
| -var Bool16x8ToString;
 | 
| -var Bool32x4ToString;
 | 
| -var Bool8x16ToString;
 | 
| -var callSiteReceiverSymbol =
 | 
| -    utils.ImportNow("call_site_receiver_symbol");
 | 
| -var callSiteFunctionSymbol =
 | 
| -    utils.ImportNow("call_site_function_symbol");
 | 
| -var callSitePositionSymbol =
 | 
| -    utils.ImportNow("call_site_position_symbol");
 | 
| -var callSiteStrictSymbol =
 | 
| -    utils.ImportNow("call_site_strict_symbol");
 | 
| -var Float32x4ToString;
 | 
| -var formattedStackTraceSymbol =
 | 
| -    utils.ImportNow("formatted_stack_trace_symbol");
 | 
| -var FunctionSourceString
 | 
| -var GlobalObject = global.Object;
 | 
| -var Int16x8ToString;
 | 
| -var Int32x4ToString;
 | 
| -var Int8x16ToString;
 | 
| -var InternalArray = utils.InternalArray;
 | 
| -var internalErrorSymbol = utils.ImportNow("internal_error_symbol");
 | 
| -var ObjectDefineProperty;
 | 
| -var ObjectToString;
 | 
| -var stackTraceSymbol = utils.ImportNow("stack_trace_symbol");
 | 
| -var StringCharAt;
 | 
| -var StringIndexOf;
 | 
| -var StringSubstring;
 | 
| -var SymbolToString;
 | 
| -var Uint16x8ToString;
 | 
| -var Uint32x4ToString;
 | 
| -var Uint8x16ToString;
 | 
| -
 | 
| -utils.Import(function(from) {
 | 
| -  ArrayJoin = from.ArrayJoin;
 | 
| -  Bool16x8ToString = from.Bool16x8ToString;
 | 
| -  Bool32x4ToString = from.Bool32x4ToString;
 | 
| -  Bool8x16ToString = from.Bool8x16ToString;
 | 
| -  Float32x4ToString = from.Float32x4ToString;
 | 
| -  FunctionSourceString = from.FunctionSourceString;
 | 
| -  Int16x8ToString = from.Int16x8ToString;
 | 
| -  Int32x4ToString = from.Int32x4ToString;
 | 
| -  Int8x16ToString = from.Int8x16ToString;
 | 
| -  ObjectDefineProperty = from.ObjectDefineProperty;
 | 
| -  ObjectToString = from.ObjectToString;
 | 
| -  StringCharAt = from.StringCharAt;
 | 
| -  StringIndexOf = from.StringIndexOf;
 | 
| -  StringSubstring = from.StringSubstring;
 | 
| -  SymbolToString = from.SymbolToString;
 | 
| -  Uint16x8ToString = from.Uint16x8ToString;
 | 
| -  Uint32x4ToString = from.Uint32x4ToString;
 | 
| -  Uint8x16ToString = from.Uint8x16ToString;
 | 
| -});
 | 
| -
 | 
| -// -------------------------------------------------------------------
 | 
| -
 | 
| -var GlobalError;
 | 
| -var GlobalTypeError;
 | 
| -var GlobalRangeError;
 | 
| -var GlobalURIError;
 | 
| -var GlobalSyntaxError;
 | 
| -var GlobalReferenceError;
 | 
| -var GlobalEvalError;
 | 
| -
 | 
| -
 | 
| -function NoSideEffectsObjectToString() {
 | 
| -  if (IS_UNDEFINED(this)) return "[object Undefined]";
 | 
| -  if (IS_NULL(this)) return "[object Null]";
 | 
| -  return "[object " + %_ClassOf(TO_OBJECT(this)) + "]";
 | 
| -}
 | 
| -
 | 
| -
 | 
| -function NoSideEffectToString(obj) {
 | 
| -  if (IS_STRING(obj)) return obj;
 | 
| -  if (IS_NUMBER(obj)) return %_NumberToString(obj);
 | 
| -  if (IS_BOOLEAN(obj)) return obj ? 'true' : 'false';
 | 
| -  if (IS_UNDEFINED(obj)) return 'undefined';
 | 
| -  if (IS_NULL(obj)) return 'null';
 | 
| -  if (IS_FUNCTION(obj)) {
 | 
| -    var str = %_CallFunction(obj, obj, FunctionSourceString);
 | 
| -    if (str.length > 128) {
 | 
| -      str = %_SubString(str, 0, 111) + "...<omitted>..." +
 | 
| -            %_SubString(str, str.length - 2, str.length);
 | 
| -    }
 | 
| -    return str;
 | 
| -  }
 | 
| -  if (IS_SYMBOL(obj)) return %_CallFunction(obj, SymbolToString);
 | 
| -  if (IS_SIMD_VALUE(obj)) {
 | 
| -    switch (typeof(obj)) {
 | 
| -      case 'float32x4': return %_CallFunction(obj, Float32x4ToString);
 | 
| -      case 'int32x4':   return %_CallFunction(obj, Int32x4ToString);
 | 
| -      case 'int16x8':   return %_CallFunction(obj, Int16x8ToString);
 | 
| -      case 'int8x16':   return %_CallFunction(obj, Int8x16ToString);
 | 
| -      case 'uint32x4':   return %_CallFunction(obj, Uint32x4ToString);
 | 
| -      case 'uint16x8':   return %_CallFunction(obj, Uint16x8ToString);
 | 
| -      case 'uint8x16':   return %_CallFunction(obj, Uint8x16ToString);
 | 
| -      case 'bool32x4':  return %_CallFunction(obj, Bool32x4ToString);
 | 
| -      case 'bool16x8':  return %_CallFunction(obj, Bool16x8ToString);
 | 
| -      case 'bool8x16':  return %_CallFunction(obj, Bool8x16ToString);
 | 
| -    }
 | 
| -  }
 | 
| -  if (IS_OBJECT(obj)
 | 
| -      && %GetDataProperty(obj, "toString") === ObjectToString) {
 | 
| -    var constructor = %GetDataProperty(obj, "constructor");
 | 
| -    if (typeof constructor == "function") {
 | 
| -      var constructorName = constructor.name;
 | 
| -      if (IS_STRING(constructorName) && constructorName !== "") {
 | 
| -        return "#<" + constructorName + ">";
 | 
| -      }
 | 
| -    }
 | 
| -  }
 | 
| -  if (CanBeSafelyTreatedAsAnErrorObject(obj)) {
 | 
| -    return %_CallFunction(obj, ErrorToString);
 | 
| -  }
 | 
| -
 | 
| -  return %_CallFunction(obj, NoSideEffectsObjectToString);
 | 
| -}
 | 
| -
 | 
| -// To determine whether we can safely stringify an object using ErrorToString
 | 
| -// without the risk of side-effects, we need to check whether the object is
 | 
| -// either an instance of a native error type (via '%_ClassOf'), or has Error
 | 
| -// in its prototype chain and hasn't overwritten 'toString' with something
 | 
| -// strange and unusual.
 | 
| -function CanBeSafelyTreatedAsAnErrorObject(obj) {
 | 
| -  switch (%_ClassOf(obj)) {
 | 
| -    case 'Error':
 | 
| -    case 'EvalError':
 | 
| -    case 'RangeError':
 | 
| -    case 'ReferenceError':
 | 
| -    case 'SyntaxError':
 | 
| -    case 'TypeError':
 | 
| -    case 'URIError':
 | 
| -      return true;
 | 
| -  }
 | 
| -
 | 
| -  var objToString = %GetDataProperty(obj, "toString");
 | 
| -  return obj instanceof GlobalError && objToString === ErrorToString;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -// When formatting internally created error messages, do not
 | 
| -// invoke overwritten error toString methods but explicitly use
 | 
| -// the error to string method. This is to avoid leaking error
 | 
| -// objects between script tags in a browser setting.
 | 
| -function ToStringCheckErrorObject(obj) {
 | 
| -  if (CanBeSafelyTreatedAsAnErrorObject(obj)) {
 | 
| -    return %_CallFunction(obj, ErrorToString);
 | 
| -  } else {
 | 
| -    return TO_STRING(obj);
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -
 | 
| -function ToDetailString(obj) {
 | 
| -  if (obj != null && IS_OBJECT(obj) && obj.toString === ObjectToString) {
 | 
| -    var constructor = obj.constructor;
 | 
| -    if (typeof constructor == "function") {
 | 
| -      var constructorName = constructor.name;
 | 
| -      if (IS_STRING(constructorName) && constructorName !== "") {
 | 
| -        return "#<" + constructorName + ">";
 | 
| -      }
 | 
| -    }
 | 
| -  }
 | 
| -  return ToStringCheckErrorObject(obj);
 | 
| -}
 | 
| -
 | 
| -
 | 
| -function MakeGenericError(constructor, type, arg0, arg1, arg2) {
 | 
| -  var error = new constructor(FormatMessage(type, arg0, arg1, arg2));
 | 
| -  error[internalErrorSymbol] = true;
 | 
| -  return error;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * Set up the Script function and constructor.
 | 
| - */
 | 
| -%FunctionSetInstanceClassName(Script, 'Script');
 | 
| -%AddNamedProperty(Script.prototype, 'constructor', Script,
 | 
| -                  DONT_ENUM | DONT_DELETE | READ_ONLY);
 | 
| -%SetCode(Script, function(x) {
 | 
| -  // Script objects can only be created by the VM.
 | 
| -  throw MakeError(kUnsupported);
 | 
| -});
 | 
| -
 | 
| -
 | 
| -// Helper functions; called from the runtime system.
 | 
| -function FormatMessage(type, arg0, arg1, arg2) {
 | 
| -  var arg0 = NoSideEffectToString(arg0);
 | 
| -  var arg1 = NoSideEffectToString(arg1);
 | 
| -  var arg2 = NoSideEffectToString(arg2);
 | 
| -  try {
 | 
| -    return %FormatMessageString(type, arg0, arg1, arg2);
 | 
| -  } catch (e) {
 | 
| -    return "<error>";
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -
 | 
| -function GetLineNumber(message) {
 | 
| -  var start_position = %MessageGetStartPosition(message);
 | 
| -  if (start_position == -1) return kNoLineNumberInfo;
 | 
| -  var script = %MessageGetScript(message);
 | 
| -  var location = script.locationFromPosition(start_position, true);
 | 
| -  if (location == null) return kNoLineNumberInfo;
 | 
| -  return location.line + 1;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -//Returns the offset of the given position within the containing line.
 | 
| -function GetColumnNumber(message) {
 | 
| -  var script = %MessageGetScript(message);
 | 
| -  var start_position = %MessageGetStartPosition(message);
 | 
| -  var location = script.locationFromPosition(start_position, true);
 | 
| -  if (location == null) return -1;
 | 
| -  return location.column;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -// Returns the source code line containing the given source
 | 
| -// position, or the empty string if the position is invalid.
 | 
| -function GetSourceLine(message) {
 | 
| -  var script = %MessageGetScript(message);
 | 
| -  var start_position = %MessageGetStartPosition(message);
 | 
| -  var location = script.locationFromPosition(start_position, true);
 | 
| -  if (location == null) return "";
 | 
| -  return location.sourceText();
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * Find a line number given a specific source position.
 | 
| - * @param {number} position The source position.
 | 
| - * @return {number} 0 if input too small, -1 if input too large,
 | 
| -       else the line number.
 | 
| - */
 | 
| -function ScriptLineFromPosition(position) {
 | 
| -  var lower = 0;
 | 
| -  var upper = this.lineCount() - 1;
 | 
| -  var line_ends = this.line_ends;
 | 
| -
 | 
| -  // We'll never find invalid positions so bail right away.
 | 
| -  if (position > line_ends[upper]) {
 | 
| -    return -1;
 | 
| -  }
 | 
| -
 | 
| -  // This means we don't have to safe-guard indexing line_ends[i - 1].
 | 
| -  if (position <= line_ends[0]) {
 | 
| -    return 0;
 | 
| -  }
 | 
| -
 | 
| -  // Binary search to find line # from position range.
 | 
| -  while (upper >= 1) {
 | 
| -    var i = (lower + upper) >> 1;
 | 
| -
 | 
| -    if (position > line_ends[i]) {
 | 
| -      lower = i + 1;
 | 
| -    } else if (position <= line_ends[i - 1]) {
 | 
| -      upper = i - 1;
 | 
| -    } else {
 | 
| -      return i;
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  return -1;
 | 
| -}
 | 
| -
 | 
| -/**
 | 
| - * Get information on a specific source position.
 | 
| - * @param {number} position The source position
 | 
| - * @param {boolean} include_resource_offset Set to true to have the resource
 | 
| - *     offset added to the location
 | 
| - * @return {SourceLocation}
 | 
| - *     If line is negative or not in the source null is returned.
 | 
| - */
 | 
| -function ScriptLocationFromPosition(position,
 | 
| -                                    include_resource_offset) {
 | 
| -  var line = this.lineFromPosition(position);
 | 
| -  if (line == -1) return null;
 | 
| -
 | 
| -  // Determine start, end and column.
 | 
| -  var line_ends = this.line_ends;
 | 
| -  var start = line == 0 ? 0 : line_ends[line - 1] + 1;
 | 
| -  var end = line_ends[line];
 | 
| -  if (end > 0 && %_CallFunction(this.source, end - 1, StringCharAt) == '\r') {
 | 
| -    end--;
 | 
| -  }
 | 
| -  var column = position - start;
 | 
| -
 | 
| -  // Adjust according to the offset within the resource.
 | 
| -  if (include_resource_offset) {
 | 
| -    line += this.line_offset;
 | 
| -    if (line == this.line_offset) {
 | 
| -      column += this.column_offset;
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  return new SourceLocation(this, position, line, column, start, end);
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * Get information on a specific source line and column possibly offset by a
 | 
| - * fixed source position. This function is used to find a source position from
 | 
| - * a line and column position. The fixed source position offset is typically
 | 
| - * used to find a source position in a function based on a line and column in
 | 
| - * the source for the function alone. The offset passed will then be the
 | 
| - * start position of the source for the function within the full script source.
 | 
| - * @param {number} opt_line The line within the source. Default value is 0
 | 
| - * @param {number} opt_column The column in within the line. Default value is 0
 | 
| - * @param {number} opt_offset_position The offset from the begining of the
 | 
| - *     source from where the line and column calculation starts.
 | 
| - *     Default value is 0
 | 
| - * @return {SourceLocation}
 | 
| - *     If line is negative or not in the source null is returned.
 | 
| - */
 | 
| -function ScriptLocationFromLine(opt_line, opt_column, opt_offset_position) {
 | 
| -  // Default is the first line in the script. Lines in the script is relative
 | 
| -  // to the offset within the resource.
 | 
| -  var line = 0;
 | 
| -  if (!IS_UNDEFINED(opt_line)) {
 | 
| -    line = opt_line - this.line_offset;
 | 
| -  }
 | 
| -
 | 
| -  // Default is first column. If on the first line add the offset within the
 | 
| -  // resource.
 | 
| -  var column = opt_column || 0;
 | 
| -  if (line == 0) {
 | 
| -    column -= this.column_offset;
 | 
| -  }
 | 
| -
 | 
| -  var offset_position = opt_offset_position || 0;
 | 
| -  if (line < 0 || column < 0 || offset_position < 0) return null;
 | 
| -  if (line == 0) {
 | 
| -    return this.locationFromPosition(offset_position + column, false);
 | 
| -  } else {
 | 
| -    // Find the line where the offset position is located.
 | 
| -    var offset_line = this.lineFromPosition(offset_position);
 | 
| -
 | 
| -    if (offset_line == -1 || offset_line + line >= this.lineCount()) {
 | 
| -      return null;
 | 
| -    }
 | 
| -
 | 
| -    return this.locationFromPosition(
 | 
| -        this.line_ends[offset_line + line - 1] + 1 + column);  // line > 0 here.
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * Get a slice of source code from the script. The boundaries for the slice is
 | 
| - * specified in lines.
 | 
| - * @param {number} opt_from_line The first line (zero bound) in the slice.
 | 
| - *     Default is 0
 | 
| - * @param {number} opt_to_column The last line (zero bound) in the slice (non
 | 
| - *     inclusive). Default is the number of lines in the script
 | 
| - * @return {SourceSlice} The source slice or null of the parameters where
 | 
| - *     invalid
 | 
| - */
 | 
| -function ScriptSourceSlice(opt_from_line, opt_to_line) {
 | 
| -  var from_line = IS_UNDEFINED(opt_from_line) ? this.line_offset
 | 
| -                                              : opt_from_line;
 | 
| -  var to_line = IS_UNDEFINED(opt_to_line) ? this.line_offset + this.lineCount()
 | 
| -                                          : opt_to_line;
 | 
| -
 | 
| -  // Adjust according to the offset within the resource.
 | 
| -  from_line -= this.line_offset;
 | 
| -  to_line -= this.line_offset;
 | 
| -  if (from_line < 0) from_line = 0;
 | 
| -  if (to_line > this.lineCount()) to_line = this.lineCount();
 | 
| -
 | 
| -  // Check parameters.
 | 
| -  if (from_line >= this.lineCount() ||
 | 
| -      to_line < 0 ||
 | 
| -      from_line > to_line) {
 | 
| -    return null;
 | 
| -  }
 | 
| -
 | 
| -  var line_ends = this.line_ends;
 | 
| -  var from_position = from_line == 0 ? 0 : line_ends[from_line - 1] + 1;
 | 
| -  var to_position = to_line == 0 ? 0 : line_ends[to_line - 1] + 1;
 | 
| -
 | 
| -  // Return a source slice with line numbers re-adjusted to the resource.
 | 
| -  return new SourceSlice(this,
 | 
| -                         from_line + this.line_offset,
 | 
| -                         to_line + this.line_offset,
 | 
| -                          from_position, to_position);
 | 
| -}
 | 
| -
 | 
| -
 | 
| -function ScriptSourceLine(opt_line) {
 | 
| -  // Default is the first line in the script. Lines in the script are relative
 | 
| -  // to the offset within the resource.
 | 
| -  var line = 0;
 | 
| -  if (!IS_UNDEFINED(opt_line)) {
 | 
| -    line = opt_line - this.line_offset;
 | 
| -  }
 | 
| -
 | 
| -  // Check parameter.
 | 
| -  if (line < 0 || this.lineCount() <= line) {
 | 
| -    return null;
 | 
| -  }
 | 
| -
 | 
| -  // Return the source line.
 | 
| -  var line_ends = this.line_ends;
 | 
| -  var start = line == 0 ? 0 : line_ends[line - 1] + 1;
 | 
| -  var end = line_ends[line];
 | 
| -  return %_CallFunction(this.source, start, end, StringSubstring);
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * Returns the number of source lines.
 | 
| - * @return {number}
 | 
| - *     Number of source lines.
 | 
| - */
 | 
| -function ScriptLineCount() {
 | 
| -  // Return number of source lines.
 | 
| -  return this.line_ends.length;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * Returns the position of the nth line end.
 | 
| - * @return {number}
 | 
| - *     Zero-based position of the nth line end in the script.
 | 
| - */
 | 
| -function ScriptLineEnd(n) {
 | 
| -  return this.line_ends[n];
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * If sourceURL comment is available returns sourceURL comment contents.
 | 
| - * Otherwise, script name is returned. See
 | 
| - * http://fbug.googlecode.com/svn/branches/firebug1.1/docs/ReleaseNotes_1.1.txt
 | 
| - * and Source Map Revision 3 proposal for details on using //# sourceURL and
 | 
| - * deprecated //@ sourceURL comment to identify scripts that don't have name.
 | 
| - *
 | 
| - * @return {?string} script name if present, value for //# sourceURL or
 | 
| - * deprecated //@ sourceURL comment otherwise.
 | 
| - */
 | 
| -function ScriptNameOrSourceURL() {
 | 
| -  if (this.source_url) return this.source_url;
 | 
| -  return this.name;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -utils.SetUpLockedPrototype(Script, [
 | 
| -    "source",
 | 
| -    "name",
 | 
| -    "source_url",
 | 
| -    "source_mapping_url",
 | 
| -    "line_ends",
 | 
| -    "line_offset",
 | 
| -    "column_offset"
 | 
| -  ], [
 | 
| -    "lineFromPosition", ScriptLineFromPosition,
 | 
| -    "locationFromPosition", ScriptLocationFromPosition,
 | 
| -    "locationFromLine", ScriptLocationFromLine,
 | 
| -    "sourceSlice", ScriptSourceSlice,
 | 
| -    "sourceLine", ScriptSourceLine,
 | 
| -    "lineCount", ScriptLineCount,
 | 
| -    "nameOrSourceURL", ScriptNameOrSourceURL,
 | 
| -    "lineEnd", ScriptLineEnd
 | 
| -  ]
 | 
| -);
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * Class for source location. A source location is a position within some
 | 
| - * source with the following properties:
 | 
| - *   script   : script object for the source
 | 
| - *   line     : source line number
 | 
| - *   column   : source column within the line
 | 
| - *   position : position within the source
 | 
| - *   start    : position of start of source context (inclusive)
 | 
| - *   end      : position of end of source context (not inclusive)
 | 
| - * Source text for the source context is the character interval
 | 
| - * [start, end[. In most cases end will point to a newline character.
 | 
| - * It might point just past the final position of the source if the last
 | 
| - * source line does not end with a newline character.
 | 
| - * @param {Script} script The Script object for which this is a location
 | 
| - * @param {number} position Source position for the location
 | 
| - * @param {number} line The line number for the location
 | 
| - * @param {number} column The column within the line for the location
 | 
| - * @param {number} start Source position for start of source context
 | 
| - * @param {number} end Source position for end of source context
 | 
| - * @constructor
 | 
| - */
 | 
| -function SourceLocation(script, position, line, column, start, end) {
 | 
| -  this.script = script;
 | 
| -  this.position = position;
 | 
| -  this.line = line;
 | 
| -  this.column = column;
 | 
| -  this.start = start;
 | 
| -  this.end = end;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * Get the source text for a SourceLocation
 | 
| - * @return {String}
 | 
| - *     Source text for this location.
 | 
| - */
 | 
| -function SourceLocationSourceText() {
 | 
| -  return %_CallFunction(this.script.source,
 | 
| -                        this.start,
 | 
| -                        this.end,
 | 
| -                        StringSubstring);
 | 
| -}
 | 
| -
 | 
| -
 | 
| -utils.SetUpLockedPrototype(SourceLocation,
 | 
| -  ["script", "position", "line", "column", "start", "end"],
 | 
| -  ["sourceText", SourceLocationSourceText]
 | 
| -);
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * Class for a source slice. A source slice is a part of a script source with
 | 
| - * the following properties:
 | 
| - *   script        : script object for the source
 | 
| - *   from_line     : line number for the first line in the slice
 | 
| - *   to_line       : source line number for the last line in the slice
 | 
| - *   from_position : position of the first character in the slice
 | 
| - *   to_position   : position of the last character in the slice
 | 
| - * The to_line and to_position are not included in the slice, that is the lines
 | 
| - * in the slice are [from_line, to_line[. Likewise the characters in the slice
 | 
| - * are [from_position, to_position[.
 | 
| - * @param {Script} script The Script object for the source slice
 | 
| - * @param {number} from_line
 | 
| - * @param {number} to_line
 | 
| - * @param {number} from_position
 | 
| - * @param {number} to_position
 | 
| - * @constructor
 | 
| - */
 | 
| -function SourceSlice(script, from_line, to_line, from_position, to_position) {
 | 
| -  this.script = script;
 | 
| -  this.from_line = from_line;
 | 
| -  this.to_line = to_line;
 | 
| -  this.from_position = from_position;
 | 
| -  this.to_position = to_position;
 | 
| -}
 | 
| -
 | 
| -/**
 | 
| - * Get the source text for a SourceSlice
 | 
| - * @return {String} Source text for this slice. The last line will include
 | 
| - *     the line terminating characters (if any)
 | 
| - */
 | 
| -function SourceSliceSourceText() {
 | 
| -  return %_CallFunction(this.script.source,
 | 
| -                        this.from_position,
 | 
| -                        this.to_position,
 | 
| -                        StringSubstring);
 | 
| -}
 | 
| -
 | 
| -utils.SetUpLockedPrototype(SourceSlice,
 | 
| -  ["script", "from_line", "to_line", "from_position", "to_position"],
 | 
| -  ["sourceText", SourceSliceSourceText]
 | 
| -);
 | 
| -
 | 
| -
 | 
| -function GetStackTraceLine(recv, fun, pos, isGlobal) {
 | 
| -  return new CallSite(recv, fun, pos, false).toString();
 | 
| -}
 | 
| -
 | 
| -// ----------------------------------------------------------------------------
 | 
| -// Error implementation
 | 
| -
 | 
| -function CallSite(receiver, fun, pos, strict_mode) {
 | 
| -  SET_PRIVATE(this, callSiteReceiverSymbol, receiver);
 | 
| -  SET_PRIVATE(this, callSiteFunctionSymbol, fun);
 | 
| -  SET_PRIVATE(this, callSitePositionSymbol, pos);
 | 
| -  SET_PRIVATE(this, callSiteStrictSymbol, strict_mode);
 | 
| -}
 | 
| -
 | 
| -function CallSiteGetThis() {
 | 
| -  return GET_PRIVATE(this, callSiteStrictSymbol)
 | 
| -      ? UNDEFINED : GET_PRIVATE(this, callSiteReceiverSymbol);
 | 
| -}
 | 
| -
 | 
| -function CallSiteGetFunction() {
 | 
| -  return GET_PRIVATE(this, callSiteStrictSymbol)
 | 
| -      ? UNDEFINED : GET_PRIVATE(this, callSiteFunctionSymbol);
 | 
| -}
 | 
| -
 | 
| -function CallSiteGetPosition() {
 | 
| -  return GET_PRIVATE(this, callSitePositionSymbol);
 | 
| -}
 | 
| -
 | 
| -function CallSiteGetTypeName() {
 | 
| -  return GetTypeName(GET_PRIVATE(this, callSiteReceiverSymbol), false);
 | 
| -}
 | 
| -
 | 
| -function CallSiteIsToplevel() {
 | 
| -  return %CallSiteIsToplevelRT(this);
 | 
| -}
 | 
| -
 | 
| -function CallSiteIsEval() {
 | 
| -  return %CallSiteIsEvalRT(this);
 | 
| -}
 | 
| -
 | 
| -function CallSiteGetEvalOrigin() {
 | 
| -  var script = %FunctionGetScript(GET_PRIVATE(this, callSiteFunctionSymbol));
 | 
| -  return FormatEvalOrigin(script);
 | 
| -}
 | 
| -
 | 
| -function CallSiteGetScriptNameOrSourceURL() {
 | 
| -  return %CallSiteGetScriptNameOrSourceUrlRT(this);
 | 
| -}
 | 
| -
 | 
| -function CallSiteGetFunctionName() {
 | 
| -  // See if the function knows its own name
 | 
| -  return %CallSiteGetFunctionNameRT(this);
 | 
| -}
 | 
| -
 | 
| -function CallSiteGetMethodName() {
 | 
| -  // See if we can find a unique property on the receiver that holds
 | 
| -  // this function.
 | 
| -  return %CallSiteGetMethodNameRT(this);
 | 
| -}
 | 
| -
 | 
| -function CallSiteGetFileName() {
 | 
| -  return %CallSiteGetFileNameRT(this);
 | 
| -}
 | 
| -
 | 
| -function CallSiteGetLineNumber() {
 | 
| -  return %CallSiteGetLineNumberRT(this);
 | 
| -}
 | 
| -
 | 
| -function CallSiteGetColumnNumber() {
 | 
| -  return %CallSiteGetColumnNumberRT(this);
 | 
| -}
 | 
| -
 | 
| -function CallSiteIsNative() {
 | 
| -  return %CallSiteIsNativeRT(this);
 | 
| -}
 | 
| -
 | 
| -function CallSiteIsConstructor() {
 | 
| -  return %CallSiteIsConstructorRT(this);
 | 
| -}
 | 
| -
 | 
| -function CallSiteToString() {
 | 
| -  var fileName;
 | 
| -  var fileLocation = "";
 | 
| -  if (this.isNative()) {
 | 
| -    fileLocation = "native";
 | 
| -  } else {
 | 
| -    fileName = this.getScriptNameOrSourceURL();
 | 
| -    if (!fileName && this.isEval()) {
 | 
| -      fileLocation = this.getEvalOrigin();
 | 
| -      fileLocation += ", ";  // Expecting source position to follow.
 | 
| -    }
 | 
| -
 | 
| -    if (fileName) {
 | 
| -      fileLocation += fileName;
 | 
| -    } else {
 | 
| -      // Source code does not originate from a file and is not native, but we
 | 
| -      // can still get the source position inside the source string, e.g. in
 | 
| -      // an eval string.
 | 
| -      fileLocation += "<anonymous>";
 | 
| -    }
 | 
| -    var lineNumber = this.getLineNumber();
 | 
| -    if (lineNumber != null) {
 | 
| -      fileLocation += ":" + lineNumber;
 | 
| -      var columnNumber = this.getColumnNumber();
 | 
| -      if (columnNumber) {
 | 
| -        fileLocation += ":" + columnNumber;
 | 
| -      }
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  var line = "";
 | 
| -  var functionName = this.getFunctionName();
 | 
| -  var addSuffix = true;
 | 
| -  var isConstructor = this.isConstructor();
 | 
| -  var isMethodCall = !(this.isToplevel() || isConstructor);
 | 
| -  if (isMethodCall) {
 | 
| -    var typeName = GetTypeName(GET_PRIVATE(this, callSiteReceiverSymbol), true);
 | 
| -    var methodName = this.getMethodName();
 | 
| -    if (functionName) {
 | 
| -      if (typeName &&
 | 
| -          %_CallFunction(functionName, typeName, StringIndexOf) != 0) {
 | 
| -        line += typeName + ".";
 | 
| -      }
 | 
| -      line += functionName;
 | 
| -      if (methodName &&
 | 
| -          (%_CallFunction(functionName, "." + methodName, StringIndexOf) !=
 | 
| -           functionName.length - methodName.length - 1)) {
 | 
| -        line += " [as " + methodName + "]";
 | 
| -      }
 | 
| -    } else {
 | 
| -      line += typeName + "." + (methodName || "<anonymous>");
 | 
| -    }
 | 
| -  } else if (isConstructor) {
 | 
| -    line += "new " + (functionName || "<anonymous>");
 | 
| -  } else if (functionName) {
 | 
| -    line += functionName;
 | 
| -  } else {
 | 
| -    line += fileLocation;
 | 
| -    addSuffix = false;
 | 
| -  }
 | 
| -  if (addSuffix) {
 | 
| -    line += " (" + fileLocation + ")";
 | 
| -  }
 | 
| -  return line;
 | 
| -}
 | 
| -
 | 
| -utils.SetUpLockedPrototype(CallSite, ["receiver", "fun", "pos"], [
 | 
| -  "getThis", CallSiteGetThis,
 | 
| -  "getTypeName", CallSiteGetTypeName,
 | 
| -  "isToplevel", CallSiteIsToplevel,
 | 
| -  "isEval", CallSiteIsEval,
 | 
| -  "getEvalOrigin", CallSiteGetEvalOrigin,
 | 
| -  "getScriptNameOrSourceURL", CallSiteGetScriptNameOrSourceURL,
 | 
| -  "getFunction", CallSiteGetFunction,
 | 
| -  "getFunctionName", CallSiteGetFunctionName,
 | 
| -  "getMethodName", CallSiteGetMethodName,
 | 
| -  "getFileName", CallSiteGetFileName,
 | 
| -  "getLineNumber", CallSiteGetLineNumber,
 | 
| -  "getColumnNumber", CallSiteGetColumnNumber,
 | 
| -  "isNative", CallSiteIsNative,
 | 
| -  "getPosition", CallSiteGetPosition,
 | 
| -  "isConstructor", CallSiteIsConstructor,
 | 
| -  "toString", CallSiteToString
 | 
| -]);
 | 
| -
 | 
| -
 | 
| -function FormatEvalOrigin(script) {
 | 
| -  var sourceURL = script.nameOrSourceURL();
 | 
| -  if (sourceURL) {
 | 
| -    return sourceURL;
 | 
| -  }
 | 
| -
 | 
| -  var eval_origin = "eval at ";
 | 
| -  if (script.eval_from_function_name) {
 | 
| -    eval_origin += script.eval_from_function_name;
 | 
| -  } else {
 | 
| -    eval_origin +=  "<anonymous>";
 | 
| -  }
 | 
| -
 | 
| -  var eval_from_script = script.eval_from_script;
 | 
| -  if (eval_from_script) {
 | 
| -    if (eval_from_script.compilation_type == COMPILATION_TYPE_EVAL) {
 | 
| -      // eval script originated from another eval.
 | 
| -      eval_origin += " (" + FormatEvalOrigin(eval_from_script) + ")";
 | 
| -    } else {
 | 
| -      // eval script originated from "real" source.
 | 
| -      if (eval_from_script.name) {
 | 
| -        eval_origin += " (" + eval_from_script.name;
 | 
| -        var location = eval_from_script.locationFromPosition(
 | 
| -            script.eval_from_script_position, true);
 | 
| -        if (location) {
 | 
| -          eval_origin += ":" + (location.line + 1);
 | 
| -          eval_origin += ":" + (location.column + 1);
 | 
| -        }
 | 
| -        eval_origin += ")";
 | 
| -      } else {
 | 
| -        eval_origin += " (unknown source)";
 | 
| -      }
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  return eval_origin;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -function FormatErrorString(error) {
 | 
| -  try {
 | 
| -    return %_CallFunction(error, ErrorToString);
 | 
| -  } catch (e) {
 | 
| -    try {
 | 
| -      return "<error: " + e + ">";
 | 
| -    } catch (ee) {
 | 
| -      return "<error>";
 | 
| -    }
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -
 | 
| -function GetStackFrames(raw_stack) {
 | 
| -  var frames = new InternalArray();
 | 
| -  var sloppy_frames = raw_stack[0];
 | 
| -  for (var i = 1; i < raw_stack.length; i += 4) {
 | 
| -    var recv = raw_stack[i];
 | 
| -    var fun = raw_stack[i + 1];
 | 
| -    var code = raw_stack[i + 2];
 | 
| -    var pc = raw_stack[i + 3];
 | 
| -    var pos = %_IsSmi(code) ? code : %FunctionGetPositionForOffset(code, pc);
 | 
| -    sloppy_frames--;
 | 
| -    frames.push(new CallSite(recv, fun, pos, (sloppy_frames < 0)));
 | 
| -  }
 | 
| -  return frames;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -// Flag to prevent recursive call of Error.prepareStackTrace.
 | 
| -var formatting_custom_stack_trace = false;
 | 
| -
 | 
| -
 | 
| -function FormatStackTrace(obj, raw_stack) {
 | 
| -  var frames = GetStackFrames(raw_stack);
 | 
| -  if (IS_FUNCTION(GlobalError.prepareStackTrace) &&
 | 
| -      !formatting_custom_stack_trace) {
 | 
| -    var array = [];
 | 
| -    %MoveArrayContents(frames, array);
 | 
| -    formatting_custom_stack_trace = true;
 | 
| -    var stack_trace = UNDEFINED;
 | 
| -    try {
 | 
| -      stack_trace = GlobalError.prepareStackTrace(obj, array);
 | 
| -    } catch (e) {
 | 
| -      throw e;  // The custom formatting function threw.  Rethrow.
 | 
| -    } finally {
 | 
| -      formatting_custom_stack_trace = false;
 | 
| -    }
 | 
| -    return stack_trace;
 | 
| -  }
 | 
| -
 | 
| -  var lines = new InternalArray();
 | 
| -  lines.push(FormatErrorString(obj));
 | 
| -  for (var i = 0; i < frames.length; i++) {
 | 
| -    var frame = frames[i];
 | 
| -    var line;
 | 
| -    try {
 | 
| -      line = frame.toString();
 | 
| -    } catch (e) {
 | 
| -      try {
 | 
| -        line = "<error: " + e + ">";
 | 
| -      } catch (ee) {
 | 
| -        // Any code that reaches this point is seriously nasty!
 | 
| -        line = "<error>";
 | 
| -      }
 | 
| -    }
 | 
| -    lines.push("    at " + line);
 | 
| -  }
 | 
| -  return %_CallFunction(lines, "\n", ArrayJoin);
 | 
| -}
 | 
| -
 | 
| -
 | 
| -function GetTypeName(receiver, requireConstructor) {
 | 
| -  if (IS_NULL_OR_UNDEFINED(receiver)) return null;
 | 
| -  var constructor = receiver.constructor;
 | 
| -  if (!constructor) {
 | 
| -    return requireConstructor ? null :
 | 
| -        %_CallFunction(receiver, NoSideEffectsObjectToString);
 | 
| -  }
 | 
| -  var constructorName = constructor.name;
 | 
| -  if (!constructorName) {
 | 
| -    return requireConstructor ? null :
 | 
| -        %_CallFunction(receiver, NoSideEffectsObjectToString);
 | 
| -  }
 | 
| -  return constructorName;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -// Format the stack trace if not yet done, and return it.
 | 
| -// Cache the formatted stack trace on the holder.
 | 
| -var StackTraceGetter = function() {
 | 
| -  var formatted_stack_trace = UNDEFINED;
 | 
| -  var holder = this;
 | 
| -  while (holder) {
 | 
| -    var formatted_stack_trace =
 | 
| -      GET_PRIVATE(holder, formattedStackTraceSymbol);
 | 
| -    if (IS_UNDEFINED(formatted_stack_trace)) {
 | 
| -      // No formatted stack trace available.
 | 
| -      var stack_trace = GET_PRIVATE(holder, stackTraceSymbol);
 | 
| -      if (IS_UNDEFINED(stack_trace)) {
 | 
| -        // Neither formatted nor structured stack trace available.
 | 
| -        // Look further up the prototype chain.
 | 
| -        holder = %_GetPrototype(holder);
 | 
| -        continue;
 | 
| -      }
 | 
| -      formatted_stack_trace = FormatStackTrace(holder, stack_trace);
 | 
| -      SET_PRIVATE(holder, stackTraceSymbol, UNDEFINED);
 | 
| -      SET_PRIVATE(holder, formattedStackTraceSymbol, formatted_stack_trace);
 | 
| -    }
 | 
| -    return formatted_stack_trace;
 | 
| -  }
 | 
| -  return UNDEFINED;
 | 
| -};
 | 
| -
 | 
| -
 | 
| -// If the receiver equals the holder, set the formatted stack trace that the
 | 
| -// getter returns.
 | 
| -var StackTraceSetter = function(v) {
 | 
| -  if (HAS_PRIVATE(this, stackTraceSymbol)) {
 | 
| -    SET_PRIVATE(this, stackTraceSymbol, UNDEFINED);
 | 
| -    SET_PRIVATE(this, formattedStackTraceSymbol, v);
 | 
| -  }
 | 
| -};
 | 
| -
 | 
| -
 | 
| -// Use a dummy function since we do not actually want to capture a stack trace
 | 
| -// when constructing the initial Error prototytpes.
 | 
| -var captureStackTrace = function() {};
 | 
| -
 | 
| -
 | 
| -// Define special error type constructors.
 | 
| -function DefineError(global, f) {
 | 
| -  // Store the error function in both the global object
 | 
| -  // and the runtime object. The function is fetched
 | 
| -  // from the runtime object when throwing errors from
 | 
| -  // within the runtime system to avoid strange side
 | 
| -  // effects when overwriting the error functions from
 | 
| -  // user code.
 | 
| -  var name = f.name;
 | 
| -  %AddNamedProperty(global, name, f, DONT_ENUM);
 | 
| -  // Configure the error function.
 | 
| -  if (name == 'Error') {
 | 
| -    // The prototype of the Error object must itself be an error.
 | 
| -    // However, it can't be an instance of the Error object because
 | 
| -    // it hasn't been properly configured yet.  Instead we create a
 | 
| -    // special not-a-true-error-but-close-enough object.
 | 
| -    var ErrorPrototype = function() {};
 | 
| -    %FunctionSetPrototype(ErrorPrototype, GlobalObject.prototype);
 | 
| -    %FunctionSetInstanceClassName(ErrorPrototype, 'Error');
 | 
| -    %FunctionSetPrototype(f, new ErrorPrototype());
 | 
| -  } else {
 | 
| -    %FunctionSetPrototype(f, new GlobalError());
 | 
| -    %InternalSetPrototype(f, GlobalError);
 | 
| -  }
 | 
| -  %FunctionSetInstanceClassName(f, 'Error');
 | 
| -  %AddNamedProperty(f.prototype, 'constructor', f, DONT_ENUM);
 | 
| -  %AddNamedProperty(f.prototype, 'name', name, DONT_ENUM);
 | 
| -  %SetCode(f, function(m) {
 | 
| -    if (%_IsConstructCall()) {
 | 
| -      try { captureStackTrace(this, f); } catch (e) { }
 | 
| -      // Define all the expected properties directly on the error
 | 
| -      // object. This avoids going through getters and setters defined
 | 
| -      // on prototype objects.
 | 
| -      if (!IS_UNDEFINED(m)) {
 | 
| -        %AddNamedProperty(this, 'message', TO_STRING(m), DONT_ENUM);
 | 
| -      }
 | 
| -    } else {
 | 
| -      return new f(m);
 | 
| -    }
 | 
| -  });
 | 
| -  %SetNativeFlag(f);
 | 
| -  return f;
 | 
| -};
 | 
| -
 | 
| -GlobalError = DefineError(global, function Error() { });
 | 
| -GlobalEvalError = DefineError(global, function EvalError() { });
 | 
| -GlobalRangeError = DefineError(global, function RangeError() { });
 | 
| -GlobalReferenceError = DefineError(global, function ReferenceError() { });
 | 
| -GlobalSyntaxError = DefineError(global, function SyntaxError() { });
 | 
| -GlobalTypeError = DefineError(global, function TypeError() { });
 | 
| -GlobalURIError = DefineError(global, function URIError() { });
 | 
| -
 | 
| -%AddNamedProperty(GlobalError.prototype, 'message', '', DONT_ENUM);
 | 
| -
 | 
| -function ErrorToString() {
 | 
| -  if (!IS_SPEC_OBJECT(this)) {
 | 
| -    throw MakeTypeError(kCalledOnNonObject, "Error.prototype.toString");
 | 
| -  }
 | 
| -
 | 
| -  return %ErrorToStringRT(this);
 | 
| -}
 | 
| -
 | 
| -utils.InstallFunctions(GlobalError.prototype, DONT_ENUM,
 | 
| -                       ['toString', ErrorToString]);
 | 
| -
 | 
| -$errorToString = ErrorToString;
 | 
| -
 | 
| -MakeError = function(type, arg0, arg1, arg2) {
 | 
| -  return MakeGenericError(GlobalError, type, arg0, arg1, arg2);
 | 
| -}
 | 
| -
 | 
| -MakeRangeError = function(type, arg0, arg1, arg2) {
 | 
| -  return MakeGenericError(GlobalRangeError, type, arg0, arg1, arg2);
 | 
| -}
 | 
| -
 | 
| -MakeSyntaxError = function(type, arg0, arg1, arg2) {
 | 
| -  return MakeGenericError(GlobalSyntaxError, type, arg0, arg1, arg2);
 | 
| -}
 | 
| -
 | 
| -MakeTypeError = function(type, arg0, arg1, arg2) {
 | 
| -  return MakeGenericError(GlobalTypeError, type, arg0, arg1, arg2);
 | 
| -}
 | 
| -
 | 
| -MakeURIError = function() {
 | 
| -  return MakeGenericError(GlobalURIError, kURIMalformed);
 | 
| -}
 | 
| -
 | 
| -// Boilerplate for exceptions for stack overflows. Used from
 | 
| -// Isolate::StackOverflow().
 | 
| -var StackOverflowBoilerplate = MakeRangeError(kStackOverflow);
 | 
| -%DefineAccessorPropertyUnchecked(StackOverflowBoilerplate, 'stack',
 | 
| -                                 StackTraceGetter, StackTraceSetter,
 | 
| -                                 DONT_ENUM);
 | 
| -
 | 
| -// Define actual captureStackTrace function after everything has been set up.
 | 
| -captureStackTrace = function captureStackTrace(obj, cons_opt) {
 | 
| -  // Define accessors first, as this may fail and throw.
 | 
| -  ObjectDefineProperty(obj, 'stack', { get: StackTraceGetter,
 | 
| -                                       set: StackTraceSetter,
 | 
| -                                       configurable: true });
 | 
| -  %CollectStackTrace(obj, cons_opt ? cons_opt : captureStackTrace);
 | 
| -};
 | 
| -
 | 
| -GlobalError.captureStackTrace = captureStackTrace;
 | 
| -
 | 
| -%InstallToContext([
 | 
| -  "error_function", GlobalError,
 | 
| -  "eval_error_function", GlobalEvalError,
 | 
| -  "get_stack_trace_line_fun", GetStackTraceLine,
 | 
| -  "make_error_function", MakeGenericError,
 | 
| -  "make_range_error", MakeRangeError,
 | 
| -  "make_type_error", MakeTypeError,
 | 
| -  "message_get_column_number", GetColumnNumber,
 | 
| -  "message_get_line_number", GetLineNumber,
 | 
| -  "message_get_source_line", GetSourceLine,
 | 
| -  "no_side_effect_to_string_fun", NoSideEffectToString,
 | 
| -  "range_error_function", GlobalRangeError,
 | 
| -  "reference_error_function", GlobalReferenceError,
 | 
| -  "stack_overflow_boilerplate", StackOverflowBoilerplate,
 | 
| -  "syntax_error_function", GlobalSyntaxError,
 | 
| -  "to_detail_string_fun", ToDetailString,
 | 
| -  "type_error_function", GlobalTypeError,
 | 
| -  "uri_error_function", GlobalURIError,
 | 
| -]);
 | 
| -
 | 
| -});
 | 
| 
 |