Changeset 39799 in webkit for trunk/JavaScriptCore/interpreter
- Timestamp:
- Jan 11, 2009, 11:12:47 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/interpreter/Interpreter.cpp
r39798 r39799 5119 5119 result = JSValuePtr::encode(asString(baseValue)->getIndex(ARG_globalData, i)); 5120 5120 else if (interpreter->isJSByteArray(baseValue) && asByteArray(baseValue)->canAccessIndex(i)) { 5121 // All fast byte array accesses are safe from exceptions so return immediately to avoid exception checks. 5121 5122 ctiPatchCallByReturnAddress(STUB_RETURN_ADDRESS, reinterpret_cast<void*>(cti_op_get_by_val_byte_array)); 5122 5123 return JSValuePtr::encode(asByteArray(baseValue)->getIndex(i)); … … 5147 5148 bool isUInt32 = JSImmediate::getUInt32(subscript, i); 5148 5149 if (LIKELY(isUInt32)) { 5149 if (interpreter->isJSByteArray(baseValue) && asByteArray(baseValue)->canAccessIndex(i)) 5150 if (interpreter->isJSByteArray(baseValue) && asByteArray(baseValue)->canAccessIndex(i)) { 5151 // All fast byte array accesses are safe from exceptions so return immediately to avoid exception checks. 5150 5152 return JSValuePtr::encode(asByteArray(baseValue)->getIndex(i)); 5151 else {5152 result = baseValue->get(callFrame, i); 5153 if (!interpreter->isJSByteArray(baseValue))5154 ctiPatchCallByReturnAddress(STUB_RETURN_ADDRESS, reinterpret_cast<void*>(cti_op_get_by_val));5155 }5153 } 5154 5155 result = baseValue->get(callFrame, i); 5156 if (!interpreter->isJSByteArray(baseValue)) 5157 ctiPatchCallByReturnAddress(STUB_RETURN_ADDRESS, reinterpret_cast<void*>(cti_op_get_by_val)); 5156 5158 } else { 5157 5159 Identifier property(callFrame, subscript->toString(callFrame)); … … 5246 5248 } else if (interpreter->isJSByteArray(baseValue) && asByteArray(baseValue)->canAccessIndex(i)) { 5247 5249 JSByteArray* jsByteArray = asByteArray(baseValue); 5248 double dValue = 0;5249 5250 ctiPatchCallByReturnAddress(STUB_RETURN_ADDRESS, reinterpret_cast<void*>(cti_op_put_by_val_byte_array)); 5251 // All fast byte array accesses are safe from exceptions so return immediately to avoid exception checks. 5250 5252 if (JSImmediate::isNumber(value)) { 5251 5253 jsByteArray->setIndex(i, JSImmediate::getTruncatedInt32(value)); 5252 5254 return; 5253 } else if (fastIsNumber(value, dValue)) { 5254 jsByteArray->setIndex(i, dValue); 5255 return; 5256 } else 5257 baseValue->put(callFrame, i, value); 5255 } else { 5256 double dValue = 0; 5257 if (fastIsNumber(value, dValue)) { 5258 jsByteArray->setIndex(i, dValue); 5259 return; 5260 } 5261 } 5262 5263 baseValue->put(callFrame, i, value); 5258 5264 } else 5259 5265 baseValue->put(callFrame, i, value); … … 5312 5318 if (interpreter->isJSByteArray(baseValue) && asByteArray(baseValue)->canAccessIndex(i)) { 5313 5319 JSByteArray* jsByteArray = asByteArray(baseValue); 5314 double dValue = 0; 5320 5321 // All fast byte array accesses are safe from exceptions so return immediately to avoid exception checks. 5315 5322 if (JSImmediate::isNumber(value)) { 5316 5323 jsByteArray->setIndex(i, JSImmediate::getTruncatedInt32(value)); 5317 5324 return; 5318 } else if (fastIsNumber(value, dValue)) { 5319 jsByteArray->setIndex(i, dValue); 5320 return; 5321 } else 5322 baseValue->put(callFrame, i, value); 5323 } else { 5324 if (!interpreter->isJSByteArray(baseValue)) 5325 ctiPatchCallByReturnAddress(STUB_RETURN_ADDRESS, reinterpret_cast<void*>(cti_op_put_by_val)); 5326 baseValue->put(callFrame, i, value); 5327 } 5325 } else { 5326 double dValue = 0; 5327 if (fastIsNumber(value, dValue)) { 5328 jsByteArray->setIndex(i, dValue); 5329 return; 5330 } 5331 } 5332 } 5333 5334 if (!interpreter->isJSByteArray(baseValue)) 5335 ctiPatchCallByReturnAddress(STUB_RETURN_ADDRESS, reinterpret_cast<void*>(cti_op_put_by_val)); 5336 baseValue->put(callFrame, i, value); 5328 5337 } else { 5329 5338 Identifier property(callFrame, subscript->toString(callFrame));
Note:
See TracChangeset
for help on using the changeset viewer.