Changeset 32807 in webkit for trunk/JavaScriptCore/kjs/nodes.cpp


Ignore:
Timestamp:
May 2, 2008, 3:07:53 AM (17 years ago)
Author:
[email protected]
Message:

Reviewed by Geoffrey Garen.

https://bugs.webkit.org/show_bug.cgi?id=18826
Make JavaScript heap per-thread

File:
1 edited

Legend:

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

    r32578 r32807  
    361361        JSObject* exception = static_cast<JSObject*>(exceptionValue);
    362362        if (!exception->hasProperty(exec, "line") && !exception->hasProperty(exec, "sourceURL")) {
    363             exception->put(exec, "line", jsNumber(m_line));
    364             exception->put(exec, "sourceURL", jsString(currentSourceURL(exec)));
     363            exception->put(exec, "line", jsNumber(exec, m_line));
     364            exception->put(exec, "sourceURL", jsString(exec, currentSourceURL(exec)));
    365365        }
    366366    }
     
    454454// ------------------------------ NumberNode -----------------------------------
    455455
    456 JSValue* NumberNode::evaluate(ExecState*)
     456JSValue* NumberNode::evaluate(ExecState* exec)
    457457{
    458458    // Number nodes are only created when the number can't fit in a JSImmediate, so no need to check again.
    459     return jsNumberCell(m_double);
     459    return jsNumberCell(exec, m_double);
    460460}
    461461
     
    503503// ------------------------------ StringNode -----------------------------------
    504504
    505 JSValue* StringNode::evaluate(ExecState*)
    506 {
    507     return jsOwnedString(m_value);
     505JSValue* StringNode::evaluate(ExecState* exec)
     506{
     507    return jsOwnedString(exec, m_value);
    508508}
    509509
     
    820820
    821821    if (m_optional)
    822         array->put(exec, exec->propertyNames().length, jsNumber(m_elision + length));
     822        array->put(exec, exec->propertyNames().length, jsNumber(exec, m_elision + length));
    823823
    824824    return array;
     
    15671567            JSObject* base = *iter;
    15681568            JSValue* v = slot.getValue(exec, base, m_ident)->toJSNumber(exec);
    1569             base->put(exec, m_ident, jsNumber(v->toNumber(exec) + 1));
     1569            base->put(exec, m_ident, jsNumber(exec, v->toNumber(exec) + 1));
    15701570            return v;
    15711571        }
     
    15881588    JSValue** slot = &exec->localStorage()[m_index].value;
    15891589    JSValue* v = (*slot)->toJSNumber(exec);
    1590     *slot = jsNumber(v->toNumber(exec) + 1);
     1590    *slot = jsNumber(exec, v->toNumber(exec) + 1);
    15911591    return v;
    15921592}
     
    16281628            JSObject* base = *iter;
    16291629            JSValue* v = slot.getValue(exec, base, m_ident)->toJSNumber(exec);
    1630             base->put(exec, m_ident, jsNumber(v->toNumber(exec) - 1));
     1630            base->put(exec, m_ident, jsNumber(exec, v->toNumber(exec) - 1));
    16311631            return v;
    16321632        }
     
    16491649    JSValue** slot = &exec->localStorage()[m_index].value;
    16501650    JSValue* v = (*slot)->toJSNumber(exec);
    1651     *slot = jsNumber(v->toNumber(exec) - 1);
     1651    *slot = jsNumber(exec, v->toNumber(exec) - 1);
    16521652    return v;
    16531653}
     
    16591659    JSValue** slot = &exec->localStorage()[m_index].value;
    16601660    double n = (*slot)->toNumber(exec);
    1661     *slot = jsNumber(n - 1);
     1661    *slot = jsNumber(exec, n - 1);
    16621662    return n;
    16631663}
     
    17131713
    17141714        JSValue* v2 = v->toJSNumber(exec);
    1715         base->put(exec, propertyIndex, jsNumber(v2->toNumber(exec) + 1));
     1715        base->put(exec, propertyIndex, jsNumber(exec, v2->toNumber(exec) + 1));
    17161716
    17171717        return v2;
     
    17241724
    17251725    JSValue* v2 = v->toJSNumber(exec);
    1726     base->put(exec, propertyName, jsNumber(v2->toNumber(exec) + 1));
     1726    base->put(exec, propertyName, jsNumber(exec, v2->toNumber(exec) + 1));
    17271727    return v2;
    17281728}
     
    17441744
    17451745        JSValue* v2 = v->toJSNumber(exec);
    1746         base->put(exec, propertyIndex, jsNumber(v2->toNumber(exec) - 1));
     1746        base->put(exec, propertyIndex, jsNumber(exec, v2->toNumber(exec) - 1));
    17471747        return v2;
    17481748    }
     
    17541754
    17551755    JSValue* v2 = v->toJSNumber(exec);
    1756     base->put(exec, propertyName, jsNumber(v2->toNumber(exec) - 1));
     1756    base->put(exec, propertyName, jsNumber(exec, v2->toNumber(exec) - 1));
    17571757    return v2;
    17581758}
     
    17761776
    17771777    JSValue* v2 = v->toJSNumber(exec);
    1778     base->put(exec, m_ident, jsNumber(v2->toNumber(exec) + 1));
     1778    base->put(exec, m_ident, jsNumber(exec, v2->toNumber(exec) + 1));
    17791779    return v2;
    17801780}
     
    17911791
    17921792    JSValue* v2 = v->toJSNumber(exec);
    1793     base->put(exec, m_ident, jsNumber(v2->toNumber(exec) - 1));
     1793    base->put(exec, m_ident, jsNumber(exec, v2->toNumber(exec) - 1));
    17941794    return v2;
    17951795}
     
    19281928}
    19291929
    1930 static JSValue* typeStringForValue(JSValue* v) KJS_FAST_CALL;
    1931 static JSValue* typeStringForValue(JSValue* v)
     1930static JSValue* typeStringForValue(ExecState*, JSValue*) KJS_FAST_CALL;
     1931static JSValue* typeStringForValue(ExecState* exec, JSValue* v)
    19321932{
    19331933    switch (v->type()) {
    19341934        case UndefinedType:
    1935             return jsString("undefined");
     1935            return jsString(exec, "undefined");
    19361936        case NullType:
    1937             return jsString("object");
     1937            return jsString(exec, "object");
    19381938        case BooleanType:
    1939             return jsString("boolean");
     1939            return jsString(exec, "boolean");
    19401940        case NumberType:
    1941             return jsString("number");
     1941            return jsString(exec, "number");
    19421942        case StringType:
    1943             return jsString("string");
     1943            return jsString(exec, "string");
    19441944        default:
    19451945            if (v->isObject()) {
     
    19471947                // as null when doing comparisons.
    19481948                if (static_cast<JSObject*>(v)->masqueradeAsUndefined())
    1949                     return jsString("undefined");
     1949                    return jsString(exec, "undefined");
    19501950                else if (static_cast<JSObject*>(v)->implementsCall())
    1951                     return jsString("function");
     1951                    return jsString(exec, "function");
    19521952            }
    19531953
    1954             return jsString("object");
     1954            return jsString(exec, "object");
    19551955    }
    19561956}
     
    19671967    ASSERT(exec->variableObject() == exec->scopeChain().top());
    19681968
    1969     return typeStringForValue(exec->localStorage()[m_index].value);
     1969    return typeStringForValue(exec, exec->localStorage()[m_index].value);
    19701970}
    19711971
     
    19851985        if (base->getPropertySlot(exec, m_ident, slot)) {
    19861986            JSValue* v = slot.getValue(exec, base, m_ident);
    1987             return typeStringForValue(v);
     1987            return typeStringForValue(exec, v);
    19881988        }
    19891989
     
    19911991    } while (iter != end);
    19921992
    1993     return jsString("undefined");
     1993    return jsString(exec, "undefined");
    19941994}
    19951995
     
    20012001    KJS_CHECKEXCEPTIONVALUE
    20022002
    2003     return typeStringForValue(v);
     2003    return typeStringForValue(exec, v);
    20042004}
    20052005
     
    20252025
    20262026    double n = (*slot)->toNumber(exec);
    2027     JSValue* n2 = jsNumber(n + 1);
     2027    JSValue* n2 = jsNumber(exec, n + 1);
    20282028    *slot = n2;
    20292029    return n2;
     
    20482048
    20492049            double n = v->toNumber(exec);
    2050             JSValue* n2 = jsNumber(n + 1);
     2050            JSValue* n2 = jsNumber(exec, n + 1);
    20512051            base->put(exec, m_ident, n2);
    20522052
     
    20772077
    20782078    double n = (*slot)->toNumber(exec);
    2079     JSValue* n2 = jsNumber(n - 1);
     2079    JSValue* n2 = jsNumber(exec, n - 1);
    20802080    *slot = n2;
    20812081    return n2;
     
    21002100
    21012101            double n = v->toNumber(exec);
    2102             JSValue* n2 = jsNumber(n - 1);
     2102            JSValue* n2 = jsNumber(exec, n - 1);
    21032103            base->put(exec, m_ident, n2);
    21042104
     
    21172117{
    21182118    ASSERT(exec->variableObject() == exec->scopeChain().top());
    2119     return jsNumber(exec->localStorage()[m_index].value->toNumber(exec) + 1);
     2119    return jsNumber(exec, exec->localStorage()[m_index].value->toNumber(exec) + 1);
    21202120}
    21212121
     
    21252125{
    21262126    ASSERT(exec->variableObject() == exec->scopeChain().top());
    2127     return jsNumber(exec->localStorage()[m_index].value->toNumber(exec) - 1);
     2127    return jsNumber(exec, exec->localStorage()[m_index].value->toNumber(exec) - 1);
    21282128}
    21292129
     
    21332133{
    21342134    ASSERT(exec->variableObject() == exec->scopeChain().top());
    2135     return jsNumber(exec->localStorage()[m_index].value->toNumber(exec));
     2135    return jsNumber(exec, exec->localStorage()[m_index].value->toNumber(exec));
    21362136}
    21372137
     
    21412141{
    21422142    ASSERT(exec->variableObject() == exec->scopeChain().top());
    2143     return jsNumber(exec->localStorage()[m_index].value->toNumber(exec));
     2143    return jsNumber(exec, exec->localStorage()[m_index].value->toNumber(exec));
    21442144}
    21452145
     
    21672167        KJS_CHECKEXCEPTIONVALUE
    21682168
    2169         JSValue* n2 = jsNumber(v->toNumber(exec) + 1);
     2169        JSValue* n2 = jsNumber(exec, v->toNumber(exec) + 1);
    21702170        base->put(exec, propertyIndex, n2);
    21712171
     
    21782178    KJS_CHECKEXCEPTIONVALUE
    21792179
    2180     JSValue* n2 = jsNumber(v->toNumber(exec) + 1);
     2180    JSValue* n2 = jsNumber(exec, v->toNumber(exec) + 1);
    21812181    base->put(exec, propertyName, n2);
    21822182
     
    21992199        KJS_CHECKEXCEPTIONVALUE
    22002200
    2201         JSValue* n2 = jsNumber(v->toNumber(exec) - 1);
     2201        JSValue* n2 = jsNumber(exec, v->toNumber(exec) - 1);
    22022202        base->put(exec, propertyIndex, n2);
    22032203
     
    22102210    KJS_CHECKEXCEPTIONVALUE
    22112211
    2212     JSValue* n2 = jsNumber(v->toNumber(exec) - 1);
     2212    JSValue* n2 = jsNumber(exec, v->toNumber(exec) - 1);
    22132213    base->put(exec, propertyName, n2);
    22142214
     
    22342234
    22352235    double n = v->toNumber(exec);
    2236     JSValue* n2 = jsNumber(n + 1);
     2236    JSValue* n2 = jsNumber(exec, n + 1);
    22372237    base->put(exec, m_ident, n2);
    22382238
     
    22512251
    22522252    double n = v->toNumber(exec);
    2253     JSValue* n2 = jsNumber(n - 1);
     2253    JSValue* n2 = jsNumber(exec, n - 1);
    22542254    base->put(exec, m_ident, n2);
    22552255
     
    23132313{
    23142314    // No need to check exception, caller will do so right after evaluate()
    2315     return jsNumber(-m_expr->evaluateToNumber(exec));
     2315    return jsNumber(exec, -m_expr->evaluateToNumber(exec));
    23162316}
    23172317
     
    23372337JSValue* BitwiseNotNode::evaluate(ExecState* exec)
    23382338{
    2339     return jsNumber(inlineEvaluateToInt32(exec));
     2339    return jsNumber(exec, inlineEvaluateToInt32(exec));
    23402340}
    23412341
     
    23972397JSValue* MultNode::evaluate(ExecState* exec)
    23982398{
    2399     return jsNumber(inlineEvaluateToNumber(exec));
     2399    return jsNumber(exec, inlineEvaluateToNumber(exec));
    24002400}
    24012401
     
    24382438JSValue* DivNode::evaluate(ExecState* exec)
    24392439{
    2440     return jsNumber(inlineEvaluateToNumber(exec));
     2440    return jsNumber(exec, inlineEvaluateToNumber(exec));
    24412441}
    24422442
     
    24732473JSValue* ModNode::evaluate(ExecState* exec)
    24742474{
    2475     return jsNumber(inlineEvaluateToNumber(exec));
     2475    return jsNumber(exec, inlineEvaluateToNumber(exec));
    24762476}
    24772477
     
    25242524        if (value.isNull())
    25252525            return throwOutOfMemoryError(exec);
    2526         return jsString(value);
    2527     }
    2528 
    2529     return jsNumber(p1->toNumber(exec) + p2->toNumber(exec));
     2526        return jsString(exec, value);
     2527    }
     2528
     2529    return jsNumber(exec, p1->toNumber(exec) + p2->toNumber(exec));
    25302530}
    25312531
     
    25632563
    25642564    if (bothTypes == ((NumberType << 3) | NumberType))
    2565         return jsNumber(v1->toNumber(exec) + v2->toNumber(exec));
     2565        return jsNumber(exec, v1->toNumber(exec) + v2->toNumber(exec));
    25662566    if (bothTypes == ((StringType << 3) | StringType)) {
    25672567        UString value = static_cast<StringImp*>(v1)->value() + static_cast<StringImp*>(v2)->value();
    25682568        if (value.isNull())
    25692569            return throwOutOfMemoryError(exec);
    2570         return jsString(value);
     2570        return jsString(exec, value);
    25712571    }
    25722572
     
    26482648JSValue* AddNumbersNode::evaluate(ExecState* exec)
    26492649{
    2650     return jsNumber(inlineEvaluateToNumber(exec));
     2650    return jsNumber(exec, inlineEvaluateToNumber(exec));
    26512651}
    26522652
     
    26742674    KJS_CHECKEXCEPTIONVALUE
    26752675
    2676     return jsString(static_cast<StringImp*>(v1)->value() + static_cast<StringImp*>(v2)->value());
     2676    return jsString(exec, static_cast<StringImp*>(v1)->value() + static_cast<StringImp*>(v2)->value());
    26772677}
    26782678
     
    26862686
    26872687    JSValue* p2 = v2->toPrimitive(exec, UnspecifiedType);
    2688     return jsString(static_cast<StringImp*>(v1)->value() + p2->toString(exec));
     2688    return jsString(exec, static_cast<StringImp*>(v1)->value() + p2->toString(exec));
    26892689}
    26902690
     
    26982698
    26992699    JSValue* p1 = v1->toPrimitive(exec, UnspecifiedType);
    2700     return jsString(p1->toString(exec) + static_cast<StringImp*>(v2)->value());
     2700    return jsString(exec, p1->toString(exec) + static_cast<StringImp*>(v2)->value());
    27012701}
    27022702
     
    27182718JSValue* SubNode::evaluate(ExecState* exec)
    27192719{
    2720     return jsNumber(inlineEvaluateToNumber(exec));
     2720    return jsNumber(exec, inlineEvaluateToNumber(exec));
    27212721}
    27222722
     
    27552755JSValue* LeftShiftNode::evaluate(ExecState* exec)
    27562756{
    2757     return jsNumber(inlineEvaluateToInt32(exec));
     2757    return jsNumber(exec, inlineEvaluateToInt32(exec));
    27582758}
    27592759
     
    27902790JSValue* RightShiftNode::evaluate(ExecState* exec)
    27912791{
    2792     return jsNumber(inlineEvaluateToInt32(exec));
     2792    return jsNumber(exec, inlineEvaluateToInt32(exec));
    27932793}
    27942794
     
    28252825JSValue* UnsignedRightShiftNode::evaluate(ExecState* exec)
    28262826{
    2827     return jsNumber(inlineEvaluateToUInt32(exec));
     2827    return jsNumber(exec, inlineEvaluateToUInt32(exec));
    28282828}
    28292829
     
    32763276JSValue* BitXOrNode::evaluate(ExecState* exec)
    32773277{
    3278     return jsNumber(inlineEvaluateToInt32(exec));
     3278    return jsNumber(exec, inlineEvaluateToInt32(exec));
    32793279}
    32803280
     
    33153315JSValue* BitOrNode::evaluate(ExecState* exec)
    33163316{
    3317     return jsNumber(inlineEvaluateToInt32(exec));
     3317    return jsNumber(exec, inlineEvaluateToInt32(exec));
    33183318}
    33193319
     
    34453445    switch (oper) {
    34463446        case OpMultEq:
    3447             v = jsNumber(current->toNumber(exec) * right->evaluateToNumber(exec));
     3447            v = jsNumber(exec, current->toNumber(exec) * right->evaluateToNumber(exec));
    34483448            break;
    34493449        case OpDivEq:
    3450             v = jsNumber(current->toNumber(exec) / right->evaluateToNumber(exec));
     3450            v = jsNumber(exec, current->toNumber(exec) / right->evaluateToNumber(exec));
    34513451            break;
    34523452        case OpPlusEq:
     
    34543454            break;
    34553455        case OpMinusEq:
    3456             v = jsNumber(current->toNumber(exec) - right->evaluateToNumber(exec));
     3456            v = jsNumber(exec, current->toNumber(exec) - right->evaluateToNumber(exec));
    34573457            break;
    34583458        case OpLShift:
    34593459            i1 = current->toInt32(exec);
    34603460            i2 = right->evaluateToInt32(exec);
    3461             v = jsNumber(i1 << i2);
     3461            v = jsNumber(exec, i1 << i2);
    34623462            break;
    34633463        case OpRShift:
    34643464            i1 = current->toInt32(exec);
    34653465            i2 = right->evaluateToInt32(exec);
    3466             v = jsNumber(i1 >> i2);
     3466            v = jsNumber(exec, i1 >> i2);
    34673467            break;
    34683468        case OpURShift:
    34693469            ui = current->toUInt32(exec);
    34703470            i2 = right->evaluateToInt32(exec);
    3471             v = jsNumber(ui >> i2);
     3471            v = jsNumber(exec, ui >> i2);
    34723472            break;
    34733473        case OpAndEq:
    34743474            i1 = current->toInt32(exec);
    34753475            i2 = right->evaluateToInt32(exec);
    3476             v = jsNumber(i1 & i2);
     3476            v = jsNumber(exec, i1 & i2);
    34773477            break;
    34783478        case OpXOrEq:
    34793479            i1 = current->toInt32(exec);
    34803480            i2 = right->evaluateToInt32(exec);
    3481             v = jsNumber(i1 ^ i2);
     3481            v = jsNumber(exec, i1 ^ i2);
    34823482            break;
    34833483        case OpOrEq:
    34843484            i1 = current->toInt32(exec);
    34853485            i2 = right->evaluateToInt32(exec);
    3486             v = jsNumber(i1 | i2);
     3486            v = jsNumber(exec, i1 | i2);
    34873487            break;
    34883488        case OpModEq: {
    34893489            double d1 = current->toNumber(exec);
    34903490            double d2 = right->evaluateToNumber(exec);
    3491             v = jsNumber(fmod(d1, d2));
     3491            v = jsNumber(exec, fmod(d1, d2));
    34923492        }
    34933493            break;
     
    42414241            continue;
    42424242
    4243         JSValue* str = jsOwnedString(name.ustring());
     4243        JSValue* str = jsOwnedString(exec, name.ustring());
    42444244
    42454245        if (m_lexpr->isResolveNode()) {
     
    45674567
    45684568    if (m_catchBlock && exec->completionType() == Throw) {
    4569         JSObject* obj = new JSObject;
     4569        JSObject* obj = new (exec) JSObject;
    45704570        obj->putDirect(m_exceptionIdent, result, DontDelete);
    45714571        exec->dynamicGlobalObject()->tearOffActivation(exec);
     
    49274927FunctionImp* FuncDeclNode::makeFunction(ExecState* exec)
    49284928{
    4929     FunctionImp* func = new FunctionImp(exec, m_ident, m_body.get(), exec->scopeChain());
     4929    FunctionImp* func = new (exec) FunctionImp(exec, m_ident, m_body.get(), exec->scopeChain());
    49304930
    49314931    JSObject* proto = exec->lexicalGlobalObject()->objectConstructor()->construct(exec, exec->emptyList());
    49324932    proto->putDirect(exec->propertyNames().constructor, func, DontEnum);
    49334933    func->putDirect(exec->propertyNames().prototype, proto, DontDelete);
    4934     func->putDirect(exec->propertyNames().length, jsNumber(m_body->parameters().size()), ReadOnly | DontDelete | DontEnum);
     4934    func->putDirect(exec->propertyNames().length, jsNumber(exec, m_body->parameters().size()), ReadOnly | DontDelete | DontEnum);
    49354935    return func;
    49364936}
     
    49614961        // but they won't register with the current scope chain and should
    49624962        // be contained as single property in an anonymous object.
    4963         functionScopeObject = new JSObject;
     4963        functionScopeObject = new (exec) JSObject;
    49644964        exec->pushScope(functionScopeObject);
    49654965    }
    49664966
    4967     FunctionImp* func = new FunctionImp(exec, m_ident, m_body.get(), exec->scopeChain());
     4967    FunctionImp* func = new (exec) FunctionImp(exec, m_ident, m_body.get(), exec->scopeChain());
    49684968    JSObject* proto = exec->lexicalGlobalObject()->objectConstructor()->construct(exec, exec->emptyList());
    49694969    proto->putDirect(exec->propertyNames().constructor, func, DontEnum);
Note: See TracChangeset for help on using the changeset viewer.