Changeset 37812 in webkit for trunk/JavaScriptCore/VM


Ignore:
Timestamp:
Oct 23, 2008, 8:55:41 AM (17 years ago)
Author:
Darin Adler
Message:

JavaScriptCore:

2008-10-23 Darin Adler <Darin Adler>

1) slowness under MSVC, since it doesn't handle a

class with a single pointer in it as efficiently
as a pointer

2) uninitialized pointers in Vector

  • API/APICast.h: (toRef):
  • VM/CTI.cpp: (JSC::CTI::asInteger):
  • VM/CodeGenerator.cpp: (JSC::CodeGenerator::addConstant):
  • VM/CodeGenerator.h: (JSC::CodeGenerator::JSValueHashTraits::constructDeletedValue): (JSC::CodeGenerator::JSValueHashTraits::isDeletedValue):
  • VM/Machine.cpp: (JSC::Machine::cti_op_add): (JSC::Machine::cti_op_pre_inc): (JSC::Machine::cti_op_get_by_id): (JSC::Machine::cti_op_get_by_id_second): (JSC::Machine::cti_op_get_by_id_generic): (JSC::Machine::cti_op_get_by_id_fail): (JSC::Machine::cti_op_instanceof): (JSC::Machine::cti_op_del_by_id): (JSC::Machine::cti_op_mul): (JSC::Machine::cti_op_call_NotJSFunction): (JSC::Machine::cti_op_resolve): (JSC::Machine::cti_op_construct_NotJSConstruct): (JSC::Machine::cti_op_get_by_val): (JSC::Machine::cti_op_sub): (JSC::Machine::cti_op_lesseq): (JSC::Machine::cti_op_negate): (JSC::Machine::cti_op_resolve_base): (JSC::Machine::cti_op_resolve_skip): (JSC::Machine::cti_op_resolve_global): (JSC::Machine::cti_op_div): (JSC::Machine::cti_op_pre_dec): (JSC::Machine::cti_op_not): (JSC::Machine::cti_op_eq): (JSC::Machine::cti_op_lshift): (JSC::Machine::cti_op_bitand): (JSC::Machine::cti_op_rshift): (JSC::Machine::cti_op_bitnot): (JSC::Machine::cti_op_mod): (JSC::Machine::cti_op_less): (JSC::Machine::cti_op_neq): (JSC::Machine::cti_op_urshift): (JSC::Machine::cti_op_bitxor): (JSC::Machine::cti_op_bitor): (JSC::Machine::cti_op_call_eval): (JSC::Machine::cti_op_throw): (JSC::Machine::cti_op_next_pname): (JSC::Machine::cti_op_typeof): (JSC::Machine::cti_op_is_undefined): (JSC::Machine::cti_op_is_boolean): (JSC::Machine::cti_op_is_number): (JSC::Machine::cti_op_is_string): (JSC::Machine::cti_op_is_object): (JSC::Machine::cti_op_is_function): (JSC::Machine::cti_op_stricteq): (JSC::Machine::cti_op_nstricteq): (JSC::Machine::cti_op_to_jsnumber): (JSC::Machine::cti_op_in): (JSC::Machine::cti_op_del_by_val): (JSC::Machine::cti_vm_throw): Removed calls to payload functions.
  • VM/Register.h: (JSC::Register::Register): Removed overload for JSCell and call to payload function.
  • kjs/JSCell.h: Changed JSCell to derive from JSValue again. Removed JSValuePtr constructor. (JSC::asCell): Changed cast from reinterpret_cast to static_cast.
  • kjs/JSImmediate.h: Removed JSValuePtr class. Added typedef back.
  • kjs/JSValue.h: (JSC::JSValue::JSValue): Added empty protected inline constructor back. (JSC::JSValue::~JSValue): Same for destructor. Removed == and != operator for JSValuePtr.
  • kjs/PropertySlot.h: (JSC::PropertySlot::PropertySlot): Chnaged argument to const JSValue* and added a const_cast.
  • kjs/protect.h: Removed overloads and specialization for JSValuePtr.

JavaScriptGlue:

2008-10-23 Darin Adler <Darin Adler>

  • JSValueWrapper.cpp: (JSValueWrapper::GetValue): Added missing call to .get().
  • JSValueWrapper.h: ProtectedPtr<JSValue> instead of ProtectedPtr<JSValuePtr>.

WebCore:

2008-10-23 Darin Adler <Darin Adler>

  • bindings/js/ScheduledAction.h:
  • inspector/InspectorController.cpp: ProtectedPtr<JSValue> instead of ProtectedPtr<JSValuePtr>.
Location:
trunk/JavaScriptCore/VM
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/VM/CTI.cpp

    r37789 r37812  
    3636#include "ResultType.h"
    3737
    38 #if PLATFORM(MAC)
    39 #include <sys/sysctl.h>
    40 #endif
    41 
    4238using namespace std;
    4339
     
    180176inline uintptr_t CTI::asInteger(JSValuePtr value)
    181177{
    182     return reinterpret_cast<uintptr_t>(value.payload());
     178    return reinterpret_cast<uintptr_t>(value);
    183179}
    184180
  • trunk/JavaScriptCore/VM/CodeGenerator.cpp

    r37789 r37812  
    675675RegisterID* CodeGenerator::addConstant(JSValuePtr v)
    676676{
    677     pair<JSValueMap::iterator, bool> result = m_jsValueMap.add(v.payload(), m_nextConstant);
     677    pair<JSValueMap::iterator, bool> result = m_jsValueMap.add(v, m_nextConstant);
    678678    if (result.second) {
    679679        RegisterID& constant = m_calleeRegisters[m_nextConstant];
  • trunk/JavaScriptCore/VM/CodeGenerator.h

    r37730 r37812  
    332332
    333333        struct JSValueHashTraits : HashTraits<JSValue*> {
    334             static void constructDeletedValue(JSValue*& slot) { slot = JSImmediate::impossibleValue().payload(); }
    335             static bool isDeletedValue(JSValue* value) { return value == JSImmediate::impossibleValue().payload(); }
     334            static void constructDeletedValue(JSValue*& slot) { slot = JSImmediate::impossibleValue(); }
     335            static bool isDeletedValue(JSValue* value) { return value == JSImmediate::impossibleValue(); }
    336336        };
    337337
  • trunk/JavaScriptCore/VM/Machine.cpp

    r37799 r37812  
    43864386    bool rightIsNumber = fastIsNumber(v2, right);
    43874387    if (rightIsNumber && fastIsNumber(v1, left))
    4388         return jsNumber(ARG_globalData, left + right).payload();
     4388        return jsNumber(ARG_globalData, left + right);
    43894389   
    43904390    CallFrame* callFrame = ARG_callFrame;
     
    43984398        }
    43994399
    4400         return JSValuePtr(jsString(ARG_globalData, value.release())).payload();
     4400        return JSValuePtr(jsString(ARG_globalData, value.release()));
    44014401    }
    44024402
     
    44104410            VM_THROW_EXCEPTION();
    44114411        }
    4412         return JSValuePtr(jsString(ARG_globalData, value.release())).payload();
     4412        return JSValuePtr(jsString(ARG_globalData, value.release()));
    44134413    }
    44144414
     
    44164416    JSValuePtr result = jsAddSlowCase(callFrame, v1, v2);
    44174417    VM_CHECK_EXCEPTION_AT_END();
    4418     return result.payload();
     4418    return result;
    44194419}
    44204420
     
    44284428    JSValuePtr result = jsNumber(ARG_globalData, v->toNumber(callFrame) + 1);
    44294429    VM_CHECK_EXCEPTION_AT_END();
    4430     return result.payload();
     4430    return result;
    44314431}
    44324432
     
    45564556
    45574557    VM_CHECK_EXCEPTION_AT_END();
    4558     return result.payload();
     4558    return result;
    45594559}
    45604560
     
    45734573
    45744574    VM_CHECK_EXCEPTION_AT_END();
    4575     return result.payload();
     4575    return result;
    45764576}
    45774577
     
    45884588
    45894589    VM_CHECK_EXCEPTION_AT_END();
    4590     return result.payload();
     4590    return result;
    45914591}
    45924592
     
    46064606
    46074607    VM_CHECK_EXCEPTION_AT_END();
    4608     return result.payload();
     4608    return result;
    46094609}
    46104610
     
    46334633
    46344634    if (!asObject(baseVal)->structureID()->typeInfo().implementsHasInstance())
    4635         return JSValuePtr(jsBoolean(false)).payload();
     4635        return JSValuePtr(jsBoolean(false));
    46364636
    46374637    if (!proto->isObject()) {
     
    46414641       
    46424642    if (!value->isObject())
    4643         return JSValuePtr(jsBoolean(false)).payload();
     4643        return JSValuePtr(jsBoolean(false));
    46444644
    46454645    JSValuePtr result = jsBoolean(asObject(baseVal)->hasInstance(callFrame, value, proto));
    46464646    VM_CHECK_EXCEPTION_AT_END();
    46474647
    4648     return result.payload();
     4648    return result;
    46494649}
    46504650
     
    46604660    JSValuePtr result = jsBoolean(baseObj->deleteProperty(callFrame, ident));
    46614661    VM_CHECK_EXCEPTION_AT_END();
    4662     return result.payload();
     4662    return result;
    46634663}
    46644664
     
    46734673    double right;
    46744674    if (fastIsNumber(src1, left) && fastIsNumber(src2, right))
    4675         return jsNumber(ARG_globalData, left * right).payload();
     4675        return jsNumber(ARG_globalData, left * right);
    46764676
    46774677    CallFrame* callFrame = ARG_callFrame;
    46784678    JSValuePtr result = jsNumber(ARG_globalData, src1->toNumber(callFrame) * src2->toNumber(callFrame));
    46794679    VM_CHECK_EXCEPTION_AT_END();
    4680     return result.payload();
     4680    return result;
    46814681}
    46824682
     
    48044804        VM_CHECK_EXCEPTION();
    48054805
    4806         return returnValue.payload();
     4806        return returnValue;
    48074807    }
    48084808
     
    48974897            JSValuePtr result = slot.getValue(callFrame, ident);
    48984898            VM_CHECK_EXCEPTION_AT_END();
    4899             return result.payload();
     4899            return result;
    49004900        }
    49014901    } while (++iter != end);
     
    50085008        VM_CHECK_EXCEPTION();
    50095009
    5010         return returnValue.payload();
     5010        return returnValue;
    50115011    }
    50125012
     
    50485048
    50495049    VM_CHECK_EXCEPTION_AT_END();
    5050     return result.payload();
     5050    return result;
    50515051}
    50525052
     
    51055105    double right;
    51065106    if (fastIsNumber(src1, left) && fastIsNumber(src2, right))
    5107         return jsNumber(ARG_globalData, left - right).payload();
     5107        return jsNumber(ARG_globalData, left - right);
    51085108
    51095109    CallFrame* callFrame = ARG_callFrame;
    51105110    JSValuePtr result = jsNumber(ARG_globalData, src1->toNumber(callFrame) - src2->toNumber(callFrame));
    51115111    VM_CHECK_EXCEPTION_AT_END();
    5112     return result.payload();
     5112    return result;
    51135113}
    51145114
     
    51805180    JSValuePtr result = jsBoolean(jsLessEq(callFrame, ARG_src1, ARG_src2));
    51815181    VM_CHECK_EXCEPTION_AT_END();
    5182     return result.payload();
     5182    return result;
    51835183}
    51845184
     
    52045204    double v;
    52055205    if (fastIsNumber(src, v))
    5206         return jsNumber(ARG_globalData, -v).payload();
     5206        return jsNumber(ARG_globalData, -v);
    52075207
    52085208    CallFrame* callFrame = ARG_callFrame;
    52095209    JSValuePtr result = jsNumber(ARG_globalData, -src->toNumber(callFrame));
    52105210    VM_CHECK_EXCEPTION_AT_END();
    5211     return result.payload();
     5211    return result;
    52125212}
    52135213
     
    52165216    CTI_STACK_HACK();
    52175217
    5218     return inlineResolveBase(ARG_callFrame, *ARG_id1, ARG_callFrame->scopeChain()).payload();
     5218    return inlineResolveBase(ARG_callFrame, *ARG_id1, ARG_callFrame->scopeChain());
    52195219}
    52205220
     
    52425242            JSValuePtr result = slot.getValue(callFrame, ident);
    52435243            VM_CHECK_EXCEPTION_AT_END();
    5244             return result.payload();
     5244            return result;
    52455245        }
    52465246    } while (++iter != end);
     
    52725272            vPC[4] = globalObject->structureID();
    52735273            vPC[5] = slot.cachedOffset();
    5274             return result.payload();
     5274            return result;
    52755275        }
    52765276
    52775277        VM_CHECK_EXCEPTION_AT_END();
    5278         return result.payload();
     5278        return result;
    52795279    }
    52805280   
     
    52935293    double right;
    52945294    if (fastIsNumber(src1, left) && fastIsNumber(src2, right))
    5295         return jsNumber(ARG_globalData, left / right).payload();
     5295        return jsNumber(ARG_globalData, left / right);
    52965296
    52975297    CallFrame* callFrame = ARG_callFrame;
    52985298    JSValuePtr result = jsNumber(ARG_globalData, src1->toNumber(callFrame) / src2->toNumber(callFrame));
    52995299    VM_CHECK_EXCEPTION_AT_END();
    5300     return result.payload();
     5300    return result;
    53015301}
    53025302
     
    53105310    JSValuePtr result = jsNumber(ARG_globalData, v->toNumber(callFrame) - 1);
    53115311    VM_CHECK_EXCEPTION_AT_END();
    5312     return result.payload();
     5312    return result;
    53135313}
    53145314
     
    53365336    JSValuePtr result = jsBoolean(!src->toBoolean(callFrame));
    53375337    VM_CHECK_EXCEPTION_AT_END();
    5338     return result.payload();
     5338    return result;
    53395339}
    53405340
     
    53795379    JSValuePtr result = jsBoolean(equalSlowCaseInline(callFrame, src1, src2));
    53805380    VM_CHECK_EXCEPTION_AT_END();
    5381     return result.payload();
     5381    return result;
    53825382}
    53835383
     
    53925392    uint32_t right;
    53935393    if (JSImmediate::areBothImmediateNumbers(val, shift))
    5394         return jsNumber(ARG_globalData, JSImmediate::getTruncatedInt32(val) << (JSImmediate::getTruncatedUInt32(shift) & 0x1f)).payload();
     5394        return jsNumber(ARG_globalData, JSImmediate::getTruncatedInt32(val) << (JSImmediate::getTruncatedUInt32(shift) & 0x1f));
    53955395    if (fastToInt32(val, left) && fastToUInt32(shift, right))
    5396         return jsNumber(ARG_globalData, left << (right & 0x1f)).payload();
     5396        return jsNumber(ARG_globalData, left << (right & 0x1f));
    53975397
    53985398    CallFrame* callFrame = ARG_callFrame;
    53995399    JSValuePtr result = jsNumber(ARG_globalData, (val->toInt32(callFrame)) << (shift->toUInt32(callFrame) & 0x1f));
    54005400    VM_CHECK_EXCEPTION_AT_END();
    5401     return result.payload();
     5401    return result;
    54025402}
    54035403
     
    54125412    int32_t right;
    54135413    if (fastToInt32(src1, left) && fastToInt32(src2, right))
    5414         return jsNumber(ARG_globalData, left & right).payload();
     5414        return jsNumber(ARG_globalData, left & right);
    54155415
    54165416    CallFrame* callFrame = ARG_callFrame;
    54175417    JSValuePtr result = jsNumber(ARG_globalData, src1->toInt32(callFrame) & src2->toInt32(callFrame));
    54185418    VM_CHECK_EXCEPTION_AT_END();
    5419     return result.payload();
     5419    return result;
    54205420}
    54215421
     
    54305430    uint32_t right;
    54315431    if (JSImmediate::areBothImmediateNumbers(val, shift))
    5432         return JSImmediate::rightShiftImmediateNumbers(val, shift).payload();
     5432        return JSImmediate::rightShiftImmediateNumbers(val, shift);
    54335433    if (fastToInt32(val, left) && fastToUInt32(shift, right))
    5434         return jsNumber(ARG_globalData, left >> (right & 0x1f)).payload();
     5434        return jsNumber(ARG_globalData, left >> (right & 0x1f));
    54355435
    54365436    CallFrame* callFrame = ARG_callFrame;
    54375437    JSValuePtr result = jsNumber(ARG_globalData, (val->toInt32(callFrame)) >> (shift->toUInt32(callFrame) & 0x1f));
    54385438    VM_CHECK_EXCEPTION_AT_END();
    5439     return result.payload();
     5439    return result;
    54405440}
    54415441
     
    54485448    int value;
    54495449    if (fastToInt32(src, value))
    5450         return jsNumber(ARG_globalData, ~value).payload();
     5450        return jsNumber(ARG_globalData, ~value);
    54515451           
    54525452    CallFrame* callFrame = ARG_callFrame;
    54535453    JSValuePtr result = jsNumber(ARG_globalData, ~src->toInt32(callFrame));
    54545454    VM_CHECK_EXCEPTION_AT_END();
    5455     return result.payload();
     5455    return result;
    54565456}
    54575457
     
    55105510    JSValuePtr result = jsNumber(ARG_globalData, fmod(d, divisorValue->toNumber(callFrame)));
    55115511    VM_CHECK_EXCEPTION_AT_END();
    5512     return result.payload();
     5512    return result;
    55135513}
    55145514
     
    55205520    JSValuePtr result = jsBoolean(jsLess(callFrame, ARG_src1, ARG_src2));
    55215521    VM_CHECK_EXCEPTION_AT_END();
    5522     return result.payload();
     5522    return result;
    55235523}
    55245524
     
    55355535    JSValuePtr result = jsBoolean(!equalSlowCaseInline(callFrame, src1, src2));
    55365536    VM_CHECK_EXCEPTION_AT_END();
    5537     return result.payload();
     5537    return result;
    55385538}
    55395539
     
    55635563
    55645564    if (JSImmediate::areBothImmediateNumbers(val, shift) && !JSImmediate::isNegative(val))
    5565         return JSImmediate::rightShiftImmediateNumbers(val, shift).payload();
     5565        return JSImmediate::rightShiftImmediateNumbers(val, shift);
    55665566    else {
    55675567        JSValuePtr result = jsNumber(ARG_globalData, (val->toUInt32(callFrame)) >> (shift->toUInt32(callFrame) & 0x1f));
    55685568        VM_CHECK_EXCEPTION_AT_END();
    5569         return result.payload();
     5569        return result;
    55705570    }
    55715571}
     
    55825582    JSValuePtr result = jsNumber(ARG_globalData, src1->toInt32(callFrame) ^ src2->toInt32(callFrame));
    55835583    VM_CHECK_EXCEPTION_AT_END();
    5584     return result.payload();
     5584    return result;
    55855585}
    55865586
     
    56035603    JSValuePtr result = jsNumber(ARG_globalData, src1->toInt32(callFrame) | src2->toInt32(callFrame));
    56045604    VM_CHECK_EXCEPTION_AT_END();
    5605     return result.payload();
     5605    return result;
    56065606}
    56075607
     
    56305630            VM_THROW_EXCEPTION_AT_END();
    56315631        }
    5632         return result.payload();
    5633     }
    5634 
    5635     return JSImmediate::impossibleValue().payload();
     5632        return result;
     5633    }
     5634
     5635    return JSImmediate::impossibleValue();
    56365636}
    56375637
     
    56535653    if (!handlerVPC) {
    56545654        *ARG_exception = exceptionValue;
    5655         return JSImmediate::nullImmediate().payload();
     5655        return JSImmediate::nullImmediate();
    56565656    }
    56575657
     
    56605660    ASSERT(catchRoutine);
    56615661    CTI_SET_RETURN_ADDRESS(catchRoutine);
    5662     return exceptionValue.payload();
     5662    return exceptionValue;
    56635663}
    56645664
     
    56785678    if (!temp)
    56795679        it->invalidate();
    5680     return temp.payload();
     5680    return temp;
    56815681}
    56825682
     
    57015701    CTI_STACK_HACK();
    57025702
    5703     return jsTypeStringForValue(ARG_callFrame, ARG_src1).payload();
     5703    return jsTypeStringForValue(ARG_callFrame, ARG_src1);
    57045704}
    57055705
     
    57095709
    57105710    JSValuePtr v = ARG_src1;
    5711     return jsBoolean(JSImmediate::isImmediate(v) ? v->isUndefined() : v->asCell()->structureID()->typeInfo().masqueradesAsUndefined()).payload();
     5711    return jsBoolean(JSImmediate::isImmediate(v) ? v->isUndefined() : v->asCell()->structureID()->typeInfo().masqueradesAsUndefined());
    57125712}
    57135713
     
    57165716    CTI_STACK_HACK();
    57175717
    5718     return jsBoolean(ARG_src1->isBoolean()).payload();
     5718    return jsBoolean(ARG_src1->isBoolean());
    57195719}
    57205720
     
    57235723    CTI_STACK_HACK();
    57245724
    5725     return jsBoolean(ARG_src1->isNumber()).payload();
     5725    return jsBoolean(ARG_src1->isNumber());
    57265726}
    57275727
     
    57305730    CTI_STACK_HACK();
    57315731
    5732     return jsBoolean(ARG_globalData->machine->isJSString(ARG_src1)).payload();
     5732    return jsBoolean(ARG_globalData->machine->isJSString(ARG_src1));
    57335733}
    57345734
     
    57375737    CTI_STACK_HACK();
    57385738
    5739     return jsBoolean(jsIsObjectType(ARG_src1)).payload();
     5739    return jsBoolean(jsIsObjectType(ARG_src1));
    57405740}
    57415741
     
    57445744    CTI_STACK_HACK();
    57455745
    5746     return jsBoolean(jsIsFunctionType(ARG_src1)).payload();
     5746    return jsBoolean(jsIsFunctionType(ARG_src1));
    57475747}
    57485748
     
    57585758    ASSERT(!(JSImmediate::isEitherImmediate(src1, src2) & (src1 != JSImmediate::zeroImmediate()) & (src2 != JSImmediate::zeroImmediate())));
    57595759
    5760     return jsBoolean(strictEqualSlowCaseInline(src1, src2)).payload();
     5760    return jsBoolean(strictEqualSlowCaseInline(src1, src2));
    57615761}
    57625762
     
    57725772    ASSERT(!(JSImmediate::isEitherImmediate(src1, src2) & (src1 != JSImmediate::zeroImmediate()) & (src2 != JSImmediate::zeroImmediate())));
    57735773   
    5774     return jsBoolean(!strictEqualSlowCaseInline(src1, src2)).payload();
     5774    return jsBoolean(!strictEqualSlowCaseInline(src1, src2));
    57755775}
    57765776
     
    57845784    JSValuePtr result = src->toJSNumber(callFrame);
    57855785    VM_CHECK_EXCEPTION_AT_END();
    5786     return result.payload();
     5786    return result;
    57875787}
    57885788
     
    58085808    uint32_t i;
    58095809    if (propName->getUInt32(i))
    5810         return jsBoolean(baseObj->hasProperty(callFrame, i)).payload();
     5810        return jsBoolean(baseObj->hasProperty(callFrame, i));
    58115811
    58125812    Identifier property(callFrame, propName->toString(callFrame));
    58135813    VM_CHECK_EXCEPTION();
    5814     return jsBoolean(baseObj->hasProperty(callFrame, property)).payload();
     5814    return jsBoolean(baseObj->hasProperty(callFrame, property));
    58155815}
    58165816
     
    59275927
    59285928    VM_CHECK_EXCEPTION_AT_END();
    5929     return result.payload();
     5929    return result;
    59305930}
    59315931
     
    60006000    if (!handlerVPC) {
    60016001        *ARG_exception = exceptionValue;
    6002         return JSImmediate::nullImmediate().payload();
     6002        return JSImmediate::nullImmediate();
    60036003    }
    60046004
     
    60076007    ASSERT(catchRoutine);
    60086008    CTI_SET_RETURN_ADDRESS(catchRoutine);
    6009     return exceptionValue.payload();
     6009    return exceptionValue;
    60106010}
    60116011
  • trunk/JavaScriptCore/VM/Register.h

    r37712 r37812  
    5151        Register();
    5252        Register(JSValuePtr);
    53         Register(JSCell*);
    5453
    5554        JSValuePtr jsValue(CallFrame*) const;
     
    144143    {
    145144        SET_TYPE(ValueType);
    146         u.value = v.payload();
    147     }
    148 
    149     ALWAYS_INLINE Register::Register(JSCell* v)
    150     {
    151         SET_TYPE(ValueType);
    152         u.value = JSValuePtr(v).payload();
     145        u.value = v;
    153146    }
    154147
Note: See TracChangeset for help on using the changeset viewer.