| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2009 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 return static_cast<T>(result); | 199 return static_cast<T>(result); |
| 200 if (configuration == EnforceRange) { | 200 if (configuration == EnforceRange) { |
| 201 exceptionState.throwTypeError("Value is outside the '" + String(type
Name) + "' value range."); | 201 exceptionState.throwTypeError("Value is outside the '" + String(type
Name) + "' value range."); |
| 202 return 0; | 202 return 0; |
| 203 } | 203 } |
| 204 result %= LimitsTrait::numberOfValues; | 204 result %= LimitsTrait::numberOfValues; |
| 205 return static_cast<T>(result > LimitsTrait::maxValue ? result - LimitsTr
ait::numberOfValues : result); | 205 return static_cast<T>(result > LimitsTrait::maxValue ? result - LimitsTr
ait::numberOfValues : result); |
| 206 } | 206 } |
| 207 | 207 |
| 208 // Can the value be converted to a number? | 208 // Can the value be converted to a number? |
| 209 V8TRYCATCH_EXCEPTION_RETURN(v8::Local<v8::Number>, numberObject, value->ToNu
mber(), exceptionState, 0); | 209 TONATIVE_BOOL_EXCEPTIONSTATE_BOOL(v8::Local<v8::Number>, numberObject, value
->ToNumber(), exceptionState, 0); |
| 210 if (numberObject.IsEmpty()) { | 210 if (numberObject.IsEmpty()) { |
| 211 exceptionState.throwTypeError("Not convertible to a number value (of typ
e '" + String(typeName) + "'."); | 211 exceptionState.throwTypeError("Not convertible to a number value (of typ
e '" + String(typeName) + "'."); |
| 212 return 0; | 212 return 0; |
| 213 } | 213 } |
| 214 | 214 |
| 215 if (configuration == EnforceRange) | 215 if (configuration == EnforceRange) |
| 216 return enforceRange(numberObject->Value(), LimitsTrait::minValue, Limits
Trait::maxValue, typeName, exceptionState); | 216 return enforceRange(numberObject->Value(), LimitsTrait::minValue, Limits
Trait::maxValue, typeName, exceptionState); |
| 217 | 217 |
| 218 double numberValue = numberObject->Value(); | 218 double numberValue = numberObject->Value(); |
| 219 if (std::isnan(numberValue) || std::isinf(numberValue) || !numberValue) | 219 if (std::isnan(numberValue) || std::isinf(numberValue) || !numberValue) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 236 if (result >= 0 && result <= LimitsTrait::maxValue) | 236 if (result >= 0 && result <= LimitsTrait::maxValue) |
| 237 return static_cast<T>(result); | 237 return static_cast<T>(result); |
| 238 if (configuration == EnforceRange) { | 238 if (configuration == EnforceRange) { |
| 239 exceptionState.throwTypeError("Value is outside the '" + String(type
Name) + "' value range."); | 239 exceptionState.throwTypeError("Value is outside the '" + String(type
Name) + "' value range."); |
| 240 return 0; | 240 return 0; |
| 241 } | 241 } |
| 242 return static_cast<T>(result); | 242 return static_cast<T>(result); |
| 243 } | 243 } |
| 244 | 244 |
| 245 // Can the value be converted to a number? | 245 // Can the value be converted to a number? |
| 246 V8TRYCATCH_EXCEPTION_RETURN(v8::Local<v8::Number>, numberObject, value->ToNu
mber(), exceptionState, 0); | 246 TONATIVE_BOOL_EXCEPTIONSTATE_BOOL(v8::Local<v8::Number>, numberObject, value
->ToNumber(), exceptionState, 0); |
| 247 if (numberObject.IsEmpty()) { | 247 if (numberObject.IsEmpty()) { |
| 248 exceptionState.throwTypeError("Not convertible to a number value (of typ
e '" + String(typeName) + "'."); | 248 exceptionState.throwTypeError("Not convertible to a number value (of typ
e '" + String(typeName) + "'."); |
| 249 return 0; | 249 return 0; |
| 250 } | 250 } |
| 251 | 251 |
| 252 if (configuration == EnforceRange) | 252 if (configuration == EnforceRange) |
| 253 return enforceRange(numberObject->Value(), 0, LimitsTrait::maxValue, typ
eName, exceptionState); | 253 return enforceRange(numberObject->Value(), 0, LimitsTrait::maxValue, typ
eName, exceptionState); |
| 254 | 254 |
| 255 // Does the value convert to nan or to an infinity? | 255 // Does the value convert to nan or to an infinity? |
| 256 double numberValue = numberObject->Value(); | 256 double numberValue = numberObject->Value(); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 return toUInt16(value, NormalConversion, exceptionState); | 308 return toUInt16(value, NormalConversion, exceptionState); |
| 309 } | 309 } |
| 310 | 310 |
| 311 int32_t toInt32(v8::Handle<v8::Value> value, IntegerConversionConfiguration conf
iguration, ExceptionState& exceptionState) | 311 int32_t toInt32(v8::Handle<v8::Value> value, IntegerConversionConfiguration conf
iguration, ExceptionState& exceptionState) |
| 312 { | 312 { |
| 313 // Fast case. The value is already a 32-bit integer. | 313 // Fast case. The value is already a 32-bit integer. |
| 314 if (value->IsInt32()) | 314 if (value->IsInt32()) |
| 315 return value->Int32Value(); | 315 return value->Int32Value(); |
| 316 | 316 |
| 317 // Can the value be converted to a number? | 317 // Can the value be converted to a number? |
| 318 V8TRYCATCH_EXCEPTION_RETURN(v8::Local<v8::Number>, numberObject, value->ToNu
mber(), exceptionState, 0); | 318 TONATIVE_BOOL_EXCEPTIONSTATE_BOOL(v8::Local<v8::Number>, numberObject, value
->ToNumber(), exceptionState, 0); |
| 319 if (numberObject.IsEmpty()) { | 319 if (numberObject.IsEmpty()) { |
| 320 exceptionState.throwTypeError("Not convertible to a number value (of typ
e 'long'.)"); | 320 exceptionState.throwTypeError("Not convertible to a number value (of typ
e 'long'.)"); |
| 321 return 0; | 321 return 0; |
| 322 } | 322 } |
| 323 | 323 |
| 324 if (configuration == EnforceRange) | 324 if (configuration == EnforceRange) |
| 325 return enforceRange(numberObject->Value(), kMinInt32, kMaxInt32, "long",
exceptionState); | 325 return enforceRange(numberObject->Value(), kMinInt32, kMaxInt32, "long",
exceptionState); |
| 326 | 326 |
| 327 // Does the value convert to nan or to an infinity? | 327 // Does the value convert to nan or to an infinity? |
| 328 double numberValue = numberObject->Value(); | 328 double numberValue = numberObject->Value(); |
| 329 if (std::isnan(numberValue) || std::isinf(numberValue)) | 329 if (std::isnan(numberValue) || std::isinf(numberValue)) |
| 330 return 0; | 330 return 0; |
| 331 | 331 |
| 332 if (configuration == Clamp) | 332 if (configuration == Clamp) |
| 333 return clampTo<int32_t>(numberObject->Value()); | 333 return clampTo<int32_t>(numberObject->Value()); |
| 334 | 334 |
| 335 V8TRYCATCH_EXCEPTION_RETURN(int32_t, result, numberObject->Int32Value(), exc
eptionState, 0); | 335 TONATIVE_BOOL_EXCEPTIONSTATE_BOOL(int32_t, result, numberObject->Int32Value(
), exceptionState, 0); |
| 336 return result; | 336 return result; |
| 337 } | 337 } |
| 338 | 338 |
| 339 int32_t toInt32(v8::Handle<v8::Value> value) | 339 int32_t toInt32(v8::Handle<v8::Value> value) |
| 340 { | 340 { |
| 341 NonThrowableExceptionState exceptionState; | 341 NonThrowableExceptionState exceptionState; |
| 342 return toInt32(value, NormalConversion, exceptionState); | 342 return toInt32(value, NormalConversion, exceptionState); |
| 343 } | 343 } |
| 344 | 344 |
| 345 uint32_t toUInt32(v8::Handle<v8::Value> value, IntegerConversionConfiguration co
nfiguration, ExceptionState& exceptionState) | 345 uint32_t toUInt32(v8::Handle<v8::Value> value, IntegerConversionConfiguration co
nfiguration, ExceptionState& exceptionState) |
| 346 { | 346 { |
| 347 // Fast case. The value is already a 32-bit unsigned integer. | 347 // Fast case. The value is already a 32-bit unsigned integer. |
| 348 if (value->IsUint32()) | 348 if (value->IsUint32()) |
| 349 return value->Uint32Value(); | 349 return value->Uint32Value(); |
| 350 | 350 |
| 351 // Fast case. The value is a 32-bit signed integer - possibly positive? | 351 // Fast case. The value is a 32-bit signed integer - possibly positive? |
| 352 if (value->IsInt32()) { | 352 if (value->IsInt32()) { |
| 353 int32_t result = value->Int32Value(); | 353 int32_t result = value->Int32Value(); |
| 354 if (result >= 0) | 354 if (result >= 0) |
| 355 return result; | 355 return result; |
| 356 if (configuration == EnforceRange) { | 356 if (configuration == EnforceRange) { |
| 357 exceptionState.throwTypeError("Value is outside the 'unsigned long'
value range."); | 357 exceptionState.throwTypeError("Value is outside the 'unsigned long'
value range."); |
| 358 return 0; | 358 return 0; |
| 359 } | 359 } |
| 360 return result; | 360 return result; |
| 361 } | 361 } |
| 362 | 362 |
| 363 // Can the value be converted to a number? | 363 // Can the value be converted to a number? |
| 364 V8TRYCATCH_EXCEPTION_RETURN(v8::Local<v8::Number>, numberObject, value->ToNu
mber(), exceptionState, 0); | 364 TONATIVE_BOOL_EXCEPTIONSTATE_BOOL(v8::Local<v8::Number>, numberObject, value
->ToNumber(), exceptionState, 0); |
| 365 if (numberObject.IsEmpty()) { | 365 if (numberObject.IsEmpty()) { |
| 366 exceptionState.throwTypeError("Not convertible to a number value (of typ
e 'unsigned long'.)"); | 366 exceptionState.throwTypeError("Not convertible to a number value (of typ
e 'unsigned long'.)"); |
| 367 return 0; | 367 return 0; |
| 368 } | 368 } |
| 369 | 369 |
| 370 if (configuration == EnforceRange) | 370 if (configuration == EnforceRange) |
| 371 return enforceRange(numberObject->Value(), 0, kMaxUInt32, "unsigned long
", exceptionState); | 371 return enforceRange(numberObject->Value(), 0, kMaxUInt32, "unsigned long
", exceptionState); |
| 372 | 372 |
| 373 // Does the value convert to nan or to an infinity? | 373 // Does the value convert to nan or to an infinity? |
| 374 double numberValue = numberObject->Value(); | 374 double numberValue = numberObject->Value(); |
| 375 if (std::isnan(numberValue) || std::isinf(numberValue)) | 375 if (std::isnan(numberValue) || std::isinf(numberValue)) |
| 376 return 0; | 376 return 0; |
| 377 | 377 |
| 378 if (configuration == Clamp) | 378 if (configuration == Clamp) |
| 379 return clampTo<uint32_t>(numberObject->Value()); | 379 return clampTo<uint32_t>(numberObject->Value()); |
| 380 | 380 |
| 381 V8TRYCATCH_RETURN(uint32_t, result, numberObject->Uint32Value(), 0); | 381 TONATIVE_BOOL(uint32_t, result, numberObject->Uint32Value(), 0); |
| 382 return result; | 382 return result; |
| 383 } | 383 } |
| 384 | 384 |
| 385 uint32_t toUInt32(v8::Handle<v8::Value> value) | 385 uint32_t toUInt32(v8::Handle<v8::Value> value) |
| 386 { | 386 { |
| 387 NonThrowableExceptionState exceptionState; | 387 NonThrowableExceptionState exceptionState; |
| 388 return toUInt32(value, NormalConversion, exceptionState); | 388 return toUInt32(value, NormalConversion, exceptionState); |
| 389 } | 389 } |
| 390 | 390 |
| 391 int64_t toInt64(v8::Handle<v8::Value> value, IntegerConversionConfiguration conf
iguration, ExceptionState& exceptionState) | 391 int64_t toInt64(v8::Handle<v8::Value> value, IntegerConversionConfiguration conf
iguration, ExceptionState& exceptionState) |
| 392 { | 392 { |
| 393 // Fast case. The value is a 32-bit integer. | 393 // Fast case. The value is a 32-bit integer. |
| 394 if (value->IsInt32()) | 394 if (value->IsInt32()) |
| 395 return value->Int32Value(); | 395 return value->Int32Value(); |
| 396 | 396 |
| 397 // Can the value be converted to a number? | 397 // Can the value be converted to a number? |
| 398 V8TRYCATCH_EXCEPTION_RETURN(v8::Local<v8::Number>, numberObject, value->ToNu
mber(), exceptionState, 0); | 398 TONATIVE_BOOL_EXCEPTIONSTATE_BOOL(v8::Local<v8::Number>, numberObject, value
->ToNumber(), exceptionState, 0); |
| 399 if (numberObject.IsEmpty()) { | 399 if (numberObject.IsEmpty()) { |
| 400 exceptionState.throwTypeError("Not convertible to a number value (of typ
e 'long long'.)"); | 400 exceptionState.throwTypeError("Not convertible to a number value (of typ
e 'long long'.)"); |
| 401 return 0; | 401 return 0; |
| 402 } | 402 } |
| 403 | 403 |
| 404 double x = numberObject->Value(); | 404 double x = numberObject->Value(); |
| 405 | 405 |
| 406 if (configuration == EnforceRange) | 406 if (configuration == EnforceRange) |
| 407 return enforceRange(x, -kJSMaxInteger, kJSMaxInteger, "long long", excep
tionState); | 407 return enforceRange(x, -kJSMaxInteger, kJSMaxInteger, "long long", excep
tionState); |
| 408 | 408 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 434 if (result >= 0) | 434 if (result >= 0) |
| 435 return result; | 435 return result; |
| 436 if (configuration == EnforceRange) { | 436 if (configuration == EnforceRange) { |
| 437 exceptionState.throwTypeError("Value is outside the 'unsigned long l
ong' value range."); | 437 exceptionState.throwTypeError("Value is outside the 'unsigned long l
ong' value range."); |
| 438 return 0; | 438 return 0; |
| 439 } | 439 } |
| 440 return result; | 440 return result; |
| 441 } | 441 } |
| 442 | 442 |
| 443 // Can the value be converted to a number? | 443 // Can the value be converted to a number? |
| 444 V8TRYCATCH_EXCEPTION_RETURN(v8::Local<v8::Number>, numberObject, value->ToNu
mber(), exceptionState, 0); | 444 TONATIVE_BOOL_EXCEPTIONSTATE_BOOL(v8::Local<v8::Number>, numberObject, value
->ToNumber(), exceptionState, 0); |
| 445 if (numberObject.IsEmpty()) { | 445 if (numberObject.IsEmpty()) { |
| 446 exceptionState.throwTypeError("Not convertible to a number value (of typ
e 'unsigned long long'.)"); | 446 exceptionState.throwTypeError("Not convertible to a number value (of typ
e 'unsigned long long'.)"); |
| 447 return 0; | 447 return 0; |
| 448 } | 448 } |
| 449 | 449 |
| 450 double x = numberObject->Value(); | 450 double x = numberObject->Value(); |
| 451 | 451 |
| 452 if (configuration == EnforceRange) | 452 if (configuration == EnforceRange) |
| 453 return enforceRange(x, 0, kJSMaxInteger, "unsigned long long", exception
State); | 453 return enforceRange(x, 0, kJSMaxInteger, "unsigned long long", exception
State); |
| 454 | 454 |
| 455 // Does the value convert to nan or to an infinity? | 455 // Does the value convert to nan or to an infinity? |
| 456 if (std::isnan(x) || std::isinf(x)) | 456 if (std::isnan(x) || std::isinf(x)) |
| 457 return 0; | 457 return 0; |
| 458 | 458 |
| 459 // NaNs and +/-Infinity should be 0, otherwise modulo 2^64. | 459 // NaNs and +/-Infinity should be 0, otherwise modulo 2^64. |
| 460 unsigned long long integer; | 460 unsigned long long integer; |
| 461 doubleToInteger(x, integer); | 461 doubleToInteger(x, integer); |
| 462 return integer; | 462 return integer; |
| 463 } | 463 } |
| 464 | 464 |
| 465 uint64_t toUInt64(v8::Handle<v8::Value> value) | 465 uint64_t toUInt64(v8::Handle<v8::Value> value) |
| 466 { | 466 { |
| 467 NonThrowableExceptionState exceptionState; | 467 NonThrowableExceptionState exceptionState; |
| 468 return toUInt64(value, NormalConversion, exceptionState); | 468 return toUInt64(value, NormalConversion, exceptionState); |
| 469 } | 469 } |
| 470 | 470 |
| 471 float toFloat(v8::Handle<v8::Value> value, ExceptionState& exceptionState) | 471 float toFloat(v8::Handle<v8::Value> value, ExceptionState& exceptionState) |
| 472 { | 472 { |
| 473 V8TRYCATCH_EXCEPTION_RETURN(v8::Local<v8::Number>, numberObject, value->ToNu
mber(), exceptionState, 0); | 473 TONATIVE_BOOL_EXCEPTIONSTATE_BOOL(v8::Local<v8::Number>, numberObject, value
->ToNumber(), exceptionState, 0); |
| 474 return numberObject->NumberValue(); | 474 return numberObject->NumberValue(); |
| 475 } | 475 } |
| 476 | 476 |
| 477 PassRefPtrWillBeRawPtr<XPathNSResolver> toXPathNSResolver(v8::Handle<v8::Value>
value, v8::Isolate* isolate) | 477 PassRefPtrWillBeRawPtr<XPathNSResolver> toXPathNSResolver(v8::Handle<v8::Value>
value, v8::Isolate* isolate) |
| 478 { | 478 { |
| 479 RefPtrWillBeRawPtr<XPathNSResolver> resolver = nullptr; | 479 RefPtrWillBeRawPtr<XPathNSResolver> resolver = nullptr; |
| 480 if (V8XPathNSResolver::hasInstance(value, isolate)) | 480 if (V8XPathNSResolver::hasInstance(value, isolate)) |
| 481 resolver = V8XPathNSResolver::toNative(v8::Handle<v8::Object>::Cast(valu
e)); | 481 resolver = V8XPathNSResolver::toNative(v8::Handle<v8::Object>::Cast(valu
e)); |
| 482 else if (value->IsObject()) | 482 else if (value->IsObject()) |
| 483 resolver = V8CustomXPathNSResolver::create(value->ToObject(), isolate); | 483 resolver = V8CustomXPathNSResolver::create(value->ToObject(), isolate); |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 671 } | 671 } |
| 672 | 672 |
| 673 V8ExecutionScope::V8ExecutionScope(v8::Isolate* isolate) | 673 V8ExecutionScope::V8ExecutionScope(v8::Isolate* isolate) |
| 674 : m_handleScope(isolate) | 674 : m_handleScope(isolate) |
| 675 , m_contextScope(v8::Context::New(isolate)) | 675 , m_contextScope(v8::Context::New(isolate)) |
| 676 , m_scriptState(NewScriptState::create(isolate->GetCurrentContext(), DOMWrap
perWorld::create())) | 676 , m_scriptState(NewScriptState::create(isolate->GetCurrentContext(), DOMWrap
perWorld::create())) |
| 677 { | 677 { |
| 678 } | 678 } |
| 679 | 679 |
| 680 } // namespace WebCore | 680 } // namespace WebCore |
| OLD | NEW |