| Index: dart/runtime/vm/intermediate_language.h
 | 
| ===================================================================
 | 
| --- dart/runtime/vm/intermediate_language.h	(revision 31530)
 | 
| +++ dart/runtime/vm/intermediate_language.h	(working copy)
 | 
| @@ -620,6 +620,7 @@
 | 
|    M(EqualityCompare)                                                           \
 | 
|    M(RelationalOp)                                                              \
 | 
|    M(NativeCall)                                                                \
 | 
| +  M(DebugStepCheck)                                                            \
 | 
|    M(LoadIndexed)                                                               \
 | 
|    M(StoreIndexed)                                                              \
 | 
|    M(StoreInstanceField)                                                        \
 | 
| @@ -669,6 +670,7 @@
 | 
|    M(UnaryMintOp)                                                               \
 | 
|    M(CheckArrayBound)                                                           \
 | 
|    M(Constraint)                                                                \
 | 
| +  M(StringToCharCode)                                                          \
 | 
|    M(StringFromCharCode)                                                        \
 | 
|    M(StringInterpolate)                                                         \
 | 
|    M(InvokeMathCFunction)                                                       \
 | 
| @@ -3415,6 +3417,28 @@
 | 
|  };
 | 
|  
 | 
|  
 | 
| +class DebugStepCheckInstr : public TemplateInstruction<0> {
 | 
| + public:
 | 
| +  explicit DebugStepCheckInstr(intptr_t token_pos)
 | 
| +      : token_pos_(token_pos) {
 | 
| +  }
 | 
| +
 | 
| +  DECLARE_INSTRUCTION(DebugStepCheck)
 | 
| +
 | 
| +  intptr_t token_pos() const { return token_pos_; }
 | 
| +  virtual bool MayThrow() const { return false; }
 | 
| +  virtual bool CanDeoptimize() const { return false; }
 | 
| +  virtual EffectSet Effects() const { return EffectSet::All(); }
 | 
| +  virtual intptr_t ArgumentCount() const { return 0; }
 | 
| +  virtual Instruction* Canonicalize(FlowGraph* flow_graph);
 | 
| +
 | 
| + private:
 | 
| +  const intptr_t token_pos_;
 | 
| +
 | 
| +  DISALLOW_COPY_AND_ASSIGN(DebugStepCheckInstr);
 | 
| +};
 | 
| +
 | 
| +
 | 
|  enum StoreBarrierType {
 | 
|    kNoStoreBarrier,
 | 
|    kEmitStoreBarrier
 | 
| @@ -3697,6 +3721,36 @@
 | 
|  };
 | 
|  
 | 
|  
 | 
| +class StringToCharCodeInstr : public TemplateDefinition<1> {
 | 
| + public:
 | 
| +  StringToCharCodeInstr(Value* str, intptr_t cid) : cid_(cid) {
 | 
| +    ASSERT(str != NULL);
 | 
| +    SetInputAt(0, str);
 | 
| +  }
 | 
| +
 | 
| +  DECLARE_INSTRUCTION(StringToCharCode)
 | 
| +  virtual CompileType ComputeType() const;
 | 
| +
 | 
| +  Value* str() const { return inputs_[0]; }
 | 
| +
 | 
| +  virtual bool CanDeoptimize() const { return false; }
 | 
| +
 | 
| +  virtual bool AllowsCSE() const { return true; }
 | 
| +  virtual EffectSet Effects() const { return EffectSet::None(); }
 | 
| +  virtual EffectSet Dependencies() const { return EffectSet::None(); }
 | 
| +  virtual bool AttributesEqual(Instruction* other) const {
 | 
| +    return other->AsStringToCharCode()->cid_ == cid_;
 | 
| +  }
 | 
| +
 | 
| +  virtual bool MayThrow() const { return false; }
 | 
| +
 | 
| + private:
 | 
| +  const intptr_t cid_;
 | 
| +
 | 
| +  DISALLOW_COPY_AND_ASSIGN(StringToCharCodeInstr);
 | 
| +};
 | 
| +
 | 
| +
 | 
|  class StringInterpolateInstr : public TemplateDefinition<1> {
 | 
|   public:
 | 
|    StringInterpolateInstr(Value* value, intptr_t token_pos)
 | 
| 
 |