Changeset 35022 in webkit for trunk/JavaScriptCore/kjs/DateConstructor.cpp
- Timestamp:
- Jul 5, 2008, 10:26:58 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/DateConstructor.cpp
r35018 r35022 50 50 static JSValue* dateUTC(ExecState*, JSObject*, JSValue*, const ArgList&); 51 51 52 DateConstructor::DateConstructor(ExecState* exec, FunctionPrototype* func Proto, DatePrototype* dateProto)53 : InternalFunction(funcProto, Identifier(exec, dateProto->classInfo()->className))52 DateConstructor::DateConstructor(ExecState* exec, FunctionPrototype* functionPrototype, DatePrototype* datePrototype) 53 : InternalFunction(functionPrototype, Identifier(exec, datePrototype->classInfo()->className)) 54 54 { 55 putDirect(exec->propertyNames().prototype, dateProto, DontEnum|DontDelete|ReadOnly); 56 putDirectFunction(new (exec) PrototypeFunction(exec, funcProto, 1, exec->propertyNames().parse, dateParse), DontEnum); 57 putDirectFunction(new (exec) PrototypeFunction(exec, funcProto, 7, exec->propertyNames().UTC, dateUTC), DontEnum); 58 putDirectFunction(new (exec) PrototypeFunction(exec, funcProto, 0, exec->propertyNames().now, dateNow), DontEnum); 59 putDirect(exec, exec->propertyNames().length, 7, ReadOnly | DontEnum | DontDelete); 55 putDirect(exec->propertyNames().prototype, datePrototype, DontEnum|DontDelete|ReadOnly); 56 57 putDirectFunction(new (exec) PrototypeFunction(exec, functionPrototype, 1, exec->propertyNames().parse, dateParse), DontEnum); 58 putDirectFunction(new (exec) PrototypeFunction(exec, functionPrototype, 7, exec->propertyNames().UTC, dateUTC), DontEnum); 59 putDirectFunction(new (exec) PrototypeFunction(exec, functionPrototype, 0, exec->propertyNames().now, dateNow), DontEnum); 60 61 putDirect(exec, exec->propertyNames().length, 7, ReadOnly | DontEnum | DontDelete); 60 62 } 61 63 … … 63 65 static JSObject* constructDate(ExecState* exec, JSObject*, const ArgList& args) 64 66 { 65 int numArgs = args.size();67 int numArgs = args.size(); 66 68 67 double value;69 double value; 68 70 69 if (numArgs == 0) { // new Date() ECMA 15.9.3.3 70 value = getCurrentUTCTime(); 71 } else if (numArgs == 1) { 72 if (args[0]->isObject(&DateInstance::info)) 73 value = static_cast<DateInstance*>(args[0])->internalNumber(); 74 else { 75 JSValue* primitive = args[0]->toPrimitive(exec); 76 if (primitive->isString()) 77 value = parseDate(primitive->getString()); 78 else 79 value = primitive->toNumber(exec); 71 if (numArgs == 0) // new Date() ECMA 15.9.3.3 72 value = getCurrentUTCTime(); 73 else if (numArgs == 1) { 74 if (args[0]->isObject(&DateInstance::info)) 75 value = static_cast<DateInstance*>(args[0])->internalNumber(); 76 else { 77 JSValue* primitive = args[0]->toPrimitive(exec); 78 if (primitive->isString()) 79 value = parseDate(primitive->getString()); 80 else 81 value = primitive->toNumber(exec); 82 } 83 } else { 84 if (isnan(args[0]->toNumber(exec)) 85 || isnan(args[1]->toNumber(exec)) 86 || (numArgs >= 3 && isnan(args[2]->toNumber(exec))) 87 || (numArgs >= 4 && isnan(args[3]->toNumber(exec))) 88 || (numArgs >= 5 && isnan(args[4]->toNumber(exec))) 89 || (numArgs >= 6 && isnan(args[5]->toNumber(exec))) 90 || (numArgs >= 7 && isnan(args[6]->toNumber(exec)))) 91 value = NaN; 92 else { 93 GregorianDateTime t; 94 int year = args[0]->toInt32(exec); 95 t.year = (year >= 0 && year <= 99) ? year : year - 1900; 96 t.month = args[1]->toInt32(exec); 97 t.monthDay = (numArgs >= 3) ? args[2]->toInt32(exec) : 1; 98 t.hour = args[3]->toInt32(exec); 99 t.minute = args[4]->toInt32(exec); 100 t.second = args[5]->toInt32(exec); 101 t.isDST = -1; 102 double ms = (numArgs >= 7) ? args[6]->toNumber(exec) : 0; 103 value = gregorianDateTimeToMS(t, ms, false); 104 } 80 105 } 81 } else { 82 if (isnan(args[0]->toNumber(exec)) 83 || isnan(args[1]->toNumber(exec)) 84 || (numArgs >= 3 && isnan(args[2]->toNumber(exec))) 85 || (numArgs >= 4 && isnan(args[3]->toNumber(exec))) 86 || (numArgs >= 5 && isnan(args[4]->toNumber(exec))) 87 || (numArgs >= 6 && isnan(args[5]->toNumber(exec))) 88 || (numArgs >= 7 && isnan(args[6]->toNumber(exec)))) { 89 value = NaN; 90 } else { 91 GregorianDateTime t; 92 int year = args[0]->toInt32(exec); 93 t.year = (year >= 0 && year <= 99) ? year : year - 1900; 94 t.month = args[1]->toInt32(exec); 95 t.monthDay = (numArgs >= 3) ? args[2]->toInt32(exec) : 1; 96 t.hour = args[3]->toInt32(exec); 97 t.minute = args[4]->toInt32(exec); 98 t.second = args[5]->toInt32(exec); 99 t.isDST = -1; 100 double ms = (numArgs >= 7) ? args[6]->toNumber(exec) : 0; 101 value = gregorianDateTimeToMS(t, ms, false); 102 } 103 } 104 105 DateInstance* ret = new (exec) DateInstance(exec->lexicalGlobalObject()->datePrototype()); 106 ret->setInternalValue(jsNumber(exec, timeClip(value))); 107 return ret; 106 107 DateInstance* ret = new (exec) DateInstance(exec->lexicalGlobalObject()->datePrototype()); 108 ret->setInternalValue(jsNumber(exec, timeClip(value))); 109 return ret; 108 110 } 109 111 … … 149 151 || (n >= 5 && isnan(args[4]->toNumber(exec))) 150 152 || (n >= 6 && isnan(args[5]->toNumber(exec))) 151 || (n >= 7 && isnan(args[6]->toNumber(exec)))) {153 || (n >= 7 && isnan(args[6]->toNumber(exec)))) 152 154 return jsNaN(exec); 153 }154 155 155 156 GregorianDateTime t;
Note:
See TracChangeset
for help on using the changeset viewer.