Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index 28a89085f254341851c1f9ab86f05d7b93da716a..6fc5156d4739d7435f65fccf2a30f0f9dca21310 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -3219,9 +3219,10 @@ void HGraphBuilder::HandlePropertyAssignment(Assignment* expr) { |
// never both. Pixel array maps that are assigned to pixel array elements |
// are always created with the fast elements flag cleared. |
if (receiver_type->has_external_array_elements()) { |
- if (expr->GetExternalArrayType() == kExternalPixelArray) { |
- instr = BuildStoreKeyedPixelArrayElement(object, key, value, expr); |
- } |
+ instr = BuildStoreKeyedSpecializedArrayElement(object, |
+ key, |
+ value, |
+ expr); |
} else if (receiver_type->has_fast_elements()) { |
instr = BuildStoreKeyedFastElement(object, key, value, expr); |
} |
@@ -3597,9 +3598,10 @@ HInstruction* HGraphBuilder::BuildLoadKeyedFastElement(HValue* object, |
} |
-HInstruction* HGraphBuilder::BuildLoadKeyedPixelArrayElement(HValue* object, |
- HValue* key, |
- Property* expr) { |
+HInstruction* HGraphBuilder::BuildLoadKeyedSpecializedArrayElement( |
+ HValue* object, |
+ HValue* key, |
+ Property* expr) { |
ASSERT(!expr->key()->IsPropertyName() && expr->IsMonomorphic()); |
AddInstruction(new HCheckNonSmi(object)); |
Handle<Map> map = expr->GetMonomorphicReceiverType(); |
@@ -3614,8 +3616,10 @@ HInstruction* HGraphBuilder::BuildLoadKeyedPixelArrayElement(HValue* object, |
HLoadExternalArrayPointer* external_elements = |
new HLoadExternalArrayPointer(elements); |
AddInstruction(external_elements); |
- HLoadPixelArrayElement* pixel_array_value = |
- new HLoadPixelArrayElement(external_elements, key); |
+ HLoadKeyedSpecializedArrayElement* pixel_array_value = |
+ new HLoadKeyedSpecializedArrayElement(external_elements, |
+ key, |
+ expr->GetExternalArrayType()); |
return pixel_array_value; |
} |
@@ -3653,11 +3657,11 @@ HInstruction* HGraphBuilder::BuildStoreKeyedFastElement(HValue* object, |
} |
-HInstruction* HGraphBuilder::BuildStoreKeyedPixelArrayElement( |
+HInstruction* HGraphBuilder::BuildStoreKeyedSpecializedArrayElement( |
HValue* object, |
HValue* key, |
HValue* val, |
- Expression* expr) { |
+ Assignment* expr) { |
ASSERT(expr->IsMonomorphic()); |
AddInstruction(new HCheckNonSmi(object)); |
Handle<Map> map = expr->GetMonomorphicReceiverType(); |
@@ -3671,7 +3675,11 @@ HInstruction* HGraphBuilder::BuildStoreKeyedPixelArrayElement( |
HLoadExternalArrayPointer* external_elements = |
new HLoadExternalArrayPointer(elements); |
AddInstruction(external_elements); |
- return new HStorePixelArrayElement(external_elements, key, val); |
+ return new HStoreKeyedSpecializedArrayElement( |
+ external_elements, |
+ key, |
+ val, |
+ expr->GetExternalArrayType()); |
} |
@@ -3767,9 +3775,7 @@ void HGraphBuilder::VisitProperty(Property* expr) { |
// both. Pixel array maps that are assigned to pixel array elements are |
// always created with the fast elements flag cleared. |
if (receiver_type->has_external_array_elements()) { |
- if (expr->GetExternalArrayType() == kExternalPixelArray) { |
- instr = BuildLoadKeyedPixelArrayElement(obj, key, expr); |
- } |
+ instr = BuildLoadKeyedSpecializedArrayElement(obj, key, expr); |
} else if (receiver_type->has_fast_elements()) { |
instr = BuildLoadKeyedFastElement(obj, key, expr); |
} |