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

Side by Side Diff: src/messages.js

Issue 7703005: Prune some internal objects' prototypes. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Reuse original PropertyDescriptor approach. Created 9 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | src/string.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 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
11 // with the distribution. 11 // with the distribution.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 50
51 var kReplacementMarkers = [ "%0", "%1", "%2", "%3" ]; 51 var kReplacementMarkers = [ "%0", "%1", "%2", "%3" ];
52 52
53 function FormatString(format, message) { 53 function FormatString(format, message) {
54 var args = %MessageGetArguments(message); 54 var args = %MessageGetArguments(message);
55 var result = ""; 55 var result = "";
56 var arg_num = 0; 56 var arg_num = 0;
57 for (var i = 0; i < format.length; i++) { 57 for (var i = 0; i < format.length; i++) {
58 var str = format[i]; 58 var str = format[i];
59 for (arg_num = 0; arg_num < kReplacementMarkers.length; arg_num++) { 59 for (arg_num = 0; arg_num < kReplacementMarkers.length; arg_num++) {
60 if (format[i] !== kReplacementMarkers[arg_num]) continue; 60 if (str !== kReplacementMarkers[arg_num]) continue;
61 try { 61 try {
62 str = ToDetailString(args[arg_num]); 62 str = ToDetailString(args[arg_num]);
63 } catch (e) { 63 } catch (e) {
64 str = "#<error>"; 64 str = "#<error>";
65 } 65 }
66 } 66 }
67 result += str; 67 result += str;
68 } 68 }
69 return result; 69 return result;
70 } 70 }
(...skipping 22 matching lines...) Expand all
93 function ToStringCheckErrorObject(obj) { 93 function ToStringCheckErrorObject(obj) {
94 if (IsNativeErrorObject(obj)) { 94 if (IsNativeErrorObject(obj)) {
95 return %_CallFunction(obj, errorToString); 95 return %_CallFunction(obj, errorToString);
96 } else { 96 } else {
97 return ToString(obj); 97 return ToString(obj);
98 } 98 }
99 } 99 }
100 100
101 101
102 function ToDetailString(obj) { 102 function ToDetailString(obj) {
103 if (obj != null && IS_OBJECT(obj) && obj.toString === $Object.prototype.toStri ng) { 103 if (obj != null && IS_OBJECT(obj) &&
104 obj.toString === $Object.prototype.toString) {
104 var constructor = obj.constructor; 105 var constructor = obj.constructor;
105 if (!constructor) return ToStringCheckErrorObject(obj); 106 if (!constructor) return ToStringCheckErrorObject(obj);
106 var constructorName = constructor.name; 107 var constructorName = constructor.name;
107 if (!constructorName || !IS_STRING(constructorName)) { 108 if (!constructorName || !IS_STRING(constructorName)) {
108 return ToStringCheckErrorObject(obj); 109 return ToStringCheckErrorObject(obj);
109 } 110 }
110 return "#<" + constructorName + ">"; 111 return "#<" + constructorName + ">";
111 } else { 112 } else {
112 return ToStringCheckErrorObject(obj); 113 return ToStringCheckErrorObject(obj);
113 } 114 }
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 */ 554 */
554 function SourceLocation(script, position, line, column, start, end) { 555 function SourceLocation(script, position, line, column, start, end) {
555 this.script = script; 556 this.script = script;
556 this.position = position; 557 this.position = position;
557 this.line = line; 558 this.line = line;
558 this.column = column; 559 this.column = column;
559 this.start = start; 560 this.start = start;
560 this.end = end; 561 this.end = end;
561 } 562 }
562 563
564 SourceLocation.prototype.__proto__ = null;
563 565
564 const kLineLengthLimit = 78; 566 const kLineLengthLimit = 78;
565 567
566 /** 568 /**
567 * Restrict source location start and end positions to make the source slice 569 * Restrict source location start and end positions to make the source slice
568 * no more that a certain number of characters wide. 570 * no more that a certain number of characters wide.
569 * @param {number} opt_limit The with limit of the source text with a default 571 * @param {number} opt_limit The with limit of the source text with a default
570 * of 78 572 * of 78
571 * @param {number} opt_before The number of characters to prefer before the 573 * @param {number} opt_before The number of characters to prefer before the
572 * position with a default value of 10 less that the limit 574 * position with a default value of 10 less that the limit
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 * @constructor 644 * @constructor
643 */ 645 */
644 function SourceSlice(script, from_line, to_line, from_position, to_position) { 646 function SourceSlice(script, from_line, to_line, from_position, to_position) {
645 this.script = script; 647 this.script = script;
646 this.from_line = from_line; 648 this.from_line = from_line;
647 this.to_line = to_line; 649 this.to_line = to_line;
648 this.from_position = from_position; 650 this.from_position = from_position;
649 this.to_position = to_position; 651 this.to_position = to_position;
650 } 652 }
651 653
654 SourceSlice.prototype.__proto__ = null;
652 655
653 /** 656 /**
654 * Get the source text for a SourceSlice 657 * Get the source text for a SourceSlice
655 * @return {String} Source text for this slice. The last line will include 658 * @return {String} Source text for this slice. The last line will include
656 * the line terminating characters (if any) 659 * the line terminating characters (if any)
657 */ 660 */
658 SourceSlice.prototype.sourceText = function () { 661 SourceSlice.prototype.sourceText = function () {
659 return %_CallFunction(this.script.source, 662 return %_CallFunction(this.script.source,
660 this.from_position, 663 this.from_position,
661 this.to_position, 664 this.to_position,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
709 desc = ToPropertyDescriptor(desc); 712 desc = ToPropertyDescriptor(desc);
710 DefineOwnProperty(obj, name, desc, true); 713 DefineOwnProperty(obj, name, desc, true);
711 } 714 }
712 715
713 function CallSite(receiver, fun, pos) { 716 function CallSite(receiver, fun, pos) {
714 this.receiver = receiver; 717 this.receiver = receiver;
715 this.fun = fun; 718 this.fun = fun;
716 this.pos = pos; 719 this.pos = pos;
717 } 720 }
718 721
722 CallSite.prototype.__proto__ = null;
723
719 CallSite.prototype.getThis = function () { 724 CallSite.prototype.getThis = function () {
720 return this.receiver; 725 return this.receiver;
721 }; 726 };
722 727
723 CallSite.prototype.getTypeName = function () { 728 CallSite.prototype.getTypeName = function () {
724 var constructor = this.receiver.constructor; 729 var constructor = this.receiver.constructor;
725 if (!constructor) 730 if (!constructor) {
726 return %_CallFunction(this.receiver, ObjectToString); 731 return %_CallFunction(this.receiver, ObjectToString);
732 }
727 var constructorName = constructor.name; 733 var constructorName = constructor.name;
728 if (!constructorName) 734 if (!constructorName) {
729 return %_CallFunction(this.receiver, ObjectToString); 735 return %_CallFunction(this.receiver, ObjectToString);
736 }
730 return constructorName; 737 return constructorName;
731 }; 738 };
732 739
733 CallSite.prototype.isToplevel = function () { 740 CallSite.prototype.isToplevel = function () {
734 if (this.receiver == null) 741 if (this.receiver == null) {
735 return true; 742 return true;
743 }
736 return IS_GLOBAL(this.receiver); 744 return IS_GLOBAL(this.receiver);
737 }; 745 };
738 746
739 CallSite.prototype.isEval = function () { 747 CallSite.prototype.isEval = function () {
740 var script = %FunctionGetScript(this.fun); 748 var script = %FunctionGetScript(this.fun);
741 return script && script.compilation_type == COMPILATION_TYPE_EVAL; 749 return script && script.compilation_type == COMPILATION_TYPE_EVAL;
742 }; 750 };
743 751
744 CallSite.prototype.getEvalOrigin = function () { 752 CallSite.prototype.getEvalOrigin = function () {
745 var script = %FunctionGetScript(this.fun); 753 var script = %FunctionGetScript(this.fun);
(...skipping 12 matching lines...) Expand all
758 CallSite.prototype.getFunctionName = function () { 766 CallSite.prototype.getFunctionName = function () {
759 // See if the function knows its own name 767 // See if the function knows its own name
760 var name = this.fun.name; 768 var name = this.fun.name;
761 if (name) { 769 if (name) {
762 return name; 770 return name;
763 } else { 771 } else {
764 return %FunctionGetInferredName(this.fun); 772 return %FunctionGetInferredName(this.fun);
765 } 773 }
766 // Maybe this is an evaluation? 774 // Maybe this is an evaluation?
767 var script = %FunctionGetScript(this.fun); 775 var script = %FunctionGetScript(this.fun);
768 if (script && script.compilation_type == COMPILATION_TYPE_EVAL) 776 if (script && script.compilation_type == COMPILATION_TYPE_EVAL) {
769 return "eval"; 777 return "eval";
778 }
770 return null; 779 return null;
771 }; 780 };
772 781
773 CallSite.prototype.getMethodName = function () { 782 CallSite.prototype.getMethodName = function () {
774 // See if we can find a unique property on the receiver that holds 783 // See if we can find a unique property on the receiver that holds
775 // this function. 784 // this function.
776 var ownName = this.fun.name; 785 var ownName = this.fun.name;
777 if (ownName && this.receiver && 786 if (ownName && this.receiver &&
778 (%_CallFunction(this.receiver, ownName, ObjectLookupGetter) === this.fun | | 787 (%_CallFunction(this.receiver, ownName, ObjectLookupGetter) === this.fun | |
779 %_CallFunction(this.receiver, ownName, ObjectLookupSetter) === this.fun | | 788 %_CallFunction(this.receiver, ownName, ObjectLookupSetter) === this.fun | |
780 this.receiver[ownName] === this.fun)) { 789 this.receiver[ownName] === this.fun)) {
781 // To handle DontEnum properties we guess that the method has 790 // To handle DontEnum properties we guess that the method has
782 // the same name as the function. 791 // the same name as the function.
783 return ownName; 792 return ownName;
784 } 793 }
785 var name = null; 794 var name = null;
786 for (var prop in this.receiver) { 795 for (var prop in this.receiver) {
787 if (this.receiver.__lookupGetter__(prop) === this.fun || 796 if (this.receiver.__lookupGetter__(prop) === this.fun ||
788 this.receiver.__lookupSetter__(prop) === this.fun || 797 this.receiver.__lookupSetter__(prop) === this.fun ||
789 (!this.receiver.__lookupGetter__(prop) && this.receiver[prop] === this.f un)) { 798 (!this.receiver.__lookupGetter__(prop) && this.receiver[prop] === this.f un)) {
790 // If we find more than one match bail out to avoid confusion. 799 // If we find more than one match bail out to avoid confusion.
791 if (name) 800 if (name) {
792 return null; 801 return null;
802 }
793 name = prop; 803 name = prop;
794 } 804 }
795 } 805 }
796 if (name) 806 if (name) {
797 return name; 807 return name;
808 }
798 return null; 809 return null;
799 }; 810 };
800 811
801 CallSite.prototype.getFileName = function () { 812 CallSite.prototype.getFileName = function () {
802 var script = %FunctionGetScript(this.fun); 813 var script = %FunctionGetScript(this.fun);
803 return script ? script.name : null; 814 return script ? script.name : null;
804 }; 815 };
805 816
806 CallSite.prototype.getLineNumber = function () { 817 CallSite.prototype.getLineNumber = function () {
807 if (this.pos == -1) 818 if (this.pos == -1) {
808 return null; 819 return null;
820 }
809 var script = %FunctionGetScript(this.fun); 821 var script = %FunctionGetScript(this.fun);
810 var location = null; 822 var location = null;
811 if (script) { 823 if (script) {
812 location = script.locationFromPosition(this.pos, true); 824 location = script.locationFromPosition(this.pos, true);
813 } 825 }
814 return location ? location.line + 1 : null; 826 return location ? location.line + 1 : null;
815 }; 827 };
816 828
817 CallSite.prototype.getColumnNumber = function () { 829 CallSite.prototype.getColumnNumber = function () {
818 if (this.pos == -1) 830 if (this.pos == -1) {
819 return null; 831 return null;
832 }
820 var script = %FunctionGetScript(this.fun); 833 var script = %FunctionGetScript(this.fun);
821 var location = null; 834 var location = null;
822 if (script) { 835 if (script) {
823 location = script.locationFromPosition(this.pos, true); 836 location = script.locationFromPosition(this.pos, true);
824 } 837 }
825 return location ? location.column + 1: null; 838 return location ? location.column + 1: null;
826 }; 839 };
827 840
828 CallSite.prototype.isNative = function () { 841 CallSite.prototype.isNative = function () {
829 var script = %FunctionGetScript(this.fun); 842 var script = %FunctionGetScript(this.fun);
830 return script ? (script.type == TYPE_NATIVE) : false; 843 return script ? (script.type == TYPE_NATIVE) : false;
831 }; 844 };
832 845
833 CallSite.prototype.getPosition = function () { 846 CallSite.prototype.getPosition = function () {
834 return this.pos; 847 return this.pos;
835 }; 848 };
836 849
837 CallSite.prototype.isConstructor = function () { 850 CallSite.prototype.isConstructor = function () {
838 var constructor = this.receiver ? this.receiver.constructor : null; 851 var constructor = this.receiver ? this.receiver.constructor : null;
839 if (!constructor) 852 if (!constructor) {
840 return false; 853 return false;
854 }
841 return this.fun === constructor; 855 return this.fun === constructor;
842 }; 856 };
843 857
844 function FormatEvalOrigin(script) { 858 function FormatEvalOrigin(script) {
845 var sourceURL = script.nameOrSourceURL(); 859 var sourceURL = script.nameOrSourceURL();
846 if (sourceURL) 860 if (sourceURL) {
847 return sourceURL; 861 return sourceURL;
862 }
848 863
849 var eval_origin = "eval at "; 864 var eval_origin = "eval at ";
850 if (script.eval_from_function_name) { 865 if (script.eval_from_function_name) {
851 eval_origin += script.eval_from_function_name; 866 eval_origin += script.eval_from_function_name;
852 } else { 867 } else {
853 eval_origin += "<anonymous>"; 868 eval_origin += "<anonymous>";
854 } 869 }
855 870
856 var eval_from_script = script.eval_from_script; 871 var eval_from_script = script.eval_from_script;
857 if (eval_from_script) { 872 if (eval_from_script) {
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
1035 captureStackTrace(this, f); 1050 captureStackTrace(this, f);
1036 } else { 1051 } else {
1037 return new f(m); 1052 return new f(m);
1038 } 1053 }
1039 }); 1054 });
1040 } 1055 }
1041 1056
1042 function captureStackTrace(obj, cons_opt) { 1057 function captureStackTrace(obj, cons_opt) {
1043 var stackTraceLimit = $Error.stackTraceLimit; 1058 var stackTraceLimit = $Error.stackTraceLimit;
1044 if (!stackTraceLimit || !IS_NUMBER(stackTraceLimit)) return; 1059 if (!stackTraceLimit || !IS_NUMBER(stackTraceLimit)) return;
1045 if (stackTraceLimit < 0 || stackTraceLimit > 10000) 1060 if (stackTraceLimit < 0 || stackTraceLimit > 10000) {
1046 stackTraceLimit = 10000; 1061 stackTraceLimit = 10000;
1062 }
1047 var raw_stack = %CollectStackTrace(cons_opt 1063 var raw_stack = %CollectStackTrace(cons_opt
1048 ? cons_opt 1064 ? cons_opt
1049 : captureStackTrace, stackTraceLimit); 1065 : captureStackTrace, stackTraceLimit);
1050 DefineOneShotAccessor(obj, 'stack', function (obj) { 1066 DefineOneShotAccessor(obj, 'stack', function (obj) {
1051 return FormatRawStackTrace(obj, raw_stack); 1067 return FormatRawStackTrace(obj, raw_stack);
1052 }); 1068 });
1053 }; 1069 };
1054 1070
1055 $Math.__proto__ = global.Object.prototype; 1071 $Math.__proto__ = global.Object.prototype;
1056 1072
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1110 } 1126 }
1111 // This helper function is needed because access to properties on 1127 // This helper function is needed because access to properties on
1112 // the builtins object do not work inside of a catch clause. 1128 // the builtins object do not work inside of a catch clause.
1113 function isCyclicErrorMarker(o) { return o === cyclic_error_marker; } 1129 function isCyclicErrorMarker(o) { return o === cyclic_error_marker; }
1114 1130
1115 try { 1131 try {
1116 return %_CallFunction(this, errorToStringDetectCycle); 1132 return %_CallFunction(this, errorToStringDetectCycle);
1117 } catch(e) { 1133 } catch(e) {
1118 // If this error message was encountered already return the empty 1134 // If this error message was encountered already return the empty
1119 // string for it instead of recursively formatting it. 1135 // string for it instead of recursively formatting it.
1120 if (isCyclicErrorMarker(e)) return ''; 1136 if (isCyclicErrorMarker(e)) {
1121 else throw e; 1137 return '';
1138 }
1139 throw e;
1122 } 1140 }
1123 } 1141 }
1124 1142
1125 1143
1126 InstallFunctions($Error.prototype, DONT_ENUM, ['toString', errorToString]); 1144 InstallFunctions($Error.prototype, DONT_ENUM, ['toString', errorToString]);
1127 1145
1128 // Boilerplate for exceptions for stack overflows. Used from 1146 // Boilerplate for exceptions for stack overflows. Used from
1129 // Isolate::StackOverflow(). 1147 // Isolate::StackOverflow().
1130 const kStackOverflowBoilerplate = MakeRangeError('stack_overflow', []); 1148 const kStackOverflowBoilerplate = MakeRangeError('stack_overflow', []);
OLDNEW
« no previous file with comments | « no previous file | src/string.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698