Author: Ronan Lamy <ronan.l...@gmail.com> Branch: union-side-effects Changeset: r86899:5dc79f574fb9 Date: 2016-09-06 02:20 +0100 http://bitbucket.org/pypy/pypy/changeset/5dc79f574fb9/
Log: Revert change to run_formatter() and fix unicode vs str issues. diff --git a/pypy/objspace/std/newformat.py b/pypy/objspace/std/newformat.py --- a/pypy/objspace/std/newformat.py +++ b/pypy/objspace/std/newformat.py @@ -564,7 +564,7 @@ return space.wrap(self._pad(string)) def _get_locale(self, tp): - if tp == "n": + if tp == _lit("n"): dec, thousands, grouping = rlocale.numeric_formatting() elif self._thousands_sep: dec = "." @@ -608,10 +608,10 @@ spec.sign = "\0" spec.n_sign = 0 sign = self._sign - if sign == "+": + if sign == _lit("+"): spec.n_sign = 1 spec.sign = "-" if sign_char == "-" else "+" - elif sign == " ": + elif sign == _lit(" "): spec.n_sign = 1 spec.sign = "-" if sign_char == "-" else " " elif sign_char == "-": @@ -619,7 +619,7 @@ spec.sign = "-" extra_length = (spec.n_sign + spec.n_prefix + spec.n_decimal + spec.n_remainder) # Not padding or digits - if self._fill_char == "0" and self._align == "=": + if self._fill_char ==_lit( "0") and self._align == _lit("="): spec.n_min_width = self._width - extra_length if self._loc_thousands: self._group_digits(spec, digits[to_number:]) @@ -629,14 +629,14 @@ n_padding = self._width - (extra_length + n_grouped_digits) if n_padding > 0: align = self._align - if align == "<": + if align == _lit("<"): spec.n_rpadding = n_padding - elif align == ">": + elif align == _lit(">"): spec.n_lpadding = n_padding - elif align == "^": + elif align == _lit("^"): spec.n_lpadding = n_padding // 2 spec.n_rpadding = n_padding - spec.n_lpadding - elif align == "=": + elif align == _lit("="): spec.n_spadding = n_padding else: raise AssertionError("shouldn't reach") @@ -653,7 +653,7 @@ for i in range(d_state - 1, d_state - n_chars - 1, -1): buf.append(digits[i]) for i in range(n_zeros): - buf.append("0") + buf.append(_lit("0")) def _group_digits(self, spec, digits): buf = [] @@ -702,7 +702,7 @@ for c in s: index = ord(c) if ord("a") <= index <= ord("z"): - c = chr(index - 32) + c = _lit(chr(index - 32)) buf.append(c) return self.empty.join(buf) @@ -791,7 +791,7 @@ result = self._long_to_base(base, space.bigint_w(w_num)) n_prefix = skip_leading if self._alternate else 0 to_prefix = 0 - if result[0] == "-": + if result[0] == _lit("-"): sign_char = "-" skip_leading += 1 to_prefix += 1 @@ -874,21 +874,21 @@ return space.call_function(space.w_unicode, w_num) return self.space.str(w_num) tp = self._type - if (tp == "b" or - tp == "c" or - tp == "d" or - tp == "o" or - tp == "x" or - tp == "X" or - tp == "n"): + if (tp == _lit("b") or + tp == _lit("c") or + tp == _lit("d") or + tp == _lit("o") or + tp == _lit("x") or + tp == _lit("X") or + tp == _lit("n")): return self._format_int_or_long(w_num, kind) - elif (tp == "e" or - tp == "E" or - tp == "f" or - tp == "F" or - tp == "g" or - tp == "G" or - tp == "%"): + elif (tp == _lit("e") or + tp == _lit("E") or + tp == _lit("f") or + tp == _lit("F") or + tp == _lit("g") or + tp == _lit("G") or + tp == _lit("%")): w_float = space.float(w_num) return self._format_float(w_float) else: @@ -932,7 +932,7 @@ add_pct = False if self._precision == -1: self._precision = default_precision - result, special = rfloat.double_to_string(value, tp, + result, special = rfloat.double_to_string(value, str(tp)[0], self._precision, flags) if add_pct: result += "%" @@ -963,15 +963,15 @@ return space.call_function(space.w_unicode, w_float) return space.str(w_float) tp = self._type - if (tp == "\0" or - tp == "e" or - tp == "E" or - tp == "f" or - tp == "F" or - tp == "g" or - tp == "G" or - tp == "n" or - tp == "%"): + if (tp == _lit("\0") or + tp == _lit("e") or + tp == _lit("E") or + tp == _lit("f") or + tp == _lit("F") or + tp == _lit("g") or + tp == _lit("G") or + tp == _lit("n") or + tp == _lit("%")): return self._format_float(w_float) self._unknown_presentation("float") @@ -980,12 +980,12 @@ tp = self._type self._get_locale(tp) default_precision = 6 - if self._align == "=": + if self._align == _lit("="): # '=' alignment is invalid raise oefmt(space.w_ValueError, "'=' alignment flag is not allowed in complex " "format specifier") - if self._fill_char == "0": + if self._fill_char == _lit("0"): # zero padding is invalid raise oefmt(space.w_ValueError, "Zero padding is not allowed in complex format " @@ -1018,8 +1018,8 @@ #might want to switch to double_to_string from formatd #in CPython it's named 're' - clashes with re module - re_num = formatd(w_complex.realval, tp, self._precision) - im_num = formatd(w_complex.imagval, tp, self._precision) + re_num = formatd(w_complex.realval, str(tp)[0], self._precision) + im_num = formatd(w_complex.imagval, str(tp)[0], self._precision) n_re_digits = len(re_num) n_im_digits = len(im_num) @@ -1042,8 +1042,8 @@ tmp_fill_char = self._fill_char tmp_align = self._align tmp_width = self._width - self._fill_char = "\0" - self._align = "<" + self._fill_char = _lit("\0") + self._align = _lit("<") self._width = -1 #determine if we have remainder, might include dec or exponent or both @@ -1125,14 +1125,14 @@ if self._parse_spec(_lit("\0"), _lit(">")): return space.str(w_complex) tp = self._type - if (tp == "\0" or - tp == "e" or - tp == "E" or - tp == "f" or - tp == "F" or - tp == "g" or - tp == "G" or - tp == "n"): + if (tp == _lit("\0") or + tp == _lit("e") or + tp == _lit("E") or + tp == _lit("f") or + tp == _lit("F") or + tp == _lit("g") or + tp == _lit("G") or + tp == _lit("n")): return self._format_complex(w_complex) self._unknown_presentation("complex") return Formatter @@ -1143,5 +1143,9 @@ @specialize.arg(2) def run_formatter(space, w_format_spec, meth, *args): - formatter = str_formatter(space, space.str_w(w_format_spec)) - return getattr(formatter, meth)(*args) + if space.isinstance_w(w_format_spec, space.w_unicode): + formatter = unicode_formatter(space, space.unicode_w(w_format_spec)) + return getattr(formatter, meth)(*args) + else: + formatter = str_formatter(space, space.str_w(w_format_spec)) + return getattr(formatter, meth)(*args) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit