Changeset 33038 in webkit for trunk/JavaScriptCore/kjs/nodes.cpp
- Timestamp:
- May 12, 2008, 12:12:31 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/nodes.cpp
r32822 r33038 42 42 #include <wtf/HashSet.h> 43 43 #include <wtf/MathExtras.h> 44 #if USE(MULTIPLE_THREADS)45 #include <wtf/ThreadSpecific.h>46 #endif47 48 using namespace WTF;49 44 50 45 namespace KJS { … … 123 118 #define LOG_CHANNEL_PREFIX Log 124 119 #endif 125 126 120 static WTFLogChannel LogKJSNodeLeaks = { 0x00000000, "", WTFLogChannelOn }; 127 121 … … 138 132 #endif 139 133 140 static HashSet<ParserRefCounted*>* newTrackedObjects() 141 { 142 #if USE(MULTIPLE_THREADS) 143 static ThreadSpecific<HashSet<ParserRefCounted*> > sharedInstance; 144 return sharedInstance; 145 #else 146 static HashSet<ParserRefCounted*> sharedInstance; 147 return &sharedInstance; 148 #endif 149 } 150 151 static HashCountedSet<ParserRefCounted*>* trackedObjectExtraRefCounts() 152 { 153 #if USE(MULTIPLE_THREADS) 154 static ThreadSpecific<HashCountedSet<ParserRefCounted*> > sharedInstance; 155 return sharedInstance; 156 #else 157 static HashCountedSet<ParserRefCounted*> sharedInstance; 158 return &sharedInstance; 159 #endif 160 } 161 162 void initializeNodesThreading() 163 { 164 newTrackedObjects(); 165 trackedObjectExtraRefCounts(); 166 } 134 static HashSet<ParserRefCounted*>* newTrackedObjects; 135 static HashCountedSet<ParserRefCounted*>* trackedObjectExtraRefCounts; 167 136 168 137 ParserRefCounted::ParserRefCounted() … … 171 140 ++ParserRefCountedCounter::count; 172 141 #endif 173 newTrackedObjects()->add(this); 174 ASSERT(newTrackedObjects()->contains(this)); 142 if (!newTrackedObjects) 143 newTrackedObjects = new HashSet<ParserRefCounted*>; 144 newTrackedObjects->add(this); 145 ASSERT(newTrackedObjects->contains(this)); 175 146 } 176 147 … … 184 155 void ParserRefCounted::ref() 185 156 { 186 HashSet<ParserRefCounted*>* localNewTrackedObjects = newTrackedObjects();187 188 157 // bumping from 0 to 1 is just removing from the new nodes set 189 HashSet<ParserRefCounted*>::iterator it = localNewTrackedObjects->find(this); 190 if (it != localNewTrackedObjects->end()) { 191 localNewTrackedObjects->remove(it); 192 ASSERT(!trackedObjectExtraRefCounts()->contains(this)); 158 if (newTrackedObjects) { 159 HashSet<ParserRefCounted*>::iterator it = newTrackedObjects->find(this); 160 if (it != newTrackedObjects->end()) { 161 newTrackedObjects->remove(it); 162 ASSERT(!trackedObjectExtraRefCounts || !trackedObjectExtraRefCounts->contains(this)); 163 return; 164 } 165 } 166 167 ASSERT(!newTrackedObjects || !newTrackedObjects->contains(this)); 168 169 if (!trackedObjectExtraRefCounts) 170 trackedObjectExtraRefCounts = new HashCountedSet<ParserRefCounted*>; 171 trackedObjectExtraRefCounts->add(this); 172 } 173 174 void ParserRefCounted::deref() 175 { 176 ASSERT(!newTrackedObjects || !newTrackedObjects->contains(this)); 177 178 if (!trackedObjectExtraRefCounts) { 179 delete this; 193 180 return; 194 181 } 195 182 196 ASSERT(!localNewTrackedObjects->contains(this)); 197 198 trackedObjectExtraRefCounts()->add(this); 199 } 200 201 void ParserRefCounted::deref() 202 { 203 ASSERT(!newTrackedObjects()->contains(this)); 204 HashCountedSet<ParserRefCounted*>* localTrackedObjectExtraRefCounts = trackedObjectExtraRefCounts(); 205 206 HashCountedSet<ParserRefCounted*>::iterator it = localTrackedObjectExtraRefCounts->find(this); 207 if (it == localTrackedObjectExtraRefCounts->end()) 183 HashCountedSet<ParserRefCounted*>::iterator it = trackedObjectExtraRefCounts->find(this); 184 if (it == trackedObjectExtraRefCounts->end()) 208 185 delete this; 209 186 else 210 localTrackedObjectExtraRefCounts->remove(it);187 trackedObjectExtraRefCounts->remove(it); 211 188 } 212 189 213 190 unsigned ParserRefCounted::refcount() 214 191 { 215 HashCountedSet<ParserRefCounted*>* localTrackedObjectExtraRefCounts = trackedObjectExtraRefCounts(); 216 217 if (newTrackedObjects()->contains(this)) { 218 ASSERT(!localTrackedObjectExtraRefCounts->contains(this)); 192 if (newTrackedObjects && newTrackedObjects->contains(this)) { 193 ASSERT(!trackedObjectExtraRefCounts || !trackedObjectExtraRefCounts->contains(this)); 219 194 return 0; 220 195 } 221 196 222 ASSERT(!newTrackedObjects ()->contains(this));223 224 if (! localTrackedObjectExtraRefCounts)197 ASSERT(!newTrackedObjects || !newTrackedObjects->contains(this)); 198 199 if (!trackedObjectExtraRefCounts) 225 200 return 1; 226 201 227 return 1 + localTrackedObjectExtraRefCounts->count(this);202 return 1 + trackedObjectExtraRefCounts->count(this); 228 203 } 229 204 230 205 void ParserRefCounted::deleteNewObjects() 231 206 { 232 HashSet<ParserRefCounted*>* localNewTrackedObjects = newTrackedObjects(); 207 if (!newTrackedObjects) 208 return; 209 233 210 #ifndef NDEBUG 234 HashSet<ParserRefCounted*>::iterator end = localNewTrackedObjects->end();235 for (HashSet<ParserRefCounted*>::iterator it = localNewTrackedObjects->begin(); it != end; ++it)236 ASSERT(!trackedObjectExtraRefCounts ()->contains(*it));211 HashSet<ParserRefCounted*>::iterator end = newTrackedObjects->end(); 212 for (HashSet<ParserRefCounted*>::iterator it = newTrackedObjects->begin(); it != end; ++it) 213 ASSERT(!trackedObjectExtraRefCounts || !trackedObjectExtraRefCounts->contains(*it)); 237 214 #endif 238 deleteAllValues(*localNewTrackedObjects); 239 localNewTrackedObjects->clear(); 215 deleteAllValues(*newTrackedObjects); 216 delete newTrackedObjects; 217 newTrackedObjects = 0; 240 218 } 241 219 … … 383 361 JSObject* exception = static_cast<JSObject*>(exceptionValue); 384 362 if (!exception->hasProperty(exec, "line") && !exception->hasProperty(exec, "sourceURL")) { 385 exception->put(exec, "line", jsNumber( exec,m_line));386 exception->put(exec, "sourceURL", jsString( exec,currentSourceURL(exec)));363 exception->put(exec, "line", jsNumber(m_line)); 364 exception->put(exec, "sourceURL", jsString(currentSourceURL(exec))); 387 365 } 388 366 } … … 476 454 // ------------------------------ NumberNode ----------------------------------- 477 455 478 JSValue* NumberNode::evaluate(ExecState* exec)456 JSValue* NumberNode::evaluate(ExecState*) 479 457 { 480 458 // Number nodes are only created when the number can't fit in a JSImmediate, so no need to check again. 481 return jsNumberCell( exec,m_double);459 return jsNumberCell(m_double); 482 460 } 483 461 … … 525 503 // ------------------------------ StringNode ----------------------------------- 526 504 527 JSValue* StringNode::evaluate(ExecState* exec)528 { 529 return jsOwnedString( exec,m_value);505 JSValue* StringNode::evaluate(ExecState*) 506 { 507 return jsOwnedString(m_value); 530 508 } 531 509 … … 842 820 843 821 if (m_optional) 844 array->put(exec, exec->propertyNames().length, jsNumber( exec,m_elision + length));822 array->put(exec, exec->propertyNames().length, jsNumber(m_elision + length)); 845 823 846 824 return array; … … 1589 1567 JSObject* base = *iter; 1590 1568 JSValue* v = slot.getValue(exec, base, m_ident)->toJSNumber(exec); 1591 base->put(exec, m_ident, jsNumber( exec,v->toNumber(exec) + 1));1569 base->put(exec, m_ident, jsNumber(v->toNumber(exec) + 1)); 1592 1570 return v; 1593 1571 } … … 1610 1588 JSValue** slot = &exec->localStorage()[m_index].value; 1611 1589 JSValue* v = (*slot)->toJSNumber(exec); 1612 *slot = jsNumber( exec,v->toNumber(exec) + 1);1590 *slot = jsNumber(v->toNumber(exec) + 1); 1613 1591 return v; 1614 1592 } … … 1650 1628 JSObject* base = *iter; 1651 1629 JSValue* v = slot.getValue(exec, base, m_ident)->toJSNumber(exec); 1652 base->put(exec, m_ident, jsNumber( exec,v->toNumber(exec) - 1));1630 base->put(exec, m_ident, jsNumber(v->toNumber(exec) - 1)); 1653 1631 return v; 1654 1632 } … … 1671 1649 JSValue** slot = &exec->localStorage()[m_index].value; 1672 1650 JSValue* v = (*slot)->toJSNumber(exec); 1673 *slot = jsNumber( exec,v->toNumber(exec) - 1);1651 *slot = jsNumber(v->toNumber(exec) - 1); 1674 1652 return v; 1675 1653 } … … 1681 1659 JSValue** slot = &exec->localStorage()[m_index].value; 1682 1660 double n = (*slot)->toNumber(exec); 1683 *slot = jsNumber( exec,n - 1);1661 *slot = jsNumber(n - 1); 1684 1662 return n; 1685 1663 } … … 1735 1713 1736 1714 JSValue* v2 = v->toJSNumber(exec); 1737 base->put(exec, propertyIndex, jsNumber( exec,v2->toNumber(exec) + 1));1715 base->put(exec, propertyIndex, jsNumber(v2->toNumber(exec) + 1)); 1738 1716 1739 1717 return v2; … … 1746 1724 1747 1725 JSValue* v2 = v->toJSNumber(exec); 1748 base->put(exec, propertyName, jsNumber( exec,v2->toNumber(exec) + 1));1726 base->put(exec, propertyName, jsNumber(v2->toNumber(exec) + 1)); 1749 1727 return v2; 1750 1728 } … … 1766 1744 1767 1745 JSValue* v2 = v->toJSNumber(exec); 1768 base->put(exec, propertyIndex, jsNumber( exec,v2->toNumber(exec) - 1));1746 base->put(exec, propertyIndex, jsNumber(v2->toNumber(exec) - 1)); 1769 1747 return v2; 1770 1748 } … … 1776 1754 1777 1755 JSValue* v2 = v->toJSNumber(exec); 1778 base->put(exec, propertyName, jsNumber( exec,v2->toNumber(exec) - 1));1756 base->put(exec, propertyName, jsNumber(v2->toNumber(exec) - 1)); 1779 1757 return v2; 1780 1758 } … … 1798 1776 1799 1777 JSValue* v2 = v->toJSNumber(exec); 1800 base->put(exec, m_ident, jsNumber( exec,v2->toNumber(exec) + 1));1778 base->put(exec, m_ident, jsNumber(v2->toNumber(exec) + 1)); 1801 1779 return v2; 1802 1780 } … … 1813 1791 1814 1792 JSValue* v2 = v->toJSNumber(exec); 1815 base->put(exec, m_ident, jsNumber( exec,v2->toNumber(exec) - 1));1793 base->put(exec, m_ident, jsNumber(v2->toNumber(exec) - 1)); 1816 1794 return v2; 1817 1795 } … … 1950 1928 } 1951 1929 1952 static JSValue* typeStringForValue( ExecState*, JSValue*) KJS_FAST_CALL;1953 static JSValue* typeStringForValue( ExecState* exec,JSValue* v)1930 static JSValue* typeStringForValue(JSValue* v) KJS_FAST_CALL; 1931 static JSValue* typeStringForValue(JSValue* v) 1954 1932 { 1955 1933 switch (v->type()) { 1956 1934 case UndefinedType: 1957 return jsString( exec,"undefined");1935 return jsString("undefined"); 1958 1936 case NullType: 1959 return jsString( exec,"object");1937 return jsString("object"); 1960 1938 case BooleanType: 1961 return jsString( exec,"boolean");1939 return jsString("boolean"); 1962 1940 case NumberType: 1963 return jsString( exec,"number");1941 return jsString("number"); 1964 1942 case StringType: 1965 return jsString( exec,"string");1943 return jsString("string"); 1966 1944 default: 1967 1945 if (v->isObject()) { … … 1969 1947 // as null when doing comparisons. 1970 1948 if (static_cast<JSObject*>(v)->masqueradeAsUndefined()) 1971 return jsString( exec,"undefined");1949 return jsString("undefined"); 1972 1950 else if (static_cast<JSObject*>(v)->implementsCall()) 1973 return jsString( exec,"function");1951 return jsString("function"); 1974 1952 } 1975 1953 1976 return jsString( exec,"object");1954 return jsString("object"); 1977 1955 } 1978 1956 } … … 1989 1967 ASSERT(exec->variableObject() == exec->scopeChain().top()); 1990 1968 1991 return typeStringForValue(exec , exec->localStorage()[m_index].value);1969 return typeStringForValue(exec->localStorage()[m_index].value); 1992 1970 } 1993 1971 … … 2007 1985 if (base->getPropertySlot(exec, m_ident, slot)) { 2008 1986 JSValue* v = slot.getValue(exec, base, m_ident); 2009 return typeStringForValue( exec,v);1987 return typeStringForValue(v); 2010 1988 } 2011 1989 … … 2013 1991 } while (iter != end); 2014 1992 2015 return jsString( exec,"undefined");1993 return jsString("undefined"); 2016 1994 } 2017 1995 … … 2023 2001 KJS_CHECKEXCEPTIONVALUE 2024 2002 2025 return typeStringForValue( exec,v);2003 return typeStringForValue(v); 2026 2004 } 2027 2005 … … 2047 2025 2048 2026 double n = (*slot)->toNumber(exec); 2049 JSValue* n2 = jsNumber( exec,n + 1);2027 JSValue* n2 = jsNumber(n + 1); 2050 2028 *slot = n2; 2051 2029 return n2; … … 2070 2048 2071 2049 double n = v->toNumber(exec); 2072 JSValue* n2 = jsNumber( exec,n + 1);2050 JSValue* n2 = jsNumber(n + 1); 2073 2051 base->put(exec, m_ident, n2); 2074 2052 … … 2099 2077 2100 2078 double n = (*slot)->toNumber(exec); 2101 JSValue* n2 = jsNumber( exec,n - 1);2079 JSValue* n2 = jsNumber(n - 1); 2102 2080 *slot = n2; 2103 2081 return n2; … … 2122 2100 2123 2101 double n = v->toNumber(exec); 2124 JSValue* n2 = jsNumber( exec,n - 1);2102 JSValue* n2 = jsNumber(n - 1); 2125 2103 base->put(exec, m_ident, n2); 2126 2104 … … 2139 2117 { 2140 2118 ASSERT(exec->variableObject() == exec->scopeChain().top()); 2141 return jsNumber(exec , exec->localStorage()[m_index].value->toNumber(exec) + 1);2119 return jsNumber(exec->localStorage()[m_index].value->toNumber(exec) + 1); 2142 2120 } 2143 2121 … … 2147 2125 { 2148 2126 ASSERT(exec->variableObject() == exec->scopeChain().top()); 2149 return jsNumber(exec , exec->localStorage()[m_index].value->toNumber(exec) - 1);2127 return jsNumber(exec->localStorage()[m_index].value->toNumber(exec) - 1); 2150 2128 } 2151 2129 … … 2155 2133 { 2156 2134 ASSERT(exec->variableObject() == exec->scopeChain().top()); 2157 return jsNumber(exec , exec->localStorage()[m_index].value->toNumber(exec));2135 return jsNumber(exec->localStorage()[m_index].value->toNumber(exec)); 2158 2136 } 2159 2137 … … 2163 2141 { 2164 2142 ASSERT(exec->variableObject() == exec->scopeChain().top()); 2165 return jsNumber(exec , exec->localStorage()[m_index].value->toNumber(exec));2143 return jsNumber(exec->localStorage()[m_index].value->toNumber(exec)); 2166 2144 } 2167 2145 … … 2189 2167 KJS_CHECKEXCEPTIONVALUE 2190 2168 2191 JSValue* n2 = jsNumber( exec,v->toNumber(exec) + 1);2169 JSValue* n2 = jsNumber(v->toNumber(exec) + 1); 2192 2170 base->put(exec, propertyIndex, n2); 2193 2171 … … 2200 2178 KJS_CHECKEXCEPTIONVALUE 2201 2179 2202 JSValue* n2 = jsNumber( exec,v->toNumber(exec) + 1);2180 JSValue* n2 = jsNumber(v->toNumber(exec) + 1); 2203 2181 base->put(exec, propertyName, n2); 2204 2182 … … 2221 2199 KJS_CHECKEXCEPTIONVALUE 2222 2200 2223 JSValue* n2 = jsNumber( exec,v->toNumber(exec) - 1);2201 JSValue* n2 = jsNumber(v->toNumber(exec) - 1); 2224 2202 base->put(exec, propertyIndex, n2); 2225 2203 … … 2232 2210 KJS_CHECKEXCEPTIONVALUE 2233 2211 2234 JSValue* n2 = jsNumber( exec,v->toNumber(exec) - 1);2212 JSValue* n2 = jsNumber(v->toNumber(exec) - 1); 2235 2213 base->put(exec, propertyName, n2); 2236 2214 … … 2256 2234 2257 2235 double n = v->toNumber(exec); 2258 JSValue* n2 = jsNumber( exec,n + 1);2236 JSValue* n2 = jsNumber(n + 1); 2259 2237 base->put(exec, m_ident, n2); 2260 2238 … … 2273 2251 2274 2252 double n = v->toNumber(exec); 2275 JSValue* n2 = jsNumber( exec,n - 1);2253 JSValue* n2 = jsNumber(n - 1); 2276 2254 base->put(exec, m_ident, n2); 2277 2255 … … 2335 2313 { 2336 2314 // No need to check exception, caller will do so right after evaluate() 2337 return jsNumber( exec,-m_expr->evaluateToNumber(exec));2315 return jsNumber(-m_expr->evaluateToNumber(exec)); 2338 2316 } 2339 2317 … … 2359 2337 JSValue* BitwiseNotNode::evaluate(ExecState* exec) 2360 2338 { 2361 return jsNumber( exec,inlineEvaluateToInt32(exec));2339 return jsNumber(inlineEvaluateToInt32(exec)); 2362 2340 } 2363 2341 … … 2419 2397 JSValue* MultNode::evaluate(ExecState* exec) 2420 2398 { 2421 return jsNumber( exec,inlineEvaluateToNumber(exec));2399 return jsNumber(inlineEvaluateToNumber(exec)); 2422 2400 } 2423 2401 … … 2460 2438 JSValue* DivNode::evaluate(ExecState* exec) 2461 2439 { 2462 return jsNumber( exec,inlineEvaluateToNumber(exec));2440 return jsNumber(inlineEvaluateToNumber(exec)); 2463 2441 } 2464 2442 … … 2495 2473 JSValue* ModNode::evaluate(ExecState* exec) 2496 2474 { 2497 return jsNumber( exec,inlineEvaluateToNumber(exec));2475 return jsNumber(inlineEvaluateToNumber(exec)); 2498 2476 } 2499 2477 … … 2546 2524 if (value.isNull()) 2547 2525 return throwOutOfMemoryError(exec); 2548 return jsString( exec,value);2549 } 2550 2551 return jsNumber( exec,p1->toNumber(exec) + p2->toNumber(exec));2526 return jsString(value); 2527 } 2528 2529 return jsNumber(p1->toNumber(exec) + p2->toNumber(exec)); 2552 2530 } 2553 2531 … … 2585 2563 2586 2564 if (bothTypes == ((NumberType << 3) | NumberType)) 2587 return jsNumber( exec,v1->toNumber(exec) + v2->toNumber(exec));2565 return jsNumber(v1->toNumber(exec) + v2->toNumber(exec)); 2588 2566 if (bothTypes == ((StringType << 3) | StringType)) { 2589 2567 UString value = static_cast<StringImp*>(v1)->value() + static_cast<StringImp*>(v2)->value(); 2590 2568 if (value.isNull()) 2591 2569 return throwOutOfMemoryError(exec); 2592 return jsString( exec,value);2570 return jsString(value); 2593 2571 } 2594 2572 … … 2670 2648 JSValue* AddNumbersNode::evaluate(ExecState* exec) 2671 2649 { 2672 return jsNumber( exec,inlineEvaluateToNumber(exec));2650 return jsNumber(inlineEvaluateToNumber(exec)); 2673 2651 } 2674 2652 … … 2696 2674 KJS_CHECKEXCEPTIONVALUE 2697 2675 2698 return jsString( exec,static_cast<StringImp*>(v1)->value() + static_cast<StringImp*>(v2)->value());2676 return jsString(static_cast<StringImp*>(v1)->value() + static_cast<StringImp*>(v2)->value()); 2699 2677 } 2700 2678 … … 2708 2686 2709 2687 JSValue* p2 = v2->toPrimitive(exec, UnspecifiedType); 2710 return jsString( exec,static_cast<StringImp*>(v1)->value() + p2->toString(exec));2688 return jsString(static_cast<StringImp*>(v1)->value() + p2->toString(exec)); 2711 2689 } 2712 2690 … … 2720 2698 2721 2699 JSValue* p1 = v1->toPrimitive(exec, UnspecifiedType); 2722 return jsString( exec,p1->toString(exec) + static_cast<StringImp*>(v2)->value());2700 return jsString(p1->toString(exec) + static_cast<StringImp*>(v2)->value()); 2723 2701 } 2724 2702 … … 2740 2718 JSValue* SubNode::evaluate(ExecState* exec) 2741 2719 { 2742 return jsNumber( exec,inlineEvaluateToNumber(exec));2720 return jsNumber(inlineEvaluateToNumber(exec)); 2743 2721 } 2744 2722 … … 2777 2755 JSValue* LeftShiftNode::evaluate(ExecState* exec) 2778 2756 { 2779 return jsNumber( exec,inlineEvaluateToInt32(exec));2757 return jsNumber(inlineEvaluateToInt32(exec)); 2780 2758 } 2781 2759 … … 2812 2790 JSValue* RightShiftNode::evaluate(ExecState* exec) 2813 2791 { 2814 return jsNumber( exec,inlineEvaluateToInt32(exec));2792 return jsNumber(inlineEvaluateToInt32(exec)); 2815 2793 } 2816 2794 … … 2847 2825 JSValue* UnsignedRightShiftNode::evaluate(ExecState* exec) 2848 2826 { 2849 return jsNumber( exec,inlineEvaluateToUInt32(exec));2827 return jsNumber(inlineEvaluateToUInt32(exec)); 2850 2828 } 2851 2829 … … 3298 3276 JSValue* BitXOrNode::evaluate(ExecState* exec) 3299 3277 { 3300 return jsNumber( exec,inlineEvaluateToInt32(exec));3278 return jsNumber(inlineEvaluateToInt32(exec)); 3301 3279 } 3302 3280 … … 3337 3315 JSValue* BitOrNode::evaluate(ExecState* exec) 3338 3316 { 3339 return jsNumber( exec,inlineEvaluateToInt32(exec));3317 return jsNumber(inlineEvaluateToInt32(exec)); 3340 3318 } 3341 3319 … … 3467 3445 switch (oper) { 3468 3446 case OpMultEq: 3469 v = jsNumber( exec,current->toNumber(exec) * right->evaluateToNumber(exec));3447 v = jsNumber(current->toNumber(exec) * right->evaluateToNumber(exec)); 3470 3448 break; 3471 3449 case OpDivEq: 3472 v = jsNumber( exec,current->toNumber(exec) / right->evaluateToNumber(exec));3450 v = jsNumber(current->toNumber(exec) / right->evaluateToNumber(exec)); 3473 3451 break; 3474 3452 case OpPlusEq: … … 3476 3454 break; 3477 3455 case OpMinusEq: 3478 v = jsNumber( exec,current->toNumber(exec) - right->evaluateToNumber(exec));3456 v = jsNumber(current->toNumber(exec) - right->evaluateToNumber(exec)); 3479 3457 break; 3480 3458 case OpLShift: 3481 3459 i1 = current->toInt32(exec); 3482 3460 i2 = right->evaluateToInt32(exec); 3483 v = jsNumber( exec,i1 << i2);3461 v = jsNumber(i1 << i2); 3484 3462 break; 3485 3463 case OpRShift: 3486 3464 i1 = current->toInt32(exec); 3487 3465 i2 = right->evaluateToInt32(exec); 3488 v = jsNumber( exec,i1 >> i2);3466 v = jsNumber(i1 >> i2); 3489 3467 break; 3490 3468 case OpURShift: 3491 3469 ui = current->toUInt32(exec); 3492 3470 i2 = right->evaluateToInt32(exec); 3493 v = jsNumber( exec,ui >> i2);3471 v = jsNumber(ui >> i2); 3494 3472 break; 3495 3473 case OpAndEq: 3496 3474 i1 = current->toInt32(exec); 3497 3475 i2 = right->evaluateToInt32(exec); 3498 v = jsNumber( exec,i1 & i2);3476 v = jsNumber(i1 & i2); 3499 3477 break; 3500 3478 case OpXOrEq: 3501 3479 i1 = current->toInt32(exec); 3502 3480 i2 = right->evaluateToInt32(exec); 3503 v = jsNumber( exec,i1 ^ i2);3481 v = jsNumber(i1 ^ i2); 3504 3482 break; 3505 3483 case OpOrEq: 3506 3484 i1 = current->toInt32(exec); 3507 3485 i2 = right->evaluateToInt32(exec); 3508 v = jsNumber( exec,i1 | i2);3486 v = jsNumber(i1 | i2); 3509 3487 break; 3510 3488 case OpModEq: { 3511 3489 double d1 = current->toNumber(exec); 3512 3490 double d2 = right->evaluateToNumber(exec); 3513 v = jsNumber( exec,fmod(d1, d2));3491 v = jsNumber(fmod(d1, d2)); 3514 3492 } 3515 3493 break; … … 4263 4241 continue; 4264 4242 4265 JSValue* str = jsOwnedString( exec,name.ustring());4243 JSValue* str = jsOwnedString(name.ustring()); 4266 4244 4267 4245 if (m_lexpr->isResolveNode()) { … … 4589 4567 4590 4568 if (m_catchBlock && exec->completionType() == Throw) { 4591 JSObject* obj = new (exec)JSObject;4569 JSObject* obj = new JSObject; 4592 4570 obj->putDirect(m_exceptionIdent, result, DontDelete); 4593 4571 exec->dynamicGlobalObject()->tearOffActivation(exec); … … 4949 4927 FunctionImp* FuncDeclNode::makeFunction(ExecState* exec) 4950 4928 { 4951 FunctionImp* func = new (exec)FunctionImp(exec, m_ident, m_body.get(), exec->scopeChain());4929 FunctionImp* func = new FunctionImp(exec, m_ident, m_body.get(), exec->scopeChain()); 4952 4930 4953 4931 JSObject* proto = exec->lexicalGlobalObject()->objectConstructor()->construct(exec, exec->emptyList()); 4954 4932 proto->putDirect(exec->propertyNames().constructor, func, DontEnum); 4955 4933 func->putDirect(exec->propertyNames().prototype, proto, DontDelete); 4956 func->putDirect(exec->propertyNames().length, jsNumber( exec,m_body->parameters().size()), ReadOnly | DontDelete | DontEnum);4934 func->putDirect(exec->propertyNames().length, jsNumber(m_body->parameters().size()), ReadOnly | DontDelete | DontEnum); 4957 4935 return func; 4958 4936 } … … 4983 4961 // but they won't register with the current scope chain and should 4984 4962 // be contained as single property in an anonymous object. 4985 functionScopeObject = new (exec)JSObject;4963 functionScopeObject = new JSObject; 4986 4964 exec->pushScope(functionScopeObject); 4987 4965 } 4988 4966 4989 FunctionImp* func = new (exec)FunctionImp(exec, m_ident, m_body.get(), exec->scopeChain());4967 FunctionImp* func = new FunctionImp(exec, m_ident, m_body.get(), exec->scopeChain()); 4990 4968 JSObject* proto = exec->lexicalGlobalObject()->objectConstructor()->construct(exec, exec->emptyList()); 4991 4969 proto->putDirect(exec->propertyNames().constructor, func, DontEnum);
Note:
See TracChangeset
for help on using the changeset viewer.