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

Side by Side Diff: Source/bindings/core/v8/V8Binding.h

Issue 1011093002: [bindings] Pass NormalConversion to to[U]Int{8/16/32/64}(...) in v8_types.py and reduce conversion … (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Patch for landing after review comments! :) Created 5 years, 9 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 | « Source/bindings/core/v8/PrivateScriptRunner.cpp ('k') | Source/bindings/core/v8/V8Binding.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * Copyright (C) 2012 Ericsson AB. All rights reserved. 3 * Copyright (C) 2012 Ericsson AB. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 enum IntegerConversionConfiguration { 368 enum IntegerConversionConfiguration {
369 NormalConversion, 369 NormalConversion,
370 EnforceRange, 370 EnforceRange,
371 Clamp 371 Clamp
372 }; 372 };
373 373
374 // Convert a value to a 8-bit signed integer. The conversion fails if the 374 // Convert a value to a 8-bit signed integer. The conversion fails if the
375 // value cannot be converted to a number or the range violated per WebIDL: 375 // value cannot be converted to a number or the range violated per WebIDL:
376 // http://www.w3.org/TR/WebIDL/#es-byte 376 // http://www.w3.org/TR/WebIDL/#es-byte
377 int8_t toInt8(v8::Isolate*, v8::Handle<v8::Value>, IntegerConversionConfiguratio n, ExceptionState&); 377 int8_t toInt8(v8::Isolate*, v8::Handle<v8::Value>, IntegerConversionConfiguratio n, ExceptionState&);
378 inline int8_t toInt8(v8::Isolate* isolate, v8::Handle<v8::Value> value, Exceptio nState& exceptionState)
379 {
380 return toInt8(isolate, value, NormalConversion, exceptionState);
381 }
382
383 // Convert a value to a 8-bit integer assuming the conversion cannot fail.
384 int8_t toInt8(v8::Isolate*, v8::Handle<v8::Value>);
385 378
386 // Convert a value to a 8-bit unsigned integer. The conversion fails if the 379 // Convert a value to a 8-bit unsigned integer. The conversion fails if the
387 // value cannot be converted to a number or the range violated per WebIDL: 380 // value cannot be converted to a number or the range violated per WebIDL:
388 // http://www.w3.org/TR/WebIDL/#es-octet 381 // http://www.w3.org/TR/WebIDL/#es-octet
389 uint8_t toUInt8(v8::Isolate*, v8::Handle<v8::Value>, IntegerConversionConfigurat ion, ExceptionState&); 382 uint8_t toUInt8(v8::Isolate*, v8::Handle<v8::Value>, IntegerConversionConfigurat ion, ExceptionState&);
390 inline uint8_t toUInt8(v8::Isolate* isolate, v8::Handle<v8::Value> value, Except ionState& exceptionState)
391 {
392 return toUInt8(isolate, value, NormalConversion, exceptionState);
393 }
394
395 // Convert a value to a 8-bit unsigned integer assuming the conversion cannot fa il.
396 uint8_t toUInt8(v8::Isolate*, v8::Handle<v8::Value>);
397 383
398 // Convert a value to a 16-bit signed integer. The conversion fails if the 384 // Convert a value to a 16-bit signed integer. The conversion fails if the
399 // value cannot be converted to a number or the range violated per WebIDL: 385 // value cannot be converted to a number or the range violated per WebIDL:
400 // http://www.w3.org/TR/WebIDL/#es-short 386 // http://www.w3.org/TR/WebIDL/#es-short
401 int16_t toInt16(v8::Isolate*, v8::Handle<v8::Value>, IntegerConversionConfigurat ion, ExceptionState&); 387 int16_t toInt16(v8::Isolate*, v8::Handle<v8::Value>, IntegerConversionConfigurat ion, ExceptionState&);
402 inline int16_t toInt16(v8::Isolate* isolate, v8::Handle<v8::Value> value, Except ionState& exceptionState)
403 {
404 return toInt16(isolate, value, NormalConversion, exceptionState);
405 }
406
407 // Convert a value to a 16-bit integer assuming the conversion cannot fail.
408 int16_t toInt16(v8::Isolate*, v8::Handle<v8::Value>);
409 388
410 // Convert a value to a 16-bit unsigned integer. The conversion fails if the 389 // Convert a value to a 16-bit unsigned integer. The conversion fails if the
411 // value cannot be converted to a number or the range violated per WebIDL: 390 // value cannot be converted to a number or the range violated per WebIDL:
412 // http://www.w3.org/TR/WebIDL/#es-unsigned-short 391 // http://www.w3.org/TR/WebIDL/#es-unsigned-short
413 uint16_t toUInt16(v8::Isolate*, v8::Handle<v8::Value>, IntegerConversionConfigur ation, ExceptionState&); 392 uint16_t toUInt16(v8::Isolate*, v8::Handle<v8::Value>, IntegerConversionConfigur ation, ExceptionState&);
414 inline uint16_t toUInt16(v8::Isolate* isolate, v8::Handle<v8::Value> value, Exce ptionState& exceptionState)
415 {
416 return toUInt16(isolate, value, NormalConversion, exceptionState);
417 }
418
419 // Convert a value to a 16-bit unsigned integer assuming the conversion cannot f ail.
420 uint16_t toUInt16(v8::Isolate*, v8::Handle<v8::Value>);
421
422
423 CORE_EXPORT int32_t toInt32Slow(v8::Isolate*, v8::Handle<v8::Value>, IntegerConv ersionConfiguration, ExceptionState&);
424 393
425 // Convert a value to a 32-bit signed integer. The conversion fails if the 394 // Convert a value to a 32-bit signed integer. The conversion fails if the
426 // value cannot be converted to a number or the range violated per WebIDL: 395 // value cannot be converted to a number or the range violated per WebIDL:
427 // http://www.w3.org/TR/WebIDL/#es-long 396 // http://www.w3.org/TR/WebIDL/#es-long
397 CORE_EXPORT int32_t toInt32Slow(v8::Isolate*, v8::Handle<v8::Value>, IntegerConv ersionConfiguration, ExceptionState&);
428 inline int32_t toInt32(v8::Isolate* isolate, v8::Handle<v8::Value> value, Intege rConversionConfiguration configuration, ExceptionState& exceptionState) 398 inline int32_t toInt32(v8::Isolate* isolate, v8::Handle<v8::Value> value, Intege rConversionConfiguration configuration, ExceptionState& exceptionState)
429 { 399 {
430 // Fast case. The value is already a 32-bit integer. 400 // Fast case. The value is already a 32-bit integer.
431 if (value->IsInt32()) 401 if (value->IsInt32())
432 return value->Int32Value(); 402 return value->Int32Value();
433 return toInt32Slow(isolate, value, configuration, exceptionState); 403 return toInt32Slow(isolate, value, configuration, exceptionState);
434 } 404 }
435 405
436 inline int32_t toInt32(v8::Isolate* isolate, v8::Handle<v8::Value> value, Except ionState& exceptionState)
437 {
438 return toInt32(isolate, value, NormalConversion, exceptionState);
439 }
440
441 // Convert a value to a 32-bit integer assuming the conversion cannot fail.
442 int32_t toInt32(v8::Isolate*, v8::Handle<v8::Value>);
443
444 // Convert a value to a 32-bit unsigned integer. The conversion fails if the 406 // Convert a value to a 32-bit unsigned integer. The conversion fails if the
445 // value cannot be converted to a number or the range violated per WebIDL: 407 // value cannot be converted to a number or the range violated per WebIDL:
446 // http://www.w3.org/TR/WebIDL/#es-unsigned-long 408 // http://www.w3.org/TR/WebIDL/#es-unsigned-long
447 CORE_EXPORT uint32_t toUInt32Slow(v8::Isolate*, v8::Handle<v8::Value>, IntegerCo nversionConfiguration, ExceptionState&); 409 CORE_EXPORT uint32_t toUInt32Slow(v8::Isolate*, v8::Handle<v8::Value>, IntegerCo nversionConfiguration, ExceptionState&);
448 inline uint32_t toUInt32(v8::Isolate* isolate, v8::Handle<v8::Value> value, Inte gerConversionConfiguration configuration, ExceptionState& exceptionState) 410 inline uint32_t toUInt32(v8::Isolate* isolate, v8::Handle<v8::Value> value, Inte gerConversionConfiguration configuration, ExceptionState& exceptionState)
449 { 411 {
450 // Fast case. The value is already a 32-bit unsigned integer. 412 // Fast case. The value is already a 32-bit unsigned integer.
451 if (value->IsUint32()) 413 if (value->IsUint32())
452 return value->Uint32Value(); 414 return value->Uint32Value();
453 415
454 // Fast case. The value is a 32-bit signed integer with NormalConversion con figuration. 416 // Fast case. The value is a 32-bit signed integer with NormalConversion con figuration.
455 if (value->IsInt32() && configuration == NormalConversion) 417 if (value->IsInt32() && configuration == NormalConversion)
456 return value->Int32Value(); 418 return value->Int32Value();
457 419
458 return toUInt32Slow(isolate, value, configuration, exceptionState); 420 return toUInt32Slow(isolate, value, configuration, exceptionState);
459 } 421 }
460 422
461 inline uint32_t toUInt32(v8::Isolate* isolate, v8::Handle<v8::Value> value, Exce ptionState& exceptionState)
462 {
463 return toUInt32(isolate, value, NormalConversion, exceptionState);
464 }
465
466 // Convert a value to a 32-bit unsigned integer assuming the conversion cannot f ail.
467 uint32_t toUInt32(v8::Isolate*, v8::Handle<v8::Value>);
468
469 CORE_EXPORT int64_t toInt64Slow(v8::Isolate*, v8::Handle<v8::Value>, IntegerConv ersionConfiguration, ExceptionState&);
470
471 // Convert a value to a 64-bit signed integer. The conversion fails if the 423 // Convert a value to a 64-bit signed integer. The conversion fails if the
472 // value cannot be converted to a number or the range violated per WebIDL: 424 // value cannot be converted to a number or the range violated per WebIDL:
473 // http://www.w3.org/TR/WebIDL/#es-long-long 425 // http://www.w3.org/TR/WebIDL/#es-long-long
426 CORE_EXPORT int64_t toInt64Slow(v8::Isolate*, v8::Handle<v8::Value>, IntegerConv ersionConfiguration, ExceptionState&);
474 inline int64_t toInt64(v8::Isolate* isolate, v8::Handle<v8::Value> value, Intege rConversionConfiguration configuration, ExceptionState& exceptionState) 427 inline int64_t toInt64(v8::Isolate* isolate, v8::Handle<v8::Value> value, Intege rConversionConfiguration configuration, ExceptionState& exceptionState)
475 { 428 {
476 // Clamping not supported for int64_t/long long int. See Source/wtf/MathExtr as.h. 429 // Clamping not supported for int64_t/long long int. See Source/wtf/MathExtr as.h.
477 ASSERT(configuration != Clamp); 430 ASSERT(configuration != Clamp);
478 431
479 // Fast case. The value is a 32-bit integer. 432 // Fast case. The value is a 32-bit integer.
480 if (value->IsInt32()) 433 if (value->IsInt32())
481 return value->Int32Value(); 434 return value->Int32Value();
482 435
483 return toInt64Slow(isolate, value, configuration, exceptionState); 436 return toInt64Slow(isolate, value, configuration, exceptionState);
484 } 437 }
485 438
486 inline int64_t toInt64(v8::Isolate* isolate, v8::Handle<v8::Value> value, Except ionState& exceptionState)
487 {
488 return toInt64(isolate, value, NormalConversion, exceptionState);
489 }
490
491 // Convert a value to a 64-bit integer assuming the conversion cannot fail.
492 int64_t toInt64(v8::Isolate*, v8::Handle<v8::Value>);
493
494 CORE_EXPORT uint64_t toUInt64Slow(v8::Isolate*, v8::Handle<v8::Value>, IntegerCo nversionConfiguration, ExceptionState&);
495
496 // Convert a value to a 64-bit unsigned integer. The conversion fails if the 439 // Convert a value to a 64-bit unsigned integer. The conversion fails if the
497 // value cannot be converted to a number or the range violated per WebIDL: 440 // value cannot be converted to a number or the range violated per WebIDL:
498 // http://www.w3.org/TR/WebIDL/#es-unsigned-long-long 441 // http://www.w3.org/TR/WebIDL/#es-unsigned-long-long
442 CORE_EXPORT uint64_t toUInt64Slow(v8::Isolate*, v8::Handle<v8::Value>, IntegerCo nversionConfiguration, ExceptionState&);
499 inline uint64_t toUInt64(v8::Isolate* isolate, v8::Handle<v8::Value> value, Inte gerConversionConfiguration configuration, ExceptionState& exceptionState) 443 inline uint64_t toUInt64(v8::Isolate* isolate, v8::Handle<v8::Value> value, Inte gerConversionConfiguration configuration, ExceptionState& exceptionState)
500 { 444 {
501 // Fast case. The value is a 32-bit unsigned integer. 445 // Fast case. The value is a 32-bit unsigned integer.
502 if (value->IsUint32()) 446 if (value->IsUint32())
503 return value->Uint32Value(); 447 return value->Uint32Value();
504 448
505 if (value->IsInt32() && configuration == NormalConversion) 449 if (value->IsInt32() && configuration == NormalConversion)
506 return value->Int32Value(); 450 return value->Int32Value();
507 451
508 return toUInt64Slow(isolate, value, configuration, exceptionState); 452 return toUInt64Slow(isolate, value, configuration, exceptionState);
509 } 453 }
510 454
511 inline uint64_t toUInt64(v8::Isolate* isolate, v8::Handle<v8::Value> value, Exce ptionState& exceptionState)
512 {
513 return toUInt64(isolate, value, NormalConversion, exceptionState);
514 }
515
516 // Convert a value to a 64-bit unsigned integer assuming the conversion cannot f ail.
517 uint64_t toUInt64(v8::Isolate*, v8::Handle<v8::Value>);
518
519 // Convert a value to a double precision float, which might fail. 455 // Convert a value to a double precision float, which might fail.
520 CORE_EXPORT double toDoubleSlow(v8::Isolate*, v8::Handle<v8::Value>, ExceptionSt ate&); 456 CORE_EXPORT double toDoubleSlow(v8::Isolate*, v8::Handle<v8::Value>, ExceptionSt ate&);
521
522 inline double toDouble(v8::Isolate* isolate, v8::Handle<v8::Value> value, Except ionState& exceptionState) 457 inline double toDouble(v8::Isolate* isolate, v8::Handle<v8::Value> value, Except ionState& exceptionState)
523 { 458 {
524 if (value->IsNumber()) 459 if (value->IsNumber())
525 return value->NumberValue(); 460 return value->NumberValue();
526 return toDoubleSlow(isolate, value, exceptionState); 461 return toDoubleSlow(isolate, value, exceptionState);
527 } 462 }
528 463
529 // Convert a value to a double precision float, throwing on non-finite values. 464 // Convert a value to a double precision float, throwing on non-finite values.
530 CORE_EXPORT double toRestrictedDouble(v8::Isolate*, v8::Handle<v8::Value>, Excep tionState&); 465 CORE_EXPORT double toRestrictedDouble(v8::Isolate*, v8::Handle<v8::Value>, Excep tionState&);
531 466
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 if (!stringValue.prepare(exceptionState)) 782 if (!stringValue.prepare(exceptionState))
848 return String(); 783 return String();
849 return stringValue; 784 return stringValue;
850 } 785 }
851 }; 786 };
852 787
853 template<> 788 template<>
854 struct NativeValueTraits<int> { 789 struct NativeValueTraits<int> {
855 static inline int nativeValue(v8::Local<v8::Value> value, v8::Isolate* isola te, ExceptionState& exceptionState) 790 static inline int nativeValue(v8::Local<v8::Value> value, v8::Isolate* isola te, ExceptionState& exceptionState)
856 { 791 {
857 return toInt32(isolate, value, exceptionState); 792 return toInt32(isolate, value, NormalConversion, exceptionState);
858 } 793 }
859 }; 794 };
860 795
861 template<> 796 template<>
862 struct NativeValueTraits<unsigned> { 797 struct NativeValueTraits<unsigned> {
863 static inline unsigned nativeValue(v8::Local<v8::Value> value, v8::Isolate* isolate, ExceptionState& exceptionState) 798 static inline unsigned nativeValue(v8::Local<v8::Value> value, v8::Isolate* isolate, ExceptionState& exceptionState)
864 { 799 {
865 return toUInt32(isolate, value, exceptionState); 800 return toUInt32(isolate, value, NormalConversion, exceptionState);
866 } 801 }
867 }; 802 };
868 803
869 template<> 804 template<>
870 struct NativeValueTraits<float> { 805 struct NativeValueTraits<float> {
871 static inline float nativeValue(v8::Local<v8::Value> value, v8::Isolate* iso late, ExceptionState& exceptionState) 806 static inline float nativeValue(v8::Local<v8::Value> value, v8::Isolate* iso late, ExceptionState& exceptionState)
872 { 807 {
873 return toFloat(isolate, value, exceptionState); 808 return toFloat(isolate, value, exceptionState);
874 } 809 }
875 }; 810 };
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
1059 994
1060 // Callback functions used by generated code. 995 // Callback functions used by generated code.
1061 void v8ConstructorAttributeGetterAsProperty(v8::Local<v8::Name> propertyName, co nst v8::PropertyCallbackInfo<v8::Value>&); 996 void v8ConstructorAttributeGetterAsProperty(v8::Local<v8::Name> propertyName, co nst v8::PropertyCallbackInfo<v8::Value>&);
1062 void v8ConstructorAttributeGetterAsAccessor(const v8::FunctionCallbackInfo<v8::V alue>&); 997 void v8ConstructorAttributeGetterAsAccessor(const v8::FunctionCallbackInfo<v8::V alue>&);
1063 998
1064 typedef void (*InstallTemplateFunction)(v8::Local<v8::FunctionTemplate>, v8::Iso late*); 999 typedef void (*InstallTemplateFunction)(v8::Local<v8::FunctionTemplate>, v8::Iso late*);
1065 1000
1066 } // namespace blink 1001 } // namespace blink
1067 1002
1068 #endif // V8Binding_h 1003 #endif // V8Binding_h
OLDNEW
« no previous file with comments | « Source/bindings/core/v8/PrivateScriptRunner.cpp ('k') | Source/bindings/core/v8/V8Binding.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698