Ignore:
Timestamp:
Jul 5, 2008, 10:26:58 PM (17 years ago)
Author:
[email protected]
Message:

2008-07-05 Sam Weinig <[email protected]>

Reviewed by Cameron Zwarich.

First step in broad cleanup effort.

[ File list elided ]

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/DateConstructor.cpp

    r35018 r35022  
    5050static JSValue* dateUTC(ExecState*, JSObject*, JSValue*, const ArgList&);
    5151
    52 DateConstructor::DateConstructor(ExecState* exec, FunctionPrototype* funcProto, DatePrototype* dateProto)
    53   : InternalFunction(funcProto, Identifier(exec, dateProto->classInfo()->className))
     52DateConstructor::DateConstructor(ExecState* exec, FunctionPrototype* functionPrototype, DatePrototype* datePrototype)
     53    : InternalFunction(functionPrototype, Identifier(exec, datePrototype->classInfo()->className))
    5454{
    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);
    6062}
    6163
     
    6365static JSObject* constructDate(ExecState* exec, JSObject*, const ArgList& args)
    6466{
    65   int numArgs = args.size();
     67    int numArgs = args.size();
    6668
    67   double value;
     69    double value;
    6870
    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        }
    80105    }
    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;
    108110}
    109111
     
    149151            || (n >= 5 && isnan(args[4]->toNumber(exec)))
    150152            || (n >= 6 && isnan(args[5]->toNumber(exec)))
    151             || (n >= 7 && isnan(args[6]->toNumber(exec)))) {
     153            || (n >= 7 && isnan(args[6]->toNumber(exec))))
    152154        return jsNaN(exec);
    153     }
    154155
    155156    GregorianDateTime t;
Note: See TracChangeset for help on using the changeset viewer.