Changeset 39625 in webkit for trunk/JavaScriptCore/interpreter/Interpreter.cpp
- Timestamp:
- Jan 5, 2009, 3:57:09 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/interpreter/Interpreter.cpp
r39571 r39625 41 41 #include "JSActivation.h" 42 42 #include "JSArray.h" 43 #include "JSByteArray.h" 43 44 #include "JSFunction.h" 44 45 #include "JSNotAnObject.h" … … 607 608 m_jsArrayVptr = jsArray->vptr(); 608 609 jsArray->~JSCell(); 610 611 JSByteArray* jsByteArray = new (storage) JSByteArray(JSByteArray::VPtrStealingHack); 612 m_jsByteArrayVptr = jsByteArray->vptr(); 613 jsByteArray->~JSCell(); 609 614 610 615 JSCell* jsString = new (storage) JSString(JSString::VPtrStealingHack); … … 2854 2859 } else if (isJSString(baseValue) && asString(baseValue)->canGetIndex(i)) 2855 2860 result = asString(baseValue)->getIndex(&callFrame->globalData(), i); 2861 else if (isJSByteArray(baseValue) && asByteArray(baseValue)->canAccessIndex(i)) 2862 result = asByteArray(baseValue)->getIndex(i); 2856 2863 else 2857 2864 result = baseValue->get(callFrame, i); … … 2894 2901 else 2895 2902 jsArray->JSArray::put(callFrame, i, callFrame[value].jsValue(callFrame)); 2903 } else if (isJSByteArray(baseValue) && asByteArray(baseValue)->canAccessIndex(i)) { 2904 JSByteArray* jsByteArray = asByteArray(baseValue); 2905 double dValue = 0; 2906 JSValue* jsValue = callFrame[value].jsValue(callFrame); 2907 if (JSImmediate::isNumber(jsValue)) 2908 jsByteArray->setIndex(i, JSImmediate::getTruncatedInt32(jsValue)); 2909 else if (fastIsNumber(jsValue, dValue)) 2910 jsByteArray->setIndex(i, dValue); 2911 else 2912 baseValue->put(callFrame, i, jsValue); 2896 2913 } else 2897 2914 baseValue->put(callFrame, i, callFrame[value].jsValue(callFrame)); … … 5095 5112 result = jsArray->JSArray::get(callFrame, i); 5096 5113 } else if (interpreter->isJSString(baseValue) && asString(baseValue)->canGetIndex(i)) 5097 result = asString(baseValue)->getIndex(ARG_globalData, i); 5114 return asString(baseValue)->getIndex(ARG_globalData, i); 5115 else if (interpreter->isJSByteArray(baseValue) && asByteArray(baseValue)->canAccessIndex(i)) 5116 return asByteArray(baseValue)->getIndex(i); 5098 5117 else 5099 5118 result = baseValue->get(callFrame, i); … … 5188 5207 else 5189 5208 jsArray->JSArray::put(callFrame, i, value); 5209 } else if (interpreter->isJSByteArray(baseValue) && asByteArray(baseValue)->canAccessIndex(i)) { 5210 JSByteArray* jsByteArray = asByteArray(baseValue); 5211 double dValue = 0; 5212 if (JSImmediate::isNumber(value)) { 5213 jsByteArray->setIndex(i, JSImmediate::getTruncatedInt32(value)); 5214 return; 5215 } else if (fastIsNumber(value, dValue)) { 5216 jsByteArray->setIndex(i, dValue); 5217 return; 5218 } else 5219 baseValue->put(callFrame, i, value); 5190 5220 } else 5191 5221 baseValue->put(callFrame, i, value);
Note:
See TracChangeset
for help on using the changeset viewer.