Permalink
Browse files

Get rid of Python 1.x code gen!

  • Loading branch information...
Andy Chu
Andy Chu committed Mar 18, 2018
1 parent eff7f40 commit 47667e0ead4e7913bd51f49ce540d9e2f6fdbe5c
Showing with 16 additions and 39 deletions.
  1. +16 −39 opy/compiler2/pycodegen.py
View
@@ -1,6 +1,5 @@
import os
import struct
import sys
from . import ast, syntax
from .visitor import walk
@@ -17,13 +16,6 @@
from .pyassem import TupleArg
# XXX The version-specific code can go, since this code only works with 2.x.
# Do we have Python 1.x or Python 2.x?
try:
VERSION = sys.version_info[0]
except AttributeError:
VERSION = 1
callfunc_opcode_info = {
# (Have *args, Have **args) : opcode
(0,0) : "CALL_FUNCTION",
@@ -896,9 +888,8 @@ def visitImport(self, node):
self.set_lineno(node)
level = 0 if self.graph.checkFlag(CO_FUTURE_ABSIMPORT) else -1
for name, alias in node.names:
if VERSION > 1:
self.emit('LOAD_CONST', level)
self.emit('LOAD_CONST', None)
self.emit('LOAD_CONST', level)
self.emit('LOAD_CONST', None)
self.emit('IMPORT_NAME', name)
mod = name.split(".")[0]
if alias:
@@ -913,24 +904,20 @@ def visitFrom(self, node):
if level == 0 and not self.graph.checkFlag(CO_FUTURE_ABSIMPORT):
level = -1
fromlist = tuple(name for (name, alias) in node.names)
if VERSION > 1:
self.emit('LOAD_CONST', level)
self.emit('LOAD_CONST', fromlist)
self.emit('LOAD_CONST', level)
self.emit('LOAD_CONST', fromlist)
self.emit('IMPORT_NAME', node.modname)
for name, alias in node.names:
if VERSION > 1:
if name == '*':
self.namespace = 0
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)
if name == '*':
self.namespace = 0
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):
@@ -982,15 +969,8 @@ def _visitAssSequence(self, node, op='UNPACK_SEQUENCE'):
for child in node.nodes:
self.visit(child)
if VERSION > 1:
visitAssTuple = _visitAssSequence
visitAssList = _visitAssSequence
else:
def visitAssTuple(self, node):
self._visitAssSequence(node, 'UNPACK_TUPLE')
def visitAssList(self, node):
self._visitAssSequence(node, 'UNPACK_LIST')
visitAssTuple = _visitAssSequence
visitAssList = _visitAssSequence
# augmented assignment
@@ -1336,7 +1316,7 @@ def visitDiscard(self, node):
self.visit(node.expr)
self.emit('PRINT_EXPR')
class AbstractFunctionCode:
class AbstractFunctionCode(object):
optimized = 1
lambdaCount = 0
@@ -1386,10 +1366,7 @@ def generateArgUnpack(self, args):
self.unpackSequence(arg)
def unpackSequence(self, tup):
if VERSION > 1:
self.emit('UNPACK_SEQUENCE', len(tup))
else:
self.emit('UNPACK_TUPLE', len(tup))
self.emit('UNPACK_SEQUENCE', len(tup))
for elt in tup:
if isinstance(elt, tuple):
self.unpackSequence(elt)

0 comments on commit 47667e0

Please sign in to comment.