]> granicus.if.org Git - python/commitdiff
fix argcount generation for arg lists containing tuple unpacks
authorJeremy Hylton <jeremy@alum.mit.edu>
Wed, 16 Feb 2000 00:50:29 +0000 (00:50 +0000)
committerJeremy Hylton <jeremy@alum.mit.edu>
Wed, 16 Feb 2000 00:50:29 +0000 (00:50 +0000)
this is sort of a hack

Lib/compiler/pyassem.py
Tools/compiler/compiler/pyassem.py

index 2200dec13abcabf204c6b399ecc0708a445a343c..5ae7294a2dad1868a91bf6c470ee43b7673668d9 100644 (file)
@@ -53,7 +53,7 @@ class PyAssembler:
         # XXX why is the default value for flags 3?
        self.insts = []
         # used by makeCodeObject
-        self.argcount = len(args)
+        self._getArgCount(args)
         self.code = ''
         self.consts = [docstring]
         self.filename = filename
@@ -67,6 +67,16 @@ class PyAssembler:
         self.last_addr = 0
         self.lnotab = ''
 
+    def _getArgCount(self, args):
+        if args and args[0][0] == '.':
+            for i in range(len(args)):
+                if args[i][0] == '.':
+                    num = i
+            self.argcount = num + 1
+        else:
+            self.argcount = len(args)
+                
+
     def __repr__(self):
         return "<bytecode: %d instrs>" % len(self.insts)
 
@@ -231,7 +241,8 @@ class PyAssembler:
         return arg
 
     nameOps = ('STORE_NAME', 'IMPORT_NAME', 'IMPORT_FROM',
-               'STORE_ATTR', 'LOAD_ATTR', 'LOAD_NAME', 'DELETE_NAME')
+               'STORE_ATTR', 'LOAD_ATTR', 'LOAD_NAME', 'DELETE_NAME',
+               'DELETE_ATTR')
     localOps = ('LOAD_FAST', 'STORE_FAST', 'DELETE_FAST')
     globalOps = ('LOAD_GLOBAL', 'STORE_GLOBAL', 'DELETE_GLOBAL')
 
index 2200dec13abcabf204c6b399ecc0708a445a343c..5ae7294a2dad1868a91bf6c470ee43b7673668d9 100644 (file)
@@ -53,7 +53,7 @@ class PyAssembler:
         # XXX why is the default value for flags 3?
        self.insts = []
         # used by makeCodeObject
-        self.argcount = len(args)
+        self._getArgCount(args)
         self.code = ''
         self.consts = [docstring]
         self.filename = filename
@@ -67,6 +67,16 @@ class PyAssembler:
         self.last_addr = 0
         self.lnotab = ''
 
+    def _getArgCount(self, args):
+        if args and args[0][0] == '.':
+            for i in range(len(args)):
+                if args[i][0] == '.':
+                    num = i
+            self.argcount = num + 1
+        else:
+            self.argcount = len(args)
+                
+
     def __repr__(self):
         return "<bytecode: %d instrs>" % len(self.insts)
 
@@ -231,7 +241,8 @@ class PyAssembler:
         return arg
 
     nameOps = ('STORE_NAME', 'IMPORT_NAME', 'IMPORT_FROM',
-               'STORE_ATTR', 'LOAD_ATTR', 'LOAD_NAME', 'DELETE_NAME')
+               'STORE_ATTR', 'LOAD_ATTR', 'LOAD_NAME', 'DELETE_NAME',
+               'DELETE_ATTR')
     localOps = ('LOAD_FAST', 'STORE_FAST', 'DELETE_FAST')
     globalOps = ('LOAD_GLOBAL', 'STORE_GLOBAL', 'DELETE_GLOBAL')