[pypy-svn] r10028 - pypy/dist/pypy/translator
arigo at codespeak.net
arigo at codespeak.net
Mon Mar 21 22:37:59 CET 2005
Author: arigo
Date: Mon Mar 21 22:37:59 2005
New Revision: 10028
Modified:
pypy/dist/pypy/translator/geninterplevel.py
Log:
Generate sources with a slightly different layout: a single huge
initmodule() function which defines all the translated functions and
"globals" as nested-scope-visible locals.
Modified: pypy/dist/pypy/translator/geninterplevel.py
==============================================================================
--- pypy/dist/pypy/translator/geninterplevel.py (original)
+++ pypy/dist/pypy/translator/geninterplevel.py Mon Mar 21 22:37:59 2005
@@ -54,7 +54,7 @@
' dic = space.newdict([(%s, space.w_builtins)])\n'
' space.exec_("import types", dic, dic)\n'
' return space.eval(expr, dic, dic)' % bltinsname)
- self.initcode.append1('m.%s = eval_helper(%r)' % (name, expr))
+ self.initcode.append1('%s = eval_helper(%r)' % (name, expr))
return name
class GenRpy:
@@ -69,14 +69,11 @@
def late_OperationError():
self.initcode.append1(
- 'from pypy.interpreter.error import OperationError\n'
- 'm.OperationError = OperationError')
- return 'OperationError'
+ 'from pypy.interpreter.error import OperationError as gOperationError')
+ return 'gOperationError'
def late_Arguments():
- self.initcode.append1(
- 'from pypy.interpreter.argument import Arguments\n'
- 'm.Arguments = Arguments')
- return 'Arguments'
+ self.initcode.append1('from pypy.interpreter import gateway')
+ return 'gateway.Arguments'
self.rpynames = {Constant(None).key: 'space.w_None',
Constant(False).key: 'space.w_False',
@@ -150,16 +147,16 @@
if op.opname == "call_args":
v = op.args[0]
exv = self.expr(v, localscope)
- self.nameof(Arguments) # trigger init
fmt = (
- "_args = Arguments.fromshape(space, %(shape)s, [%(data_w)s])\n"
+ "_args = %(Arg)s.fromshape(space, %(shape)s, [%(data_w)s])\n"
"%(res)s = space.call_args(%(func)s, _args)")
assert isinstance(op.args[1], Constant)
shape = op.args[1].value
return fmt % {"res": self.expr(op.result, localscope),
"func": exv,
"shape": repr(shape),
- "data_w": self.arglist(op.args[2:], localscope) }
+ "data_w": self.arglist(op.args[2:], localscope),
+ 'Arg': self.nameof(Arguments) }
if op.opname in self.has_listarg:
fmt = "%s = %s([%s])"
else:
@@ -203,7 +200,7 @@
'from pypy.objspace.flow.framestate import SpecTag')
lbname = self.uniquename("glabel_%d" % blocknum)
self._labeltable[blocknum] = lbname
- self.initcode.append1('m.%s = SpecTag()' % lbname)
+ self.initcode.append1('%s = SpecTag()' % lbname)
return lbname
else:
return repr(blocknum)
@@ -285,11 +282,11 @@
if type(value) is not object:
# try to just wrap it?
name = self.uniquename('g_%sinst_%r' % (type(value).__name__, value))
- self.initcode.append1('m.%s = space.wrap(%r)' % (name, value))
+ self.initcode.append1('%s = space.wrap(%r)' % (name, value))
return name
name = self.uniquename('g_object')
self.initcode.append('_tup = space.newtuple([])\n'
- 'm.%s = space.call(space.w_object, _tup)'
+ '%s = space.call(space.w_object, _tup)'
% name)
return name
@@ -301,7 +298,7 @@
"%r is not a builtin module (probably :)"%value
name = self.uniquename('mod_%s' % value.__name__)
self.initcode.append1('import %s as _tmp' % value.__name__)
- self.initcode.append1('m.%s = space.wrap(_tmp)' % (name))
+ self.initcode.append1('%s = space.wrap(_tmp)' % (name))
return name
@@ -313,7 +310,7 @@
# the prefixbefore the initial '_' for easy postprocessing
name = 'gi_minus_%d' % abs(value)
name = self.uniquename(name)
- self.initcode.append1('m.%s = space.newint(%d)' % (name, value))
+ self.initcode.append1('%s = space.newint(%d)' % (name, value))
return name
def nameof_long(self, value):
@@ -332,7 +329,7 @@
# the prefix before the initial '_'
name = 'glong_minus_%d' % abs(value)
name = self.uniquename(name)
- self.initcode.append1('m.%s = space.wrap(%s) # XXX implement long!' % (name, s))
+ self.initcode.append1('%s = space.wrap(%s) # XXX implement long!' % (name, s))
return name
def nameof_float(self, value):
@@ -340,7 +337,7 @@
name = (name.replace('-', 'minus')
.replace('.', 'dot'))
name = self.uniquename(name)
- self.initcode.append1('m.%s = space.newfloat(%r)' % (name, value))
+ self.initcode.append1('%s = space.newfloat(%r)' % (name, value))
return name
def nameof_str(self, value):
@@ -353,9 +350,9 @@
if not namestr:
namestr = "_emptystr_"
name = self.uniquename('gs_' + namestr[:32])
- # self.initcode.append1('m.%s = space.newstring(%r)' % (name, value))
+ # self.initcode.append1('%s = space.newstring(%r)' % (name, value))
# ick! very unhandy
- self.initcode.append1('m.%s = space.wrap(%r)' % (name, value))
+ self.initcode.append1('%s = space.wrap(%r)' % (name, value))
return name
def skipped_function(self, func):
@@ -398,7 +395,7 @@
namehint + func.__name__))
f_name = 'f_' + name[6:]
self.initcode.append1('from pypy.interpreter import gateway')
- self.initcode.append1('m.%s = space.wrap(gateway.interp2app(%s, unwrap_spec=[gateway.ObjSpace, gateway.Arguments]))' % (name, f_name))
+ self.initcode.append1('%s = space.wrap(gateway.interp2app(%s, unwrap_spec=[gateway.ObjSpace, gateway.Arguments]))' % (name, f_name))
self.pendingfunctions.append(func)
return name
@@ -407,7 +404,7 @@
func = sm.__get__(42.5)
name = self.uniquename('gsm_' + func.__name__)
functionname = self.nameof(func)
- self.initcode.append1('m.%s = space.wrap(%s)' % (name, functionname))
+ self.initcode.append1('%s = space.wrap(%s)' % (name, functionname))
return name
def nameof_instancemethod(self, meth):
@@ -462,7 +459,7 @@
print >> sys.stderr, "Problem while generating %s of %r" % (
name, instance)
raise
- self.initcode.append1("m.%s = space.call_method(%s, '__new__', %s)" % (
+ self.initcode.append1("%s = space.call_method(%s, '__new__', %s)" % (
name, cls, cls))
self.later(initinstance())
return name
@@ -499,7 +496,7 @@
else:
raise Exception, '%r not found in any built-in module' % (func,)
if modname == '__builtin__':
- #self.initcode.append1('m.%s = space.getattr(space.w_builtin, %s)'% (
+ #self.initcode.append1('%s = space.getattr(space.w_builtin, %s)'% (
# name, self.nameof(func.__name__)))
# be lazy
return "(space.builtin.get(space.str_w(%s)))" % self.nameof(func.__name__)
@@ -510,12 +507,12 @@
print ("WARNING: accessing builtin modules different from sys or __builtin__"
" is likely producing non-sense: %s %s" % (module.__name__, func.__name__))
name = self.uniquename('gbltin_' + func.__name__)
- self.initcode.append1('m.%s = space.getattr(%s, %s)' % (
+ self.initcode.append1('%s = space.getattr(%s, %s)' % (
name, self.nameof(module), self.nameof(func.__name__)))
else:
# builtin (bound) method
name = self.uniquename('gbltinmethod_' + func.__name__)
- self.initcode.append1('m.%s = space.getattr(%s, %s)' % (
+ self.initcode.append1('%s = space.getattr(%s, %s)' % (
name, self.nameof(func.__self__), self.nameof(func.__name__)))
return name
@@ -582,7 +579,7 @@
self.nameof("__doc__"),))
self.initcode.append1('_bases = space.newtuple([%(bases)s])\n'
'_args = space.newtuple([%(name)s, _bases, _dic])\n'
- 'm.%(klass)s = space.call(%(meta)s, _args)'
+ '%(klass)s = space.call(%(meta)s, _args)'
% {"bases": baseargs,
"klass": name,
"name" : self.nameof(cls.__name__),
@@ -654,7 +651,7 @@
name = self.uniquename('g%dtuple' % len(tup))
args = [self.nameof(x) for x in tup]
args = ', '.join(args)
- self.initcode.append1('m.%s = space.newtuple([%s])' % (name, args))
+ self.initcode.append1('%s = space.newtuple([%s])' % (name, args))
return name
def nameof_list(self, lis):
@@ -664,8 +661,8 @@
item = self.nameof(lis[i])
yield 'space.setitem(%s, %s, %s);' % (
name, self.nameof(i), item)
- self.initcode.append1('m.%s = space.newlist([space.w_None])' % (name,))
- self.initcode.append1('m.%s = space.mul(%s, %s)' % (name, name, self.nameof(len(lis))))
+ self.initcode.append1('%s = space.newlist([space.w_None])' % (name,))
+ self.initcode.append1('%s = space.mul(%s, %s)' % (name, name, self.nameof(len(lis))))
self.later(initlist())
return name
@@ -678,7 +675,7 @@
for k in dic:
yield ('space.setitem(%s, %s, %s)'%(
name, self.nameof(k), self.nameof(dic[k])))
- self.initcode.append1('m.%s = space.newdict([])' % (name,))
+ self.initcode.append1('%s = space.newdict([])' % (name,))
self.later(initdict())
return name
@@ -689,7 +686,7 @@
md.__objclass__.__name__, md.__name__))
cls = self.nameof(md.__objclass__)
# do I need to take the dict and then getitem???
- self.initcode.append1('m.%s = space.getattr(%s, %s)' %
+ self.initcode.append1('%s = space.getattr(%s, %s)' %
(name, cls, self.nameof(md.__name__)))
return name
nameof_getset_descriptor = nameof_member_descriptor
@@ -775,7 +772,11 @@
# make sure it is not rendered again
key = Constant(doc).key
self.rpynames[key] = "__doc__"
- self.initcode.append1("m.__doc__ = space.wrap(m.__doc__)")
+ self.initcode.append1("__doc__ = space.wrap(globals()['__doc__'])")
+
+ # header """def initmodule(space):"""
+ print >> f, self.RPY_INIT_HEADER % info
+
# function implementations
while self.pendingfunctions or self.latercode:
if self.pendingfunctions:
@@ -794,10 +795,9 @@
# set the final splitter
print >> f, "##SECTION##"
# footer, init code
- print >> f, self.RPY_INIT_HEADER % info
for codelines in self.initcode:
# keep docstrings unindented
- indent = " "
+ indent = " "
if type(codelines) is tuple:
codelines = codelines[0].split("\n", 1)
codelines[0] = indent + codelines[0]
@@ -807,7 +807,7 @@
for codeline in codelines:
print >> f, indent + codeline
- self.gen_trailer(info, " ")
+ self.gen_trailer(info, " ")
# do not close the file here!
def gen_trailer(self, info, indent):
@@ -905,20 +905,20 @@
# create function declaration
name = self.trans_funcname(func.__name__) # for <lambda>
argstr = ", ".join(['space'] + fast_args)
- fast_function_header = ('def %s(%s):'
+ fast_function_header = (' def %s(%s):'
% (name, argstr))
def install_func(f_name, name):
yield ''
- yield '%s = %s' % (f_name, name)
- import __builtin__
- dic = __builtin__.__dict__
- if dic.get(name):
- yield 'del %s # hiding a builtin!' % name
- else:
- self.initcode.append1('del m.%s' % (name,))
+ yield ' %s = %s' % (f_name, name)
+ #import __builtin__
+ #dic = __builtin__.__dict__
+ #if dic.get(name):
+ # yield 'del %s # hiding a builtin!' % name
+ #else:
+ # self.initcode.append1('del m.%s' % (name,))
- print >> f, 'def %s(space, __args__):' % (name,)
+ print >> f, ' def %s(space, __args__):' % (name,)
if docstr is not None:
print >> f, docstr
print >> f
@@ -1027,8 +1027,8 @@
# exceptional return block
exc_cls = self.expr(block.inputargs[0], localscope)
exc_val = self.expr(block.inputargs[1], localscope)
- self.nameof(OperationError) # trigger init
- yield "raise OperationError(%s, %s)" % (exc_cls, exc_val)
+ yield "raise %s(%s, %s)" % (self.nameof(OperationError),
+ exc_cls, exc_val)
else:
# regular return block
retval = self.expr(block.inputargs[0], localscope)
@@ -1049,8 +1049,7 @@
# we must catch the exception raised by the last operation,
# which goes to the last err%d_%d label written above.
# Since we only have OperationError, we need to select:
- self.nameof(OperationError) # trigger init
- yield "except OperationError, e:"
+ yield "except %s, e:" % (self.nameof(OperationError),)
q = "if"
for link in block.exits[1:]:
assert issubclass(link.exitcase, Exception)
@@ -1104,11 +1103,7 @@
RPY_INIT_HEADER = RPY_SEP + '''
def init%(modname)s(space):
- """NOT_RPYTHON"""
- class m: pass # fake module
- m.__dict__ = globals()
- # make sure that this function is run only once:
- m.init%(modname)s = lambda *ign:True
+ """NOT_RPYTHON"""
'''
RPY_INIT_FOOTER = '''
More information about the Pypy-commit
mailing list