⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dateprototype.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    const bool utc = false;    DateInstance* thisDateObj = asDateInstance(thisValue);     double milli = thisDateObj->internalNumber();    if (isnan(milli))        return jsNaN(exec);    GregorianDateTime t;    thisDateObj->msToGregorianDateTime(milli, utc, t);    return jsNumber(exec, t.minute);}JSValuePtr dateProtoFuncGetUTCMinutes(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList&){    if (!thisValue.isObject(&DateInstance::info))        return throwError(exec, TypeError);    const bool utc = true;    DateInstance* thisDateObj = asDateInstance(thisValue);     double milli = thisDateObj->internalNumber();    if (isnan(milli))        return jsNaN(exec);    GregorianDateTime t;    thisDateObj->msToGregorianDateTime(milli, utc, t);    return jsNumber(exec, t.minute);}JSValuePtr dateProtoFuncGetSeconds(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList&){    if (!thisValue.isObject(&DateInstance::info))        return throwError(exec, TypeError);    const bool utc = false;    DateInstance* thisDateObj = asDateInstance(thisValue);     double milli = thisDateObj->internalNumber();    if (isnan(milli))        return jsNaN(exec);    GregorianDateTime t;    thisDateObj->msToGregorianDateTime(milli, utc, t);    return jsNumber(exec, t.second);}JSValuePtr dateProtoFuncGetUTCSeconds(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList&){    if (!thisValue.isObject(&DateInstance::info))        return throwError(exec, TypeError);    const bool utc = true;    DateInstance* thisDateObj = asDateInstance(thisValue);     double milli = thisDateObj->internalNumber();    if (isnan(milli))        return jsNaN(exec);    GregorianDateTime t;    thisDateObj->msToGregorianDateTime(milli, utc, t);    return jsNumber(exec, t.second);}JSValuePtr dateProtoFuncGetMilliSeconds(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList&){    if (!thisValue.isObject(&DateInstance::info))        return throwError(exec, TypeError);    DateInstance* thisDateObj = asDateInstance(thisValue);     double milli = thisDateObj->internalNumber();    if (isnan(milli))        return jsNaN(exec);    double secs = floor(milli / msPerSecond);    double ms = milli - secs * msPerSecond;    return jsNumber(exec, ms);}JSValuePtr dateProtoFuncGetUTCMilliseconds(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList&){    if (!thisValue.isObject(&DateInstance::info))        return throwError(exec, TypeError);    DateInstance* thisDateObj = asDateInstance(thisValue);     double milli = thisDateObj->internalNumber();    if (isnan(milli))        return jsNaN(exec);    double secs = floor(milli / msPerSecond);    double ms = milli - secs * msPerSecond;    return jsNumber(exec, ms);}JSValuePtr dateProtoFuncGetTimezoneOffset(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList&){    if (!thisValue.isObject(&DateInstance::info))        return throwError(exec, TypeError);    const bool utc = false;    DateInstance* thisDateObj = asDateInstance(thisValue);     double milli = thisDateObj->internalNumber();    if (isnan(milli))        return jsNaN(exec);    GregorianDateTime t;    thisDateObj->msToGregorianDateTime(milli, utc, t);    return jsNumber(exec, -gmtoffset(t) / minutesPerHour);}JSValuePtr dateProtoFuncSetTime(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList& args){    if (!thisValue.isObject(&DateInstance::info))        return throwError(exec, TypeError);    DateInstance* thisDateObj = asDateInstance(thisValue);     double milli = timeClip(args.at(exec, 0).toNumber(exec));    JSValuePtr result = jsNumber(exec, milli);    thisDateObj->setInternalValue(result);    return result;}static JSValuePtr setNewValueFromTimeArgs(ExecState* exec, JSValuePtr thisValue, const ArgList& args, int numArgsToUse, bool inputIsUTC){    if (!thisValue.isObject(&DateInstance::info))        return throwError(exec, TypeError);    DateInstance* thisDateObj = asDateInstance(thisValue);    double milli = thisDateObj->internalNumber();        if (args.isEmpty() || isnan(milli)) {        JSValuePtr result = jsNaN(exec);        thisDateObj->setInternalValue(result);        return result;    }         double secs = floor(milli / msPerSecond);    double ms = milli - secs * msPerSecond;    GregorianDateTime t;    thisDateObj->msToGregorianDateTime(milli, inputIsUTC, t);    if (!fillStructuresUsingTimeArgs(exec, args, numArgsToUse, &ms, &t)) {        JSValuePtr result = jsNaN(exec);        thisDateObj->setInternalValue(result);        return result;    }         JSValuePtr result = jsNumber(exec, gregorianDateTimeToMS(t, ms, inputIsUTC));    thisDateObj->setInternalValue(result);    return result;}static JSValuePtr setNewValueFromDateArgs(ExecState* exec, JSValuePtr thisValue, const ArgList& args, int numArgsToUse, bool inputIsUTC){    if (!thisValue.isObject(&DateInstance::info))        return throwError(exec, TypeError);    DateInstance* thisDateObj = asDateInstance(thisValue);    if (args.isEmpty()) {        JSValuePtr result = jsNaN(exec);        thisDateObj->setInternalValue(result);        return result;    }              double milli = thisDateObj->internalNumber();    double ms = 0;    GregorianDateTime t;    if (numArgsToUse == 3 && isnan(milli))        // Based on ECMA 262 15.9.5.40 - .41 (set[UTC]FullYear)        // the time must be reset to +0 if it is NaN.         thisDateObj->msToGregorianDateTime(0, true, t);    else {        double secs = floor(milli / msPerSecond);        ms = milli - secs * msPerSecond;        thisDateObj->msToGregorianDateTime(milli, inputIsUTC, t);    }        if (!fillStructuresUsingDateArgs(exec, args, numArgsToUse, &ms, &t)) {        JSValuePtr result = jsNaN(exec);        thisDateObj->setInternalValue(result);        return result;    }                JSValuePtr result = jsNumber(exec, gregorianDateTimeToMS(t, ms, inputIsUTC));    thisDateObj->setInternalValue(result);    return result;}JSValuePtr dateProtoFuncSetMilliSeconds(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList& args){    const bool inputIsUTC = false;    return setNewValueFromTimeArgs(exec, thisValue, args, 1, inputIsUTC);}JSValuePtr dateProtoFuncSetUTCMilliseconds(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList& args){    const bool inputIsUTC = true;    return setNewValueFromTimeArgs(exec, thisValue, args, 1, inputIsUTC);}JSValuePtr dateProtoFuncSetSeconds(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList& args){    const bool inputIsUTC = false;    return setNewValueFromTimeArgs(exec, thisValue, args, 2, inputIsUTC);}JSValuePtr dateProtoFuncSetUTCSeconds(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList& args){    const bool inputIsUTC = true;    return setNewValueFromTimeArgs(exec, thisValue, args, 2, inputIsUTC);}JSValuePtr dateProtoFuncSetMinutes(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList& args){    const bool inputIsUTC = false;    return setNewValueFromTimeArgs(exec, thisValue, args, 3, inputIsUTC);}JSValuePtr dateProtoFuncSetUTCMinutes(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList& args){    const bool inputIsUTC = true;    return setNewValueFromTimeArgs(exec, thisValue, args, 3, inputIsUTC);}JSValuePtr dateProtoFuncSetHours(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList& args){    const bool inputIsUTC = false;    return setNewValueFromTimeArgs(exec, thisValue, args, 4, inputIsUTC);}JSValuePtr dateProtoFuncSetUTCHours(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList& args){    const bool inputIsUTC = true;    return setNewValueFromTimeArgs(exec, thisValue, args, 4, inputIsUTC);}JSValuePtr dateProtoFuncSetDate(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList& args){    const bool inputIsUTC = false;    return setNewValueFromDateArgs(exec, thisValue, args, 1, inputIsUTC);}JSValuePtr dateProtoFuncSetUTCDate(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList& args){    const bool inputIsUTC = true;    return setNewValueFromDateArgs(exec, thisValue, args, 1, inputIsUTC);}JSValuePtr dateProtoFuncSetMonth(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList& args){    const bool inputIsUTC = false;    return setNewValueFromDateArgs(exec, thisValue, args, 2, inputIsUTC);}JSValuePtr dateProtoFuncSetUTCMonth(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList& args){    const bool inputIsUTC = true;    return setNewValueFromDateArgs(exec, thisValue, args, 2, inputIsUTC);}JSValuePtr dateProtoFuncSetFullYear(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList& args){    const bool inputIsUTC = false;    return setNewValueFromDateArgs(exec, thisValue, args, 3, inputIsUTC);}JSValuePtr dateProtoFuncSetUTCFullYear(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList& args){    const bool inputIsUTC = true;    return setNewValueFromDateArgs(exec, thisValue, args, 3, inputIsUTC);}JSValuePtr dateProtoFuncSetYear(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList& args){    if (!thisValue.isObject(&DateInstance::info))        return throwError(exec, TypeError);    const bool utc = false;    DateInstance* thisDateObj = asDateInstance(thisValue);         if (args.isEmpty()) {         JSValuePtr result = jsNaN(exec);        thisDateObj->setInternalValue(result);        return result;    }        double milli = thisDateObj->internalNumber();    double ms = 0;    GregorianDateTime t;    if (isnan(milli))        // Based on ECMA 262 B.2.5 (setYear)        // the time must be reset to +0 if it is NaN.         thisDateObj->msToGregorianDateTime(0, true, t);    else {           double secs = floor(milli / msPerSecond);        ms = milli - secs * msPerSecond;        thisDateObj->msToGregorianDateTime(milli, utc, t);    }        bool ok = true;    int32_t year = args.at(exec, 0).toInt32(exec, ok);    if (!ok) {        JSValuePtr result = jsNaN(exec);        thisDateObj->setInternalValue(result);        return result;    }                t.year = (year > 99 || year < 0) ? year - 1900 : year;    JSValuePtr result = jsNumber(exec, gregorianDateTimeToMS(t, ms, utc));    thisDateObj->setInternalValue(result);    return result;}JSValuePtr dateProtoFuncGetYear(ExecState* exec, JSObject*, JSValuePtr thisValue, const ArgList&){    if (!thisValue.isObject(&DateInstance::info))        return throwError(exec, TypeError);    const bool utc = false;    DateInstance* thisDateObj = asDateInstance(thisValue);     double milli = thisDateObj->internalNumber();    if (isnan(milli))        return jsNaN(exec);    GregorianDateTime t;    thisDateObj->msToGregorianDateTime(milli, utc, t);    // NOTE: IE returns the full year even in getYear.    return jsNumber(exec, t.year);}} // namespace JSC

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -