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

Side by Side Diff: src/js/v8natives.js

Issue 1509533003: Rewrite Object.prototype.toString in C++ (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase, add back experimental flag Created 5 years 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/js/prologue.js ('k') | src/objects.h » ('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 (function(global, utils) { 5 (function(global, utils) {
6 6
7 %CheckIsBootstrapping(); 7 %CheckIsBootstrapping();
8 8
9 // ---------------------------------------------------------------------------- 9 // ----------------------------------------------------------------------------
10 // Imports 10 // Imports
11 11
12 var FLAG_harmony_tostring;
13 var GlobalArray = global.Array; 12 var GlobalArray = global.Array;
14 var GlobalBoolean = global.Boolean; 13 var GlobalBoolean = global.Boolean;
15 var GlobalFunction = global.Function; 14 var GlobalFunction = global.Function;
16 var GlobalNumber = global.Number; 15 var GlobalNumber = global.Number;
17 var GlobalObject = global.Object; 16 var GlobalObject = global.Object;
18 var InternalArray = utils.InternalArray; 17 var InternalArray = utils.InternalArray;
19 var iteratorSymbol = utils.ImportNow("iterator_symbol"); 18 var iteratorSymbol = utils.ImportNow("iterator_symbol");
20 var MakeRangeError; 19 var MakeRangeError;
21 var MakeSyntaxError; 20 var MakeSyntaxError;
22 var MakeTypeError; 21 var MakeTypeError;
23 var MathAbs; 22 var MathAbs;
24 var NaN = %GetRootNaN(); 23 var NaN = %GetRootNaN();
24 var ObjectToString = utils.ImportNow("object_to_string");
25 var ObserveBeginPerformSplice; 25 var ObserveBeginPerformSplice;
26 var ObserveEndPerformSplice; 26 var ObserveEndPerformSplice;
27 var ObserveEnqueueSpliceRecord; 27 var ObserveEnqueueSpliceRecord;
28 var SameValue = utils.ImportNow("SameValue"); 28 var SameValue = utils.ImportNow("SameValue");
29 var StringIndexOf; 29 var StringIndexOf;
30 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); 30 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol");
31 31
32 utils.Import(function(from) { 32 utils.Import(function(from) {
33 MakeRangeError = from.MakeRangeError; 33 MakeRangeError = from.MakeRangeError;
34 MakeSyntaxError = from.MakeSyntaxError; 34 MakeSyntaxError = from.MakeSyntaxError;
35 MakeTypeError = from.MakeTypeError; 35 MakeTypeError = from.MakeTypeError;
36 MathAbs = from.MathAbs; 36 MathAbs = from.MathAbs;
37 ObserveBeginPerformSplice = from.ObserveBeginPerformSplice; 37 ObserveBeginPerformSplice = from.ObserveBeginPerformSplice;
38 ObserveEndPerformSplice = from.ObserveEndPerformSplice; 38 ObserveEndPerformSplice = from.ObserveEndPerformSplice;
39 ObserveEnqueueSpliceRecord = from.ObserveEnqueueSpliceRecord; 39 ObserveEnqueueSpliceRecord = from.ObserveEnqueueSpliceRecord;
40 StringIndexOf = from.StringIndexOf; 40 StringIndexOf = from.StringIndexOf;
41 }); 41 });
42 42
43 utils.ImportFromExperimental(function(from) {
44 FLAG_harmony_tostring = from.FLAG_harmony_tostring;
45 });
46
47 // ---------------------------------------------------------------------------- 43 // ----------------------------------------------------------------------------
48 44
49 45
50 // ES6 18.2.3 isNaN(number) 46 // ES6 18.2.3 isNaN(number)
51 function GlobalIsNaN(number) { 47 function GlobalIsNaN(number) {
52 number = TO_NUMBER(number); 48 number = TO_NUMBER(number);
53 return NUMBER_IS_NAN(number); 49 return NUMBER_IS_NAN(number);
54 } 50 }
55 51
56 52
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 "isFinite", GlobalIsFinite, 133 "isFinite", GlobalIsFinite,
138 "parseInt", GlobalParseInt, 134 "parseInt", GlobalParseInt,
139 "parseFloat", GlobalParseFloat, 135 "parseFloat", GlobalParseFloat,
140 "eval", GlobalEval 136 "eval", GlobalEval
141 ]); 137 ]);
142 138
143 139
144 // ---------------------------------------------------------------------------- 140 // ----------------------------------------------------------------------------
145 // Object 141 // Object
146 142
147 // ES6 19.1.3.6 Object.prototype.toString()
148 function ObjectToString() {
149 if (IS_UNDEFINED(this)) return "[object Undefined]";
150 if (IS_NULL(this)) return "[object Null]";
151 var O = TO_OBJECT(this);
152 var builtinTag = %_ClassOf(O);
153 var tag;
154
155 // TODO(caitp): cannot wait to get rid of this flag :>
156 if (FLAG_harmony_tostring) {
157 tag = O[toStringTagSymbol];
158 if (!IS_STRING(tag)) {
159 tag = builtinTag;
160 }
161 } else {
162 tag = builtinTag;
163 }
164
165 return `[object ${tag}]`;
166 }
167
168
169 // ES6 19.1.3.5 Object.prototype.toLocaleString([reserved1 [,reserved2]]) 143 // ES6 19.1.3.5 Object.prototype.toLocaleString([reserved1 [,reserved2]])
170 function ObjectToLocaleString() { 144 function ObjectToLocaleString() {
171 CHECK_OBJECT_COERCIBLE(this, "Object.prototype.toLocaleString"); 145 CHECK_OBJECT_COERCIBLE(this, "Object.prototype.toLocaleString");
172 return this.toString(); 146 return this.toString();
173 } 147 }
174 148
175 149
176 // ES6 19.1.3.7 Object.prototype.valueOf() 150 // ES6 19.1.3.7 Object.prototype.valueOf()
177 function ObjectValueOf() { 151 function ObjectValueOf() {
178 return TO_OBJECT(this); 152 return TO_OBJECT(this);
(...skipping 1329 matching lines...) Expand 10 before | Expand all | Expand 10 after
1508 to.IsNaN = GlobalIsNaN; 1482 to.IsNaN = GlobalIsNaN;
1509 to.NewFunctionString = NewFunctionString; 1483 to.NewFunctionString = NewFunctionString;
1510 to.NumberIsNaN = NumberIsNaN; 1484 to.NumberIsNaN = NumberIsNaN;
1511 to.ObjectDefineProperties = ObjectDefineProperties; 1485 to.ObjectDefineProperties = ObjectDefineProperties;
1512 to.ObjectDefineProperty = ObjectDefineProperty; 1486 to.ObjectDefineProperty = ObjectDefineProperty;
1513 to.ObjectFreeze = ObjectFreezeJS; 1487 to.ObjectFreeze = ObjectFreezeJS;
1514 to.ObjectHasOwnProperty = ObjectHasOwnProperty; 1488 to.ObjectHasOwnProperty = ObjectHasOwnProperty;
1515 to.ObjectIsFrozen = ObjectIsFrozen; 1489 to.ObjectIsFrozen = ObjectIsFrozen;
1516 to.ObjectIsSealed = ObjectIsSealed; 1490 to.ObjectIsSealed = ObjectIsSealed;
1517 to.ObjectKeys = ObjectKeys; 1491 to.ObjectKeys = ObjectKeys;
1518 to.ObjectToString = ObjectToString;
1519 }); 1492 });
1520 1493
1521 %InstallToContext([ 1494 %InstallToContext([
1522 "global_eval_fun", GlobalEval, 1495 "global_eval_fun", GlobalEval,
1523 "object_value_of", ObjectValueOf, 1496 "object_value_of", ObjectValueOf,
1524 "object_to_string", ObjectToString,
1525 ]); 1497 ]);
1526 1498
1527 }) 1499 })
OLDNEW
« no previous file with comments | « src/js/prologue.js ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698