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

Side by Side Diff: src/runtime.js

Issue 1323543002: [runtime] Replace %to_string_fun with %_ToString. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@ToStringStub
Patch Set: REBASE. Fixes Created 5 years, 2 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/regexp.js ('k') | src/runtime/runtime-date.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 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 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 // This files contains runtime support implemented in JavaScript. 5 // This files contains runtime support implemented in JavaScript.
6 6
7 // CAUTION: Some of the functions specified in this file are called 7 // CAUTION: Some of the functions specified in this file are called
8 // directly from compiled code. These are the functions with names in 8 // directly from compiled code. These are the functions with names in
9 // ALL CAPS. The compiled code passes the first argument in 'this'. 9 // ALL CAPS. The compiled code passes the first argument in 'this'.
10 10
11 11
12 // The following declarations are shared with other native JS files. 12 // The following declarations are shared with other native JS files.
13 // They are all declared at this one spot to avoid redeclaration errors. 13 // They are all declared at this one spot to avoid redeclaration errors.
14 var $defaultString; 14 var $defaultString;
15 var $NaN; 15 var $NaN;
16 var $nonNumberToNumber; 16 var $nonNumberToNumber;
17 var $nonStringToString;
18 var $sameValue; 17 var $sameValue;
19 var $sameValueZero; 18 var $sameValueZero;
20 var $toInteger; 19 var $toInteger;
21 var $toLength; 20 var $toLength;
22 var $toNumber; 21 var $toNumber;
23 var $toPositiveInteger; 22 var $toPositiveInteger;
24 var $toString;
25 23
26 var harmony_tolength = false; 24 var harmony_tolength = false;
27 25
28 (function(global, utils) { 26 (function(global, utils) {
29 27
30 %CheckIsBootstrapping(); 28 %CheckIsBootstrapping();
31 29
32 var GlobalArray = global.Array; 30 var GlobalArray = global.Array;
33 var GlobalBoolean = global.Boolean; 31 var GlobalBoolean = global.Boolean;
34 var GlobalString = global.String; 32 var GlobalString = global.String;
35 var isConcatSpreadableSymbol = 33 var isConcatSpreadableSymbol =
36 utils.ImportNow("is_concat_spreadable_symbol"); 34 utils.ImportNow("is_concat_spreadable_symbol");
37 35
38 // ---------------------------------------------------------------------------- 36 // ----------------------------------------------------------------------------
39 37
40 /* ----------------------------- 38 /* -----------------------------
41 - - - H e l p e r s - - - 39 - - - H e l p e r s - - -
42 ----------------------------- 40 -----------------------------
43 */ 41 */
44 42
45 function APPLY_PREPARE(args) { 43 function APPLY_PREPARE(args) {
46 var length; 44 var length;
47 45
48 // First check that the receiver is callable. 46 // First check that the receiver is callable.
49 if (!IS_CALLABLE(this)) { 47 if (!IS_CALLABLE(this)) {
50 throw %make_type_error(kApplyNonFunction, %to_string_fun(this), 48 throw %make_type_error(kApplyNonFunction, TO_STRING(this), typeof this);
51 typeof this);
52 } 49 }
53 50
54 // First check whether length is a positive Smi and args is an 51 // First check whether length is a positive Smi and args is an
55 // array. This is the fast case. If this fails, we do the slow case 52 // array. This is the fast case. If this fails, we do the slow case
56 // that takes care of more eventualities. 53 // that takes care of more eventualities.
57 if (IS_ARRAY(args)) { 54 if (IS_ARRAY(args)) {
58 length = args.length; 55 length = args.length;
59 if (%_IsSmi(length) && length >= 0 && length < kSafeArgumentsLength) { 56 if (%_IsSmi(length) && length >= 0 && length < kSafeArgumentsLength) {
60 return length; 57 return length;
61 } 58 }
(...skipping 15 matching lines...) Expand all
77 // stack. It is guaranteed to be a small integer at this point. 74 // stack. It is guaranteed to be a small integer at this point.
78 return length; 75 return length;
79 } 76 }
80 77
81 78
82 function REFLECT_APPLY_PREPARE(args) { 79 function REFLECT_APPLY_PREPARE(args) {
83 var length; 80 var length;
84 81
85 // First check that the receiver is callable. 82 // First check that the receiver is callable.
86 if (!IS_CALLABLE(this)) { 83 if (!IS_CALLABLE(this)) {
87 throw %make_type_error(kApplyNonFunction, %to_string_fun(this), 84 throw %make_type_error(kApplyNonFunction, TO_STRING(this), typeof this);
88 typeof this);
89 } 85 }
90 86
91 // First check whether length is a positive Smi and args is an 87 // First check whether length is a positive Smi and args is an
92 // array. This is the fast case. If this fails, we do the slow case 88 // array. This is the fast case. If this fails, we do the slow case
93 // that takes care of more eventualities. 89 // that takes care of more eventualities.
94 if (IS_ARRAY(args)) { 90 if (IS_ARRAY(args)) {
95 length = args.length; 91 length = args.length;
96 if (%_IsSmi(length) && length >= 0 && length < kSafeArgumentsLength) { 92 if (%_IsSmi(length) && length >= 0 && length < kSafeArgumentsLength) {
97 return length; 93 return length;
98 } 94 }
(...skipping 28 matching lines...) Expand all
127 if (IS_ARRAY(args)) { 123 if (IS_ARRAY(args)) {
128 length = args.length; 124 length = args.length;
129 if (%_IsSmi(length) && length >= 0 && length < kSafeArgumentsLength && 125 if (%_IsSmi(length) && length >= 0 && length < kSafeArgumentsLength &&
130 ctorOk && newTargetOk) { 126 ctorOk && newTargetOk) {
131 return length; 127 return length;
132 } 128 }
133 } 129 }
134 130
135 if (!ctorOk) { 131 if (!ctorOk) {
136 if (!IS_CALLABLE(this)) { 132 if (!IS_CALLABLE(this)) {
137 throw %make_type_error(kCalledNonCallable, %to_string_fun(this)); 133 throw %make_type_error(kCalledNonCallable, TO_STRING(this));
138 } else { 134 } else {
139 throw %make_type_error(kNotConstructor, %to_string_fun(this)); 135 throw %make_type_error(kNotConstructor, TO_STRING(this));
140 } 136 }
141 } 137 }
142 138
143 if (!newTargetOk) { 139 if (!newTargetOk) {
144 if (!IS_CALLABLE(newTarget)) { 140 if (!IS_CALLABLE(newTarget)) {
145 throw %make_type_error(kCalledNonCallable, %to_string_fun(newTarget)); 141 throw %make_type_error(kCalledNonCallable, TO_STRING(newTarget));
146 } else { 142 } else {
147 throw %make_type_error(kNotConstructor, %to_string_fun(newTarget)); 143 throw %make_type_error(kNotConstructor, TO_STRING(newTarget));
148 } 144 }
149 } 145 }
150 146
151 if (!IS_SPEC_OBJECT(args)) { 147 if (!IS_SPEC_OBJECT(args)) {
152 throw %make_type_error(kWrongArgs, "Reflect.construct"); 148 throw %make_type_error(kWrongArgs, "Reflect.construct");
153 } 149 }
154 150
155 length = %to_length_fun(args.length); 151 length = %to_length_fun(args.length);
156 152
157 // We can handle any number of apply arguments if the stack is 153 // We can handle any number of apply arguments if the stack is
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 // ECMA-262, section 9.8, page 35. 209 // ECMA-262, section 9.8, page 35.
214 function ToString(x) { 210 function ToString(x) {
215 if (IS_STRING(x)) return x; 211 if (IS_STRING(x)) return x;
216 if (IS_NUMBER(x)) return %_NumberToString(x); 212 if (IS_NUMBER(x)) return %_NumberToString(x);
217 if (IS_BOOLEAN(x)) return x ? 'true' : 'false'; 213 if (IS_BOOLEAN(x)) return x ? 'true' : 'false';
218 if (IS_UNDEFINED(x)) return 'undefined'; 214 if (IS_UNDEFINED(x)) return 'undefined';
219 // Types that can't be converted to string are caught in DefaultString. 215 // Types that can't be converted to string are caught in DefaultString.
220 return (IS_NULL(x)) ? 'null' : ToString(DefaultString(x)); 216 return (IS_NULL(x)) ? 'null' : ToString(DefaultString(x));
221 } 217 }
222 218
223 function NonStringToString(x) {
224 if (IS_NUMBER(x)) return %_NumberToString(x);
225 if (IS_BOOLEAN(x)) return x ? 'true' : 'false';
226 if (IS_UNDEFINED(x)) return 'undefined';
227 // Types that can't be converted to string are caught in DefaultString.
228 return (IS_NULL(x)) ? 'null' : ToString(DefaultString(x));
229 }
230
231 219
232 // ECMA-262, section 9.4, page 34. 220 // ECMA-262, section 9.4, page 34.
233 function ToInteger(x) { 221 function ToInteger(x) {
234 if (%_IsSmi(x)) return x; 222 if (%_IsSmi(x)) return x;
235 return %NumberToInteger(ToNumber(x)); 223 return %NumberToInteger(ToNumber(x));
236 } 224 }
237 225
238 226
239 // ES6, draft 08-24-14, section 7.1.15 227 // ES6, draft 08-24-14, section 7.1.15
240 function ToLength(arg) { 228 function ToLength(arg) {
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 // that is cloned when running the code. It is essential that the 341 // that is cloned when running the code. It is essential that the
354 // boilerplate gets the right prototype. 342 // boilerplate gets the right prototype.
355 %FunctionSetPrototype(GlobalArray, new GlobalArray(0)); 343 %FunctionSetPrototype(GlobalArray, new GlobalArray(0));
356 344
357 // ---------------------------------------------------------------------------- 345 // ----------------------------------------------------------------------------
358 // Exports 346 // Exports
359 347
360 $defaultString = DefaultString; 348 $defaultString = DefaultString;
361 $NaN = %GetRootNaN(); 349 $NaN = %GetRootNaN();
362 $nonNumberToNumber = NonNumberToNumber; 350 $nonNumberToNumber = NonNumberToNumber;
363 $nonStringToString = NonStringToString;
364 $sameValue = SameValue; 351 $sameValue = SameValue;
365 $sameValueZero = SameValueZero; 352 $sameValueZero = SameValueZero;
366 $toInteger = ToInteger; 353 $toInteger = ToInteger;
367 $toLength = ToLength; 354 $toLength = ToLength;
368 $toNumber = ToNumber; 355 $toNumber = ToNumber;
369 $toPositiveInteger = ToPositiveInteger; 356 $toPositiveInteger = ToPositiveInteger;
370 $toString = ToString;
371 357
372 %InstallToContext([ 358 %InstallToContext([
373 "apply_prepare_builtin", APPLY_PREPARE, 359 "apply_prepare_builtin", APPLY_PREPARE,
374 "concat_iterable_to_array_builtin", CONCAT_ITERABLE_TO_ARRAY, 360 "concat_iterable_to_array_builtin", CONCAT_ITERABLE_TO_ARRAY,
375 "reflect_apply_prepare_builtin", REFLECT_APPLY_PREPARE, 361 "reflect_apply_prepare_builtin", REFLECT_APPLY_PREPARE,
376 "reflect_construct_prepare_builtin", REFLECT_CONSTRUCT_PREPARE, 362 "reflect_construct_prepare_builtin", REFLECT_CONSTRUCT_PREPARE,
377 ]); 363 ]);
378 364
379 %InstallToContext([ 365 %InstallToContext([
380 "concat_iterable_to_array", ConcatIterableToArray, 366 "concat_iterable_to_array", ConcatIterableToArray,
381 "non_number_to_number", NonNumberToNumber, 367 "non_number_to_number", NonNumberToNumber,
382 "non_string_to_string", NonStringToString,
383 "to_integer_fun", ToInteger, 368 "to_integer_fun", ToInteger,
384 "to_length_fun", ToLength, 369 "to_length_fun", ToLength,
385 "to_number_fun", ToNumber, 370 "to_number_fun", ToNumber,
386 "to_string_fun", ToString,
387 ]); 371 ]);
388 372
389 utils.Export(function(to) { 373 utils.Export(function(to) {
390 to.ToBoolean = ToBoolean; 374 to.ToBoolean = ToBoolean;
391 to.ToLength = ToLength; 375 to.ToLength = ToLength;
392 to.ToNumber = ToNumber; 376 to.ToNumber = ToNumber;
393 to.ToString = ToString; 377 to.ToString = ToString;
394 }); 378 });
395 379
396 }) 380 })
OLDNEW
« no previous file with comments | « src/regexp.js ('k') | src/runtime/runtime-date.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698