[pypy-svn] r48903 - pypy/dist/pypy/translator/c
fijal at codespeak.net
fijal at codespeak.net
Wed Nov 21 15:35:32 CET 2007
Author: fijal
Date: Wed Nov 21 15:35:31 2007
New Revision: 48903
Modified:
pypy/dist/pypy/translator/c/genc.py
pypy/dist/pypy/translator/c/node.py
Log:
(fijal, antocuni) Simplify the C backend by accident (we were trying to understand what's going on)
Modified: pypy/dist/pypy/translator/c/genc.py
==============================================================================
--- pypy/dist/pypy/translator/c/genc.py (original)
+++ pypy/dist/pypy/translator/c/genc.py Wed Nov 21 15:35:31 2007
@@ -126,11 +126,12 @@
db = self.build_database()
pf = self.getentrypointptr()
pfname = db.get(pf)
-
+ extra_info = extra_information(db)
if self.modulename is None:
self.modulename = uniquemodulename('testing')
modulename = self.modulename
targetdir = udir.ensure(modulename, dir=1)
+
self.targetdir = targetdir
defines = defines.copy()
if self.config.translation.countmallocs:
@@ -149,7 +150,8 @@
defines = defines,
exports = self.exports,
symboltable = self.symboltable,
- libraries = self.libraries)
+ libraries = self.libraries,
+ extra_info = extra_info)
else:
if self.config.translation.instrument:
defines['INSTRUMENT'] = 1
@@ -159,7 +161,8 @@
cfile, extra, include_dirs, library_dirs = \
gen_source_standalone(db, modulename, targetdir,
entrypointname = pfname,
- defines = defines)
+ defines = defines,
+ extra_info = extra_info)
self.c_source_filename = py.path.local(cfile)
self.extrafiles = extra
self.include_dirs = include_dirs.keys()
@@ -388,15 +391,6 @@
# graph.optimize()
# self.funcnodes = graph.ordered_funcnodes()
- def write_extra_sources(self, sources):
- basename = 'additional_node.c'
- retval = []
- for source in sorted(sources.keys()):
- f = self.makefile(self.uniquecname(basename))
- for include in sources[source]:
- print >>f, "#include <%s>" % (include,)
- print >>f, str(source)
-
def uniquecname(self, name):
assert name.endswith('.c')
return self.namespace.uniquename(name[:-2]) + '.c'
@@ -633,24 +627,17 @@
include_dirs = {}
library_dirs = {}
for node in database.globalcontainers():
- if hasattr(node, 'includes'):
- for include in node.includes:
- includes[include] = True
- if hasattr(node, 'sources'):
- for source in node.sources:
- sources[source] = getattr(node, 'includes', [])
- if hasattr(node, 'include_dirs'):
- for include_dir in node.include_dirs:
- include_dirs[include_dir] = True
- if hasattr(node, 'library_dirs'):
- for library_dir in node.library_dirs:
- library_dirs[library_dir] = True
+ for attrname in ['includes', 'sources', 'include_dirs', 'library_dirs']:
+ if hasattr(node, attrname):
+ for elem in getattr(node, attrname):
+ locals()[attrname][elem] = True
includes = includes.keys()
includes.sort()
- return includes, sources, include_dirs, library_dirs
+ return {'includes':includes, 'sources':sources,
+ 'include_dirs':include_dirs, 'library_dirs':library_dirs}
def gen_source_standalone(database, modulename, targetdir,
- entrypointname, defines={}):
+ entrypointname, defines={}, extra_info={}):
assert database.standalone
if isinstance(targetdir, str):
targetdir = py.path.local(targetdir)
@@ -678,9 +665,10 @@
for line in database.gcpolicy.pre_gc_code():
print >> fi, line
- includes, sources, include_dirs, library_dirs = extra_information(database)
- for include in includes:
+ for include in extra_info.get('includes', []):
print >> fi, '#include <%s>' % (include,)
+ for source in extra_info.get('sources', []):
+ print >> f, source
fi.close()
preimplementationlines = list(
@@ -694,7 +682,6 @@
sg.set_strategy(targetdir)
database.prepare_inline_helpers()
sg.gen_readable_parts_of_source(f)
- sg.write_extra_sources(sources)
# 3) start-up code
print >> f
@@ -708,11 +695,12 @@
print >>fi, "#define INSTRUMENT_NCOUNTER %d" % n
fi.close()
- return filename, sg.getextrafiles(), include_dirs, library_dirs
+ return filename, sg.getextrafiles(), extra_info.get('include_dirs', None),\
+ extra_info.get('library_dirs', None)
def gen_source(database, modulename, targetdir, defines={}, exports={},
- symboltable=None, libraries=[]):
+ symboltable=None, libraries=[], extra_info={}):
assert not database.standalone
if isinstance(targetdir, str):
targetdir = py.path.local(targetdir)
@@ -738,9 +726,10 @@
for line in database.gcpolicy.pre_gc_code():
print >> fi, line
- includes, sources, include_dirs, library_dirs = extra_information(database)
- for include in includes:
+ for include in extra_info.get('includes', []):
print >> fi, '#include <%s>' % (include,)
+ for source in extra_info.get('sources', []):
+ print >> f, source
fi.close()
if database.translator is None or database.translator.rtyper is None:
@@ -756,7 +745,6 @@
sg = SourceGenerator(database, preimplementationlines)
sg.set_strategy(targetdir)
sg.gen_readable_parts_of_source(f)
- sg.write_extra_sources(sources)
#
# Debugging info
@@ -867,10 +855,13 @@
#
pypy_include_dir = autopath.this_dir
f = targetdir.join('setup.py').open('w')
+ include_dirs = extra_info.get('include_dirs', [])
+ library_dirs = extra_info.get('library_dirs', [])
f.write(SETUP_PY % locals())
f.close()
- return filename, sg.getextrafiles(), include_dirs, library_dirs
+ return filename, sg.getextrafiles(), include_dirs,\
+ library_dirs
SETUP_PY = '''
Modified: pypy/dist/pypy/translator/c/node.py
==============================================================================
--- pypy/dist/pypy/translator/c/node.py (original)
+++ pypy/dist/pypy/translator/c/node.py Wed Nov 21 15:35:31 2007
@@ -702,12 +702,9 @@
else:
self.name = (forcename or
db.namespace.uniquename('g_' + self.basename()))
- if hasattr(obj, 'libraries'):
- self.libraries = obj.libraries
- if hasattr(obj, 'include_dirs'):
- self.include_dirs = obj.include_dirs
- if hasattr(obj, 'library_dirs'):
- self.library_dirs = obj.library_dirs
+ for attrname in 'libraries', 'include_dirs', 'includes', 'sources', 'library_dirs':
+ if hasattr(obj, attrname):
+ setattr(self, attrname, getattr(obj, attrname))
self.make_funcgens()
#self.dependencies = {}
self.typename = db.gettype(T) #, who_asks=self)
More information about the Pypy-commit
mailing list