Author: Ronan Lamy <ronan.l...@gmail.com> Branch: desc-specialize Changeset: r82483:5089fd09c1d1 Date: 2016-02-24 15:47 +0100 http://bitbucket.org/pypy/pypy/changeset/5089fd09c1d1/
Log: Extract normalize_args() method out of funcdesc.specialize diff --git a/rpython/annotator/description.py b/rpython/annotator/description.py --- a/rpython/annotator/description.py +++ b/rpython/annotator/description.py @@ -275,19 +275,7 @@ getattr(self.bookkeeper, "position_key", None) is not None): _, block, i = self.bookkeeper.position_key op = block.operations[i] - enforceargs = getattr(self.pyobj, '_annenforceargs_', None) - signature = getattr(self.pyobj, '_signature_', None) - if enforceargs and signature: - raise Exception("%r: signature and enforceargs cannot both be " - "used" % (self,)) - if enforceargs: - if not callable(enforceargs): - from rpython.annotator.signature import Sig - enforceargs = Sig(*enforceargs) - self.pyobj._annenforceargs_ = enforceargs - enforceargs(self, inputcells) # can modify inputcells in-place - if signature: - enforce_signature_args(self, signature[0], inputcells) # mutates inputcells + self.normalize_args(inputcells) if getattr(self.pyobj, '_annspecialcase_', '').endswith("call_location"): return self.specializer(self, inputcells, op) else: @@ -319,6 +307,27 @@ result = unionof(result, s_previous_result) return result + def normalize_args(self, inputs_s): + """ + Canonicalize argument annotations into the exact parameter + annotations of a specific specialized graph. + + Note: this method has no return value but mutates its argument instead. + """ + enforceargs = getattr(self.pyobj, '_annenforceargs_', None) + signature = getattr(self.pyobj, '_signature_', None) + if enforceargs and signature: + raise Exception("%r: signature and enforceargs cannot both be " + "used" % (self,)) + if enforceargs: + if not callable(enforceargs): + from rpython.annotator.signature import Sig + enforceargs = Sig(*enforceargs) + self.pyobj._annenforceargs_ = enforceargs + enforceargs(self, inputs_s) # can modify inputs_s in-place + if signature: + enforce_signature_args(self, signature[0], inputs_s) # mutates inputs_s + def get_graph(self, args, op): inputs_s = self.parse_arguments(args) return self.specialize(inputs_s, op) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit