Author: Ronan Lamy <ronan.l...@gmail.com>
Branch: kill-flowobjspace
Changeset: r60552:eda004a832ff
Date: 2013-01-27 20:51 +0000
http://bitbucket.org/pypy/pypy/changeset/eda004a832ff/

Log:    make CallSpec.unpack() non-destructive

diff --git a/rpython/flowspace/argument.py b/rpython/flowspace/argument.py
--- a/rpython/flowspace/argument.py
+++ b/rpython/flowspace/argument.py
@@ -386,21 +386,26 @@
         self.space = space
         assert isinstance(args_w, list)
         self.arguments_w = args_w
-        self.keywords = keywords
-        self.keywords_w = keywords_w
+        self.keywords = keywords or []
+        self.keywords_w = keywords_w or []
         self.keyword_names_w = None
 
     def copy(self):
         return CallSpec(self.space, self.arguments_w,
                 self.keywords, self.keywords_w, self.w_stararg)
 
+    def unpack(self):
+        "Return a ([w1,w2...], {'kw':w3...}) pair."
+        if self.w_stararg is not None:
+            stargs_w = self.space.unpackiterable(self.w_stararg)
+            args_w = self.arguments_w + stargs_w
+        else:
+            args_w = self.arguments_w
+        kwds_w = dict(zip(self.keywords, self.keywords_w))
+        return args_w, kwds_w
+
     def combine_if_necessary(self):
-        if self.combine_has_happened:
-            return
-        if self.w_stararg is not None:
-            args_w = self.space.unpackiterable(self.w_stararg)
-            self.arguments_w = self.arguments_w + args_w
-        self.combine_has_happened = True
+        raise NotImplementedError
 
     def _rawshape(self, nextra=0):
         assert not self.combine_has_happened
diff --git a/rpython/flowspace/objspace.py b/rpython/flowspace/objspace.py
--- a/rpython/flowspace/objspace.py
+++ b/rpython/flowspace/objspace.py
@@ -417,7 +417,7 @@
             return sc(self, fn, args)
 
         try:
-            args_w, kwds_w = args.copy().unpack()
+            args_w, kwds_w = args.unpack()
         except UnwrapException:
             args_w, kwds_w = '?', '?'
         # NOTE: annrpython needs to know about the following two operations!
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to