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 // 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 |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 | 285 |
286 SetupObject(); | 286 SetupObject(); |
287 | 287 |
288 | 288 |
289 // ---------------------------------------------------------------------------- | 289 // ---------------------------------------------------------------------------- |
290 // Boolean | 290 // Boolean |
291 | 291 |
292 function BooleanToString() { | 292 function BooleanToString() { |
293 // NOTE: Both Boolean objects and values can enter here as | 293 // NOTE: Both Boolean objects and values can enter here as |
294 // 'this'. This is not as dictated by ECMA-262. | 294 // 'this'. This is not as dictated by ECMA-262. |
295 if (!IS_BOOLEAN(this) && %ClassOf(this) !== 'Boolean') | 295 if (!IS_BOOLEAN(this) && !%IsBooleanClass(this)) |
296 throw new $TypeError('Boolean.prototype.toString is not generic'); | 296 throw new $TypeError('Boolean.prototype.toString is not generic'); |
297 return ToString(%_ValueOf(this)); | 297 return ToString(%_ValueOf(this)); |
298 } | 298 } |
299 | 299 |
300 | 300 |
301 function BooleanValueOf() { | 301 function BooleanValueOf() { |
302 // NOTE: Both Boolean objects and values can enter here as | 302 // NOTE: Both Boolean objects and values can enter here as |
303 // 'this'. This is not as dictated by ECMA-262. | 303 // 'this'. This is not as dictated by ECMA-262. |
304 if (!IS_BOOLEAN(this) && %ClassOf(this) !== 'Boolean') | 304 if (!IS_BOOLEAN(this) && !%IsBooleanClass(this)) |
305 throw new $TypeError('Boolean.prototype.valueOf is not generic'); | 305 throw new $TypeError('Boolean.prototype.valueOf is not generic'); |
306 return %_ValueOf(this); | 306 return %_ValueOf(this); |
307 } | 307 } |
308 | 308 |
309 | 309 |
310 // ---------------------------------------------------------------------------- | 310 // ---------------------------------------------------------------------------- |
311 | 311 |
312 | 312 |
313 function SetupBoolean() { | 313 function SetupBoolean() { |
314 InstallFunctions($Boolean.prototype, DONT_ENUM, $Array( | 314 InstallFunctions($Boolean.prototype, DONT_ENUM, $Array( |
(...skipping 18 matching lines...) Expand all Loading... |
333 }); | 333 }); |
334 | 334 |
335 %FunctionSetPrototype($Number, new $Number(0)); | 335 %FunctionSetPrototype($Number, new $Number(0)); |
336 | 336 |
337 // ECMA-262 section 15.7.4.2. | 337 // ECMA-262 section 15.7.4.2. |
338 function NumberToString(radix) { | 338 function NumberToString(radix) { |
339 // NOTE: Both Number objects and values can enter here as | 339 // NOTE: Both Number objects and values can enter here as |
340 // 'this'. This is not as dictated by ECMA-262. | 340 // 'this'. This is not as dictated by ECMA-262. |
341 var number = this; | 341 var number = this; |
342 if (!IS_NUMBER(this)) { | 342 if (!IS_NUMBER(this)) { |
343 if (%ClassOf(this) !== 'Number') | 343 if (!%IsNumberClass(this)) |
344 throw new $TypeError('Number.prototype.toString is not generic'); | 344 throw new $TypeError('Number.prototype.toString is not generic'); |
345 // Get the value of this number in case it's an object. | 345 // Get the value of this number in case it's an object. |
346 number = %_ValueOf(this); | 346 number = %_ValueOf(this); |
347 } | 347 } |
348 // Fast case: Convert number in radix 10. | 348 // Fast case: Convert number in radix 10. |
349 if (IS_UNDEFINED(radix) || radix === 10) { | 349 if (IS_UNDEFINED(radix) || radix === 10) { |
350 return ToString(number); | 350 return ToString(number); |
351 } | 351 } |
352 | 352 |
353 // Convert the radix to an integer and check the range. | 353 // Convert the radix to an integer and check the range. |
354 radix = TO_INTEGER(radix); | 354 radix = TO_INTEGER(radix); |
355 if (radix < 2 || radix > 36) { | 355 if (radix < 2 || radix > 36) { |
356 throw new $RangeError('toString() radix argument must be between 2 and 36'); | 356 throw new $RangeError('toString() radix argument must be between 2 and 36'); |
357 } | 357 } |
358 // Convert the number to a string in the given radix. | 358 // Convert the number to a string in the given radix. |
359 return %NumberToRadixString(number, radix); | 359 return %NumberToRadixString(number, radix); |
360 } | 360 } |
361 | 361 |
362 | 362 |
363 // ECMA-262 section 15.7.4.3 | 363 // ECMA-262 section 15.7.4.3 |
364 function NumberToLocaleString() { | 364 function NumberToLocaleString() { |
365 return this.toString(); | 365 return this.toString(); |
366 } | 366 } |
367 | 367 |
368 | 368 |
369 // ECMA-262 section 15.7.4.4 | 369 // ECMA-262 section 15.7.4.4 |
370 function NumberValueOf() { | 370 function NumberValueOf() { |
371 // NOTE: Both Number objects and values can enter here as | 371 // NOTE: Both Number objects and values can enter here as |
372 // 'this'. This is not as dictated by ECMA-262. | 372 // 'this'. This is not as dictated by ECMA-262. |
373 if (!IS_NUMBER(this) && %ClassOf(this) !== 'Number') | 373 if (!IS_NUMBER(this) && !%IsNumberClass(this)) |
374 throw new $TypeError('Number.prototype.valueOf is not generic'); | 374 throw new $TypeError('Number.prototype.valueOf is not generic'); |
375 return %_ValueOf(this); | 375 return %_ValueOf(this); |
376 } | 376 } |
377 | 377 |
378 | 378 |
379 // ECMA-262 section 15.7.4.5 | 379 // ECMA-262 section 15.7.4.5 |
380 function NumberToFixed(fractionDigits) { | 380 function NumberToFixed(fractionDigits) { |
381 var f = TO_INTEGER(fractionDigits); | 381 var f = TO_INTEGER(fractionDigits); |
382 if (f < 0 || f > 20) { | 382 if (f < 0 || f > 20) { |
383 throw new $RangeError("toFixed() digits argument must be between 0 and 20"); | 383 throw new $RangeError("toFixed() digits argument must be between 0 and 20"); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 | 459 |
460 | 460 |
461 // ---------------------------------------------------------------------------- | 461 // ---------------------------------------------------------------------------- |
462 // Function | 462 // Function |
463 | 463 |
464 $Function.prototype.constructor = $Function; | 464 $Function.prototype.constructor = $Function; |
465 | 465 |
466 function FunctionSourceString(func) { | 466 function FunctionSourceString(func) { |
467 // NOTE: Both Function objects and values can enter here as | 467 // NOTE: Both Function objects and values can enter here as |
468 // 'func'. This is not as dictated by ECMA-262. | 468 // 'func'. This is not as dictated by ECMA-262. |
469 if (!IS_FUNCTION(func) && %ClassOf(func) != 'Function') | 469 if (!IS_FUNCTION(func) && !%IsFunctionClass(func)) |
470 throw new $TypeError('Function.prototype.toString is not generic'); | 470 throw new $TypeError('Function.prototype.toString is not generic'); |
471 | 471 |
472 var source = %FunctionGetSourceCode(func); | 472 var source = %FunctionGetSourceCode(func); |
473 if (!IS_STRING(source)) { | 473 if (!IS_STRING(source)) { |
474 var name = %FunctionGetName(func); | 474 var name = %FunctionGetName(func); |
475 if (name) { | 475 if (name) { |
476 // Mimic what KJS does. | 476 // Mimic what KJS does. |
477 return 'function ' + name + '() { [native code] }'; | 477 return 'function ' + name + '() { [native code] }'; |
478 } else { | 478 } else { |
479 return 'function () { [native code] }'; | 479 return 'function () { [native code] }'; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
526 // ---------------------------------------------------------------------------- | 526 // ---------------------------------------------------------------------------- |
527 | 527 |
528 function SetupFunction() { | 528 function SetupFunction() { |
529 InstallFunctions($Function.prototype, DONT_ENUM, $Array( | 529 InstallFunctions($Function.prototype, DONT_ENUM, $Array( |
530 "toString", FunctionToString | 530 "toString", FunctionToString |
531 )); | 531 )); |
532 } | 532 } |
533 | 533 |
534 SetupFunction(); | 534 SetupFunction(); |
535 | 535 |
OLD | NEW |