Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TurtleArt/taexportpython.py
diff options
context:
space:
mode:
authorMarion <marion.zepf@gmail.com>2013-08-31 13:26:43 (GMT)
committer Marion <marion.zepf@gmail.com>2013-08-31 13:26:43 (GMT)
commit26fc518a22e7eda9a385070e538a5892d898eea0 (patch)
tree4920a6a1182c5be72a5f512cc64ad5d85153152b /TurtleArt/taexportpython.py
parentb79ee751f99c6a132441fb18d09693498d0bc8f6 (diff)
fix python export tool again
Diffstat (limited to 'TurtleArt/taexportpython.py')
-rw-r--r--TurtleArt/taexportpython.py59
1 files changed, 34 insertions, 25 deletions
diff --git a/TurtleArt/taexportpython.py b/TurtleArt/taexportpython.py
index cde39e9..71c4f9b 100644
--- a/TurtleArt/taexportpython.py
+++ b/TurtleArt/taexportpython.py
@@ -126,18 +126,26 @@ def _action_stack_to_python(block, lc, name="start"):
_ACTION_STACK_END % (name, name_id)]
return "".join(snippets)
-def _walk_action_stack(top_block, lc):
- """ Turn a stack of blocks into a list of ASTs """
+def _walk_action_stack(top_block, lc, convert_me=True):
+ """ Turn a stack of blocks into a list of ASTs
+ convert_me -- convert values and Primitives to ASTs or return them
+ unconverted? """
block = top_block
# value blocks don't have a primitive
if block.is_value_block():
raw_value = block.get_value(add_type_prefix=False)
- value_ast = value_to_ast(raw_value)
- if value_ast is not None:
- return [value_ast]
+ if convert_me:
+ value_ast = value_to_ast(raw_value)
+ if value_ast is not None:
+ return [value_ast]
+ else:
+ return []
else:
- return []
+ if raw_value is not None:
+ return [raw_value]
+ else:
+ return []
def _get_prim(block):
prim = lc.get_prim_callable(block.primitive)
@@ -156,20 +164,23 @@ def _walk_action_stack(top_block, lc):
PyExportError on failure. """
if prim is None:
prim = _get_prim(block)
- if prim.export_me:
- try:
- new_ast = prim.get_ast(*arg_asts)
- except ValueError:
- traceback.print_exc()
- raise PyExportError(_("error while exporting block"),
- block=block)
- if isinstance(new_ast, (list, tuple)):
- ast_list.extend(new_ast)
- elif new_ast is not None:
+ if convert_me:
+ if prim.export_me:
+ try:
+ new_ast = prim.get_ast(*arg_asts)
+ except ValueError:
+ traceback.print_exc()
+ raise PyExportError(_("error while exporting block"),
+ block=block)
+ if isinstance(new_ast, (list, tuple)):
+ ast_list.extend(new_ast)
+ elif new_ast is not None:
+ ast_list.append(new_ast)
+ elif arg_asts: # TODO do we ever get here?
+ new_ast = ast.List(elts=arg_asts, ctx=ast.Load)
ast_list.append(new_ast)
- elif arg_asts:
- new_ast = ast.List(elts=arg_asts, ctx=ast.Load)
- ast_list.append(new_ast)
+ else:
+ ast_list.append((prim, ) + tuple(arg_asts))
# skip the very first dock/ connection - it's either the previous block or
# the return value of this block
@@ -194,17 +205,15 @@ def _walk_action_stack(top_block, lc):
# argument block
if dock[0] == 'flow':
# body of conditional or loop
- new_arg_asts = _walk_action_stack(conn, lc)
+ new_arg_asts = _walk_action_stack(conn, lc,
+ convert_me=convert_me)
if prim == LogoCode.prim_loop:
new_arg_asts.append(_ast_yield_true())
arg_asts.append(new_arg_asts)
else:
# argument block
- if conn.is_value_block():
- new_arg_asts = _walk_action_stack(conn, lc)
- arg_asts.append(*new_arg_asts)
- else:
- arg_asts.append(_get_prim(conn))
+ new_arg_asts = _walk_action_stack(conn, lc, convert_me=False)
+ arg_asts.append(*new_arg_asts)
# finish off last block
_finish_off(block, prim)