Author: Maciej Fijalkowski <fij...@gmail.com> Branch: resume-refactor Changeset: r68993:9f414dbe4f5c Date: 2014-01-29 15:32 +0100 http://bitbucket.org/pypy/pypy/changeset/9f414dbe4f5c/
Log: finish strings enough for test_loop_unroll to pass diff --git a/rpython/jit/metainterp/optimizeopt/vstring.py b/rpython/jit/metainterp/optimizeopt/vstring.py --- a/rpython/jit/metainterp/optimizeopt/vstring.py +++ b/rpython/jit/metainterp/optimizeopt/vstring.py @@ -443,7 +443,8 @@ index = indexbox.getint() varg = self.getvalue(op.getarg(2)) value.setitem(index, varg) - self.optimizer.resumebuilder.strsetitem(value, varg) + self.optimizer.resumebuilder.strsetitem(value, ConstInt(index), + varg) return value.ensure_nonnull() self.emit_operation(op) diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py --- a/rpython/jit/metainterp/resoperation.py +++ b/rpython/jit/metainterp/resoperation.py @@ -482,7 +482,7 @@ 'RESUME_NEWUNICODE/1', 'RESUME_CONCATSTR/2', 'RESUME_CONCATUNICODE/2', - 'RESUME_STRSETITEM/2', + 'RESUME_STRSETITEM/3', 'RESUME_SETFIELD_GC/2d', 'RESUME_SET_PC/1', 'RESUME_CLEAR/2', diff --git a/rpython/jit/resume/backend.py b/rpython/jit/resume/backend.py --- a/rpython/jit/resume/backend.py +++ b/rpython/jit/resume/backend.py @@ -74,8 +74,8 @@ def resume_setfield_gc(self, arg0, arg1, descr): self.deps[arg0].fields[descr] = arg1 - def resume_strsetitem(self, arg0, arg1): - xxx + def resume_strsetitem(self, arg0, index, arg1): + self.deps[arg0].l[index] = arg1 def resume_set_pc(self, pc): pass @@ -116,7 +116,8 @@ elif op.getopnum() == rop.RESUME_CONCATUNICODE: self.resume_concatunicode(op.result, op.getarg(0), op.getarg(1)) elif op.getopnum() == rop.RESUME_STRSETITEM: - self.resume_strsetitem(op.getarg(0), op.getarg(1)) + self.resume_strsetitem(op.getarg(0), op.getarg(1).getint(), + op.getarg(2)) elif not op.is_resume(): pos += 1 continue @@ -214,8 +215,13 @@ v_pos = len(self.virtuals) self.virtuals[op.result] = v_pos leftpos = self.get_box_pos(op.getarg(0)) - rightpos = self.get_box_pos(op.getarg(0)) + rightpos = self.get_box_pos(op.getarg(1)) self.builder.resume_concatunicode(v_pos, leftpos, rightpos) + elif op.getopnum() == rop.RESUME_STRSETITEM: + v_pos = self.virtuals[op.getarg(0)] + index = op.getarg(1).getint() + valpos = self.get_box_pos(op.getarg(2)) + self.builder.resume_strsetitem(v_pos, index, valpos) else: raise Exception("strange operation") diff --git a/rpython/jit/resume/optimizer.py b/rpython/jit/resume/optimizer.py --- a/rpython/jit/resume/optimizer.py +++ b/rpython/jit/resume/optimizer.py @@ -77,10 +77,10 @@ op = ResOperation(mode.RESUME_CONCAT, [leftbox, rightbox], newbox) self.opt._newoperations.append(op) - def strsetitem(self, vstring, varg): + def strsetitem(self, vstring, indexbox, varg): argbox = varg.get_resume_box() op = ResOperation(rop.RESUME_STRSETITEM, [vstring.get_resume_box(), - argbox], None) + indexbox, argbox], None) self.opt._newoperations.append(op) def setfield(self, box, fieldbox, descr): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit