| 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 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 var $createDate; | 5 var $createDate; |
| 6 | 6 |
| 7 // ------------------------------------------------------------------- | 7 // ------------------------------------------------------------------- |
| 8 | 8 |
| 9 (function(global, utils) { | 9 (function(global, utils) { |
| 10 | 10 |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 var Months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', | 195 var Months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', |
| 196 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; | 196 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; |
| 197 | 197 |
| 198 | 198 |
| 199 function TwoDigitString(value) { | 199 function TwoDigitString(value) { |
| 200 return value < 10 ? "0" + value : "" + value; | 200 return value < 10 ? "0" + value : "" + value; |
| 201 } | 201 } |
| 202 | 202 |
| 203 | 203 |
| 204 function DateString(date) { | 204 function DateString(date) { |
| 205 CHECK_DATE(date); |
| 205 return WeekDays[LOCAL_WEEKDAY(date)] + ' ' | 206 return WeekDays[LOCAL_WEEKDAY(date)] + ' ' |
| 206 + Months[LOCAL_MONTH(date)] + ' ' | 207 + Months[LOCAL_MONTH(date)] + ' ' |
| 207 + TwoDigitString(LOCAL_DAY(date)) + ' ' | 208 + TwoDigitString(LOCAL_DAY(date)) + ' ' |
| 208 + LOCAL_YEAR(date); | 209 + LOCAL_YEAR(date); |
| 209 } | 210 } |
| 210 | 211 |
| 211 | 212 |
| 212 var LongWeekDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', | 213 var LongWeekDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', |
| 213 'Thursday', 'Friday', 'Saturday']; | 214 'Thursday', 'Friday', 'Saturday']; |
| 214 var LongMonths = ['January', 'February', 'March', 'April', 'May', 'June', | 215 var LongMonths = ['January', 'February', 'March', 'April', 'May', 'June', |
| 215 'July', 'August', 'September', 'October', 'November', 'December']; | 216 'July', 'August', 'September', 'October', 'November', 'December']; |
| 216 | 217 |
| 217 | 218 |
| 218 function LongDateString(date) { | 219 function LongDateString(date) { |
| 220 CHECK_DATE(date); |
| 219 return LongWeekDays[LOCAL_WEEKDAY(date)] + ', ' | 221 return LongWeekDays[LOCAL_WEEKDAY(date)] + ', ' |
| 220 + LongMonths[LOCAL_MONTH(date)] + ' ' | 222 + LongMonths[LOCAL_MONTH(date)] + ' ' |
| 221 + TwoDigitString(LOCAL_DAY(date)) + ', ' | 223 + TwoDigitString(LOCAL_DAY(date)) + ', ' |
| 222 + LOCAL_YEAR(date); | 224 + LOCAL_YEAR(date); |
| 223 } | 225 } |
| 224 | 226 |
| 225 | 227 |
| 226 function TimeString(date) { | 228 function TimeString(date) { |
| 229 CHECK_DATE(date); |
| 227 return TwoDigitString(LOCAL_HOUR(date)) + ':' | 230 return TwoDigitString(LOCAL_HOUR(date)) + ':' |
| 228 + TwoDigitString(LOCAL_MIN(date)) + ':' | 231 + TwoDigitString(LOCAL_MIN(date)) + ':' |
| 229 + TwoDigitString(LOCAL_SEC(date)); | 232 + TwoDigitString(LOCAL_SEC(date)); |
| 230 } | 233 } |
| 231 | 234 |
| 232 | 235 |
| 233 function TimeStringUTC(date) { | 236 function TimeStringUTC(date) { |
| 237 CHECK_DATE(date); |
| 234 return TwoDigitString(UTC_HOUR(date)) + ':' | 238 return TwoDigitString(UTC_HOUR(date)) + ':' |
| 235 + TwoDigitString(UTC_MIN(date)) + ':' | 239 + TwoDigitString(UTC_MIN(date)) + ':' |
| 236 + TwoDigitString(UTC_SEC(date)); | 240 + TwoDigitString(UTC_SEC(date)); |
| 237 } | 241 } |
| 238 | 242 |
| 239 | 243 |
| 240 function LocalTimezoneString(date) { | 244 function LocalTimezoneString(date) { |
| 245 CHECK_DATE(date); |
| 241 var timezone = LocalTimezone(UTC_DATE_VALUE(date)); | 246 var timezone = LocalTimezone(UTC_DATE_VALUE(date)); |
| 242 | 247 |
| 243 var timezoneOffset = -TIMEZONE_OFFSET(date); | 248 var timezoneOffset = -TIMEZONE_OFFSET(date); |
| 244 var sign = (timezoneOffset >= 0) ? 1 : -1; | 249 var sign = (timezoneOffset >= 0) ? 1 : -1; |
| 245 var hours = MathFloor((sign * timezoneOffset)/60); | 250 var hours = MathFloor((sign * timezoneOffset)/60); |
| 246 var min = MathFloor((sign * timezoneOffset)%60); | 251 var min = MathFloor((sign * timezoneOffset)%60); |
| 247 var gmt = ' GMT' + ((sign == 1) ? '+' : '-') + | 252 var gmt = ' GMT' + ((sign == 1) ? '+' : '-') + |
| 248 TwoDigitString(hours) + TwoDigitString(min); | 253 TwoDigitString(hours) + TwoDigitString(min); |
| 249 return gmt + ' (' + timezone + ')'; | 254 return gmt + ' (' + timezone + ')'; |
| 250 } | 255 } |
| 251 | 256 |
| 252 | 257 |
| 253 function DatePrintString(date) { | 258 function DatePrintString(date) { |
| 259 CHECK_DATE(date); |
| 254 return DateString(date) + ' ' + TimeString(date); | 260 return DateString(date) + ' ' + TimeString(date); |
| 255 } | 261 } |
| 256 | 262 |
| 257 // ------------------------------------------------------------------- | 263 // ------------------------------------------------------------------- |
| 258 | 264 |
| 259 // Reused output buffer. Used when parsing date strings. | 265 // Reused output buffer. Used when parsing date strings. |
| 260 var parse_buffer = new InternalArray(8); | 266 var parse_buffer = new InternalArray(8); |
| 261 | 267 |
| 262 // ECMA 262 - 15.9.4.2 | 268 // ECMA 262 - 15.9.4.2 |
| 263 function DateParse(string) { | 269 function DateParse(string) { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 296 | 302 |
| 297 | 303 |
| 298 // ECMA 262 - 15.9.4.4 | 304 // ECMA 262 - 15.9.4.4 |
| 299 function DateNow() { | 305 function DateNow() { |
| 300 return %DateCurrentTime(); | 306 return %DateCurrentTime(); |
| 301 } | 307 } |
| 302 | 308 |
| 303 | 309 |
| 304 // ECMA 262 - 15.9.5.2 | 310 // ECMA 262 - 15.9.5.2 |
| 305 function DateToString() { | 311 function DateToString() { |
| 312 CHECK_DATE(this); |
| 306 var t = UTC_DATE_VALUE(this) | 313 var t = UTC_DATE_VALUE(this) |
| 307 if (NUMBER_IS_NAN(t)) return kInvalidDate; | 314 if (NUMBER_IS_NAN(t)) return kInvalidDate; |
| 308 var time_zone_string = LocalTimezoneString(this) | 315 var time_zone_string = LocalTimezoneString(this) |
| 309 return DatePrintString(this) + time_zone_string; | 316 return DatePrintString(this) + time_zone_string; |
| 310 } | 317 } |
| 311 | 318 |
| 312 | 319 |
| 313 // ECMA 262 - 15.9.5.3 | 320 // ECMA 262 - 15.9.5.3 |
| 314 function DateToDateString() { | 321 function DateToDateString() { |
| 322 CHECK_DATE(this); |
| 315 var t = UTC_DATE_VALUE(this); | 323 var t = UTC_DATE_VALUE(this); |
| 316 if (NUMBER_IS_NAN(t)) return kInvalidDate; | 324 if (NUMBER_IS_NAN(t)) return kInvalidDate; |
| 317 return DateString(this); | 325 return DateString(this); |
| 318 } | 326 } |
| 319 | 327 |
| 320 | 328 |
| 321 // ECMA 262 - 15.9.5.4 | 329 // ECMA 262 - 15.9.5.4 |
| 322 function DateToTimeString() { | 330 function DateToTimeString() { |
| 331 CHECK_DATE(this); |
| 323 var t = UTC_DATE_VALUE(this); | 332 var t = UTC_DATE_VALUE(this); |
| 324 if (NUMBER_IS_NAN(t)) return kInvalidDate; | 333 if (NUMBER_IS_NAN(t)) return kInvalidDate; |
| 325 var time_zone_string = LocalTimezoneString(this); | 334 var time_zone_string = LocalTimezoneString(this); |
| 326 return TimeString(this) + time_zone_string; | 335 return TimeString(this) + time_zone_string; |
| 327 } | 336 } |
| 328 | 337 |
| 329 | 338 |
| 330 // ECMA 262 - 15.9.5.5 | 339 // ECMA 262 - 15.9.5.5 |
| 331 function DateToLocaleString() { | 340 function DateToLocaleString() { |
| 341 CHECK_DATE(this); |
| 332 return %_CallFunction(this, DateToString); | 342 return %_CallFunction(this, DateToString); |
| 333 } | 343 } |
| 334 | 344 |
| 335 | 345 |
| 336 // ECMA 262 - 15.9.5.6 | 346 // ECMA 262 - 15.9.5.6 |
| 337 function DateToLocaleDateString() { | 347 function DateToLocaleDateString() { |
| 348 CHECK_DATE(this); |
| 338 var t = UTC_DATE_VALUE(this); | 349 var t = UTC_DATE_VALUE(this); |
| 339 if (NUMBER_IS_NAN(t)) return kInvalidDate; | 350 if (NUMBER_IS_NAN(t)) return kInvalidDate; |
| 340 return LongDateString(this); | 351 return LongDateString(this); |
| 341 } | 352 } |
| 342 | 353 |
| 343 | 354 |
| 344 // ECMA 262 - 15.9.5.7 | 355 // ECMA 262 - 15.9.5.7 |
| 345 function DateToLocaleTimeString() { | 356 function DateToLocaleTimeString() { |
| 357 CHECK_DATE(this); |
| 346 var t = UTC_DATE_VALUE(this); | 358 var t = UTC_DATE_VALUE(this); |
| 347 if (NUMBER_IS_NAN(t)) return kInvalidDate; | 359 if (NUMBER_IS_NAN(t)) return kInvalidDate; |
| 348 return TimeString(this); | 360 return TimeString(this); |
| 349 } | 361 } |
| 350 | 362 |
| 351 | 363 |
| 352 // ECMA 262 - 15.9.5.8 | 364 // ECMA 262 - 15.9.5.8 |
| 353 function DateValueOf() { | 365 function DateValueOf() { |
| 366 CHECK_DATE(this); |
| 354 return UTC_DATE_VALUE(this); | 367 return UTC_DATE_VALUE(this); |
| 355 } | 368 } |
| 356 | 369 |
| 357 | 370 |
| 358 // ECMA 262 - 15.9.5.9 | 371 // ECMA 262 - 15.9.5.9 |
| 359 function DateGetTime() { | 372 function DateGetTime() { |
| 373 CHECK_DATE(this); |
| 360 return UTC_DATE_VALUE(this); | 374 return UTC_DATE_VALUE(this); |
| 361 } | 375 } |
| 362 | 376 |
| 363 | 377 |
| 364 // ECMA 262 - 15.9.5.10 | 378 // ECMA 262 - 15.9.5.10 |
| 365 function DateGetFullYear() { | 379 function DateGetFullYear() { |
| 380 CHECK_DATE(this); |
| 366 return LOCAL_YEAR(this); | 381 return LOCAL_YEAR(this); |
| 367 } | 382 } |
| 368 | 383 |
| 369 | 384 |
| 370 // ECMA 262 - 15.9.5.11 | 385 // ECMA 262 - 15.9.5.11 |
| 371 function DateGetUTCFullYear() { | 386 function DateGetUTCFullYear() { |
| 387 CHECK_DATE(this); |
| 372 return UTC_YEAR(this); | 388 return UTC_YEAR(this); |
| 373 } | 389 } |
| 374 | 390 |
| 375 | 391 |
| 376 // ECMA 262 - 15.9.5.12 | 392 // ECMA 262 - 15.9.5.12 |
| 377 function DateGetMonth() { | 393 function DateGetMonth() { |
| 394 CHECK_DATE(this); |
| 378 return LOCAL_MONTH(this); | 395 return LOCAL_MONTH(this); |
| 379 } | 396 } |
| 380 | 397 |
| 381 | 398 |
| 382 // ECMA 262 - 15.9.5.13 | 399 // ECMA 262 - 15.9.5.13 |
| 383 function DateGetUTCMonth() { | 400 function DateGetUTCMonth() { |
| 401 CHECK_DATE(this); |
| 384 return UTC_MONTH(this); | 402 return UTC_MONTH(this); |
| 385 } | 403 } |
| 386 | 404 |
| 387 | 405 |
| 388 // ECMA 262 - 15.9.5.14 | 406 // ECMA 262 - 15.9.5.14 |
| 389 function DateGetDate() { | 407 function DateGetDate() { |
| 408 CHECK_DATE(this); |
| 390 return LOCAL_DAY(this); | 409 return LOCAL_DAY(this); |
| 391 } | 410 } |
| 392 | 411 |
| 393 | 412 |
| 394 // ECMA 262 - 15.9.5.15 | 413 // ECMA 262 - 15.9.5.15 |
| 395 function DateGetUTCDate() { | 414 function DateGetUTCDate() { |
| 415 CHECK_DATE(this); |
| 396 return UTC_DAY(this); | 416 return UTC_DAY(this); |
| 397 } | 417 } |
| 398 | 418 |
| 399 | 419 |
| 400 // ECMA 262 - 15.9.5.16 | 420 // ECMA 262 - 15.9.5.16 |
| 401 function DateGetDay() { | 421 function DateGetDay() { |
| 422 CHECK_DATE(this); |
| 402 return LOCAL_WEEKDAY(this); | 423 return LOCAL_WEEKDAY(this); |
| 403 } | 424 } |
| 404 | 425 |
| 405 | 426 |
| 406 // ECMA 262 - 15.9.5.17 | 427 // ECMA 262 - 15.9.5.17 |
| 407 function DateGetUTCDay() { | 428 function DateGetUTCDay() { |
| 429 CHECK_DATE(this); |
| 408 return UTC_WEEKDAY(this); | 430 return UTC_WEEKDAY(this); |
| 409 } | 431 } |
| 410 | 432 |
| 411 | 433 |
| 412 // ECMA 262 - 15.9.5.18 | 434 // ECMA 262 - 15.9.5.18 |
| 413 function DateGetHours() { | 435 function DateGetHours() { |
| 436 CHECK_DATE(this); |
| 414 return LOCAL_HOUR(this); | 437 return LOCAL_HOUR(this); |
| 415 } | 438 } |
| 416 | 439 |
| 417 | 440 |
| 418 // ECMA 262 - 15.9.5.19 | 441 // ECMA 262 - 15.9.5.19 |
| 419 function DateGetUTCHours() { | 442 function DateGetUTCHours() { |
| 443 CHECK_DATE(this); |
| 420 return UTC_HOUR(this); | 444 return UTC_HOUR(this); |
| 421 } | 445 } |
| 422 | 446 |
| 423 | 447 |
| 424 // ECMA 262 - 15.9.5.20 | 448 // ECMA 262 - 15.9.5.20 |
| 425 function DateGetMinutes() { | 449 function DateGetMinutes() { |
| 450 CHECK_DATE(this); |
| 426 return LOCAL_MIN(this); | 451 return LOCAL_MIN(this); |
| 427 } | 452 } |
| 428 | 453 |
| 429 | 454 |
| 430 // ECMA 262 - 15.9.5.21 | 455 // ECMA 262 - 15.9.5.21 |
| 431 function DateGetUTCMinutes() { | 456 function DateGetUTCMinutes() { |
| 457 CHECK_DATE(this); |
| 432 return UTC_MIN(this); | 458 return UTC_MIN(this); |
| 433 } | 459 } |
| 434 | 460 |
| 435 | 461 |
| 436 // ECMA 262 - 15.9.5.22 | 462 // ECMA 262 - 15.9.5.22 |
| 437 function DateGetSeconds() { | 463 function DateGetSeconds() { |
| 464 CHECK_DATE(this); |
| 438 return LOCAL_SEC(this); | 465 return LOCAL_SEC(this); |
| 439 } | 466 } |
| 440 | 467 |
| 441 | 468 |
| 442 // ECMA 262 - 15.9.5.23 | 469 // ECMA 262 - 15.9.5.23 |
| 443 function DateGetUTCSeconds() { | 470 function DateGetUTCSeconds() { |
| 471 CHECK_DATE(this); |
| 444 return UTC_SEC(this) | 472 return UTC_SEC(this) |
| 445 } | 473 } |
| 446 | 474 |
| 447 | 475 |
| 448 // ECMA 262 - 15.9.5.24 | 476 // ECMA 262 - 15.9.5.24 |
| 449 function DateGetMilliseconds() { | 477 function DateGetMilliseconds() { |
| 478 CHECK_DATE(this); |
| 450 return LOCAL_MS(this); | 479 return LOCAL_MS(this); |
| 451 } | 480 } |
| 452 | 481 |
| 453 | 482 |
| 454 // ECMA 262 - 15.9.5.25 | 483 // ECMA 262 - 15.9.5.25 |
| 455 function DateGetUTCMilliseconds() { | 484 function DateGetUTCMilliseconds() { |
| 485 CHECK_DATE(this); |
| 456 return UTC_MS(this); | 486 return UTC_MS(this); |
| 457 } | 487 } |
| 458 | 488 |
| 459 | 489 |
| 460 // ECMA 262 - 15.9.5.26 | 490 // ECMA 262 - 15.9.5.26 |
| 461 function DateGetTimezoneOffset() { | 491 function DateGetTimezoneOffset() { |
| 492 CHECK_DATE(this); |
| 462 return TIMEZONE_OFFSET(this); | 493 return TIMEZONE_OFFSET(this); |
| 463 } | 494 } |
| 464 | 495 |
| 465 | 496 |
| 466 // ECMA 262 - 15.9.5.27 | 497 // ECMA 262 - 15.9.5.27 |
| 467 function DateSetTime(ms) { | 498 function DateSetTime(ms) { |
| 468 CHECK_DATE(this); | 499 CHECK_DATE(this); |
| 469 SET_UTC_DATE_VALUE(this, $toNumber(ms)); | 500 SET_UTC_DATE_VALUE(this, $toNumber(ms)); |
| 470 return UTC_DATE_VALUE(this); | 501 return UTC_DATE_VALUE(this); |
| 471 } | 502 } |
| 472 | 503 |
| 473 | 504 |
| 474 // ECMA 262 - 15.9.5.28 | 505 // ECMA 262 - 15.9.5.28 |
| 475 function DateSetMilliseconds(ms) { | 506 function DateSetMilliseconds(ms) { |
| 507 CHECK_DATE(this); |
| 476 var t = LOCAL_DATE_VALUE(this); | 508 var t = LOCAL_DATE_VALUE(this); |
| 477 ms = $toNumber(ms); | 509 ms = $toNumber(ms); |
| 478 var time = MakeTime(LOCAL_HOUR(this), LOCAL_MIN(this), LOCAL_SEC(this), ms); | 510 var time = MakeTime(LOCAL_HOUR(this), LOCAL_MIN(this), LOCAL_SEC(this), ms); |
| 479 return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time)); | 511 return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time)); |
| 480 } | 512 } |
| 481 | 513 |
| 482 | 514 |
| 483 // ECMA 262 - 15.9.5.29 | 515 // ECMA 262 - 15.9.5.29 |
| 484 function DateSetUTCMilliseconds(ms) { | 516 function DateSetUTCMilliseconds(ms) { |
| 517 CHECK_DATE(this); |
| 485 var t = UTC_DATE_VALUE(this); | 518 var t = UTC_DATE_VALUE(this); |
| 486 ms = $toNumber(ms); | 519 ms = $toNumber(ms); |
| 487 var time = MakeTime(UTC_HOUR(this), | 520 var time = MakeTime(UTC_HOUR(this), |
| 488 UTC_MIN(this), | 521 UTC_MIN(this), |
| 489 UTC_SEC(this), | 522 UTC_SEC(this), |
| 490 ms); | 523 ms); |
| 491 return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time)); | 524 return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time)); |
| 492 } | 525 } |
| 493 | 526 |
| 494 | 527 |
| 495 // ECMA 262 - 15.9.5.30 | 528 // ECMA 262 - 15.9.5.30 |
| 496 function DateSetSeconds(sec, ms) { | 529 function DateSetSeconds(sec, ms) { |
| 530 CHECK_DATE(this); |
| 497 var t = LOCAL_DATE_VALUE(this); | 531 var t = LOCAL_DATE_VALUE(this); |
| 498 sec = $toNumber(sec); | 532 sec = $toNumber(sec); |
| 499 ms = %_ArgumentsLength() < 2 ? LOCAL_MS(this) : $toNumber(ms); | 533 ms = %_ArgumentsLength() < 2 ? LOCAL_MS(this) : $toNumber(ms); |
| 500 var time = MakeTime(LOCAL_HOUR(this), LOCAL_MIN(this), sec, ms); | 534 var time = MakeTime(LOCAL_HOUR(this), LOCAL_MIN(this), sec, ms); |
| 501 return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time)); | 535 return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time)); |
| 502 } | 536 } |
| 503 | 537 |
| 504 | 538 |
| 505 // ECMA 262 - 15.9.5.31 | 539 // ECMA 262 - 15.9.5.31 |
| 506 function DateSetUTCSeconds(sec, ms) { | 540 function DateSetUTCSeconds(sec, ms) { |
| 541 CHECK_DATE(this); |
| 507 var t = UTC_DATE_VALUE(this); | 542 var t = UTC_DATE_VALUE(this); |
| 508 sec = $toNumber(sec); | 543 sec = $toNumber(sec); |
| 509 ms = %_ArgumentsLength() < 2 ? UTC_MS(this) : $toNumber(ms); | 544 ms = %_ArgumentsLength() < 2 ? UTC_MS(this) : $toNumber(ms); |
| 510 var time = MakeTime(UTC_HOUR(this), UTC_MIN(this), sec, ms); | 545 var time = MakeTime(UTC_HOUR(this), UTC_MIN(this), sec, ms); |
| 511 return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time)); | 546 return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time)); |
| 512 } | 547 } |
| 513 | 548 |
| 514 | 549 |
| 515 // ECMA 262 - 15.9.5.33 | 550 // ECMA 262 - 15.9.5.33 |
| 516 function DateSetMinutes(min, sec, ms) { | 551 function DateSetMinutes(min, sec, ms) { |
| 552 CHECK_DATE(this); |
| 517 var t = LOCAL_DATE_VALUE(this); | 553 var t = LOCAL_DATE_VALUE(this); |
| 518 min = $toNumber(min); | 554 min = $toNumber(min); |
| 519 var argc = %_ArgumentsLength(); | 555 var argc = %_ArgumentsLength(); |
| 520 sec = argc < 2 ? LOCAL_SEC(this) : $toNumber(sec); | 556 sec = argc < 2 ? LOCAL_SEC(this) : $toNumber(sec); |
| 521 ms = argc < 3 ? LOCAL_MS(this) : $toNumber(ms); | 557 ms = argc < 3 ? LOCAL_MS(this) : $toNumber(ms); |
| 522 var time = MakeTime(LOCAL_HOUR(this), min, sec, ms); | 558 var time = MakeTime(LOCAL_HOUR(this), min, sec, ms); |
| 523 return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time)); | 559 return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time)); |
| 524 } | 560 } |
| 525 | 561 |
| 526 | 562 |
| 527 // ECMA 262 - 15.9.5.34 | 563 // ECMA 262 - 15.9.5.34 |
| 528 function DateSetUTCMinutes(min, sec, ms) { | 564 function DateSetUTCMinutes(min, sec, ms) { |
| 565 CHECK_DATE(this); |
| 529 var t = UTC_DATE_VALUE(this); | 566 var t = UTC_DATE_VALUE(this); |
| 530 min = $toNumber(min); | 567 min = $toNumber(min); |
| 531 var argc = %_ArgumentsLength(); | 568 var argc = %_ArgumentsLength(); |
| 532 sec = argc < 2 ? UTC_SEC(this) : $toNumber(sec); | 569 sec = argc < 2 ? UTC_SEC(this) : $toNumber(sec); |
| 533 ms = argc < 3 ? UTC_MS(this) : $toNumber(ms); | 570 ms = argc < 3 ? UTC_MS(this) : $toNumber(ms); |
| 534 var time = MakeTime(UTC_HOUR(this), min, sec, ms); | 571 var time = MakeTime(UTC_HOUR(this), min, sec, ms); |
| 535 return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time)); | 572 return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time)); |
| 536 } | 573 } |
| 537 | 574 |
| 538 | 575 |
| 539 // ECMA 262 - 15.9.5.35 | 576 // ECMA 262 - 15.9.5.35 |
| 540 function DateSetHours(hour, min, sec, ms) { | 577 function DateSetHours(hour, min, sec, ms) { |
| 578 CHECK_DATE(this); |
| 541 var t = LOCAL_DATE_VALUE(this); | 579 var t = LOCAL_DATE_VALUE(this); |
| 542 hour = $toNumber(hour); | 580 hour = $toNumber(hour); |
| 543 var argc = %_ArgumentsLength(); | 581 var argc = %_ArgumentsLength(); |
| 544 min = argc < 2 ? LOCAL_MIN(this) : $toNumber(min); | 582 min = argc < 2 ? LOCAL_MIN(this) : $toNumber(min); |
| 545 sec = argc < 3 ? LOCAL_SEC(this) : $toNumber(sec); | 583 sec = argc < 3 ? LOCAL_SEC(this) : $toNumber(sec); |
| 546 ms = argc < 4 ? LOCAL_MS(this) : $toNumber(ms); | 584 ms = argc < 4 ? LOCAL_MS(this) : $toNumber(ms); |
| 547 var time = MakeTime(hour, min, sec, ms); | 585 var time = MakeTime(hour, min, sec, ms); |
| 548 return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time)); | 586 return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time)); |
| 549 } | 587 } |
| 550 | 588 |
| 551 | 589 |
| 552 // ECMA 262 - 15.9.5.34 | 590 // ECMA 262 - 15.9.5.34 |
| 553 function DateSetUTCHours(hour, min, sec, ms) { | 591 function DateSetUTCHours(hour, min, sec, ms) { |
| 592 CHECK_DATE(this); |
| 554 var t = UTC_DATE_VALUE(this); | 593 var t = UTC_DATE_VALUE(this); |
| 555 hour = $toNumber(hour); | 594 hour = $toNumber(hour); |
| 556 var argc = %_ArgumentsLength(); | 595 var argc = %_ArgumentsLength(); |
| 557 min = argc < 2 ? UTC_MIN(this) : $toNumber(min); | 596 min = argc < 2 ? UTC_MIN(this) : $toNumber(min); |
| 558 sec = argc < 3 ? UTC_SEC(this) : $toNumber(sec); | 597 sec = argc < 3 ? UTC_SEC(this) : $toNumber(sec); |
| 559 ms = argc < 4 ? UTC_MS(this) : $toNumber(ms); | 598 ms = argc < 4 ? UTC_MS(this) : $toNumber(ms); |
| 560 var time = MakeTime(hour, min, sec, ms); | 599 var time = MakeTime(hour, min, sec, ms); |
| 561 return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time)); | 600 return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time)); |
| 562 } | 601 } |
| 563 | 602 |
| 564 | 603 |
| 565 // ECMA 262 - 15.9.5.36 | 604 // ECMA 262 - 15.9.5.36 |
| 566 function DateSetDate(date) { | 605 function DateSetDate(date) { |
| 606 CHECK_DATE(this); |
| 567 var t = LOCAL_DATE_VALUE(this); | 607 var t = LOCAL_DATE_VALUE(this); |
| 568 date = $toNumber(date); | 608 date = $toNumber(date); |
| 569 var day = MakeDay(LOCAL_YEAR(this), LOCAL_MONTH(this), date); | 609 var day = MakeDay(LOCAL_YEAR(this), LOCAL_MONTH(this), date); |
| 570 return SET_LOCAL_DATE_VALUE(this, MakeDate(day, LOCAL_TIME_IN_DAY(this))); | 610 return SET_LOCAL_DATE_VALUE(this, MakeDate(day, LOCAL_TIME_IN_DAY(this))); |
| 571 } | 611 } |
| 572 | 612 |
| 573 | 613 |
| 574 // ECMA 262 - 15.9.5.37 | 614 // ECMA 262 - 15.9.5.37 |
| 575 function DateSetUTCDate(date) { | 615 function DateSetUTCDate(date) { |
| 616 CHECK_DATE(this); |
| 576 var t = UTC_DATE_VALUE(this); | 617 var t = UTC_DATE_VALUE(this); |
| 577 date = $toNumber(date); | 618 date = $toNumber(date); |
| 578 var day = MakeDay(UTC_YEAR(this), UTC_MONTH(this), date); | 619 var day = MakeDay(UTC_YEAR(this), UTC_MONTH(this), date); |
| 579 return SET_UTC_DATE_VALUE(this, MakeDate(day, UTC_TIME_IN_DAY(this))); | 620 return SET_UTC_DATE_VALUE(this, MakeDate(day, UTC_TIME_IN_DAY(this))); |
| 580 } | 621 } |
| 581 | 622 |
| 582 | 623 |
| 583 // ECMA 262 - 15.9.5.38 | 624 // ECMA 262 - 15.9.5.38 |
| 584 function DateSetMonth(month, date) { | 625 function DateSetMonth(month, date) { |
| 626 CHECK_DATE(this); |
| 585 var t = LOCAL_DATE_VALUE(this); | 627 var t = LOCAL_DATE_VALUE(this); |
| 586 month = $toNumber(month); | 628 month = $toNumber(month); |
| 587 date = %_ArgumentsLength() < 2 ? LOCAL_DAY(this) : $toNumber(date); | 629 date = %_ArgumentsLength() < 2 ? LOCAL_DAY(this) : $toNumber(date); |
| 588 var day = MakeDay(LOCAL_YEAR(this), month, date); | 630 var day = MakeDay(LOCAL_YEAR(this), month, date); |
| 589 return SET_LOCAL_DATE_VALUE(this, MakeDate(day, LOCAL_TIME_IN_DAY(this))); | 631 return SET_LOCAL_DATE_VALUE(this, MakeDate(day, LOCAL_TIME_IN_DAY(this))); |
| 590 } | 632 } |
| 591 | 633 |
| 592 | 634 |
| 593 // ECMA 262 - 15.9.5.39 | 635 // ECMA 262 - 15.9.5.39 |
| 594 function DateSetUTCMonth(month, date) { | 636 function DateSetUTCMonth(month, date) { |
| 637 CHECK_DATE(this); |
| 595 var t = UTC_DATE_VALUE(this); | 638 var t = UTC_DATE_VALUE(this); |
| 596 month = $toNumber(month); | 639 month = $toNumber(month); |
| 597 date = %_ArgumentsLength() < 2 ? UTC_DAY(this) : $toNumber(date); | 640 date = %_ArgumentsLength() < 2 ? UTC_DAY(this) : $toNumber(date); |
| 598 var day = MakeDay(UTC_YEAR(this), month, date); | 641 var day = MakeDay(UTC_YEAR(this), month, date); |
| 599 return SET_UTC_DATE_VALUE(this, MakeDate(day, UTC_TIME_IN_DAY(this))); | 642 return SET_UTC_DATE_VALUE(this, MakeDate(day, UTC_TIME_IN_DAY(this))); |
| 600 } | 643 } |
| 601 | 644 |
| 602 | 645 |
| 603 // ECMA 262 - 15.9.5.40 | 646 // ECMA 262 - 15.9.5.40 |
| 604 function DateSetFullYear(year, month, date) { | 647 function DateSetFullYear(year, month, date) { |
| 648 CHECK_DATE(this); |
| 605 var t = LOCAL_DATE_VALUE(this); | 649 var t = LOCAL_DATE_VALUE(this); |
| 606 year = $toNumber(year); | 650 year = $toNumber(year); |
| 607 var argc = %_ArgumentsLength(); | 651 var argc = %_ArgumentsLength(); |
| 608 var time ; | 652 var time ; |
| 609 if (NUMBER_IS_NAN(t)) { | 653 if (NUMBER_IS_NAN(t)) { |
| 610 month = argc < 2 ? 0 : $toNumber(month); | 654 month = argc < 2 ? 0 : $toNumber(month); |
| 611 date = argc < 3 ? 1 : $toNumber(date); | 655 date = argc < 3 ? 1 : $toNumber(date); |
| 612 time = 0; | 656 time = 0; |
| 613 } else { | 657 } else { |
| 614 month = argc < 2 ? LOCAL_MONTH(this) : $toNumber(month); | 658 month = argc < 2 ? LOCAL_MONTH(this) : $toNumber(month); |
| 615 date = argc < 3 ? LOCAL_DAY(this) : $toNumber(date); | 659 date = argc < 3 ? LOCAL_DAY(this) : $toNumber(date); |
| 616 time = LOCAL_TIME_IN_DAY(this); | 660 time = LOCAL_TIME_IN_DAY(this); |
| 617 } | 661 } |
| 618 var day = MakeDay(year, month, date); | 662 var day = MakeDay(year, month, date); |
| 619 return SET_LOCAL_DATE_VALUE(this, MakeDate(day, time)); | 663 return SET_LOCAL_DATE_VALUE(this, MakeDate(day, time)); |
| 620 } | 664 } |
| 621 | 665 |
| 622 | 666 |
| 623 // ECMA 262 - 15.9.5.41 | 667 // ECMA 262 - 15.9.5.41 |
| 624 function DateSetUTCFullYear(year, month, date) { | 668 function DateSetUTCFullYear(year, month, date) { |
| 669 CHECK_DATE(this); |
| 625 var t = UTC_DATE_VALUE(this); | 670 var t = UTC_DATE_VALUE(this); |
| 626 year = $toNumber(year); | 671 year = $toNumber(year); |
| 627 var argc = %_ArgumentsLength(); | 672 var argc = %_ArgumentsLength(); |
| 628 var time ; | 673 var time ; |
| 629 if (NUMBER_IS_NAN(t)) { | 674 if (NUMBER_IS_NAN(t)) { |
| 630 month = argc < 2 ? 0 : $toNumber(month); | 675 month = argc < 2 ? 0 : $toNumber(month); |
| 631 date = argc < 3 ? 1 : $toNumber(date); | 676 date = argc < 3 ? 1 : $toNumber(date); |
| 632 time = 0; | 677 time = 0; |
| 633 } else { | 678 } else { |
| 634 month = argc < 2 ? UTC_MONTH(this) : $toNumber(month); | 679 month = argc < 2 ? UTC_MONTH(this) : $toNumber(month); |
| 635 date = argc < 3 ? UTC_DAY(this) : $toNumber(date); | 680 date = argc < 3 ? UTC_DAY(this) : $toNumber(date); |
| 636 time = UTC_TIME_IN_DAY(this); | 681 time = UTC_TIME_IN_DAY(this); |
| 637 } | 682 } |
| 638 var day = MakeDay(year, month, date); | 683 var day = MakeDay(year, month, date); |
| 639 return SET_UTC_DATE_VALUE(this, MakeDate(day, time)); | 684 return SET_UTC_DATE_VALUE(this, MakeDate(day, time)); |
| 640 } | 685 } |
| 641 | 686 |
| 642 | 687 |
| 643 // ECMA 262 - 15.9.5.42 | 688 // ECMA 262 - 15.9.5.42 |
| 644 function DateToUTCString() { | 689 function DateToUTCString() { |
| 690 CHECK_DATE(this); |
| 645 var t = UTC_DATE_VALUE(this); | 691 var t = UTC_DATE_VALUE(this); |
| 646 if (NUMBER_IS_NAN(t)) return kInvalidDate; | 692 if (NUMBER_IS_NAN(t)) return kInvalidDate; |
| 647 // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT | 693 // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT |
| 648 return WeekDays[UTC_WEEKDAY(this)] + ', ' | 694 return WeekDays[UTC_WEEKDAY(this)] + ', ' |
| 649 + TwoDigitString(UTC_DAY(this)) + ' ' | 695 + TwoDigitString(UTC_DAY(this)) + ' ' |
| 650 + Months[UTC_MONTH(this)] + ' ' | 696 + Months[UTC_MONTH(this)] + ' ' |
| 651 + UTC_YEAR(this) + ' ' | 697 + UTC_YEAR(this) + ' ' |
| 652 + TimeStringUTC(this) + ' GMT'; | 698 + TimeStringUTC(this) + ' GMT'; |
| 653 } | 699 } |
| 654 | 700 |
| 655 | 701 |
| 656 // ECMA 262 - B.2.4 | 702 // ECMA 262 - B.2.4 |
| 657 function DateGetYear() { | 703 function DateGetYear() { |
| 704 CHECK_DATE(this); |
| 658 return LOCAL_YEAR(this) - 1900; | 705 return LOCAL_YEAR(this) - 1900; |
| 659 } | 706 } |
| 660 | 707 |
| 661 | 708 |
| 662 // ECMA 262 - B.2.5 | 709 // ECMA 262 - B.2.5 |
| 663 function DateSetYear(year) { | 710 function DateSetYear(year) { |
| 664 CHECK_DATE(this); | 711 CHECK_DATE(this); |
| 665 year = $toNumber(year); | 712 year = $toNumber(year); |
| 666 if (NUMBER_IS_NAN(year)) return SET_UTC_DATE_VALUE(this, NAN); | 713 if (NUMBER_IS_NAN(year)) return SET_UTC_DATE_VALUE(this, NAN); |
| 667 year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99) | 714 year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99) |
| (...skipping 27 matching lines...) Expand all Loading... |
| 695 | 742 |
| 696 | 743 |
| 697 function PadInt(n, digits) { | 744 function PadInt(n, digits) { |
| 698 if (digits == 1) return n; | 745 if (digits == 1) return n; |
| 699 return n < %_MathPow(10, digits - 1) ? '0' + PadInt(n, digits - 1) : n; | 746 return n < %_MathPow(10, digits - 1) ? '0' + PadInt(n, digits - 1) : n; |
| 700 } | 747 } |
| 701 | 748 |
| 702 | 749 |
| 703 // ECMA 262 - 15.9.5.43 | 750 // ECMA 262 - 15.9.5.43 |
| 704 function DateToISOString() { | 751 function DateToISOString() { |
| 752 CHECK_DATE(this); |
| 705 var t = UTC_DATE_VALUE(this); | 753 var t = UTC_DATE_VALUE(this); |
| 706 if (NUMBER_IS_NAN(t)) throw MakeRangeError(kInvalidTimeValue); | 754 if (NUMBER_IS_NAN(t)) throw MakeRangeError(kInvalidTimeValue); |
| 707 var year = this.getUTCFullYear(); | 755 var year = this.getUTCFullYear(); |
| 708 var year_string; | 756 var year_string; |
| 709 if (year >= 0 && year <= 9999) { | 757 if (year >= 0 && year <= 9999) { |
| 710 year_string = PadInt(year, 4); | 758 year_string = PadInt(year, 4); |
| 711 } else { | 759 } else { |
| 712 if (year < 0) { | 760 if (year < 0) { |
| 713 year_string = "-" + PadInt(-year, 6); | 761 year_string = "-" + PadInt(-year, 6); |
| 714 } else { | 762 } else { |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 829 "getYear", DateGetYear, | 877 "getYear", DateGetYear, |
| 830 "setYear", DateSetYear, | 878 "setYear", DateSetYear, |
| 831 "toISOString", DateToISOString, | 879 "toISOString", DateToISOString, |
| 832 "toJSON", DateToJSON | 880 "toJSON", DateToJSON |
| 833 ]); | 881 ]); |
| 834 | 882 |
| 835 // Expose to the global scope. | 883 // Expose to the global scope. |
| 836 $createDate = CreateDate; | 884 $createDate = CreateDate; |
| 837 | 885 |
| 838 }) | 886 }) |
| OLD | NEW |