Changeset 43122 in webkit for trunk/JavaScriptCore/runtime/JSImmediate.h
- Timestamp:
- May 1, 2009, 3:43:39 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/runtime/JSImmediate.h
r43121 r43122 43 43 class UString; 44 44 45 JSValue PtrjsNumber(ExecState* exec, double d);46 JSValue PtrjsNumber(ExecState*, char i);47 JSValue PtrjsNumber(ExecState*, unsigned char i);48 JSValue PtrjsNumber(ExecState*, short i);49 JSValue PtrjsNumber(ExecState*, unsigned short i);50 JSValue PtrjsNumber(ExecState* exec, int i);51 JSValue PtrjsNumber(ExecState* exec, unsigned i);52 JSValue PtrjsNumber(ExecState* exec, long i);53 JSValue PtrjsNumber(ExecState* exec, unsigned long i);54 JSValue PtrjsNumber(ExecState* exec, long long i);55 JSValue PtrjsNumber(ExecState* exec, unsigned long long i);56 JSValue PtrjsNumber(JSGlobalData* globalData, double d);57 JSValue PtrjsNumber(JSGlobalData* globalData, short i);58 JSValue PtrjsNumber(JSGlobalData* globalData, unsigned short i);59 JSValue PtrjsNumber(JSGlobalData* globalData, int i);60 JSValue PtrjsNumber(JSGlobalData* globalData, unsigned i);61 JSValue PtrjsNumber(JSGlobalData* globalData, long i);62 JSValue PtrjsNumber(JSGlobalData* globalData, unsigned long i);63 JSValue PtrjsNumber(JSGlobalData* globalData, long long i);64 JSValue PtrjsNumber(JSGlobalData* globalData, unsigned long long i);45 JSValue jsNumber(ExecState* exec, double d); 46 JSValue jsNumber(ExecState*, char i); 47 JSValue jsNumber(ExecState*, unsigned char i); 48 JSValue jsNumber(ExecState*, short i); 49 JSValue jsNumber(ExecState*, unsigned short i); 50 JSValue jsNumber(ExecState* exec, int i); 51 JSValue jsNumber(ExecState* exec, unsigned i); 52 JSValue jsNumber(ExecState* exec, long i); 53 JSValue jsNumber(ExecState* exec, unsigned long i); 54 JSValue jsNumber(ExecState* exec, long long i); 55 JSValue jsNumber(ExecState* exec, unsigned long long i); 56 JSValue jsNumber(JSGlobalData* globalData, double d); 57 JSValue jsNumber(JSGlobalData* globalData, short i); 58 JSValue jsNumber(JSGlobalData* globalData, unsigned short i); 59 JSValue jsNumber(JSGlobalData* globalData, int i); 60 JSValue jsNumber(JSGlobalData* globalData, unsigned i); 61 JSValue jsNumber(JSGlobalData* globalData, long i); 62 JSValue jsNumber(JSGlobalData* globalData, unsigned long i); 63 JSValue jsNumber(JSGlobalData* globalData, long long i); 64 JSValue jsNumber(JSGlobalData* globalData, unsigned long long i); 65 65 66 66 #if USE(ALTERNATE_JSIMMEDIATE) … … 154 154 private: 155 155 friend class JIT; 156 friend class JSValue Ptr;156 friend class JSValue; 157 157 friend class JSFastMath; 158 friend JSValue PtrjsNumber(ExecState* exec, double d);159 friend JSValue PtrjsNumber(ExecState*, char i);160 friend JSValue PtrjsNumber(ExecState*, unsigned char i);161 friend JSValue PtrjsNumber(ExecState*, short i);162 friend JSValue PtrjsNumber(ExecState*, unsigned short i);163 friend JSValue PtrjsNumber(ExecState* exec, int i);164 friend JSValue PtrjsNumber(ExecState* exec, unsigned i);165 friend JSValue PtrjsNumber(ExecState* exec, long i);166 friend JSValue PtrjsNumber(ExecState* exec, unsigned long i);167 friend JSValue PtrjsNumber(ExecState* exec, long long i);168 friend JSValue PtrjsNumber(ExecState* exec, unsigned long long i);169 friend JSValue PtrjsNumber(JSGlobalData* globalData, double d);170 friend JSValue PtrjsNumber(JSGlobalData* globalData, short i);171 friend JSValue PtrjsNumber(JSGlobalData* globalData, unsigned short i);172 friend JSValue PtrjsNumber(JSGlobalData* globalData, int i);173 friend JSValue PtrjsNumber(JSGlobalData* globalData, unsigned i);174 friend JSValue PtrjsNumber(JSGlobalData* globalData, long i);175 friend JSValue PtrjsNumber(JSGlobalData* globalData, unsigned long i);176 friend JSValue PtrjsNumber(JSGlobalData* globalData, long long i);177 friend JSValue PtrjsNumber(JSGlobalData* globalData, unsigned long long i);158 friend JSValue jsNumber(ExecState* exec, double d); 159 friend JSValue jsNumber(ExecState*, char i); 160 friend JSValue jsNumber(ExecState*, unsigned char i); 161 friend JSValue jsNumber(ExecState*, short i); 162 friend JSValue jsNumber(ExecState*, unsigned short i); 163 friend JSValue jsNumber(ExecState* exec, int i); 164 friend JSValue jsNumber(ExecState* exec, unsigned i); 165 friend JSValue jsNumber(ExecState* exec, long i); 166 friend JSValue jsNumber(ExecState* exec, unsigned long i); 167 friend JSValue jsNumber(ExecState* exec, long long i); 168 friend JSValue jsNumber(ExecState* exec, unsigned long long i); 169 friend JSValue jsNumber(JSGlobalData* globalData, double d); 170 friend JSValue jsNumber(JSGlobalData* globalData, short i); 171 friend JSValue jsNumber(JSGlobalData* globalData, unsigned short i); 172 friend JSValue jsNumber(JSGlobalData* globalData, int i); 173 friend JSValue jsNumber(JSGlobalData* globalData, unsigned i); 174 friend JSValue jsNumber(JSGlobalData* globalData, long i); 175 friend JSValue jsNumber(JSGlobalData* globalData, unsigned long i); 176 friend JSValue jsNumber(JSGlobalData* globalData, long long i); 177 friend JSValue jsNumber(JSGlobalData* globalData, unsigned long long i); 178 178 179 179 #if USE(ALTERNATE_JSIMMEDIATE) … … 210 210 static const int32_t signBit = 0x80000000; 211 211 212 static ALWAYS_INLINE bool isImmediate(JSValue Ptrv)212 static ALWAYS_INLINE bool isImmediate(JSValue v) 213 213 { 214 214 return rawValue(v) & TagMask; 215 215 } 216 216 217 static ALWAYS_INLINE bool isNumber(JSValue Ptrv)217 static ALWAYS_INLINE bool isNumber(JSValue v) 218 218 { 219 219 return rawValue(v) & TagTypeNumber; 220 220 } 221 221 222 static ALWAYS_INLINE bool isIntegerNumber(JSValue Ptrv)222 static ALWAYS_INLINE bool isIntegerNumber(JSValue v) 223 223 { 224 224 #if USE(ALTERNATE_JSIMMEDIATE) … … 230 230 231 231 #if USE(ALTERNATE_JSIMMEDIATE) 232 static ALWAYS_INLINE bool isDoubleNumber(JSValue Ptrv)232 static ALWAYS_INLINE bool isDoubleNumber(JSValue v) 233 233 { 234 234 return isNumber(v) && !isIntegerNumber(v); … … 236 236 #endif 237 237 238 static ALWAYS_INLINE bool isPositiveIntegerNumber(JSValue Ptrv)238 static ALWAYS_INLINE bool isPositiveIntegerNumber(JSValue v) 239 239 { 240 240 // A single mask to check for the sign bit and the number tag all at once. … … 242 242 } 243 243 244 static ALWAYS_INLINE bool isBoolean(JSValue Ptrv)244 static ALWAYS_INLINE bool isBoolean(JSValue v) 245 245 { 246 246 return (rawValue(v) & FullTagTypeMask) == FullTagTypeBool; 247 247 } 248 248 249 static ALWAYS_INLINE bool isUndefinedOrNull(JSValue Ptrv)249 static ALWAYS_INLINE bool isUndefinedOrNull(JSValue v) 250 250 { 251 251 // Undefined and null share the same value, bar the 'undefined' bit in the extended tag. … … 253 253 } 254 254 255 static JSValue Ptrfrom(char);256 static JSValue Ptrfrom(signed char);257 static JSValue Ptrfrom(unsigned char);258 static JSValue Ptrfrom(short);259 static JSValue Ptrfrom(unsigned short);260 static JSValue Ptrfrom(int);261 static JSValue Ptrfrom(unsigned);262 static JSValue Ptrfrom(long);263 static JSValue Ptrfrom(unsigned long);264 static JSValue Ptrfrom(long long);265 static JSValue Ptrfrom(unsigned long long);266 static JSValue Ptrfrom(double);267 268 static ALWAYS_INLINE bool isEitherImmediate(JSValue Ptr v1, JSValuePtrv2)255 static JSValue from(char); 256 static JSValue from(signed char); 257 static JSValue from(unsigned char); 258 static JSValue from(short); 259 static JSValue from(unsigned short); 260 static JSValue from(int); 261 static JSValue from(unsigned); 262 static JSValue from(long); 263 static JSValue from(unsigned long); 264 static JSValue from(long long); 265 static JSValue from(unsigned long long); 266 static JSValue from(double); 267 268 static ALWAYS_INLINE bool isEitherImmediate(JSValue v1, JSValue v2) 269 269 { 270 270 return (rawValue(v1) | rawValue(v2)) & TagMask; 271 271 } 272 272 273 static ALWAYS_INLINE bool areBothImmediate(JSValue Ptr v1, JSValuePtrv2)273 static ALWAYS_INLINE bool areBothImmediate(JSValue v1, JSValue v2) 274 274 { 275 275 return isImmediate(v1) & isImmediate(v2); 276 276 } 277 277 278 static ALWAYS_INLINE bool areBothImmediateIntegerNumbers(JSValue Ptr v1, JSValuePtrv2)278 static ALWAYS_INLINE bool areBothImmediateIntegerNumbers(JSValue v1, JSValue v2) 279 279 { 280 280 #if USE(ALTERNATE_JSIMMEDIATE) … … 285 285 } 286 286 287 static double toDouble(JSValue Ptr);288 static bool toBoolean(JSValue Ptr);289 static JSObject* toObject(JSValue Ptr, ExecState*);290 static JSObject* toThisObject(JSValue Ptr, ExecState*);291 static UString toString(JSValue Ptr);292 293 static bool getUInt32(JSValue Ptr, uint32_t&);294 static bool getTruncatedInt32(JSValue Ptr, int32_t&);295 static bool getTruncatedUInt32(JSValue Ptr, uint32_t&);296 297 static int32_t getTruncatedInt32(JSValue Ptr);298 static uint32_t getTruncatedUInt32(JSValue Ptr);299 300 static JSValue PtrtrueImmediate();301 static JSValue PtrfalseImmediate();302 static JSValue PtrundefinedImmediate();303 static JSValue PtrnullImmediate();304 static JSValue PtrzeroImmediate();305 static JSValue PtroneImmediate();306 307 static JSValue PtrimpossibleValue();308 309 static JSObject* prototype(JSValue Ptr, ExecState*);287 static double toDouble(JSValue); 288 static bool toBoolean(JSValue); 289 static JSObject* toObject(JSValue, ExecState*); 290 static JSObject* toThisObject(JSValue, ExecState*); 291 static UString toString(JSValue); 292 293 static bool getUInt32(JSValue, uint32_t&); 294 static bool getTruncatedInt32(JSValue, int32_t&); 295 static bool getTruncatedUInt32(JSValue, uint32_t&); 296 297 static int32_t getTruncatedInt32(JSValue); 298 static uint32_t getTruncatedUInt32(JSValue); 299 300 static JSValue trueImmediate(); 301 static JSValue falseImmediate(); 302 static JSValue undefinedImmediate(); 303 static JSValue nullImmediate(); 304 static JSValue zeroImmediate(); 305 static JSValue oneImmediate(); 306 307 static JSValue impossibleValue(); 308 309 static JSObject* prototype(JSValue, ExecState*); 310 310 311 311 private: … … 319 319 static const unsigned maxImmediateUInt = maxImmediateInt; 320 320 321 static ALWAYS_INLINE JSValue PtrmakeValue(intptr_t integer)322 { 323 return JSValue Ptr::makeImmediate(integer);321 static ALWAYS_INLINE JSValue makeValue(intptr_t integer) 322 { 323 return JSValue::makeImmediate(integer); 324 324 } 325 325 … … 328 328 // if intptr_t id larger then int32_t we sign extend the value through the upper word. 329 329 #if USE(ALTERNATE_JSIMMEDIATE) 330 static ALWAYS_INLINE JSValue PtrmakeInt(uint32_t value)331 #else 332 static ALWAYS_INLINE JSValue PtrmakeInt(int32_t value)330 static ALWAYS_INLINE JSValue makeInt(uint32_t value) 331 #else 332 static ALWAYS_INLINE JSValue makeInt(int32_t value) 333 333 #endif 334 334 { … … 337 337 338 338 #if USE(ALTERNATE_JSIMMEDIATE) 339 static ALWAYS_INLINE JSValue PtrmakeDouble(double value)339 static ALWAYS_INLINE JSValue makeDouble(double value) 340 340 { 341 341 return makeValue(reinterpretDoubleToIntptr(value) + DoubleEncodeOffset); … … 343 343 #endif 344 344 345 static ALWAYS_INLINE JSValue PtrmakeBool(bool b)345 static ALWAYS_INLINE JSValue makeBool(bool b) 346 346 { 347 347 return makeValue((static_cast<intptr_t>(b) << ExtendedPayloadShift) | FullTagTypeBool); 348 348 } 349 349 350 static ALWAYS_INLINE JSValue PtrmakeUndefined()350 static ALWAYS_INLINE JSValue makeUndefined() 351 351 { 352 352 return makeValue(FullTagTypeUndefined); 353 353 } 354 354 355 static ALWAYS_INLINE JSValue PtrmakeNull()355 static ALWAYS_INLINE JSValue makeNull() 356 356 { 357 357 return makeValue(FullTagTypeNull); … … 359 359 360 360 template<typename T> 361 static JSValue PtrfromNumberOutsideIntegerRange(T);362 363 #if USE(ALTERNATE_JSIMMEDIATE) 364 static ALWAYS_INLINE double doubleValue(JSValue Ptrv)361 static JSValue fromNumberOutsideIntegerRange(T); 362 363 #if USE(ALTERNATE_JSIMMEDIATE) 364 static ALWAYS_INLINE double doubleValue(JSValue v) 365 365 { 366 366 return reinterpretIntptrToDouble(rawValue(v) - DoubleEncodeOffset); … … 368 368 #endif 369 369 370 static ALWAYS_INLINE int32_t intValue(JSValue Ptrv)370 static ALWAYS_INLINE int32_t intValue(JSValue v) 371 371 { 372 372 return static_cast<int32_t>(rawValue(v) >> IntegerPayloadShift); 373 373 } 374 374 375 static ALWAYS_INLINE uint32_t uintValue(JSValue Ptrv)375 static ALWAYS_INLINE uint32_t uintValue(JSValue v) 376 376 { 377 377 return static_cast<uint32_t>(rawValue(v) >> IntegerPayloadShift); 378 378 } 379 379 380 static ALWAYS_INLINE bool boolValue(JSValue Ptrv)380 static ALWAYS_INLINE bool boolValue(JSValue v) 381 381 { 382 382 return rawValue(v) & ExtendedPayloadBitBoolValue; 383 383 } 384 384 385 static ALWAYS_INLINE intptr_t rawValue(JSValue Ptrv)385 static ALWAYS_INLINE intptr_t rawValue(JSValue v) 386 386 { 387 387 return v.immediateValue(); … … 391 391 }; 392 392 393 ALWAYS_INLINE JSValue PtrJSImmediate::trueImmediate() { return makeBool(true); }394 ALWAYS_INLINE JSValue PtrJSImmediate::falseImmediate() { return makeBool(false); }395 ALWAYS_INLINE JSValue PtrJSImmediate::undefinedImmediate() { return makeUndefined(); }396 ALWAYS_INLINE JSValue PtrJSImmediate::nullImmediate() { return makeNull(); }397 ALWAYS_INLINE JSValue PtrJSImmediate::zeroImmediate() { return makeInt(0); }398 ALWAYS_INLINE JSValue PtrJSImmediate::oneImmediate() { return makeInt(1); }393 ALWAYS_INLINE JSValue JSImmediate::trueImmediate() { return makeBool(true); } 394 ALWAYS_INLINE JSValue JSImmediate::falseImmediate() { return makeBool(false); } 395 ALWAYS_INLINE JSValue JSImmediate::undefinedImmediate() { return makeUndefined(); } 396 ALWAYS_INLINE JSValue JSImmediate::nullImmediate() { return makeNull(); } 397 ALWAYS_INLINE JSValue JSImmediate::zeroImmediate() { return makeInt(0); } 398 ALWAYS_INLINE JSValue JSImmediate::oneImmediate() { return makeInt(1); } 399 399 400 400 // This value is impossible because 0x4 is not a valid pointer but a tag of 0 would indicate non-immediate 401 ALWAYS_INLINE JSValue PtrJSImmediate::impossibleValue() { return makeValue(0x4); }401 ALWAYS_INLINE JSValue JSImmediate::impossibleValue() { return makeValue(0x4); } 402 402 403 403 #if USE(ALTERNATE_JSIMMEDIATE) … … 407 407 } 408 408 409 ALWAYS_INLINE bool JSImmediate::toBoolean(JSValue Ptrv)409 ALWAYS_INLINE bool JSImmediate::toBoolean(JSValue v) 410 410 { 411 411 ASSERT(isImmediate(v)); … … 414 414 } 415 415 #else 416 ALWAYS_INLINE bool JSImmediate::toBoolean(JSValue Ptrv)416 ALWAYS_INLINE bool JSImmediate::toBoolean(JSValue v) 417 417 { 418 418 ASSERT(isImmediate(v)); … … 421 421 #endif 422 422 423 ALWAYS_INLINE uint32_t JSImmediate::getTruncatedUInt32(JSValue Ptrv)423 ALWAYS_INLINE uint32_t JSImmediate::getTruncatedUInt32(JSValue v) 424 424 { 425 425 // FIXME: should probably be asserting isPositiveIntegerNumber here. … … 430 430 #if USE(ALTERNATE_JSIMMEDIATE) 431 431 template<typename T> 432 inline JSValue PtrJSImmediate::fromNumberOutsideIntegerRange(T value)432 inline JSValue JSImmediate::fromNumberOutsideIntegerRange(T value) 433 433 { 434 434 return makeDouble(static_cast<double>(value)); … … 436 436 #else 437 437 template<typename T> 438 inline JSValue PtrJSImmediate::fromNumberOutsideIntegerRange(T)438 inline JSValue JSImmediate::fromNumberOutsideIntegerRange(T) 439 439 { 440 440 return noValue(); … … 442 442 #endif 443 443 444 ALWAYS_INLINE JSValue PtrJSImmediate::from(char i)444 ALWAYS_INLINE JSValue JSImmediate::from(char i) 445 445 { 446 446 return makeInt(i); 447 447 } 448 448 449 ALWAYS_INLINE JSValue PtrJSImmediate::from(signed char i)449 ALWAYS_INLINE JSValue JSImmediate::from(signed char i) 450 450 { 451 451 return makeInt(i); 452 452 } 453 453 454 ALWAYS_INLINE JSValue PtrJSImmediate::from(unsigned char i)454 ALWAYS_INLINE JSValue JSImmediate::from(unsigned char i) 455 455 { 456 456 return makeInt(i); 457 457 } 458 458 459 ALWAYS_INLINE JSValue PtrJSImmediate::from(short i)459 ALWAYS_INLINE JSValue JSImmediate::from(short i) 460 460 { 461 461 return makeInt(i); 462 462 } 463 463 464 ALWAYS_INLINE JSValue PtrJSImmediate::from(unsigned short i)464 ALWAYS_INLINE JSValue JSImmediate::from(unsigned short i) 465 465 { 466 466 return makeInt(i); 467 467 } 468 468 469 ALWAYS_INLINE JSValue PtrJSImmediate::from(int i)469 ALWAYS_INLINE JSValue JSImmediate::from(int i) 470 470 { 471 471 #if !USE(ALTERNATE_JSIMMEDIATE) … … 476 476 } 477 477 478 ALWAYS_INLINE JSValue PtrJSImmediate::from(unsigned i)478 ALWAYS_INLINE JSValue JSImmediate::from(unsigned i) 479 479 { 480 480 if (i > maxImmediateUInt) … … 483 483 } 484 484 485 ALWAYS_INLINE JSValue PtrJSImmediate::from(long i)485 ALWAYS_INLINE JSValue JSImmediate::from(long i) 486 486 { 487 487 if ((i < minImmediateInt) | (i > maxImmediateInt)) … … 490 490 } 491 491 492 ALWAYS_INLINE JSValue PtrJSImmediate::from(unsigned long i)492 ALWAYS_INLINE JSValue JSImmediate::from(unsigned long i) 493 493 { 494 494 if (i > maxImmediateUInt) … … 497 497 } 498 498 499 ALWAYS_INLINE JSValue PtrJSImmediate::from(long long i)499 ALWAYS_INLINE JSValue JSImmediate::from(long long i) 500 500 { 501 501 if ((i < minImmediateInt) | (i > maxImmediateInt)) … … 504 504 } 505 505 506 ALWAYS_INLINE JSValue PtrJSImmediate::from(unsigned long long i)506 ALWAYS_INLINE JSValue JSImmediate::from(unsigned long long i) 507 507 { 508 508 if (i > maxImmediateUInt) … … 511 511 } 512 512 513 ALWAYS_INLINE JSValue PtrJSImmediate::from(double d)513 ALWAYS_INLINE JSValue JSImmediate::from(double d) 514 514 { 515 515 const int intVal = static_cast<int>(d); … … 522 522 } 523 523 524 ALWAYS_INLINE int32_t JSImmediate::getTruncatedInt32(JSValue Ptrv)524 ALWAYS_INLINE int32_t JSImmediate::getTruncatedInt32(JSValue v) 525 525 { 526 526 ASSERT(isIntegerNumber(v)); … … 528 528 } 529 529 530 ALWAYS_INLINE double JSImmediate::toDouble(JSValue Ptrv)530 ALWAYS_INLINE double JSImmediate::toDouble(JSValue v) 531 531 { 532 532 ASSERT(isImmediate(v)); … … 551 551 } 552 552 553 ALWAYS_INLINE bool JSImmediate::getUInt32(JSValue Ptrv, uint32_t& i)553 ALWAYS_INLINE bool JSImmediate::getUInt32(JSValue v, uint32_t& i) 554 554 { 555 555 i = uintValue(v); … … 557 557 } 558 558 559 ALWAYS_INLINE bool JSImmediate::getTruncatedInt32(JSValue Ptrv, int32_t& i)559 ALWAYS_INLINE bool JSImmediate::getTruncatedInt32(JSValue v, int32_t& i) 560 560 { 561 561 i = intValue(v); … … 563 563 } 564 564 565 ALWAYS_INLINE bool JSImmediate::getTruncatedUInt32(JSValue Ptrv, uint32_t& i)565 ALWAYS_INLINE bool JSImmediate::getTruncatedUInt32(JSValue v, uint32_t& i) 566 566 { 567 567 return getUInt32(v, i); … … 574 574 uint32_t toUInt32SlowCase(double, bool& ok); 575 575 576 inline JSValue Ptr::JSValuePtr(ImpossibleValueTag)576 inline JSValue::JSValue(ImpossibleValueTag) 577 577 { 578 578 *this = JSImmediate::impossibleValue(); 579 579 } 580 580 581 inline JSValue Ptr::JSValuePtr(JSNullTag)581 inline JSValue::JSValue(JSNullTag) 582 582 { 583 583 *this = JSImmediate::nullImmediate(); 584 584 } 585 585 586 inline JSValue Ptr::JSValuePtr(JSUndefinedTag)586 inline JSValue::JSValue(JSUndefinedTag) 587 587 { 588 588 *this = JSImmediate::undefinedImmediate(); 589 589 } 590 590 591 inline JSValue Ptr::JSValuePtr(JSTrueTag)591 inline JSValue::JSValue(JSTrueTag) 592 592 { 593 593 *this = JSImmediate::trueImmediate(); 594 594 } 595 595 596 inline JSValue Ptr::JSValuePtr(JSFalseTag)596 inline JSValue::JSValue(JSFalseTag) 597 597 { 598 598 *this = JSImmediate::falseImmediate(); 599 599 } 600 600 601 inline bool JSValue Ptr::isUndefinedOrNull() const601 inline bool JSValue::isUndefinedOrNull() const 602 602 { 603 603 return JSImmediate::isUndefinedOrNull(asValue()); 604 604 } 605 605 606 inline bool JSValue Ptr::isBoolean() const606 inline bool JSValue::isBoolean() const 607 607 { 608 608 return JSImmediate::isBoolean(asValue()); 609 609 } 610 610 611 inline bool JSValue Ptr::getBoolean(bool& v) const611 inline bool JSValue::getBoolean(bool& v) const 612 612 { 613 613 if (JSImmediate::isBoolean(asValue())) { … … 619 619 } 620 620 621 inline bool JSValue Ptr::getBoolean() const621 inline bool JSValue::getBoolean() const 622 622 { 623 623 return asValue() == jsBoolean(true); 624 624 } 625 625 626 ALWAYS_INLINE int32_t JSValue Ptr::toInt32(ExecState* exec) const626 ALWAYS_INLINE int32_t JSValue::toInt32(ExecState* exec) const 627 627 { 628 628 int32_t i; … … 633 633 } 634 634 635 inline uint32_t JSValue Ptr::toUInt32(ExecState* exec) const635 inline uint32_t JSValue::toUInt32(ExecState* exec) const 636 636 { 637 637 uint32_t i; … … 660 660 } 661 661 662 inline int32_t JSValue Ptr::toInt32(ExecState* exec, bool& ok) const662 inline int32_t JSValue::toInt32(ExecState* exec, bool& ok) const 663 663 { 664 664 int32_t i; … … 670 670 } 671 671 672 inline uint32_t JSValue Ptr::toUInt32(ExecState* exec, bool& ok) const672 inline uint32_t JSValue::toUInt32(ExecState* exec, bool& ok) const 673 673 { 674 674 uint32_t i; … … 680 680 } 681 681 682 inline bool JSValue Ptr::isCell() const682 inline bool JSValue::isCell() const 683 683 { 684 684 return !JSImmediate::isImmediate(asValue()); 685 685 } 686 686 687 inline bool JSValue Ptr::isInt32Fast() const687 inline bool JSValue::isInt32Fast() const 688 688 { 689 689 return JSImmediate::isIntegerNumber(asValue()); 690 690 } 691 691 692 inline int32_t JSValue Ptr::getInt32Fast() const692 inline int32_t JSValue::getInt32Fast() const 693 693 { 694 694 ASSERT(isInt32Fast()); … … 696 696 } 697 697 698 inline bool JSValue Ptr::isUInt32Fast() const698 inline bool JSValue::isUInt32Fast() const 699 699 { 700 700 return JSImmediate::isPositiveIntegerNumber(asValue()); 701 701 } 702 702 703 inline uint32_t JSValue Ptr::getUInt32Fast() const703 inline uint32_t JSValue::getUInt32Fast() const 704 704 { 705 705 ASSERT(isUInt32Fast()); … … 707 707 } 708 708 709 inline JSValue Ptr JSValuePtr::makeInt32Fast(int32_t i)709 inline JSValue JSValue::makeInt32Fast(int32_t i) 710 710 { 711 711 return JSImmediate::from(i); 712 712 } 713 713 714 inline bool JSValue Ptr::areBothInt32Fast(JSValuePtr v1, JSValuePtrv2)714 inline bool JSValue::areBothInt32Fast(JSValue v1, JSValue v2) 715 715 { 716 716 return JSImmediate::areBothImmediateIntegerNumbers(v1, v2); … … 719 719 class JSFastMath { 720 720 public: 721 static ALWAYS_INLINE bool canDoFastBitwiseOperations(JSValue Ptr v1, JSValuePtrv2)721 static ALWAYS_INLINE bool canDoFastBitwiseOperations(JSValue v1, JSValue v2) 722 722 { 723 723 return JSImmediate::areBothImmediateIntegerNumbers(v1, v2); 724 724 } 725 725 726 static ALWAYS_INLINE JSValue Ptr equal(JSValuePtr v1, JSValuePtrv2)726 static ALWAYS_INLINE JSValue equal(JSValue v1, JSValue v2) 727 727 { 728 728 ASSERT(canDoFastBitwiseOperations(v1, v2)); … … 730 730 } 731 731 732 static ALWAYS_INLINE JSValue Ptr notEqual(JSValuePtr v1, JSValuePtrv2)732 static ALWAYS_INLINE JSValue notEqual(JSValue v1, JSValue v2) 733 733 { 734 734 ASSERT(canDoFastBitwiseOperations(v1, v2)); … … 736 736 } 737 737 738 static ALWAYS_INLINE JSValue Ptr andImmediateNumbers(JSValuePtr v1, JSValuePtrv2)738 static ALWAYS_INLINE JSValue andImmediateNumbers(JSValue v1, JSValue v2) 739 739 { 740 740 ASSERT(canDoFastBitwiseOperations(v1, v2)); … … 742 742 } 743 743 744 static ALWAYS_INLINE JSValue Ptr xorImmediateNumbers(JSValuePtr v1, JSValuePtrv2)744 static ALWAYS_INLINE JSValue xorImmediateNumbers(JSValue v1, JSValue v2) 745 745 { 746 746 ASSERT(canDoFastBitwiseOperations(v1, v2)); … … 748 748 } 749 749 750 static ALWAYS_INLINE JSValue Ptr orImmediateNumbers(JSValuePtr v1, JSValuePtrv2)750 static ALWAYS_INLINE JSValue orImmediateNumbers(JSValue v1, JSValue v2) 751 751 { 752 752 ASSERT(canDoFastBitwiseOperations(v1, v2)); … … 754 754 } 755 755 756 static ALWAYS_INLINE bool canDoFastRshift(JSValue Ptr v1, JSValuePtrv2)756 static ALWAYS_INLINE bool canDoFastRshift(JSValue v1, JSValue v2) 757 757 { 758 758 return JSImmediate::areBothImmediateIntegerNumbers(v1, v2); 759 759 } 760 760 761 static ALWAYS_INLINE bool canDoFastUrshift(JSValue Ptr v1, JSValuePtrv2)761 static ALWAYS_INLINE bool canDoFastUrshift(JSValue v1, JSValue v2) 762 762 { 763 763 return JSImmediate::areBothImmediateIntegerNumbers(v1, v2) && !(JSImmediate::rawValue(v1) & JSImmediate::signBit); 764 764 } 765 765 766 static ALWAYS_INLINE JSValue Ptr rightShiftImmediateNumbers(JSValuePtr val, JSValuePtrshift)766 static ALWAYS_INLINE JSValue rightShiftImmediateNumbers(JSValue val, JSValue shift) 767 767 { 768 768 ASSERT(canDoFastRshift(val, shift) || canDoFastUrshift(val, shift)); … … 774 774 } 775 775 776 static ALWAYS_INLINE bool canDoFastAdditiveOperations(JSValue Ptrv)776 static ALWAYS_INLINE bool canDoFastAdditiveOperations(JSValue v) 777 777 { 778 778 // Number is non-negative and an operation involving two of these can't overflow. … … 781 781 } 782 782 783 static ALWAYS_INLINE bool canDoFastAdditiveOperations(JSValue Ptr v1, JSValuePtrv2)783 static ALWAYS_INLINE bool canDoFastAdditiveOperations(JSValue v1, JSValue v2) 784 784 { 785 785 // Number is non-negative and an operation involving two of these can't overflow. … … 788 788 } 789 789 790 static ALWAYS_INLINE JSValue Ptr addImmediateNumbers(JSValuePtr v1, JSValuePtrv2)790 static ALWAYS_INLINE JSValue addImmediateNumbers(JSValue v1, JSValue v2) 791 791 { 792 792 ASSERT(canDoFastAdditiveOperations(v1, v2)); … … 794 794 } 795 795 796 static ALWAYS_INLINE JSValue Ptr subImmediateNumbers(JSValuePtr v1, JSValuePtrv2)796 static ALWAYS_INLINE JSValue subImmediateNumbers(JSValue v1, JSValue v2) 797 797 { 798 798 ASSERT(canDoFastAdditiveOperations(v1, v2)); … … 800 800 } 801 801 802 static ALWAYS_INLINE JSValue Ptr incImmediateNumber(JSValuePtrv)802 static ALWAYS_INLINE JSValue incImmediateNumber(JSValue v) 803 803 { 804 804 ASSERT(canDoFastAdditiveOperations(v)); … … 806 806 } 807 807 808 static ALWAYS_INLINE JSValue Ptr decImmediateNumber(JSValuePtrv)808 static ALWAYS_INLINE JSValue decImmediateNumber(JSValue v) 809 809 { 810 810 ASSERT(canDoFastAdditiveOperations(v));
Note:
See TracChangeset
for help on using the changeset viewer.