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

Side by Side Diff: src/v8natives.js

Issue 151018: Optimize %ClassOf() on IA-32 and use it instead of the... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 5 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 | « src/string.js ('k') | src/x64/codegen-x64.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 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 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 185
186 %SetProperty($Boolean.prototype, "constructor", $Boolean, DONT_ENUM); 186 %SetProperty($Boolean.prototype, "constructor", $Boolean, DONT_ENUM);
187 187
188 // ---------------------------------------------------------------------------- 188 // ----------------------------------------------------------------------------
189 // Object 189 // Object
190 190
191 $Object.prototype.constructor = $Object; 191 $Object.prototype.constructor = $Object;
192 192
193 // ECMA-262 - 15.2.4.2 193 // ECMA-262 - 15.2.4.2
194 function ObjectToString() { 194 function ObjectToString() {
195 var c = %ClassOf(this); 195 var c = %_ClassOf(this);
196 // Hide Arguments from the outside. 196 // Hide Arguments from the outside.
197 if (c === 'Arguments') c = 'Object'; 197 if (c === 'Arguments') c = 'Object';
198 return "[object " + c + "]"; 198 return "[object " + c + "]";
199 } 199 }
200 200
201 201
202 // ECMA-262 - 15.2.4.3 202 // ECMA-262 - 15.2.4.3
203 function ObjectToLocaleString() { 203 function ObjectToLocaleString() {
204 return this.toString(); 204 return this.toString();
205 } 205 }
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 304
305 SetupObject(); 305 SetupObject();
306 306
307 307
308 // ---------------------------------------------------------------------------- 308 // ----------------------------------------------------------------------------
309 // Boolean 309 // Boolean
310 310
311 function BooleanToString() { 311 function BooleanToString() {
312 // NOTE: Both Boolean objects and values can enter here as 312 // NOTE: Both Boolean objects and values can enter here as
313 // 'this'. This is not as dictated by ECMA-262. 313 // 'this'. This is not as dictated by ECMA-262.
314 if (!IS_BOOLEAN(this) && !%HasBooleanClass(this)) 314 if (!IS_BOOLEAN(this) && !IS_BOOLEAN_WRAPPER(this))
315 throw new $TypeError('Boolean.prototype.toString is not generic'); 315 throw new $TypeError('Boolean.prototype.toString is not generic');
316 return ToString(%_ValueOf(this)); 316 return ToString(%_ValueOf(this));
317 } 317 }
318 318
319 319
320 function BooleanValueOf() { 320 function BooleanValueOf() {
321 // NOTE: Both Boolean objects and values can enter here as 321 // NOTE: Both Boolean objects and values can enter here as
322 // 'this'. This is not as dictated by ECMA-262. 322 // 'this'. This is not as dictated by ECMA-262.
323 if (!IS_BOOLEAN(this) && !%HasBooleanClass(this)) 323 if (!IS_BOOLEAN(this) && !IS_BOOLEAN_WRAPPER(this))
324 throw new $TypeError('Boolean.prototype.valueOf is not generic'); 324 throw new $TypeError('Boolean.prototype.valueOf is not generic');
325 return %_ValueOf(this); 325 return %_ValueOf(this);
326 } 326 }
327 327
328 328
329 function BooleanToJSON(key) { 329 function BooleanToJSON(key) {
330 return CheckJSONPrimitive(this.valueOf()); 330 return CheckJSONPrimitive(this.valueOf());
331 } 331 }
332 332
333 333
(...skipping 24 matching lines...) Expand all
358 }); 358 });
359 359
360 %FunctionSetPrototype($Number, new $Number(0)); 360 %FunctionSetPrototype($Number, new $Number(0));
361 361
362 // ECMA-262 section 15.7.4.2. 362 // ECMA-262 section 15.7.4.2.
363 function NumberToString(radix) { 363 function NumberToString(radix) {
364 // NOTE: Both Number objects and values can enter here as 364 // NOTE: Both Number objects and values can enter here as
365 // 'this'. This is not as dictated by ECMA-262. 365 // 'this'. This is not as dictated by ECMA-262.
366 var number = this; 366 var number = this;
367 if (!IS_NUMBER(this)) { 367 if (!IS_NUMBER(this)) {
368 if (!%HasNumberClass(this)) 368 if (!IS_NUMBER_WRAPPER(this))
369 throw new $TypeError('Number.prototype.toString is not generic'); 369 throw new $TypeError('Number.prototype.toString is not generic');
370 // Get the value of this number in case it's an object. 370 // Get the value of this number in case it's an object.
371 number = %_ValueOf(this); 371 number = %_ValueOf(this);
372 } 372 }
373 // Fast case: Convert number in radix 10. 373 // Fast case: Convert number in radix 10.
374 if (IS_UNDEFINED(radix) || radix === 10) { 374 if (IS_UNDEFINED(radix) || radix === 10) {
375 return ToString(number); 375 return ToString(number);
376 } 376 }
377 377
378 // Convert the radix to an integer and check the range. 378 // Convert the radix to an integer and check the range.
379 radix = TO_INTEGER(radix); 379 radix = TO_INTEGER(radix);
380 if (radix < 2 || radix > 36) { 380 if (radix < 2 || radix > 36) {
381 throw new $RangeError('toString() radix argument must be between 2 and 36'); 381 throw new $RangeError('toString() radix argument must be between 2 and 36');
382 } 382 }
383 // Convert the number to a string in the given radix. 383 // Convert the number to a string in the given radix.
384 return %NumberToRadixString(number, radix); 384 return %NumberToRadixString(number, radix);
385 } 385 }
386 386
387 387
388 // ECMA-262 section 15.7.4.3 388 // ECMA-262 section 15.7.4.3
389 function NumberToLocaleString() { 389 function NumberToLocaleString() {
390 return this.toString(); 390 return this.toString();
391 } 391 }
392 392
393 393
394 // ECMA-262 section 15.7.4.4 394 // ECMA-262 section 15.7.4.4
395 function NumberValueOf() { 395 function NumberValueOf() {
396 // NOTE: Both Number objects and values can enter here as 396 // NOTE: Both Number objects and values can enter here as
397 // 'this'. This is not as dictated by ECMA-262. 397 // 'this'. This is not as dictated by ECMA-262.
398 if (!IS_NUMBER(this) && !%HasNumberClass(this)) 398 if (!IS_NUMBER(this) && !IS_NUMBER_WRAPPER(this))
399 throw new $TypeError('Number.prototype.valueOf is not generic'); 399 throw new $TypeError('Number.prototype.valueOf is not generic');
400 return %_ValueOf(this); 400 return %_ValueOf(this);
401 } 401 }
402 402
403 403
404 // ECMA-262 section 15.7.4.5 404 // ECMA-262 section 15.7.4.5
405 function NumberToFixed(fractionDigits) { 405 function NumberToFixed(fractionDigits) {
406 var f = TO_INTEGER(fractionDigits); 406 var f = TO_INTEGER(fractionDigits);
407 if (f < 0 || f > 20) { 407 if (f < 0 || f > 20) {
408 throw new $RangeError("toFixed() digits argument must be between 0 and 20"); 408 throw new $RangeError("toFixed() digits argument must be between 0 and 20");
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 SetupNumber(); 495 SetupNumber();
496 496
497 497
498 498
499 // ---------------------------------------------------------------------------- 499 // ----------------------------------------------------------------------------
500 // Function 500 // Function
501 501
502 $Function.prototype.constructor = $Function; 502 $Function.prototype.constructor = $Function;
503 503
504 function FunctionSourceString(func) { 504 function FunctionSourceString(func) {
505 // NOTE: Both Function objects and values can enter here as 505 if (!IS_FUNCTION(func)) {
506 // 'func'. This is not as dictated by ECMA-262.
507 if (!IS_FUNCTION(func) && !%HasFunctionClass(func))
508 throw new $TypeError('Function.prototype.toString is not generic'); 506 throw new $TypeError('Function.prototype.toString is not generic');
507 }
509 508
510 var source = %FunctionGetSourceCode(func); 509 var source = %FunctionGetSourceCode(func);
511 if (!IS_STRING(source)) { 510 if (!IS_STRING(source)) {
512 var name = %FunctionGetName(func); 511 var name = %FunctionGetName(func);
513 if (name) { 512 if (name) {
514 // Mimic what KJS does. 513 // Mimic what KJS does.
515 return 'function ' + name + '() { [native code] }'; 514 return 'function ' + name + '() { [native code] }';
516 } else { 515 } else {
517 return 'function () { [native code] }'; 516 return 'function () { [native code] }';
518 } 517 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 562
564 // ---------------------------------------------------------------------------- 563 // ----------------------------------------------------------------------------
565 564
566 function SetupFunction() { 565 function SetupFunction() {
567 InstallFunctions($Function.prototype, DONT_ENUM, $Array( 566 InstallFunctions($Function.prototype, DONT_ENUM, $Array(
568 "toString", FunctionToString 567 "toString", FunctionToString
569 )); 568 ));
570 } 569 }
571 570
572 SetupFunction(); 571 SetupFunction();
OLDNEW
« no previous file with comments | « src/string.js ('k') | src/x64/codegen-x64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698