| OLD | NEW |
| 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 /* ----------------------------------- | 12 /* ----------------------------------- |
| 13 - - - C o m p a r i s o n - - - | 13 - - - C o m p a r i s o n - - - |
| 14 ----------------------------------- | 14 ----------------------------------- |
| 15 */ | 15 */ |
| 16 | 16 |
| 17 // The following declarations are shared with other native JS files. | 17 // The following declarations are shared with other native JS files. |
| 18 // They are all declared at this one spot to avoid redeclaration errors. | 18 // They are all declared at this one spot to avoid redeclaration errors. |
| 19 var EQUALS; | 19 var EQUALS; |
| 20 var STRICT_EQUALS; | 20 var STRICT_EQUALS; |
| 21 var COMPARE; | 21 var COMPARE; |
| 22 var COMPARE_STRONG; | 22 var COMPARE_STRONG; |
| 23 var ADD; | 23 var ADD; |
| 24 var ADD_STRONG; | 24 var ADD_STRONG; |
| 25 var STRING_ADD_LEFT; | 25 var STRING_ADD_LEFT; |
| 26 var STRING_ADD_LEFT_STRONG; | |
| 27 var STRING_ADD_RIGHT; | 26 var STRING_ADD_RIGHT; |
| 28 var STRING_ADD_RIGHT_STRONG; | |
| 29 var SUB; | 27 var SUB; |
| 30 var SUB_STRONG; | 28 var SUB_STRONG; |
| 31 var MUL; | 29 var MUL; |
| 32 var MUL_STRONG; | 30 var MUL_STRONG; |
| 33 var DIV; | 31 var DIV; |
| 34 var DIV_STRONG; | 32 var DIV_STRONG; |
| 35 var MOD; | 33 var MOD; |
| 36 var MOD_STRONG; | 34 var MOD_STRONG; |
| 37 var BIT_OR; | 35 var BIT_OR; |
| 38 var BIT_OR_STRONG; | 36 var BIT_OR_STRONG; |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 } else { | 253 } else { |
| 256 y = IS_NUMBER(y) | 254 y = IS_NUMBER(y) |
| 257 ? %_NumberToString(y) | 255 ? %_NumberToString(y) |
| 258 : %$toString(%$toPrimitive(y, NO_HINT)); | 256 : %$toString(%$toPrimitive(y, NO_HINT)); |
| 259 } | 257 } |
| 260 } | 258 } |
| 261 return %_StringAdd(this, y); | 259 return %_StringAdd(this, y); |
| 262 } | 260 } |
| 263 | 261 |
| 264 | 262 |
| 265 // Left operand (this) is already a string. | |
| 266 STRING_ADD_LEFT_STRONG = function STRING_ADD_LEFT_STRONG(y) { | |
| 267 if (IS_STRING(y)) { | |
| 268 return %_StringAdd(this, y); | |
| 269 } | |
| 270 throw %MakeTypeError(kStrongImplicitConversion); | |
| 271 } | |
| 272 | |
| 273 | |
| 274 // Right operand (y) is already a string. | 263 // Right operand (y) is already a string. |
| 275 STRING_ADD_RIGHT = function STRING_ADD_RIGHT(y) { | 264 STRING_ADD_RIGHT = function STRING_ADD_RIGHT(y) { |
| 276 var x = this; | 265 var x = this; |
| 277 if (!IS_STRING(x)) { | 266 if (!IS_STRING(x)) { |
| 278 if (IS_STRING_WRAPPER(x) && %_IsStringWrapperSafeForDefaultValueOf(x)) { | 267 if (IS_STRING_WRAPPER(x) && %_IsStringWrapperSafeForDefaultValueOf(x)) { |
| 279 x = %_ValueOf(x); | 268 x = %_ValueOf(x); |
| 280 } else { | 269 } else { |
| 281 x = IS_NUMBER(x) | 270 x = IS_NUMBER(x) |
| 282 ? %_NumberToString(x) | 271 ? %_NumberToString(x) |
| 283 : %$toString(%$toPrimitive(x, NO_HINT)); | 272 : %$toString(%$toPrimitive(x, NO_HINT)); |
| 284 } | 273 } |
| 285 } | 274 } |
| 286 return %_StringAdd(x, y); | 275 return %_StringAdd(x, y); |
| 287 } | 276 } |
| 288 | 277 |
| 289 | 278 |
| 290 // Right operand (y) is already a string. | |
| 291 STRING_ADD_RIGHT_STRONG = function STRING_ADD_RIGHT_STRONG(y) { | |
| 292 if (IS_STRING(this)) { | |
| 293 return %_StringAdd(this, y); | |
| 294 } | |
| 295 throw %MakeTypeError(kStrongImplicitConversion); | |
| 296 } | |
| 297 | |
| 298 | |
| 299 // ECMA-262, section 11.6.2, page 50. | 279 // ECMA-262, section 11.6.2, page 50. |
| 300 SUB = function SUB(y) { | 280 SUB = function SUB(y) { |
| 301 var x = IS_NUMBER(this) ? this : %$nonNumberToNumber(this); | 281 var x = IS_NUMBER(this) ? this : %$nonNumberToNumber(this); |
| 302 if (!IS_NUMBER(y)) y = %$nonNumberToNumber(y); | 282 if (!IS_NUMBER(y)) y = %$nonNumberToNumber(y); |
| 303 return %NumberSub(x, y); | 283 return %NumberSub(x, y); |
| 304 } | 284 } |
| 305 | 285 |
| 306 | 286 |
| 307 // Strong mode SUB throws if an implicit conversion would be performed | 287 // Strong mode SUB throws if an implicit conversion would be performed |
| 308 SUB_STRONG = function SUB_STRONG(y) { | 288 SUB_STRONG = function SUB_STRONG(y) { |
| (...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 955 $toBoolean = ToBoolean; | 935 $toBoolean = ToBoolean; |
| 956 $toInteger = ToInteger; | 936 $toInteger = ToInteger; |
| 957 $toLength = ToLength; | 937 $toLength = ToLength; |
| 958 $toName = ToName; | 938 $toName = ToName; |
| 959 $toNumber = ToNumber; | 939 $toNumber = ToNumber; |
| 960 $toPositiveInteger = ToPositiveInteger; | 940 $toPositiveInteger = ToPositiveInteger; |
| 961 $toPrimitive = ToPrimitive; | 941 $toPrimitive = ToPrimitive; |
| 962 $toString = ToString; | 942 $toString = ToString; |
| 963 | 943 |
| 964 }) | 944 }) |
| OLD | NEW |