Fix SF bug #116263: support for from .. import *
transformer.py: return '*', None from com_import_as_name
pycodegen.py: special case for name == '*'
pyassem.py: fix stack counting for IMPORT_ opcodes
diff --git a/Lib/compiler/pyassem.py b/Lib/compiler/pyassem.py
index 74ea562..3411273 100644
--- a/Lib/compiler/pyassem.py
+++ b/Lib/compiler/pyassem.py
@@ -515,12 +515,14 @@
         'BUILD_MAP': 1,
         'COMPARE_OP': -1,
         'STORE_FAST': -1,
+        'IMPORT_STAR': -1,
+        'IMPORT_NAME': 0,
+        'IMPORT_FROM': 1,
         }
     # use pattern match
     patterns = [
         ('BINARY_', -1),
         ('LOAD_', 1),
-        ('IMPORT_', 1),
         ]
     
     # special cases:
diff --git a/Lib/compiler/pycodegen.py b/Lib/compiler/pycodegen.py
index 2a1b308..2888729 100644
--- a/Lib/compiler/pycodegen.py
+++ b/Lib/compiler/pycodegen.py
@@ -439,9 +439,14 @@
         for name, alias in node.names:
             if name == '*':
                 self.namespace = 0
-            self.emit('IMPORT_FROM', name)
-            self._resolveDots(name)
-            self.storeName(alias or name)
+                self.emit('IMPORT_STAR')
+                # There can only be one name w/ from ... import *
+                assert len(node.names) == 1
+                return
+            else:
+                self.emit('IMPORT_FROM', name)
+                self._resolveDots(name)
+                self.storeName(alias or name)
         self.emit('POP_TOP')
 
     def _resolveDots(self, name):
diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py
index 91d4b5b..c8a8518 100644
--- a/Lib/compiler/transformer.py
+++ b/Lib/compiler/transformer.py
@@ -825,6 +825,8 @@
         return dot, node[3][1]
 
     def com_import_as_name(self, node):
+        if node == '*':
+            return '*', None
         if node[0] == token.NAME:
             return node[1], None
         assert len(node) == 4