Changeset 33038 in webkit for trunk/JavaScriptCore/kjs/date_object.cpp
- Timestamp:
- May 12, 2008, 12:12:31 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/date_object.cpp
r32807 r33038 171 171 enum LocaleDateTimeFormat { LocaleDateAndTime, LocaleDate, LocaleTime }; 172 172 173 static JSCell* formatLocaleDate( ExecState* exec,const GregorianDateTime& gdt, const LocaleDateTimeFormat format)173 static JSCell* formatLocaleDate(const GregorianDateTime& gdt, const LocaleDateTimeFormat format) 174 174 { 175 175 static const char* formatStrings[] = {"%#c", "%#x", "%X"}; … … 189 189 190 190 if ( ret == 0 ) 191 return jsString( exec,"");191 return jsString(""); 192 192 193 193 // Copy original into the buffer … … 203 203 } 204 204 205 return jsString( exec,timebuffer);205 return jsString(timebuffer); 206 206 } 207 207 … … 470 470 // ECMA 15.9.4 471 471 472 DatePrototype::DatePrototype(ExecState * exec, ObjectPrototype *objectProto)472 DatePrototype::DatePrototype(ExecState *, ObjectPrototype *objectProto) 473 473 : DateInstance(objectProto) 474 474 { 475 setInternalValue(jsNaN( exec));475 setInternalValue(jsNaN()); 476 476 // The constructor will be added later, after DateObjectImp has been built. 477 477 } … … 490 490 { 491 491 putDirect(exec->propertyNames().prototype, dateProto, DontEnum|DontDelete|ReadOnly); 492 putDirectFunction(new (exec)DateObjectFuncImp(exec, funcProto, DateObjectFuncImp::Parse, 1, exec->propertyNames().parse), DontEnum);493 putDirectFunction(new (exec)DateObjectFuncImp(exec, funcProto, DateObjectFuncImp::UTC, 7, exec->propertyNames().UTC), DontEnum);494 putDirect(exec , exec->propertyNames().length, 7, ReadOnly|DontDelete|DontEnum);492 putDirectFunction(new DateObjectFuncImp(exec, funcProto, DateObjectFuncImp::Parse, 1, exec->propertyNames().parse), DontEnum); 493 putDirectFunction(new DateObjectFuncImp(exec, funcProto, DateObjectFuncImp::UTC, 7, exec->propertyNames().UTC), DontEnum); 494 putDirect(exec->propertyNames().length, 7, ReadOnly|DontDelete|DontEnum); 495 495 } 496 496 … … 543 543 } 544 544 545 DateInstance * ret = new (exec)DateInstance(exec->lexicalGlobalObject()->datePrototype());546 ret->setInternalValue(jsNumber( exec,timeClip(value)));545 DateInstance *ret = new DateInstance(exec->lexicalGlobalObject()->datePrototype()); 546 ret->setInternalValue(jsNumber(timeClip(value))); 547 547 return ret; 548 548 } 549 549 550 550 // ECMA 15.9.2 551 JSValue * DateObjectImp::callAsFunction(ExecState* exec, JSObject* /*thisObj*/, const List&/*args*/)551 JSValue *DateObjectImp::callAsFunction(ExecState * /*exec*/, JSObject * /*thisObj*/, const List &/*args*/) 552 552 { 553 553 time_t localTime = time(0); … … 555 555 getLocalTime(&localTime, &localTM); 556 556 GregorianDateTime ts(localTM); 557 return jsString( exec,formatDate(ts) + " " + formatTime(ts, false));557 return jsString(formatDate(ts) + " " + formatTime(ts, false)); 558 558 } 559 559 … … 563 563 : InternalFunctionImp(funcProto, name), id(i) 564 564 { 565 putDirect(exec , exec->propertyNames().length, len, DontDelete|ReadOnly|DontEnum);565 putDirect(exec->propertyNames().length, len, DontDelete|ReadOnly|DontEnum); 566 566 } 567 567 … … 570 570 { 571 571 if (id == Parse) { 572 return jsNumber( exec,parseDate(args[0]->toString(exec)));572 return jsNumber(parseDate(args[0]->toString(exec))); 573 573 } 574 574 else { // UTC … … 581 581 || (n >= 6 && isnan(args[5]->toNumber(exec))) 582 582 || (n >= 7 && isnan(args[6]->toNumber(exec)))) { 583 return jsNaN( exec);583 return jsNaN(); 584 584 } 585 585 … … 593 593 t.second = args[5]->toInt32(exec); 594 594 double ms = (n >= 7) ? args[6]->toNumber(exec) : 0; 595 return jsNumber( exec,gregorianDateTimeToMS(t, ms, true));595 return jsNumber(gregorianDateTimeToMS(t, ms, true)); 596 596 } 597 597 } … … 988 988 double milli = v->toNumber(exec); 989 989 if (isnan(milli)) 990 return jsString( exec,"Invalid Date");991 992 GregorianDateTime t; 993 thisDateObj->msToGregorianDateTime(milli, utc, t); 994 return jsString( exec,formatDate(t) + " " + formatTime(t, utc));990 return jsString("Invalid Date"); 991 992 GregorianDateTime t; 993 thisDateObj->msToGregorianDateTime(milli, utc, t); 994 return jsString(formatDate(t) + " " + formatTime(t, utc)); 995 995 } 996 996 … … 1006 1006 double milli = v->toNumber(exec); 1007 1007 if (isnan(milli)) 1008 return jsString( exec,"Invalid Date");1009 1010 GregorianDateTime t; 1011 thisDateObj->msToGregorianDateTime(milli, utc, t); 1012 return jsString( exec,formatDateUTCVariant(t) + " " + formatTime(t, utc));1008 return jsString("Invalid Date"); 1009 1010 GregorianDateTime t; 1011 thisDateObj->msToGregorianDateTime(milli, utc, t); 1012 return jsString(formatDateUTCVariant(t) + " " + formatTime(t, utc)); 1013 1013 } 1014 1014 … … 1024 1024 double milli = v->toNumber(exec); 1025 1025 if (isnan(milli)) 1026 return jsString( exec,"Invalid Date");1027 1028 GregorianDateTime t; 1029 thisDateObj->msToGregorianDateTime(milli, utc, t); 1030 return jsString( exec,formatDate(t));1026 return jsString("Invalid Date"); 1027 1028 GregorianDateTime t; 1029 thisDateObj->msToGregorianDateTime(milli, utc, t); 1030 return jsString(formatDate(t)); 1031 1031 } 1032 1032 … … 1042 1042 double milli = v->toNumber(exec); 1043 1043 if (isnan(milli)) 1044 return jsString( exec,"Invalid Date");1045 1046 GregorianDateTime t; 1047 thisDateObj->msToGregorianDateTime(milli, utc, t); 1048 return jsString( exec,formatTime(t, utc));1044 return jsString("Invalid Date"); 1045 1046 GregorianDateTime t; 1047 thisDateObj->msToGregorianDateTime(milli, utc, t); 1048 return jsString(formatTime(t, utc)); 1049 1049 } 1050 1050 … … 1058 1058 double milli = v->toNumber(exec); 1059 1059 if (isnan(milli)) 1060 return jsString( exec,"Invalid Date");1060 return jsString("Invalid Date"); 1061 1061 1062 1062 #if PLATFORM(MAC) 1063 1063 double secs = floor(milli / msPerSecond); 1064 return jsString( exec,formatLocaleDate(exec, secs, true, true, args));1064 return jsString(formatLocaleDate(exec, secs, true, true, args)); 1065 1065 #else 1066 1066 UNUSED_PARAM(args); … … 1070 1070 GregorianDateTime t; 1071 1071 thisDateObj->msToGregorianDateTime(milli, utc, t); 1072 return formatLocaleDate( exec,t, LocaleDateAndTime);1072 return formatLocaleDate(t, LocaleDateAndTime); 1073 1073 #endif 1074 1074 } … … 1083 1083 double milli = v->toNumber(exec); 1084 1084 if (isnan(milli)) 1085 return jsString( exec,"Invalid Date");1085 return jsString("Invalid Date"); 1086 1086 1087 1087 #if PLATFORM(MAC) 1088 1088 double secs = floor(milli / msPerSecond); 1089 return jsString( exec,formatLocaleDate(exec, secs, true, false, args));1089 return jsString(formatLocaleDate(exec, secs, true, false, args)); 1090 1090 #else 1091 1091 UNUSED_PARAM(args); … … 1095 1095 GregorianDateTime t; 1096 1096 thisDateObj->msToGregorianDateTime(milli, utc, t); 1097 return formatLocaleDate( exec,t, LocaleDate);1097 return formatLocaleDate(t, LocaleDate); 1098 1098 #endif 1099 1099 } … … 1108 1108 double milli = v->toNumber(exec); 1109 1109 if (isnan(milli)) 1110 return jsString( exec,"Invalid Date");1110 return jsString("Invalid Date"); 1111 1111 1112 1112 #if PLATFORM(MAC) 1113 1113 double secs = floor(milli / msPerSecond); 1114 return jsString( exec,formatLocaleDate(exec, secs, false, true, args));1114 return jsString(formatLocaleDate(exec, secs, false, true, args)); 1115 1115 #else 1116 1116 UNUSED_PARAM(args); … … 1120 1120 GregorianDateTime t; 1121 1121 thisDateObj->msToGregorianDateTime(milli, utc, t); 1122 return formatLocaleDate( exec,t, LocaleTime);1122 return formatLocaleDate(t, LocaleTime); 1123 1123 #endif 1124 1124 } … … 1133 1133 double milli = v->toNumber(exec); 1134 1134 if (isnan(milli)) 1135 return jsNaN( exec);1136 1137 return jsNumber( exec,milli);1135 return jsNaN(); 1136 1137 return jsNumber(milli); 1138 1138 } 1139 1139 … … 1147 1147 double milli = v->toNumber(exec); 1148 1148 if (isnan(milli)) 1149 return jsNaN( exec);1150 1151 return jsNumber( exec,milli);1149 return jsNaN(); 1150 1151 return jsNumber(milli); 1152 1152 } 1153 1153 … … 1163 1163 double milli = v->toNumber(exec); 1164 1164 if (isnan(milli)) 1165 return jsNaN( exec);1166 1167 GregorianDateTime t; 1168 thisDateObj->msToGregorianDateTime(milli, utc, t); 1169 return jsNumber( exec,1900 + t.year);1165 return jsNaN(); 1166 1167 GregorianDateTime t; 1168 thisDateObj->msToGregorianDateTime(milli, utc, t); 1169 return jsNumber(1900 + t.year); 1170 1170 } 1171 1171 … … 1181 1181 double milli = v->toNumber(exec); 1182 1182 if (isnan(milli)) 1183 return jsNaN( exec);1184 1185 GregorianDateTime t; 1186 thisDateObj->msToGregorianDateTime(milli, utc, t); 1187 return jsNumber( exec,1900 + t.year);1183 return jsNaN(); 1184 1185 GregorianDateTime t; 1186 thisDateObj->msToGregorianDateTime(milli, utc, t); 1187 return jsNumber(1900 + t.year); 1188 1188 } 1189 1189 … … 1199 1199 double milli = v->toNumber(exec); 1200 1200 if (isnan(milli)) 1201 return jsString( exec,"Invalid Date");1202 1203 GregorianDateTime t; 1204 thisDateObj->msToGregorianDateTime(milli, utc, t); 1205 return jsString( exec,formatDateUTCVariant(t) + " " + formatTime(t, utc));1201 return jsString("Invalid Date"); 1202 1203 GregorianDateTime t; 1204 thisDateObj->msToGregorianDateTime(milli, utc, t); 1205 return jsString(formatDateUTCVariant(t) + " " + formatTime(t, utc)); 1206 1206 } 1207 1207 … … 1217 1217 double milli = v->toNumber(exec); 1218 1218 if (isnan(milli)) 1219 return jsNaN( exec);1220 1221 GregorianDateTime t; 1222 thisDateObj->msToGregorianDateTime(milli, utc, t); 1223 return jsNumber( exec,t.month);1219 return jsNaN(); 1220 1221 GregorianDateTime t; 1222 thisDateObj->msToGregorianDateTime(milli, utc, t); 1223 return jsNumber(t.month); 1224 1224 } 1225 1225 … … 1235 1235 double milli = v->toNumber(exec); 1236 1236 if (isnan(milli)) 1237 return jsNaN( exec);1238 1239 GregorianDateTime t; 1240 thisDateObj->msToGregorianDateTime(milli, utc, t); 1241 return jsNumber( exec,t.month);1237 return jsNaN(); 1238 1239 GregorianDateTime t; 1240 thisDateObj->msToGregorianDateTime(milli, utc, t); 1241 return jsNumber(t.month); 1242 1242 } 1243 1243 … … 1253 1253 double milli = v->toNumber(exec); 1254 1254 if (isnan(milli)) 1255 return jsNaN( exec);1256 1257 GregorianDateTime t; 1258 thisDateObj->msToGregorianDateTime(milli, utc, t); 1259 return jsNumber( exec,t.monthDay);1255 return jsNaN(); 1256 1257 GregorianDateTime t; 1258 thisDateObj->msToGregorianDateTime(milli, utc, t); 1259 return jsNumber(t.monthDay); 1260 1260 } 1261 1261 … … 1271 1271 double milli = v->toNumber(exec); 1272 1272 if (isnan(milli)) 1273 return jsNaN( exec);1274 1275 GregorianDateTime t; 1276 thisDateObj->msToGregorianDateTime(milli, utc, t); 1277 return jsNumber( exec,t.monthDay);1273 return jsNaN(); 1274 1275 GregorianDateTime t; 1276 thisDateObj->msToGregorianDateTime(milli, utc, t); 1277 return jsNumber(t.monthDay); 1278 1278 } 1279 1279 … … 1289 1289 double milli = v->toNumber(exec); 1290 1290 if (isnan(milli)) 1291 return jsNaN( exec);1292 1293 GregorianDateTime t; 1294 thisDateObj->msToGregorianDateTime(milli, utc, t); 1295 return jsNumber( exec,t.weekDay);1291 return jsNaN(); 1292 1293 GregorianDateTime t; 1294 thisDateObj->msToGregorianDateTime(milli, utc, t); 1295 return jsNumber(t.weekDay); 1296 1296 } 1297 1297 … … 1307 1307 double milli = v->toNumber(exec); 1308 1308 if (isnan(milli)) 1309 return jsNaN( exec);1310 1311 GregorianDateTime t; 1312 thisDateObj->msToGregorianDateTime(milli, utc, t); 1313 return jsNumber( exec,t.weekDay);1309 return jsNaN(); 1310 1311 GregorianDateTime t; 1312 thisDateObj->msToGregorianDateTime(milli, utc, t); 1313 return jsNumber(t.weekDay); 1314 1314 } 1315 1315 … … 1325 1325 double milli = v->toNumber(exec); 1326 1326 if (isnan(milli)) 1327 return jsNaN( exec);1328 1329 GregorianDateTime t; 1330 thisDateObj->msToGregorianDateTime(milli, utc, t); 1331 return jsNumber( exec,t.hour);1327 return jsNaN(); 1328 1329 GregorianDateTime t; 1330 thisDateObj->msToGregorianDateTime(milli, utc, t); 1331 return jsNumber(t.hour); 1332 1332 } 1333 1333 … … 1343 1343 double milli = v->toNumber(exec); 1344 1344 if (isnan(milli)) 1345 return jsNaN( exec);1346 1347 GregorianDateTime t; 1348 thisDateObj->msToGregorianDateTime(milli, utc, t); 1349 return jsNumber( exec,t.hour);1345 return jsNaN(); 1346 1347 GregorianDateTime t; 1348 thisDateObj->msToGregorianDateTime(milli, utc, t); 1349 return jsNumber(t.hour); 1350 1350 } 1351 1351 … … 1361 1361 double milli = v->toNumber(exec); 1362 1362 if (isnan(milli)) 1363 return jsNaN( exec);1364 1365 GregorianDateTime t; 1366 thisDateObj->msToGregorianDateTime(milli, utc, t); 1367 return jsNumber( exec,t.minute);1363 return jsNaN(); 1364 1365 GregorianDateTime t; 1366 thisDateObj->msToGregorianDateTime(milli, utc, t); 1367 return jsNumber(t.minute); 1368 1368 } 1369 1369 … … 1379 1379 double milli = v->toNumber(exec); 1380 1380 if (isnan(milli)) 1381 return jsNaN( exec);1382 1383 GregorianDateTime t; 1384 thisDateObj->msToGregorianDateTime(milli, utc, t); 1385 return jsNumber( exec,t.minute);1381 return jsNaN(); 1382 1383 GregorianDateTime t; 1384 thisDateObj->msToGregorianDateTime(milli, utc, t); 1385 return jsNumber(t.minute); 1386 1386 } 1387 1387 … … 1397 1397 double milli = v->toNumber(exec); 1398 1398 if (isnan(milli)) 1399 return jsNaN( exec);1400 1401 GregorianDateTime t; 1402 thisDateObj->msToGregorianDateTime(milli, utc, t); 1403 return jsNumber( exec,t.second);1399 return jsNaN(); 1400 1401 GregorianDateTime t; 1402 thisDateObj->msToGregorianDateTime(milli, utc, t); 1403 return jsNumber(t.second); 1404 1404 } 1405 1405 … … 1415 1415 double milli = v->toNumber(exec); 1416 1416 if (isnan(milli)) 1417 return jsNaN( exec);1418 1419 GregorianDateTime t; 1420 thisDateObj->msToGregorianDateTime(milli, utc, t); 1421 return jsNumber( exec,t.second);1417 return jsNaN(); 1418 1419 GregorianDateTime t; 1420 thisDateObj->msToGregorianDateTime(milli, utc, t); 1421 return jsNumber(t.second); 1422 1422 } 1423 1423 … … 1431 1431 double milli = v->toNumber(exec); 1432 1432 if (isnan(milli)) 1433 return jsNaN( exec);1433 return jsNaN(); 1434 1434 1435 1435 double secs = floor(milli / msPerSecond); 1436 1436 double ms = milli - secs * msPerSecond; 1437 return jsNumber( exec,ms);1437 return jsNumber(ms); 1438 1438 } 1439 1439 … … 1447 1447 double milli = v->toNumber(exec); 1448 1448 if (isnan(milli)) 1449 return jsNaN( exec);1449 return jsNaN(); 1450 1450 1451 1451 double secs = floor(milli / msPerSecond); 1452 1452 double ms = milli - secs * msPerSecond; 1453 return jsNumber( exec,ms);1453 return jsNumber(ms); 1454 1454 } 1455 1455 … … 1465 1465 double milli = v->toNumber(exec); 1466 1466 if (isnan(milli)) 1467 return jsNaN( exec);1468 1469 GregorianDateTime t; 1470 thisDateObj->msToGregorianDateTime(milli, utc, t); 1471 return jsNumber( exec,-gmtoffset(t) / minutesPerHour);1467 return jsNaN(); 1468 1469 GregorianDateTime t; 1470 thisDateObj->msToGregorianDateTime(milli, utc, t); 1471 return jsNumber(-gmtoffset(t) / minutesPerHour); 1472 1472 } 1473 1473 … … 1480 1480 1481 1481 double milli = timeClip(args[0]->toNumber(exec)); 1482 JSValue* result = jsNumber( exec,milli);1482 JSValue* result = jsNumber(milli); 1483 1483 thisDateObj->setInternalValue(result); 1484 1484 return result; … … 1495 1495 1496 1496 if (args.isEmpty() || isnan(milli)) { 1497 JSValue* result = jsNaN( exec);1497 JSValue* result = jsNaN(); 1498 1498 thisDateObj->setInternalValue(result); 1499 1499 return result; … … 1507 1507 1508 1508 if (!fillStructuresUsingTimeArgs(exec, args, numArgsToUse, &ms, &t)) { 1509 JSValue* result = jsNaN( exec);1509 JSValue* result = jsNaN(); 1510 1510 thisDateObj->setInternalValue(result); 1511 1511 return result; 1512 1512 } 1513 1513 1514 JSValue* result = jsNumber( exec,gregorianDateTimeToMS(t, ms, inputIsUTC));1514 JSValue* result = jsNumber(gregorianDateTimeToMS(t, ms, inputIsUTC)); 1515 1515 thisDateObj->setInternalValue(result); 1516 1516 return result; … … 1524 1524 DateInstance* thisDateObj = static_cast<DateInstance*>(thisObj); 1525 1525 if (args.isEmpty()) { 1526 JSValue* result = jsNaN( exec);1526 JSValue* result = jsNaN(); 1527 1527 thisDateObj->setInternalValue(result); 1528 1528 return result; … … 1545 1545 1546 1546 if (!fillStructuresUsingDateArgs(exec, args, numArgsToUse, &ms, &t)) { 1547 JSValue* result = jsNaN( exec);1547 JSValue* result = jsNaN(); 1548 1548 thisDateObj->setInternalValue(result); 1549 1549 return result; 1550 1550 } 1551 1551 1552 JSValue* result = jsNumber( exec,gregorianDateTimeToMS(t, ms, inputIsUTC));1552 JSValue* result = jsNumber(gregorianDateTimeToMS(t, ms, inputIsUTC)); 1553 1553 thisDateObj->setInternalValue(result); 1554 1554 return result; … … 1648 1648 DateInstance* thisDateObj = static_cast<DateInstance*>(thisObj); 1649 1649 if (args.isEmpty()) { 1650 JSValue* result = jsNaN( exec);1650 JSValue* result = jsNaN(); 1651 1651 thisDateObj->setInternalValue(result); 1652 1652 return result; … … 1671 1671 int32_t year = args[0]->toInt32(exec, ok); 1672 1672 if (!ok) { 1673 JSValue* result = jsNaN( exec);1673 JSValue* result = jsNaN(); 1674 1674 thisDateObj->setInternalValue(result); 1675 1675 return result; … … 1677 1677 1678 1678 t.year = (year > 99 || year < 0) ? year - 1900 : year; 1679 JSValue* result = jsNumber( exec,gregorianDateTimeToMS(t, ms, utc));1679 JSValue* result = jsNumber(gregorianDateTimeToMS(t, ms, utc)); 1680 1680 thisDateObj->setInternalValue(result); 1681 1681 return result; … … 1693 1693 double milli = v->toNumber(exec); 1694 1694 if (isnan(milli)) 1695 return jsNaN( exec);1695 return jsNaN(); 1696 1696 1697 1697 GregorianDateTime t; … … 1699 1699 1700 1700 // NOTE: IE returns the full year even in getYear. 1701 return jsNumber( exec,t.year);1701 return jsNumber(t.year); 1702 1702 } 1703 1703
Note:
See TracChangeset
for help on using the changeset viewer.