summaryrefslogtreecommitdiff
path: root/grc/core/generator/top_block.py
diff options
context:
space:
mode:
Diffstat (limited to 'grc/core/generator/top_block.py')
-rw-r--r--grc/core/generator/top_block.py31
1 files changed, 26 insertions, 5 deletions
diff --git a/grc/core/generator/top_block.py b/grc/core/generator/top_block.py
index b5661762c0..cab1bf71cb 100644
--- a/grc/core/generator/top_block.py
+++ b/grc/core/generator/top_block.py
@@ -13,8 +13,10 @@ from .FlowGraphProxy import FlowGraphProxy
from ..utils import expr_utils
DATA_DIR = os.path.dirname(__file__)
-FLOW_GRAPH_TEMPLATE = os.path.join(DATA_DIR, 'flow_graph.py.mako')
-flow_graph_template = Template(filename=FLOW_GRAPH_TEMPLATE)
+
+PYTHON_TEMPLATE = os.path.join(DATA_DIR, 'flow_graph.py.mako')
+
+python_template = Template(filename=PYTHON_TEMPLATE)
class TopBlockGenerator(object):
@@ -65,6 +67,21 @@ class TopBlockGenerator(object):
"""generate output and write it to files"""
self._warnings()
+ fg = self._flow_graph
+ self.title = fg.get_option('title') or fg.get_option('id').replace('_', ' ').title()
+ variables = fg.get_variables()
+ parameters = fg.get_parameters()
+ monitors = fg.get_monitors()
+
+ self.namespace = {
+ 'flow_graph': fg,
+ 'variables': variables,
+ 'parameters': parameters,
+ 'monitors': monitors,
+ 'generate_options': self._generate_options,
+ 'generated_time': time.ctime(),
+ }
+
for filename, data in self._build_python_code_from_template():
with codecs.open(filename, 'w', encoding='utf-8') as fp:
fp.write(data)
@@ -106,13 +123,13 @@ class TopBlockGenerator(object):
'generated_time': time.ctime(),
'version': platform.config.version
}
- flow_graph_code = flow_graph_template.render(
+ flow_graph_code = python_template.render(
title=title,
imports=self._imports(),
blocks=self._blocks(),
callbacks=self._callbacks(),
connections=self._connections(),
- **namespace
+ **self.namespace
)
# strip trailing white-space
flow_graph_code = "\n".join(line.rstrip() for line in flow_graph_code.split("\n"))
@@ -196,7 +213,9 @@ class TopBlockGenerator(object):
# List of variable names
var_ids = [var.name for var in parameters + variables]
+
replace_dict = dict((var_id, 'self.' + var_id) for var_id in var_ids)
+
callbacks_all = []
for block in fg.iter_enabled_blocks():
callbacks_all.extend(expr_utils.expr_replace(cb, replace_dict) for cb in block.get_callbacks())
@@ -204,7 +223,7 @@ class TopBlockGenerator(object):
# Map var id to callbacks
def uses_var_id(callback):
used = expr_utils.get_variable_dependencies(callback, [var_id])
- return used and 'self.' + var_id in callback # callback might contain var_id itself
+ return used and (('self.' + var_id in callback) or ('this->' + var_id in callback)) # callback might contain var_id itself
callbacks = {}
for var_id in var_ids:
@@ -218,6 +237,7 @@ class TopBlockGenerator(object):
for key, text in fg.parent_platform.connection_templates.items()}
def make_port_sig(port):
+ # TODO: make sense of this
if port.parent.key in ('pad_source', 'pad_sink'):
block = 'self'
key = fg.get_pad_port_global_key(port)
@@ -282,6 +302,7 @@ class TopBlockGenerator(object):
for con in sorted(connections, key=by_domain_and_blocks):
template = templates[con.type]
code = template.render(make_port_sig=make_port_sig, source=con.source_port, sink=con.sink_port)
+ code = 'self.' + code
rendered.append(code)
return rendered