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

Side by Side Diff: src/messages.js

Issue 1293493004: Unify symbols sharing across native scripts and runtime. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebase Created 5 years, 4 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/messages.cc ('k') | src/objects.cc » ('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 $internalErrorSymbol;
9 var $stackTraceSymbol;
10 var MakeError; 8 var MakeError;
11 var MakeEvalError; 9 var MakeEvalError;
12 var MakeRangeError; 10 var MakeRangeError;
13 var MakeReferenceError; 11 var MakeReferenceError;
14 var MakeSyntaxError; 12 var MakeSyntaxError;
15 var MakeTypeError; 13 var MakeTypeError;
16 var MakeURIError; 14 var MakeURIError;
17 15
18 (function(global, utils) { 16 (function(global, utils) {
19 17
20 %CheckIsBootstrapping(); 18 %CheckIsBootstrapping();
21 19
22 // ------------------------------------------------------------------- 20 // -------------------------------------------------------------------
23 // Imports 21 // Imports
24 22
25 var ArrayJoin; 23 var ArrayJoin;
26 var Bool16x8ToString; 24 var Bool16x8ToString;
27 var Bool32x4ToString; 25 var Bool32x4ToString;
28 var Bool8x16ToString; 26 var Bool8x16ToString;
27 var callSiteReceiverSymbol =
28 utils.GetPrivateSymbol("call_site_receiver_symbol");
29 var callSiteFunctionSymbol =
30 utils.GetPrivateSymbol("call_site_function_symbol");
31 var callSitePositionSymbol =
32 utils.GetPrivateSymbol("call_site_position_symbol");
33 var callSiteStrictSymbol = utils.GetPrivateSymbol("call_site_strict_symbol");
29 var Float32x4ToString; 34 var Float32x4ToString;
35 var formattedStackTraceSymbol =
36 utils.GetPrivateSymbol("formatted_stack_trace_symbol");
30 var FunctionSourceString 37 var FunctionSourceString
31 var GlobalObject = global.Object; 38 var GlobalObject = global.Object;
32 var Int16x8ToString; 39 var Int16x8ToString;
33 var Int32x4ToString; 40 var Int32x4ToString;
34 var Int8x16ToString; 41 var Int8x16ToString;
35 var InternalArray = utils.InternalArray; 42 var InternalArray = utils.InternalArray;
43 var internalErrorSymbol = utils.GetPrivateSymbol("internal_error_symbol");
36 var ObjectDefineProperty; 44 var ObjectDefineProperty;
37 var ObjectToString; 45 var ObjectToString;
46 var stackTraceSymbol = utils.GetPrivateSymbol("stack_trace_symbol");
38 var StringCharAt; 47 var StringCharAt;
39 var StringIndexOf; 48 var StringIndexOf;
40 var StringSubstring; 49 var StringSubstring;
41 var ToString; 50 var ToString;
42 51
43 utils.Import(function(from) { 52 utils.Import(function(from) {
44 ArrayJoin = from.ArrayJoin; 53 ArrayJoin = from.ArrayJoin;
45 Bool16x8ToString = from.Bool16x8ToString; 54 Bool16x8ToString = from.Bool16x8ToString;
46 Bool32x4ToString = from.Bool32x4ToString; 55 Bool32x4ToString = from.Bool32x4ToString;
47 Bool8x16ToString = from.Bool8x16ToString; 56 Bool8x16ToString = from.Bool8x16ToString;
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 return "#<" + constructorName + ">"; 175 return "#<" + constructorName + ">";
167 } 176 }
168 } 177 }
169 } 178 }
170 return ToStringCheckErrorObject(obj); 179 return ToStringCheckErrorObject(obj);
171 } 180 }
172 181
173 182
174 function MakeGenericError(constructor, type, arg0, arg1, arg2) { 183 function MakeGenericError(constructor, type, arg0, arg1, arg2) {
175 var error = new constructor(FormatMessage(type, arg0, arg1, arg2)); 184 var error = new constructor(FormatMessage(type, arg0, arg1, arg2));
176 error[$internalErrorSymbol] = true; 185 error[internalErrorSymbol] = true;
177 return error; 186 return error;
178 } 187 }
179 188
180 189
181 /** 190 /**
182 * Set up the Script function and constructor. 191 * Set up the Script function and constructor.
183 */ 192 */
184 %FunctionSetInstanceClassName(Script, 'Script'); 193 %FunctionSetInstanceClassName(Script, 'Script');
185 %AddNamedProperty(Script.prototype, 'constructor', Script, 194 %AddNamedProperty(Script.prototype, 'constructor', Script,
186 DONT_ENUM | DONT_DELETE | READ_ONLY); 195 DONT_ENUM | DONT_DELETE | READ_ONLY);
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 ); 576 );
568 577
569 578
570 function GetStackTraceLine(recv, fun, pos, isGlobal) { 579 function GetStackTraceLine(recv, fun, pos, isGlobal) {
571 return new CallSite(recv, fun, pos, false).toString(); 580 return new CallSite(recv, fun, pos, false).toString();
572 } 581 }
573 582
574 // ---------------------------------------------------------------------------- 583 // ----------------------------------------------------------------------------
575 // Error implementation 584 // Error implementation
576 585
577 var CallSiteReceiverKey = NEW_PRIVATE("CallSite#receiver");
578 var CallSiteFunctionKey = NEW_PRIVATE("CallSite#function");
579 var CallSitePositionKey = NEW_PRIVATE("CallSite#position");
580 var CallSiteStrictModeKey = NEW_PRIVATE("CallSite#strict_mode");
581
582 function CallSite(receiver, fun, pos, strict_mode) { 586 function CallSite(receiver, fun, pos, strict_mode) {
583 SET_PRIVATE(this, CallSiteReceiverKey, receiver); 587 SET_PRIVATE(this, callSiteReceiverSymbol, receiver);
584 SET_PRIVATE(this, CallSiteFunctionKey, fun); 588 SET_PRIVATE(this, callSiteFunctionSymbol, fun);
585 SET_PRIVATE(this, CallSitePositionKey, pos); 589 SET_PRIVATE(this, callSitePositionSymbol, pos);
586 SET_PRIVATE(this, CallSiteStrictModeKey, strict_mode); 590 SET_PRIVATE(this, callSiteStrictSymbol, strict_mode);
587 } 591 }
588 592
589 function CallSiteGetThis() { 593 function CallSiteGetThis() {
590 return GET_PRIVATE(this, CallSiteStrictModeKey) 594 return GET_PRIVATE(this, callSiteStrictSymbol)
591 ? UNDEFINED : GET_PRIVATE(this, CallSiteReceiverKey); 595 ? UNDEFINED : GET_PRIVATE(this, callSiteReceiverSymbol);
592 } 596 }
593 597
594 function CallSiteGetFunction() { 598 function CallSiteGetFunction() {
595 return GET_PRIVATE(this, CallSiteStrictModeKey) 599 return GET_PRIVATE(this, callSiteStrictSymbol)
596 ? UNDEFINED : GET_PRIVATE(this, CallSiteFunctionKey); 600 ? UNDEFINED : GET_PRIVATE(this, callSiteFunctionSymbol);
597 } 601 }
598 602
599 function CallSiteGetPosition() { 603 function CallSiteGetPosition() {
600 return GET_PRIVATE(this, CallSitePositionKey); 604 return GET_PRIVATE(this, callSitePositionSymbol);
601 } 605 }
602 606
603 function CallSiteGetTypeName() { 607 function CallSiteGetTypeName() {
604 return GetTypeName(GET_PRIVATE(this, CallSiteReceiverKey), false); 608 return GetTypeName(GET_PRIVATE(this, callSiteReceiverSymbol), false);
605 } 609 }
606 610
607 function CallSiteIsToplevel() { 611 function CallSiteIsToplevel() {
608 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); 612 return %CallSiteIsToplevelRT(this);
609 var fun = GET_PRIVATE(this, CallSiteFunctionKey);
610 var pos = GET_PRIVATE(this, CallSitePositionKey);
611 return %CallSiteIsToplevelRT(receiver, fun, pos);
612 } 613 }
613 614
614 function CallSiteIsEval() { 615 function CallSiteIsEval() {
615 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); 616 return %CallSiteIsEvalRT(this);
616 var fun = GET_PRIVATE(this, CallSiteFunctionKey);
617 var pos = GET_PRIVATE(this, CallSitePositionKey);
618 return %CallSiteIsEvalRT(receiver, fun, pos);
619 } 617 }
620 618
621 function CallSiteGetEvalOrigin() { 619 function CallSiteGetEvalOrigin() {
622 var script = %FunctionGetScript(GET_PRIVATE(this, CallSiteFunctionKey)); 620 var script = %FunctionGetScript(GET_PRIVATE(this, callSiteFunctionSymbol));
623 return FormatEvalOrigin(script); 621 return FormatEvalOrigin(script);
624 } 622 }
625 623
626 function CallSiteGetScriptNameOrSourceURL() { 624 function CallSiteGetScriptNameOrSourceURL() {
627 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); 625 return %CallSiteGetScriptNameOrSourceUrlRT(this);
628 var fun = GET_PRIVATE(this, CallSiteFunctionKey);
629 var pos = GET_PRIVATE(this, CallSitePositionKey);
630 return %CallSiteGetScriptNameOrSourceUrlRT(receiver, fun, pos);
631 } 626 }
632 627
633 function CallSiteGetFunctionName() { 628 function CallSiteGetFunctionName() {
634 // See if the function knows its own name 629 // See if the function knows its own name
635 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); 630 return %CallSiteGetFunctionNameRT(this);
636 var fun = GET_PRIVATE(this, CallSiteFunctionKey);
637 var pos = GET_PRIVATE(this, CallSitePositionKey);
638 return %CallSiteGetFunctionNameRT(receiver, fun, pos);
639 } 631 }
640 632
641 function CallSiteGetMethodName() { 633 function CallSiteGetMethodName() {
642 // See if we can find a unique property on the receiver that holds 634 // See if we can find a unique property on the receiver that holds
643 // this function. 635 // this function.
644 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); 636 return %CallSiteGetMethodNameRT(this);
645 var fun = GET_PRIVATE(this, CallSiteFunctionKey);
646 var pos = GET_PRIVATE(this, CallSitePositionKey);
647 return %CallSiteGetMethodNameRT(receiver, fun, pos);
648 } 637 }
649 638
650 function CallSiteGetFileName() { 639 function CallSiteGetFileName() {
651 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); 640 return %CallSiteGetFileNameRT(this);
652 var fun = GET_PRIVATE(this, CallSiteFunctionKey);
653 var pos = GET_PRIVATE(this, CallSitePositionKey);
654 return %CallSiteGetFileNameRT(receiver, fun, pos);
655 } 641 }
656 642
657 function CallSiteGetLineNumber() { 643 function CallSiteGetLineNumber() {
658 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); 644 return %CallSiteGetLineNumberRT(this);
659 var fun = GET_PRIVATE(this, CallSiteFunctionKey);
660 var pos = GET_PRIVATE(this, CallSitePositionKey);
661 return %CallSiteGetLineNumberRT(receiver, fun, pos);
662 } 645 }
663 646
664 function CallSiteGetColumnNumber() { 647 function CallSiteGetColumnNumber() {
665 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); 648 return %CallSiteGetColumnNumberRT(this);
666 var fun = GET_PRIVATE(this, CallSiteFunctionKey);
667 var pos = GET_PRIVATE(this, CallSitePositionKey);
668 return %CallSiteGetColumnNumberRT(receiver, fun, pos);
669 } 649 }
670 650
671 function CallSiteIsNative() { 651 function CallSiteIsNative() {
672 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); 652 return %CallSiteIsNativeRT(this);
673 var fun = GET_PRIVATE(this, CallSiteFunctionKey);
674 var pos = GET_PRIVATE(this, CallSitePositionKey);
675 return %CallSiteIsNativeRT(receiver, fun, pos);
676 } 653 }
677 654
678 function CallSiteIsConstructor() { 655 function CallSiteIsConstructor() {
679 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); 656 return %CallSiteIsConstructorRT(this);
680 var fun = GET_PRIVATE(this, CallSiteFunctionKey);
681 var pos = GET_PRIVATE(this, CallSitePositionKey);
682 return %CallSiteIsConstructorRT(receiver, fun, pos);
683 } 657 }
684 658
685 function CallSiteToString() { 659 function CallSiteToString() {
686 var fileName; 660 var fileName;
687 var fileLocation = ""; 661 var fileLocation = "";
688 if (this.isNative()) { 662 if (this.isNative()) {
689 fileLocation = "native"; 663 fileLocation = "native";
690 } else { 664 } else {
691 fileName = this.getScriptNameOrSourceURL(); 665 fileName = this.getScriptNameOrSourceURL();
692 if (!fileName && this.isEval()) { 666 if (!fileName && this.isEval()) {
(...skipping 18 matching lines...) Expand all
711 } 685 }
712 } 686 }
713 } 687 }
714 688
715 var line = ""; 689 var line = "";
716 var functionName = this.getFunctionName(); 690 var functionName = this.getFunctionName();
717 var addSuffix = true; 691 var addSuffix = true;
718 var isConstructor = this.isConstructor(); 692 var isConstructor = this.isConstructor();
719 var isMethodCall = !(this.isToplevel() || isConstructor); 693 var isMethodCall = !(this.isToplevel() || isConstructor);
720 if (isMethodCall) { 694 if (isMethodCall) {
721 var typeName = GetTypeName(GET_PRIVATE(this, CallSiteReceiverKey), true); 695 var typeName = GetTypeName(GET_PRIVATE(this, callSiteReceiverSymbol), true);
722 var methodName = this.getMethodName(); 696 var methodName = this.getMethodName();
723 if (functionName) { 697 if (functionName) {
724 if (typeName && 698 if (typeName &&
725 %_CallFunction(functionName, typeName, StringIndexOf) != 0) { 699 %_CallFunction(functionName, typeName, StringIndexOf) != 0) {
726 line += typeName + "."; 700 line += typeName + ".";
727 } 701 }
728 line += functionName; 702 line += functionName;
729 if (methodName && 703 if (methodName &&
730 (%_CallFunction(functionName, "." + methodName, StringIndexOf) != 704 (%_CallFunction(functionName, "." + methodName, StringIndexOf) !=
731 functionName.length - methodName.length - 1)) { 705 functionName.length - methodName.length - 1)) {
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
887 %_CallFunction(receiver, NoSideEffectsObjectToString); 861 %_CallFunction(receiver, NoSideEffectsObjectToString);
888 } 862 }
889 var constructorName = constructor.name; 863 var constructorName = constructor.name;
890 if (!constructorName) { 864 if (!constructorName) {
891 return requireConstructor ? null : 865 return requireConstructor ? null :
892 %_CallFunction(receiver, NoSideEffectsObjectToString); 866 %_CallFunction(receiver, NoSideEffectsObjectToString);
893 } 867 }
894 return constructorName; 868 return constructorName;
895 } 869 }
896 870
897 var formatted_stack_trace_symbol = NEW_PRIVATE("formatted stack trace");
898
899 871
900 // Format the stack trace if not yet done, and return it. 872 // Format the stack trace if not yet done, and return it.
901 // Cache the formatted stack trace on the holder. 873 // Cache the formatted stack trace on the holder.
902 var StackTraceGetter = function() { 874 var StackTraceGetter = function() {
903 var formatted_stack_trace = UNDEFINED; 875 var formatted_stack_trace = UNDEFINED;
904 var holder = this; 876 var holder = this;
905 while (holder) { 877 while (holder) {
906 var formatted_stack_trace = 878 var formatted_stack_trace =
907 GET_PRIVATE(holder, formatted_stack_trace_symbol); 879 GET_PRIVATE(holder, formattedStackTraceSymbol);
908 if (IS_UNDEFINED(formatted_stack_trace)) { 880 if (IS_UNDEFINED(formatted_stack_trace)) {
909 // No formatted stack trace available. 881 // No formatted stack trace available.
910 var stack_trace = GET_PRIVATE(holder, $stackTraceSymbol); 882 var stack_trace = GET_PRIVATE(holder, stackTraceSymbol);
911 if (IS_UNDEFINED(stack_trace)) { 883 if (IS_UNDEFINED(stack_trace)) {
912 // Neither formatted nor structured stack trace available. 884 // Neither formatted nor structured stack trace available.
913 // Look further up the prototype chain. 885 // Look further up the prototype chain.
914 holder = %_GetPrototype(holder); 886 holder = %_GetPrototype(holder);
915 continue; 887 continue;
916 } 888 }
917 formatted_stack_trace = FormatStackTrace(holder, stack_trace); 889 formatted_stack_trace = FormatStackTrace(holder, stack_trace);
918 SET_PRIVATE(holder, $stackTraceSymbol, UNDEFINED); 890 SET_PRIVATE(holder, stackTraceSymbol, UNDEFINED);
919 SET_PRIVATE(holder, formatted_stack_trace_symbol, formatted_stack_trace); 891 SET_PRIVATE(holder, formattedStackTraceSymbol, formatted_stack_trace);
920 } 892 }
921 return formatted_stack_trace; 893 return formatted_stack_trace;
922 } 894 }
923 return UNDEFINED; 895 return UNDEFINED;
924 }; 896 };
925 897
926 898
927 // If the receiver equals the holder, set the formatted stack trace that the 899 // If the receiver equals the holder, set the formatted stack trace that the
928 // getter returns. 900 // getter returns.
929 var StackTraceSetter = function(v) { 901 var StackTraceSetter = function(v) {
930 if (HAS_PRIVATE(this, $stackTraceSymbol)) { 902 if (HAS_PRIVATE(this, stackTraceSymbol)) {
931 SET_PRIVATE(this, $stackTraceSymbol, UNDEFINED); 903 SET_PRIVATE(this, stackTraceSymbol, UNDEFINED);
932 SET_PRIVATE(this, formatted_stack_trace_symbol, v); 904 SET_PRIVATE(this, formattedStackTraceSymbol, v);
933 } 905 }
934 }; 906 };
935 907
936 908
937 // Use a dummy function since we do not actually want to capture a stack trace 909 // Use a dummy function since we do not actually want to capture a stack trace
938 // when constructing the initial Error prototytpes. 910 // when constructing the initial Error prototytpes.
939 var captureStackTrace = function() {}; 911 var captureStackTrace = function() {};
940 912
941 913
942 // Define special error type constructors. 914 // Define special error type constructors.
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1056 to.NoSideEffectToString = NoSideEffectToString; 1028 to.NoSideEffectToString = NoSideEffectToString;
1057 to.ToDetailString = ToDetailString; 1029 to.ToDetailString = ToDetailString;
1058 to.MakeError = MakeGenericError; 1030 to.MakeError = MakeGenericError;
1059 to.MessageGetLineNumber = GetLineNumber; 1031 to.MessageGetLineNumber = GetLineNumber;
1060 to.MessageGetColumnNumber = GetColumnNumber; 1032 to.MessageGetColumnNumber = GetColumnNumber;
1061 to.MessageGetSourceLine = GetSourceLine; 1033 to.MessageGetSourceLine = GetSourceLine;
1062 to.StackOverflowBoilerplate = StackOverflowBoilerplate; 1034 to.StackOverflowBoilerplate = StackOverflowBoilerplate;
1063 }); 1035 });
1064 1036
1065 }); 1037 });
OLDNEW
« no previous file with comments | « src/messages.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698