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 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 | 311 |
312 // Mozilla-specific extension. Returns the number of milliseconds | 312 // Mozilla-specific extension. Returns the number of milliseconds |
313 // elapsed since 1 January 1970 00:00:00 UTC. | 313 // elapsed since 1 January 1970 00:00:00 UTC. |
314 function DateNow() { | 314 function DateNow() { |
315 return %DateCurrentTime(); | 315 return %DateCurrentTime(); |
316 } | 316 } |
317 | 317 |
318 | 318 |
319 // ECMA 262 - 15.9.5.2 | 319 // ECMA 262 - 15.9.5.2 |
320 function DateToString() { | 320 function DateToString() { |
321 CHECK_DATE(this); | |
322 var t = UTC_DATE_VALUE(this) | 321 var t = UTC_DATE_VALUE(this) |
323 if (NUMBER_IS_NAN(t)) return kInvalidDate; | 322 if (NUMBER_IS_NAN(t)) return kInvalidDate; |
324 var time_zone_string = LocalTimezoneString(this) | 323 var time_zone_string = LocalTimezoneString(this) |
325 return DatePrintString(this) + time_zone_string; | 324 return DatePrintString(this) + time_zone_string; |
326 } | 325 } |
327 | 326 |
328 | 327 |
329 // ECMA 262 - 15.9.5.3 | 328 // ECMA 262 - 15.9.5.3 |
330 function DateToDateString() { | 329 function DateToDateString() { |
331 CHECK_DATE(this); | |
332 var t = UTC_DATE_VALUE(this); | 330 var t = UTC_DATE_VALUE(this); |
333 if (NUMBER_IS_NAN(t)) return kInvalidDate; | 331 if (NUMBER_IS_NAN(t)) return kInvalidDate; |
334 return DateString(this); | 332 return DateString(this); |
335 } | 333 } |
336 | 334 |
337 | 335 |
338 // ECMA 262 - 15.9.5.4 | 336 // ECMA 262 - 15.9.5.4 |
339 function DateToTimeString() { | 337 function DateToTimeString() { |
340 CHECK_DATE(this); | |
341 var t = UTC_DATE_VALUE(this); | 338 var t = UTC_DATE_VALUE(this); |
342 if (NUMBER_IS_NAN(t)) return kInvalidDate; | 339 if (NUMBER_IS_NAN(t)) return kInvalidDate; |
343 var time_zone_string = LocalTimezoneString(this); | 340 var time_zone_string = LocalTimezoneString(this); |
344 return TimeString(this) + time_zone_string; | 341 return TimeString(this) + time_zone_string; |
345 } | 342 } |
346 | 343 |
347 | 344 |
348 // ECMA 262 - 15.9.5.5 | 345 // ECMA 262 - 15.9.5.5 |
349 function DateToLocaleString() { | 346 function DateToLocaleString() { |
350 return %_CallFunction(this, DateToString); | 347 return %_CallFunction(this, DateToString); |
351 } | 348 } |
352 | 349 |
353 | 350 |
354 // ECMA 262 - 15.9.5.6 | 351 // ECMA 262 - 15.9.5.6 |
355 function DateToLocaleDateString() { | 352 function DateToLocaleDateString() { |
356 CHECK_DATE(this); | |
357 var t = UTC_DATE_VALUE(this); | 353 var t = UTC_DATE_VALUE(this); |
358 if (NUMBER_IS_NAN(t)) return kInvalidDate; | 354 if (NUMBER_IS_NAN(t)) return kInvalidDate; |
359 return LongDateString(this); | 355 return LongDateString(this); |
360 } | 356 } |
361 | 357 |
362 | 358 |
363 // ECMA 262 - 15.9.5.7 | 359 // ECMA 262 - 15.9.5.7 |
364 function DateToLocaleTimeString() { | 360 function DateToLocaleTimeString() { |
365 CHECK_DATE(this); | |
366 var t = UTC_DATE_VALUE(this); | 361 var t = UTC_DATE_VALUE(this); |
367 if (NUMBER_IS_NAN(t)) return kInvalidDate; | 362 if (NUMBER_IS_NAN(t)) return kInvalidDate; |
368 return TimeString(this); | 363 return TimeString(this); |
369 } | 364 } |
370 | 365 |
371 | 366 |
372 // ECMA 262 - 15.9.5.8 | 367 // ECMA 262 - 15.9.5.8 |
373 function DateValueOf() { | 368 function DateValueOf() { |
374 CHECK_DATE(this); | |
375 return UTC_DATE_VALUE(this); | 369 return UTC_DATE_VALUE(this); |
376 } | 370 } |
377 | 371 |
378 | 372 |
379 // ECMA 262 - 15.9.5.9 | 373 // ECMA 262 - 15.9.5.9 |
380 function DateGetTime() { | 374 function DateGetTime() { |
381 CHECK_DATE(this); | |
382 return UTC_DATE_VALUE(this); | 375 return UTC_DATE_VALUE(this); |
383 } | 376 } |
384 | 377 |
385 | 378 |
386 // ECMA 262 - 15.9.5.10 | 379 // ECMA 262 - 15.9.5.10 |
387 function DateGetFullYear() { | 380 function DateGetFullYear() { |
388 CHECK_DATE(this); | |
389 return LOCAL_YEAR(this); | 381 return LOCAL_YEAR(this); |
390 } | 382 } |
391 | 383 |
392 | 384 |
393 // ECMA 262 - 15.9.5.11 | 385 // ECMA 262 - 15.9.5.11 |
394 function DateGetUTCFullYear() { | 386 function DateGetUTCFullYear() { |
395 CHECK_DATE(this); | |
396 return UTC_YEAR(this); | 387 return UTC_YEAR(this); |
397 } | 388 } |
398 | 389 |
399 | 390 |
400 // ECMA 262 - 15.9.5.12 | 391 // ECMA 262 - 15.9.5.12 |
401 function DateGetMonth() { | 392 function DateGetMonth() { |
402 CHECK_DATE(this); | |
403 return LOCAL_MONTH(this); | 393 return LOCAL_MONTH(this); |
404 } | 394 } |
405 | 395 |
406 | 396 |
407 // ECMA 262 - 15.9.5.13 | 397 // ECMA 262 - 15.9.5.13 |
408 function DateGetUTCMonth() { | 398 function DateGetUTCMonth() { |
409 CHECK_DATE(this); | |
410 return UTC_MONTH(this); | 399 return UTC_MONTH(this); |
411 } | 400 } |
412 | 401 |
413 | 402 |
414 // ECMA 262 - 15.9.5.14 | 403 // ECMA 262 - 15.9.5.14 |
415 function DateGetDate() { | 404 function DateGetDate() { |
416 CHECK_DATE(this); | |
417 return LOCAL_DAY(this); | 405 return LOCAL_DAY(this); |
418 } | 406 } |
419 | 407 |
420 | 408 |
421 // ECMA 262 - 15.9.5.15 | 409 // ECMA 262 - 15.9.5.15 |
422 function DateGetUTCDate() { | 410 function DateGetUTCDate() { |
423 CHECK_DATE(this); | |
424 return UTC_DAY(this); | 411 return UTC_DAY(this); |
425 } | 412 } |
426 | 413 |
427 | 414 |
428 // ECMA 262 - 15.9.5.16 | 415 // ECMA 262 - 15.9.5.16 |
429 function DateGetDay() { | 416 function DateGetDay() { |
430 CHECK_DATE(this); | |
431 return LOCAL_WEEKDAY(this); | 417 return LOCAL_WEEKDAY(this); |
432 } | 418 } |
433 | 419 |
434 | 420 |
435 // ECMA 262 - 15.9.5.17 | 421 // ECMA 262 - 15.9.5.17 |
436 function DateGetUTCDay() { | 422 function DateGetUTCDay() { |
437 CHECK_DATE(this); | |
438 return UTC_WEEKDAY(this); | 423 return UTC_WEEKDAY(this); |
439 } | 424 } |
440 | 425 |
441 | 426 |
442 // ECMA 262 - 15.9.5.18 | 427 // ECMA 262 - 15.9.5.18 |
443 function DateGetHours() { | 428 function DateGetHours() { |
444 CHECK_DATE(this); | |
445 return LOCAL_HOUR(this); | 429 return LOCAL_HOUR(this); |
446 } | 430 } |
447 | 431 |
448 | 432 |
449 // ECMA 262 - 15.9.5.19 | 433 // ECMA 262 - 15.9.5.19 |
450 function DateGetUTCHours() { | 434 function DateGetUTCHours() { |
451 CHECK_DATE(this); | |
452 return UTC_HOUR(this); | 435 return UTC_HOUR(this); |
453 } | 436 } |
454 | 437 |
455 | 438 |
456 // ECMA 262 - 15.9.5.20 | 439 // ECMA 262 - 15.9.5.20 |
457 function DateGetMinutes() { | 440 function DateGetMinutes() { |
458 CHECK_DATE(this); | |
459 return LOCAL_MIN(this); | 441 return LOCAL_MIN(this); |
460 } | 442 } |
461 | 443 |
462 | 444 |
463 // ECMA 262 - 15.9.5.21 | 445 // ECMA 262 - 15.9.5.21 |
464 function DateGetUTCMinutes() { | 446 function DateGetUTCMinutes() { |
465 CHECK_DATE(this); | |
466 return UTC_MIN(this); | 447 return UTC_MIN(this); |
467 } | 448 } |
468 | 449 |
469 | 450 |
470 // ECMA 262 - 15.9.5.22 | 451 // ECMA 262 - 15.9.5.22 |
471 function DateGetSeconds() { | 452 function DateGetSeconds() { |
472 CHECK_DATE(this); | |
473 return LOCAL_SEC(this); | 453 return LOCAL_SEC(this); |
474 } | 454 } |
475 | 455 |
476 | 456 |
477 // ECMA 262 - 15.9.5.23 | 457 // ECMA 262 - 15.9.5.23 |
478 function DateGetUTCSeconds() { | 458 function DateGetUTCSeconds() { |
479 CHECK_DATE(this); | |
480 return UTC_SEC(this) | 459 return UTC_SEC(this) |
481 } | 460 } |
482 | 461 |
483 | 462 |
484 // ECMA 262 - 15.9.5.24 | 463 // ECMA 262 - 15.9.5.24 |
485 function DateGetMilliseconds() { | 464 function DateGetMilliseconds() { |
486 CHECK_DATE(this); | |
487 return LOCAL_MS(this); | 465 return LOCAL_MS(this); |
488 } | 466 } |
489 | 467 |
490 | 468 |
491 // ECMA 262 - 15.9.5.25 | 469 // ECMA 262 - 15.9.5.25 |
492 function DateGetUTCMilliseconds() { | 470 function DateGetUTCMilliseconds() { |
493 CHECK_DATE(this); | |
494 return UTC_MS(this); | 471 return UTC_MS(this); |
495 } | 472 } |
496 | 473 |
497 | 474 |
498 // ECMA 262 - 15.9.5.26 | 475 // ECMA 262 - 15.9.5.26 |
499 function DateGetTimezoneOffset() { | 476 function DateGetTimezoneOffset() { |
500 CHECK_DATE(this); | |
501 return TIMEZONE_OFFSET(this); | 477 return TIMEZONE_OFFSET(this); |
502 } | 478 } |
503 | 479 |
504 | 480 |
505 // ECMA 262 - 15.9.5.27 | 481 // ECMA 262 - 15.9.5.27 |
506 function DateSetTime(ms) { | 482 function DateSetTime(ms) { |
507 CHECK_DATE(this); | 483 CHECK_DATE(this); |
508 SET_UTC_DATE_VALUE(this, ToNumber(ms)); | 484 SET_UTC_DATE_VALUE(this, ToNumber(ms)); |
509 return UTC_DATE_VALUE(this); | 485 return UTC_DATE_VALUE(this); |
510 } | 486 } |
511 | 487 |
512 | 488 |
513 // ECMA 262 - 15.9.5.28 | 489 // ECMA 262 - 15.9.5.28 |
514 function DateSetMilliseconds(ms) { | 490 function DateSetMilliseconds(ms) { |
515 CHECK_DATE(this); | |
516 var t = LOCAL_DATE_VALUE(this); | 491 var t = LOCAL_DATE_VALUE(this); |
517 ms = ToNumber(ms); | 492 ms = ToNumber(ms); |
518 var time = MakeTime(LOCAL_HOUR(this), LOCAL_MIN(this), LOCAL_SEC(this), ms); | 493 var time = MakeTime(LOCAL_HOUR(this), LOCAL_MIN(this), LOCAL_SEC(this), ms); |
519 return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time)); | 494 return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time)); |
520 } | 495 } |
521 | 496 |
522 | 497 |
523 // ECMA 262 - 15.9.5.29 | 498 // ECMA 262 - 15.9.5.29 |
524 function DateSetUTCMilliseconds(ms) { | 499 function DateSetUTCMilliseconds(ms) { |
525 CHECK_DATE(this); | |
526 var t = UTC_DATE_VALUE(this); | 500 var t = UTC_DATE_VALUE(this); |
527 ms = ToNumber(ms); | 501 ms = ToNumber(ms); |
528 var time = MakeTime(UTC_HOUR(this), | 502 var time = MakeTime(UTC_HOUR(this), |
529 UTC_MIN(this), | 503 UTC_MIN(this), |
530 UTC_SEC(this), | 504 UTC_SEC(this), |
531 ms); | 505 ms); |
532 return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time)); | 506 return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time)); |
533 } | 507 } |
534 | 508 |
535 | 509 |
536 // ECMA 262 - 15.9.5.30 | 510 // ECMA 262 - 15.9.5.30 |
537 function DateSetSeconds(sec, ms) { | 511 function DateSetSeconds(sec, ms) { |
538 CHECK_DATE(this); | |
539 var t = LOCAL_DATE_VALUE(this); | 512 var t = LOCAL_DATE_VALUE(this); |
540 sec = ToNumber(sec); | 513 sec = ToNumber(sec); |
541 ms = %_ArgumentsLength() < 2 ? LOCAL_MS(this) : ToNumber(ms); | 514 ms = %_ArgumentsLength() < 2 ? LOCAL_MS(this) : ToNumber(ms); |
542 var time = MakeTime(LOCAL_HOUR(this), LOCAL_MIN(this), sec, ms); | 515 var time = MakeTime(LOCAL_HOUR(this), LOCAL_MIN(this), sec, ms); |
543 return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time)); | 516 return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time)); |
544 } | 517 } |
545 | 518 |
546 | 519 |
547 // ECMA 262 - 15.9.5.31 | 520 // ECMA 262 - 15.9.5.31 |
548 function DateSetUTCSeconds(sec, ms) { | 521 function DateSetUTCSeconds(sec, ms) { |
549 CHECK_DATE(this); | |
550 var t = UTC_DATE_VALUE(this); | 522 var t = UTC_DATE_VALUE(this); |
551 sec = ToNumber(sec); | 523 sec = ToNumber(sec); |
552 ms = %_ArgumentsLength() < 2 ? UTC_MS(this) : ToNumber(ms); | 524 ms = %_ArgumentsLength() < 2 ? UTC_MS(this) : ToNumber(ms); |
553 var time = MakeTime(UTC_HOUR(this), UTC_MIN(this), sec, ms); | 525 var time = MakeTime(UTC_HOUR(this), UTC_MIN(this), sec, ms); |
554 return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time)); | 526 return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time)); |
555 } | 527 } |
556 | 528 |
557 | 529 |
558 // ECMA 262 - 15.9.5.33 | 530 // ECMA 262 - 15.9.5.33 |
559 function DateSetMinutes(min, sec, ms) { | 531 function DateSetMinutes(min, sec, ms) { |
560 CHECK_DATE(this); | |
561 var t = LOCAL_DATE_VALUE(this); | 532 var t = LOCAL_DATE_VALUE(this); |
562 min = ToNumber(min); | 533 min = ToNumber(min); |
563 var argc = %_ArgumentsLength(); | 534 var argc = %_ArgumentsLength(); |
564 sec = argc < 2 ? LOCAL_SEC(this) : ToNumber(sec); | 535 sec = argc < 2 ? LOCAL_SEC(this) : ToNumber(sec); |
565 ms = argc < 3 ? LOCAL_MS(this) : ToNumber(ms); | 536 ms = argc < 3 ? LOCAL_MS(this) : ToNumber(ms); |
566 var time = MakeTime(LOCAL_HOUR(this), min, sec, ms); | 537 var time = MakeTime(LOCAL_HOUR(this), min, sec, ms); |
567 return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time)); | 538 return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time)); |
568 } | 539 } |
569 | 540 |
570 | 541 |
571 // ECMA 262 - 15.9.5.34 | 542 // ECMA 262 - 15.9.5.34 |
572 function DateSetUTCMinutes(min, sec, ms) { | 543 function DateSetUTCMinutes(min, sec, ms) { |
573 CHECK_DATE(this); | |
574 var t = UTC_DATE_VALUE(this); | 544 var t = UTC_DATE_VALUE(this); |
575 min = ToNumber(min); | 545 min = ToNumber(min); |
576 var argc = %_ArgumentsLength(); | 546 var argc = %_ArgumentsLength(); |
577 sec = argc < 2 ? UTC_SEC(this) : ToNumber(sec); | 547 sec = argc < 2 ? UTC_SEC(this) : ToNumber(sec); |
578 ms = argc < 3 ? UTC_MS(this) : ToNumber(ms); | 548 ms = argc < 3 ? UTC_MS(this) : ToNumber(ms); |
579 var time = MakeTime(UTC_HOUR(this), min, sec, ms); | 549 var time = MakeTime(UTC_HOUR(this), min, sec, ms); |
580 return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time)); | 550 return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time)); |
581 } | 551 } |
582 | 552 |
583 | 553 |
584 // ECMA 262 - 15.9.5.35 | 554 // ECMA 262 - 15.9.5.35 |
585 function DateSetHours(hour, min, sec, ms) { | 555 function DateSetHours(hour, min, sec, ms) { |
586 CHECK_DATE(this); | |
587 var t = LOCAL_DATE_VALUE(this); | 556 var t = LOCAL_DATE_VALUE(this); |
588 hour = ToNumber(hour); | 557 hour = ToNumber(hour); |
589 var argc = %_ArgumentsLength(); | 558 var argc = %_ArgumentsLength(); |
590 min = argc < 2 ? LOCAL_MIN(this) : ToNumber(min); | 559 min = argc < 2 ? LOCAL_MIN(this) : ToNumber(min); |
591 sec = argc < 3 ? LOCAL_SEC(this) : ToNumber(sec); | 560 sec = argc < 3 ? LOCAL_SEC(this) : ToNumber(sec); |
592 ms = argc < 4 ? LOCAL_MS(this) : ToNumber(ms); | 561 ms = argc < 4 ? LOCAL_MS(this) : ToNumber(ms); |
593 var time = MakeTime(hour, min, sec, ms); | 562 var time = MakeTime(hour, min, sec, ms); |
594 return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time)); | 563 return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time)); |
595 } | 564 } |
596 | 565 |
597 | 566 |
598 // ECMA 262 - 15.9.5.34 | 567 // ECMA 262 - 15.9.5.34 |
599 function DateSetUTCHours(hour, min, sec, ms) { | 568 function DateSetUTCHours(hour, min, sec, ms) { |
600 CHECK_DATE(this); | |
601 var t = UTC_DATE_VALUE(this); | 569 var t = UTC_DATE_VALUE(this); |
602 hour = ToNumber(hour); | 570 hour = ToNumber(hour); |
603 var argc = %_ArgumentsLength(); | 571 var argc = %_ArgumentsLength(); |
604 min = argc < 2 ? UTC_MIN(this) : ToNumber(min); | 572 min = argc < 2 ? UTC_MIN(this) : ToNumber(min); |
605 sec = argc < 3 ? UTC_SEC(this) : ToNumber(sec); | 573 sec = argc < 3 ? UTC_SEC(this) : ToNumber(sec); |
606 ms = argc < 4 ? UTC_MS(this) : ToNumber(ms); | 574 ms = argc < 4 ? UTC_MS(this) : ToNumber(ms); |
607 var time = MakeTime(hour, min, sec, ms); | 575 var time = MakeTime(hour, min, sec, ms); |
608 return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time)); | 576 return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time)); |
609 } | 577 } |
610 | 578 |
611 | 579 |
612 // ECMA 262 - 15.9.5.36 | 580 // ECMA 262 - 15.9.5.36 |
613 function DateSetDate(date) { | 581 function DateSetDate(date) { |
614 CHECK_DATE(this); | |
615 var t = LOCAL_DATE_VALUE(this); | 582 var t = LOCAL_DATE_VALUE(this); |
616 date = ToNumber(date); | 583 date = ToNumber(date); |
617 var day = MakeDay(LOCAL_YEAR(this), LOCAL_MONTH(this), date); | 584 var day = MakeDay(LOCAL_YEAR(this), LOCAL_MONTH(this), date); |
618 return SET_LOCAL_DATE_VALUE(this, MakeDate(day, LOCAL_TIME_IN_DAY(this))); | 585 return SET_LOCAL_DATE_VALUE(this, MakeDate(day, LOCAL_TIME_IN_DAY(this))); |
619 } | 586 } |
620 | 587 |
621 | 588 |
622 // ECMA 262 - 15.9.5.37 | 589 // ECMA 262 - 15.9.5.37 |
623 function DateSetUTCDate(date) { | 590 function DateSetUTCDate(date) { |
624 CHECK_DATE(this); | |
625 var t = UTC_DATE_VALUE(this); | 591 var t = UTC_DATE_VALUE(this); |
626 date = ToNumber(date); | 592 date = ToNumber(date); |
627 var day = MakeDay(UTC_YEAR(this), UTC_MONTH(this), date); | 593 var day = MakeDay(UTC_YEAR(this), UTC_MONTH(this), date); |
628 return SET_UTC_DATE_VALUE(this, MakeDate(day, UTC_TIME_IN_DAY(this))); | 594 return SET_UTC_DATE_VALUE(this, MakeDate(day, UTC_TIME_IN_DAY(this))); |
629 } | 595 } |
630 | 596 |
631 | 597 |
632 // ECMA 262 - 15.9.5.38 | 598 // ECMA 262 - 15.9.5.38 |
633 function DateSetMonth(month, date) { | 599 function DateSetMonth(month, date) { |
634 CHECK_DATE(this); | |
635 var t = LOCAL_DATE_VALUE(this); | 600 var t = LOCAL_DATE_VALUE(this); |
636 month = ToNumber(month); | 601 month = ToNumber(month); |
637 date = %_ArgumentsLength() < 2 ? LOCAL_DAY(this) : ToNumber(date); | 602 date = %_ArgumentsLength() < 2 ? LOCAL_DAY(this) : ToNumber(date); |
638 var day = MakeDay(LOCAL_YEAR(this), month, date); | 603 var day = MakeDay(LOCAL_YEAR(this), month, date); |
639 return SET_LOCAL_DATE_VALUE(this, MakeDate(day, LOCAL_TIME_IN_DAY(this))); | 604 return SET_LOCAL_DATE_VALUE(this, MakeDate(day, LOCAL_TIME_IN_DAY(this))); |
640 } | 605 } |
641 | 606 |
642 | 607 |
643 // ECMA 262 - 15.9.5.39 | 608 // ECMA 262 - 15.9.5.39 |
644 function DateSetUTCMonth(month, date) { | 609 function DateSetUTCMonth(month, date) { |
645 CHECK_DATE(this); | |
646 var t = UTC_DATE_VALUE(this); | 610 var t = UTC_DATE_VALUE(this); |
647 month = ToNumber(month); | 611 month = ToNumber(month); |
648 date = %_ArgumentsLength() < 2 ? UTC_DAY(this) : ToNumber(date); | 612 date = %_ArgumentsLength() < 2 ? UTC_DAY(this) : ToNumber(date); |
649 var day = MakeDay(UTC_YEAR(this), month, date); | 613 var day = MakeDay(UTC_YEAR(this), month, date); |
650 return SET_UTC_DATE_VALUE(this, MakeDate(day, UTC_TIME_IN_DAY(this))); | 614 return SET_UTC_DATE_VALUE(this, MakeDate(day, UTC_TIME_IN_DAY(this))); |
651 } | 615 } |
652 | 616 |
653 | 617 |
654 // ECMA 262 - 15.9.5.40 | 618 // ECMA 262 - 15.9.5.40 |
655 function DateSetFullYear(year, month, date) { | 619 function DateSetFullYear(year, month, date) { |
656 CHECK_DATE(this); | |
657 var t = LOCAL_DATE_VALUE(this); | 620 var t = LOCAL_DATE_VALUE(this); |
658 year = ToNumber(year); | 621 year = ToNumber(year); |
659 var argc = %_ArgumentsLength(); | 622 var argc = %_ArgumentsLength(); |
660 var time ; | 623 var time ; |
661 if (NUMBER_IS_NAN(t)) { | 624 if (NUMBER_IS_NAN(t)) { |
662 month = argc < 2 ? 0 : ToNumber(month); | 625 month = argc < 2 ? 0 : ToNumber(month); |
663 date = argc < 3 ? 1 : ToNumber(date); | 626 date = argc < 3 ? 1 : ToNumber(date); |
664 time = 0; | 627 time = 0; |
665 } else { | 628 } else { |
666 month = argc < 2 ? LOCAL_MONTH(this) : ToNumber(month); | 629 month = argc < 2 ? LOCAL_MONTH(this) : ToNumber(month); |
667 date = argc < 3 ? LOCAL_DAY(this) : ToNumber(date); | 630 date = argc < 3 ? LOCAL_DAY(this) : ToNumber(date); |
668 time = LOCAL_TIME_IN_DAY(this); | 631 time = LOCAL_TIME_IN_DAY(this); |
669 } | 632 } |
670 var day = MakeDay(year, month, date); | 633 var day = MakeDay(year, month, date); |
671 return SET_LOCAL_DATE_VALUE(this, MakeDate(day, time)); | 634 return SET_LOCAL_DATE_VALUE(this, MakeDate(day, time)); |
672 } | 635 } |
673 | 636 |
674 | 637 |
675 // ECMA 262 - 15.9.5.41 | 638 // ECMA 262 - 15.9.5.41 |
676 function DateSetUTCFullYear(year, month, date) { | 639 function DateSetUTCFullYear(year, month, date) { |
677 CHECK_DATE(this); | |
678 var t = UTC_DATE_VALUE(this); | 640 var t = UTC_DATE_VALUE(this); |
679 year = ToNumber(year); | 641 year = ToNumber(year); |
680 var argc = %_ArgumentsLength(); | 642 var argc = %_ArgumentsLength(); |
681 var time ; | 643 var time ; |
682 if (NUMBER_IS_NAN(t)) { | 644 if (NUMBER_IS_NAN(t)) { |
683 month = argc < 2 ? 0 : ToNumber(month); | 645 month = argc < 2 ? 0 : ToNumber(month); |
684 date = argc < 3 ? 1 : ToNumber(date); | 646 date = argc < 3 ? 1 : ToNumber(date); |
685 time = 0; | 647 time = 0; |
686 } else { | 648 } else { |
687 month = argc < 2 ? UTC_MONTH(this) : ToNumber(month); | 649 month = argc < 2 ? UTC_MONTH(this) : ToNumber(month); |
688 date = argc < 3 ? UTC_DAY(this) : ToNumber(date); | 650 date = argc < 3 ? UTC_DAY(this) : ToNumber(date); |
689 time = UTC_TIME_IN_DAY(this); | 651 time = UTC_TIME_IN_DAY(this); |
690 } | 652 } |
691 var day = MakeDay(year, month, date); | 653 var day = MakeDay(year, month, date); |
692 return SET_UTC_DATE_VALUE(this, MakeDate(day, time)); | 654 return SET_UTC_DATE_VALUE(this, MakeDate(day, time)); |
693 } | 655 } |
694 | 656 |
695 | 657 |
696 // ECMA 262 - 15.9.5.42 | 658 // ECMA 262 - 15.9.5.42 |
697 function DateToUTCString() { | 659 function DateToUTCString() { |
698 CHECK_DATE(this); | |
699 var t = UTC_DATE_VALUE(this); | 660 var t = UTC_DATE_VALUE(this); |
700 if (NUMBER_IS_NAN(t)) return kInvalidDate; | 661 if (NUMBER_IS_NAN(t)) return kInvalidDate; |
701 // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT | 662 // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT |
702 return WeekDays[UTC_WEEKDAY(this)] + ', ' | 663 return WeekDays[UTC_WEEKDAY(this)] + ', ' |
703 + TwoDigitString(UTC_DAY(this)) + ' ' | 664 + TwoDigitString(UTC_DAY(this)) + ' ' |
704 + Months[UTC_MONTH(this)] + ' ' | 665 + Months[UTC_MONTH(this)] + ' ' |
705 + UTC_YEAR(this) + ' ' | 666 + UTC_YEAR(this) + ' ' |
706 + TimeStringUTC(this) + ' GMT'; | 667 + TimeStringUTC(this) + ' GMT'; |
707 } | 668 } |
708 | 669 |
709 | 670 |
710 // ECMA 262 - B.2.4 | 671 // ECMA 262 - B.2.4 |
711 function DateGetYear() { | 672 function DateGetYear() { |
712 CHECK_DATE(this); | |
713 return LOCAL_YEAR(this) - 1900; | 673 return LOCAL_YEAR(this) - 1900; |
714 } | 674 } |
715 | 675 |
716 | 676 |
717 // ECMA 262 - B.2.5 | 677 // ECMA 262 - B.2.5 |
718 function DateSetYear(year) { | 678 function DateSetYear(year) { |
719 CHECK_DATE(this); | 679 CHECK_DATE(this); |
720 year = ToNumber(year); | 680 year = ToNumber(year); |
721 if (NUMBER_IS_NAN(year)) return SET_UTC_DATE_VALUE(this, $NaN); | 681 if (NUMBER_IS_NAN(year)) return SET_UTC_DATE_VALUE(this, $NaN); |
722 year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99) | 682 year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99) |
(...skipping 27 matching lines...) Expand all Loading... |
750 | 710 |
751 | 711 |
752 function PadInt(n, digits) { | 712 function PadInt(n, digits) { |
753 if (digits == 1) return n; | 713 if (digits == 1) return n; |
754 return n < MathPow(10, digits - 1) ? '0' + PadInt(n, digits - 1) : n; | 714 return n < MathPow(10, digits - 1) ? '0' + PadInt(n, digits - 1) : n; |
755 } | 715 } |
756 | 716 |
757 | 717 |
758 // ECMA 262 - 15.9.5.43 | 718 // ECMA 262 - 15.9.5.43 |
759 function DateToISOString() { | 719 function DateToISOString() { |
760 CHECK_DATE(this); | |
761 var t = UTC_DATE_VALUE(this); | 720 var t = UTC_DATE_VALUE(this); |
762 if (NUMBER_IS_NAN(t)) throw MakeRangeError("invalid_time_value", []); | 721 if (NUMBER_IS_NAN(t)) throw MakeRangeError("invalid_time_value", []); |
763 var year = this.getUTCFullYear(); | 722 var year = this.getUTCFullYear(); |
764 var year_string; | 723 var year_string; |
765 if (year >= 0 && year <= 9999) { | 724 if (year >= 0 && year <= 9999) { |
766 year_string = PadInt(year, 4); | 725 year_string = PadInt(year, 4); |
767 } else { | 726 } else { |
768 if (year < 0) { | 727 if (year < 0) { |
769 year_string = "-" + PadInt(-year, 6); | 728 year_string = "-" + PadInt(-year, 6); |
770 } else { | 729 } else { |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
864 "toGMTString", DateToGMTString, | 823 "toGMTString", DateToGMTString, |
865 "toUTCString", DateToUTCString, | 824 "toUTCString", DateToUTCString, |
866 "getYear", DateGetYear, | 825 "getYear", DateGetYear, |
867 "setYear", DateSetYear, | 826 "setYear", DateSetYear, |
868 "toISOString", DateToISOString, | 827 "toISOString", DateToISOString, |
869 "toJSON", DateToJSON | 828 "toJSON", DateToJSON |
870 )); | 829 )); |
871 } | 830 } |
872 | 831 |
873 SetUpDate(); | 832 SetUpDate(); |
OLD | NEW |