Index: runtime/vm/intermediate_language.cc |
=================================================================== |
--- runtime/vm/intermediate_language.cc (revision 15556) |
+++ runtime/vm/intermediate_language.cc (working copy) |
@@ -2460,10 +2460,33 @@ |
RangeBoundary::FromConstant(Array::kMaxElements)); |
return; |
} |
+ if ((range_ == NULL) && |
+ (recognized_kind() == MethodRecognizer::kStringBaseLength)) { |
+ range_ = new Range(RangeBoundary::FromConstant(0), |
+ RangeBoundary::FromConstant(String::kMaxElements)); |
+ return; |
+ } |
Definition::InferRange(); |
} |
+ |
+void StringCharCodeAtInstr::InferRange() { |
+ switch (class_id_) { |
+ case kOneByteStringCid: |
+ range_ = new Range(RangeBoundary::FromConstant(0), |
+ RangeBoundary::FromConstant(0xFF)); |
+ break; |
+ case kTwoByteStringCid: |
+ range_ = new Range(RangeBoundary::FromConstant(0), |
+ RangeBoundary::FromConstant(0xFFFF)); |
+ break; |
+ default: |
+ UNIMPLEMENTED(); |
+ } |
+} |
+ |
+ |
void LoadIndexedInstr::InferRange() { |
switch (class_id()) { |
case kExternalUint8ArrayCid: |