Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1434)

Side by Side Diff: src/messages.js

Issue 1127693006: Reland #2 "Wrap v8natives.js into a function." (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/math.js ('k') | src/mirror-debugger.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // ------------------------------------------------------------------- 5 // -------------------------------------------------------------------
6 6
7 var $errorToString; 7 var $errorToString;
8 var $formatMessage; 8 var $formatMessage;
9 var $getStackTraceLine; 9 var $getStackTraceLine;
10 var $messageGetPositionInLine; 10 var $messageGetPositionInLine;
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 str = "#<error>"; 217 str = "#<error>";
218 } 218 }
219 } 219 }
220 } 220 }
221 result += str; 221 result += str;
222 } 222 }
223 return result; 223 return result;
224 } 224 }
225 225
226 226
227 function NoSideEffectsObjectToString() {
228 if (IS_UNDEFINED(this) && !IS_UNDETECTABLE(this)) return "[object Undefined]";
229 if (IS_NULL(this)) return "[object Null]";
230 return "[object " + %_ClassOf(TO_OBJECT_INLINE(this)) + "]";
231 }
232
233
227 function NoSideEffectToString(obj) { 234 function NoSideEffectToString(obj) {
228 if (IS_STRING(obj)) return obj; 235 if (IS_STRING(obj)) return obj;
229 if (IS_NUMBER(obj)) return %_NumberToString(obj); 236 if (IS_NUMBER(obj)) return %_NumberToString(obj);
230 if (IS_BOOLEAN(obj)) return obj ? 'true' : 'false'; 237 if (IS_BOOLEAN(obj)) return obj ? 'true' : 'false';
231 if (IS_UNDEFINED(obj)) return 'undefined'; 238 if (IS_UNDEFINED(obj)) return 'undefined';
232 if (IS_NULL(obj)) return 'null'; 239 if (IS_NULL(obj)) return 'null';
233 if (IS_FUNCTION(obj)) { 240 if (IS_FUNCTION(obj)) {
234 var str = %_CallFunction(obj, FunctionToString); 241 var str = %_CallFunction(obj, obj, $functionSourceString);
235 if (str.length > 128) { 242 if (str.length > 128) {
236 str = %_SubString(str, 0, 111) + "...<omitted>..." + 243 str = %_SubString(str, 0, 111) + "...<omitted>..." +
237 %_SubString(str, str.length - 2, str.length); 244 %_SubString(str, str.length - 2, str.length);
238 } 245 }
239 return str; 246 return str;
240 } 247 }
241 if (IS_SYMBOL(obj)) return %_CallFunction(obj, $symbolToString); 248 if (IS_SYMBOL(obj)) return %_CallFunction(obj, $symbolToString);
242 if (IS_OBJECT(obj) 249 if (IS_OBJECT(obj)
243 && %GetDataProperty(obj, "toString") === ObjectToString) { 250 && %GetDataProperty(obj, "toString") === $objectToString) {
244 var constructor = %GetDataProperty(obj, "constructor"); 251 var constructor = %GetDataProperty(obj, "constructor");
245 if (typeof constructor == "function") { 252 if (typeof constructor == "function") {
246 var constructorName = constructor.name; 253 var constructorName = constructor.name;
247 if (IS_STRING(constructorName) && constructorName !== "") { 254 if (IS_STRING(constructorName) && constructorName !== "") {
248 return "#<" + constructorName + ">"; 255 return "#<" + constructorName + ">";
249 } 256 }
250 } 257 }
251 } 258 }
252 if (CanBeSafelyTreatedAsAnErrorObject(obj)) { 259 if (CanBeSafelyTreatedAsAnErrorObject(obj)) {
253 return %_CallFunction(obj, ErrorToString); 260 return %_CallFunction(obj, ErrorToString);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 function ToStringCheckErrorObject(obj) { 292 function ToStringCheckErrorObject(obj) {
286 if (CanBeSafelyTreatedAsAnErrorObject(obj)) { 293 if (CanBeSafelyTreatedAsAnErrorObject(obj)) {
287 return %_CallFunction(obj, ErrorToString); 294 return %_CallFunction(obj, ErrorToString);
288 } else { 295 } else {
289 return ToString(obj); 296 return ToString(obj);
290 } 297 }
291 } 298 }
292 299
293 300
294 function ToDetailString(obj) { 301 function ToDetailString(obj) {
295 if (obj != null && IS_OBJECT(obj) && obj.toString === ObjectToString) { 302 if (obj != null && IS_OBJECT(obj) && obj.toString === $objectToString) {
296 var constructor = obj.constructor; 303 var constructor = obj.constructor;
297 if (typeof constructor == "function") { 304 if (typeof constructor == "function") {
298 var constructorName = constructor.name; 305 var constructorName = constructor.name;
299 if (IS_STRING(constructorName) && constructorName !== "") { 306 if (IS_STRING(constructorName) && constructorName !== "") {
300 return "#<" + constructorName + ">"; 307 return "#<" + constructorName + ">";
301 } 308 }
302 } 309 }
303 } 310 }
304 return ToStringCheckErrorObject(obj); 311 return ToStringCheckErrorObject(obj);
305 } 312 }
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 * 570 *
564 * @return {?string} script name if present, value for //# sourceURL or 571 * @return {?string} script name if present, value for //# sourceURL or
565 * deprecated //@ sourceURL comment otherwise. 572 * deprecated //@ sourceURL comment otherwise.
566 */ 573 */
567 function ScriptNameOrSourceURL() { 574 function ScriptNameOrSourceURL() {
568 if (this.source_url) return this.source_url; 575 if (this.source_url) return this.source_url;
569 return this.name; 576 return this.name;
570 } 577 }
571 578
572 579
573 SetUpLockedPrototype(Script, [ 580 $setUpLockedPrototype(Script, [
574 "source", 581 "source",
575 "name", 582 "name",
576 "source_url", 583 "source_url",
577 "source_mapping_url", 584 "source_mapping_url",
578 "line_ends", 585 "line_ends",
579 "line_offset", 586 "line_offset",
580 "column_offset" 587 "column_offset"
581 ], [ 588 ], [
582 "lineFromPosition", ScriptLineFromPosition, 589 "lineFromPosition", ScriptLineFromPosition,
583 "locationFromPosition", ScriptLocationFromPosition, 590 "locationFromPosition", ScriptLocationFromPosition,
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 * Source text for this location. 634 * Source text for this location.
628 */ 635 */
629 function SourceLocationSourceText() { 636 function SourceLocationSourceText() {
630 return %_CallFunction(this.script.source, 637 return %_CallFunction(this.script.source,
631 this.start, 638 this.start,
632 this.end, 639 this.end,
633 $stringSubstring); 640 $stringSubstring);
634 } 641 }
635 642
636 643
637 SetUpLockedPrototype(SourceLocation, 644 $setUpLockedPrototype(SourceLocation,
638 ["script", "position", "line", "column", "start", "end"], 645 ["script", "position", "line", "column", "start", "end"],
639 ["sourceText", SourceLocationSourceText] 646 ["sourceText", SourceLocationSourceText]
640 ); 647 );
641 648
642 649
643 /** 650 /**
644 * Class for a source slice. A source slice is a part of a script source with 651 * Class for a source slice. A source slice is a part of a script source with
645 * the following properties: 652 * the following properties:
646 * script : script object for the source 653 * script : script object for the source
647 * from_line : line number for the first line in the slice 654 * from_line : line number for the first line in the slice
(...skipping 23 matching lines...) Expand all
671 * @return {String} Source text for this slice. The last line will include 678 * @return {String} Source text for this slice. The last line will include
672 * the line terminating characters (if any) 679 * the line terminating characters (if any)
673 */ 680 */
674 function SourceSliceSourceText() { 681 function SourceSliceSourceText() {
675 return %_CallFunction(this.script.source, 682 return %_CallFunction(this.script.source,
676 this.from_position, 683 this.from_position,
677 this.to_position, 684 this.to_position,
678 $stringSubstring); 685 $stringSubstring);
679 } 686 }
680 687
681 SetUpLockedPrototype(SourceSlice, 688 $setUpLockedPrototype(SourceSlice,
682 ["script", "from_line", "to_line", "from_position", "to_position"], 689 ["script", "from_line", "to_line", "from_position", "to_position"],
683 ["sourceText", SourceSliceSourceText] 690 ["sourceText", SourceSliceSourceText]
684 ); 691 );
685 692
686 693
687 // Returns the offset of the given position within the containing 694 // Returns the offset of the given position within the containing
688 // line. 695 // line.
689 function GetPositionInLine(message) { 696 function GetPositionInLine(message) {
690 var script = %MessageGetScript(message); 697 var script = %MessageGetScript(message);
691 var start_position = %MessageGetStartPosition(message); 698 var start_position = %MessageGetStartPosition(message);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 return %CallSiteGetFunctionNameRT(receiver, fun, pos); 773 return %CallSiteGetFunctionNameRT(receiver, fun, pos);
767 } 774 }
768 775
769 function CallSiteGetMethodName() { 776 function CallSiteGetMethodName() {
770 // See if we can find a unique property on the receiver that holds 777 // See if we can find a unique property on the receiver that holds
771 // this function. 778 // this function.
772 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); 779 var receiver = GET_PRIVATE(this, CallSiteReceiverKey);
773 var fun = GET_PRIVATE(this, CallSiteFunctionKey); 780 var fun = GET_PRIVATE(this, CallSiteFunctionKey);
774 var ownName = fun.name; 781 var ownName = fun.name;
775 if (ownName && receiver && 782 if (ownName && receiver &&
776 (%_CallFunction(receiver, ownName, ObjectLookupGetter) === fun || 783 (%_CallFunction(receiver, ownName, $objectLookupGetter) === fun ||
777 %_CallFunction(receiver, ownName, ObjectLookupSetter) === fun || 784 %_CallFunction(receiver, ownName, $objectLookupSetter) === fun ||
778 (IS_OBJECT(receiver) && %GetDataProperty(receiver, ownName) === fun))) { 785 (IS_OBJECT(receiver) && %GetDataProperty(receiver, ownName) === fun))) {
779 // To handle DontEnum properties we guess that the method has 786 // To handle DontEnum properties we guess that the method has
780 // the same name as the function. 787 // the same name as the function.
781 return ownName; 788 return ownName;
782 } 789 }
783 var name = null; 790 var name = null;
784 for (var prop in receiver) { 791 for (var prop in receiver) {
785 if (%_CallFunction(receiver, prop, ObjectLookupGetter) === fun || 792 if (%_CallFunction(receiver, prop, $objectLookupGetter) === fun ||
786 %_CallFunction(receiver, prop, ObjectLookupSetter) === fun || 793 %_CallFunction(receiver, prop, $objectLookupSetter) === fun ||
787 (IS_OBJECT(receiver) && %GetDataProperty(receiver, prop) === fun)) { 794 (IS_OBJECT(receiver) && %GetDataProperty(receiver, prop) === fun)) {
788 // If we find more than one match bail out to avoid confusion. 795 // If we find more than one match bail out to avoid confusion.
789 if (name) { 796 if (name) {
790 return null; 797 return null;
791 } 798 }
792 name = prop; 799 name = prop;
793 } 800 }
794 } 801 }
795 if (name) { 802 if (name) {
796 return name; 803 return name;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 } else { 900 } else {
894 line += fileLocation; 901 line += fileLocation;
895 addSuffix = false; 902 addSuffix = false;
896 } 903 }
897 if (addSuffix) { 904 if (addSuffix) {
898 line += " (" + fileLocation + ")"; 905 line += " (" + fileLocation + ")";
899 } 906 }
900 return line; 907 return line;
901 } 908 }
902 909
903 SetUpLockedPrototype(CallSite, ["receiver", "fun", "pos"], [ 910 $setUpLockedPrototype(CallSite, ["receiver", "fun", "pos"], [
904 "getThis", CallSiteGetThis, 911 "getThis", CallSiteGetThis,
905 "getTypeName", CallSiteGetTypeName, 912 "getTypeName", CallSiteGetTypeName,
906 "isToplevel", CallSiteIsToplevel, 913 "isToplevel", CallSiteIsToplevel,
907 "isEval", CallSiteIsEval, 914 "isEval", CallSiteIsEval,
908 "getEvalOrigin", CallSiteGetEvalOrigin, 915 "getEvalOrigin", CallSiteGetEvalOrigin,
909 "getScriptNameOrSourceURL", CallSiteGetScriptNameOrSourceURL, 916 "getScriptNameOrSourceURL", CallSiteGetScriptNameOrSourceURL,
910 "getFunction", CallSiteGetFunction, 917 "getFunction", CallSiteGetFunction,
911 "getFunctionName", CallSiteGetFunctionName, 918 "getFunctionName", CallSiteGetFunctionName,
912 "getMethodName", CallSiteGetMethodName, 919 "getMethodName", CallSiteGetMethodName,
913 "getFileName", CallSiteGetFileName, 920 "getFileName", CallSiteGetFileName,
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
1082 SET_PRIVATE(this, $stackTraceSymbol, UNDEFINED); 1089 SET_PRIVATE(this, $stackTraceSymbol, UNDEFINED);
1083 SET_PRIVATE(this, formatted_stack_trace_symbol, v); 1090 SET_PRIVATE(this, formatted_stack_trace_symbol, v);
1084 } 1091 }
1085 }; 1092 };
1086 1093
1087 1094
1088 // Use a dummy function since we do not actually want to capture a stack trace 1095 // Use a dummy function since we do not actually want to capture a stack trace
1089 // when constructing the initial Error prototytpes. 1096 // when constructing the initial Error prototytpes.
1090 var captureStackTrace = function captureStackTrace(obj, cons_opt) { 1097 var captureStackTrace = function captureStackTrace(obj, cons_opt) {
1091 // Define accessors first, as this may fail and throw. 1098 // Define accessors first, as this may fail and throw.
1092 ObjectDefineProperty(obj, 'stack', { get: StackTraceGetter, 1099 $objectDefineProperty(obj, 'stack', { get: StackTraceGetter,
1093 set: StackTraceSetter, 1100 set: StackTraceSetter,
1094 configurable: true }); 1101 configurable: true });
1095 %CollectStackTrace(obj, cons_opt ? cons_opt : captureStackTrace); 1102 %CollectStackTrace(obj, cons_opt ? cons_opt : captureStackTrace);
1096 } 1103 }
1097 1104
1098 1105
1099 // Define special error type constructors. 1106 // Define special error type constructors.
1100 function DefineError(f) { 1107 function DefineError(f) {
1101 // Store the error function in both the global object 1108 // Store the error function in both the global object
1102 // and the runtime object. The function is fetched 1109 // and the runtime object. The function is fetched
1103 // from the runtime object when throwing errors from 1110 // from the runtime object when throwing errors from
1104 // within the runtime system to avoid strange side 1111 // within the runtime system to avoid strange side
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1208 } catch(e) { 1215 } catch(e) {
1209 // If this error message was encountered already return the empty 1216 // If this error message was encountered already return the empty
1210 // string for it instead of recursively formatting it. 1217 // string for it instead of recursively formatting it.
1211 if (e === cyclic_error_marker) { 1218 if (e === cyclic_error_marker) {
1212 return ''; 1219 return '';
1213 } 1220 }
1214 throw e; 1221 throw e;
1215 } 1222 }
1216 } 1223 }
1217 1224
1218 InstallFunctions(GlobalError.prototype, DONT_ENUM, ['toString', ErrorToString]); 1225 $installFunctions(GlobalError.prototype, DONT_ENUM,
1226 ['toString', ErrorToString]);
1219 1227
1220 $errorToString = ErrorToString; 1228 $errorToString = ErrorToString;
1221 $formatMessage = FormatMessage; 1229 $formatMessage = FormatMessage;
1222 $getStackTraceLine = GetStackTraceLine; 1230 $getStackTraceLine = GetStackTraceLine;
1223 $messageGetPositionInLine = GetPositionInLine; 1231 $messageGetPositionInLine = GetPositionInLine;
1224 $messageGetLineNumber = GetLineNumber; 1232 $messageGetLineNumber = GetLineNumber;
1225 $messageGetSourceLine = GetSourceLine; 1233 $messageGetSourceLine = GetSourceLine;
1226 $toDetailString = ToDetailString; 1234 $toDetailString = ToDetailString;
1227 1235
1228 $Error = GlobalError; 1236 $Error = GlobalError;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1275 return MakeGenericError(GlobalTypeError, type, [arg]); 1283 return MakeGenericError(GlobalTypeError, type, [arg]);
1276 } 1284 }
1277 1285
1278 //Boilerplate for exceptions for stack overflows. Used from 1286 //Boilerplate for exceptions for stack overflows. Used from
1279 //Isolate::StackOverflow(). 1287 //Isolate::StackOverflow().
1280 $stackOverflowBoilerplate = MakeRangeError(kStackOverflow); 1288 $stackOverflowBoilerplate = MakeRangeError(kStackOverflow);
1281 %DefineAccessorPropertyUnchecked($stackOverflowBoilerplate, 'stack', 1289 %DefineAccessorPropertyUnchecked($stackOverflowBoilerplate, 'stack',
1282 StackTraceGetter, StackTraceSetter, DONT_ENUM); 1290 StackTraceGetter, StackTraceSetter, DONT_ENUM);
1283 1291
1284 })(); 1292 })();
OLDNEW
« no previous file with comments | « src/math.js ('k') | src/mirror-debugger.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698