diff --git a/test/bytecode_3.7_run/10_extendedargifelse.pyc b/test/bytecode_3.7_run/10_extendedargifelse.pyc new file mode 100644 index 00000000..5ec444e9 Binary files /dev/null and b/test/bytecode_3.7_run/10_extendedargifelse.pyc differ diff --git a/test/simple_source/bug37/10_extendedargifelse.py b/test/simple_source/bug37/10_extendedargifelse.py new file mode 100644 index 00000000..15d5adc1 --- /dev/null +++ b/test/simple_source/bug37/10_extendedargifelse.py @@ -0,0 +1,264 @@ +aa = 0 +ab = 0 +ac = 0 +ad = 0 +ae = 0 +af = 0 +ag = 0 +ah = 0 +ai = 0 +aj = 0 +ak = 0 +al = 0 +am = 0 +an = 0 +ao = 0 +ap = 0 +aq = 0 +ar = 0 +at = 0 +au = 0 +av = 0 +aw = 0 +ax = 0 +ay = 0 +az = 0 +ba = 0 +bb = 0 +bc = 0 +bd = 0 +be = 0 +bf = 0 +bg = 0 +bh = 0 +bi = 0 +bj = 0 +bk = 0 +bl = 0 +bm = 0 +bn = 0 +bo = 0 +bp = 0 +bq = 0 +br = 0 +bs = 0 +bt = 0 +bu = 0 +bv = 0 +bw = 0 +bx = 0 +by = 0 +bz = 0 +ca = 0 +cb = 0 +cc = 0 +cd = 0 +ce = 0 +cf = 0 +cg = 0 +ch = 0 +ci = 0 +cj = 0 +ck = 0 +cl = 0 +cm = 0 +cn = 0 +co = 0 +cp = 0 +cq = 0 +cr = 0 +cs = 0 +ct = 0 +cu = 0 +cv = 0 +cw = 0 +cx = 0 +cy = 0 +cz = 0 +da = 0 +db = 0 +dc = 0 +dd = 0 +de = 0 +df = 0 +dg = 0 +dh = 0 +di = 0 +dj = 0 +dk = 0 +dl = 0 +dm = 0 +dn = 0 +do = 0 +dp = 0 +dq = 0 +dr = 0 +ds = 0 +dt = 0 +du = 0 +dv = 0 +dw = 0 +dx = 0 +dy = 0 +dz = 0 +ea = 0 +eb = 0 +ec = 0 +ed = 0 +ee = 0 +ef = 0 +eg = 0 +eh = 0 +ei = 0 +ej = 0 +ek = 0 +el = 0 +em = 0 +en = 0 +eo = 0 +ep = 0 +eq = 0 +er = 0 +es = 0 +et = 0 +eu = 0 +ev = 0 +ew = 0 +ex = 0 +ey = 0 +ez = 0 +fa = 0 +fb = 0 +fc = 0 +fd = 0 +fe = 0 +ff = 0 +fg = 0 +fh = 0 +fi = 0 +fj = 0 +fk = 0 +fl = 0 +fm = 0 +fn = 0 +fo = 0 +fp = 0 +fq = 0 +fr = 0 +fs = 0 +ft = 0 +fu = 0 +fv = 0 +fw = 0 +fx = 0 +fy = 0 +fz = 0 +ga = 0 +gb = 0 +gc = 0 +gd = 0 +ge = 0 +gf = 0 +gg = 0 +gh = 0 +gi = 0 +gj = 0 +gk = 0 +gl = 0 +gm = 0 +gn = 0 +go = 0 +gp = 0 +gq = 0 +gr = 0 +gs = 0 +gt = 0 +gu = 0 +gv = 0 +gw = 0 +gx = 0 +gy = 0 +gz = 0 +ha = 0 +hb = 0 +hc = 0 +hd = 0 +he = 0 +hf = 0 +hg = 0 +hh = 0 +hi = 0 +hj = 0 +hk = 0 +hl = 0 +hm = 0 +hn = 0 +ho = 0 +hp = 0 +hq = 0 +hr = 0 +hs = 0 +ht = 0 +hu = 0 +hv = 0 +hw = 0 +hx = 0 +hy = 0 +hz = 0 +ia = 0 +ib = 0 +ic = 0 +id = 0 +ie = 0 +ig = 0 +ih = 0 +ii = 0 +ij = 0 +ik = 0 +il = 0 +im = 0 +io = 0 +ip = 0 +iq = 0 +ir = 0 +it = 0 +iu = 0 +iv = 0 +iw = 0 +ix = 0 +iy = 0 +iz = 0 +ja = 0 +jb = 0 +jc = 0 +jd = 0 +je = 0 +jf = 0 +jg = 0 +jh = 0 +ji = 0 +jj = 0 +jk = 0 +jl = 0 +jm = 0 +jn = 0 +jo = 0 +jp = 0 +jq = 0 +jr = 0 +js = 0 +jt = 0 +ju = 0 +jv = 0 +jw = 0 +jx = 0 +jy = 0 +jz = 0 +ka = 0 +kb = 0 +kc = 0 +var = True +if var: + aa = 1 +else: + aa = 2 \ No newline at end of file diff --git a/uncompyle6/parsers/reducecheck/ifelsestmt.py b/uncompyle6/parsers/reducecheck/ifelsestmt.py index aa73e4eb..e0921b09 100644 --- a/uncompyle6/parsers/reducecheck/ifelsestmt.py +++ b/uncompyle6/parsers/reducecheck/ifelsestmt.py @@ -158,15 +158,13 @@ def ifelsestmt(self, lhs, n, rule, tree, tokens, first, last): # just the last one. if len(tree) == 5: end_come_froms = tree[-1] - offset = tokens[first].offset - offset = int(tokens[first].offset.split('_')[0]) if isinstance(offset, str) else offset if end_come_froms.kind != "else_suite" and self.version >= (3, 0): if end_come_froms == "opt_come_from_except" and len(end_come_froms) > 0: end_come_froms = end_come_froms[0] if not isinstance(end_come_froms, Token): if len(end_come_froms): - return offset > end_come_froms[-1].attr - elif offset > end_come_froms.attr: + return tokens[first].off2int() > end_come_froms[-1].attr + elif tokens[first].off2int() > end_come_froms.attr: return True # FIXME: There is weirdness in the grammar we need to work around. @@ -175,7 +173,7 @@ def ifelsestmt(self, lhs, n, rule, tree, tokens, first, last): last_token = tree[-1] else: last_token = tokens[last] - if last_token == "COME_FROM" and offset > last_token.attr: + if last_token == "COME_FROM" and tokens[first].off2int() > last_token.attr: if self.version < (3, 0) and self.insts[self.offset2inst_index[last_token.attr]].opname != "SETUP_LOOP": return True