diff options
Diffstat (limited to 'TurtleArt/talogo.py')
-rw-r--r-- | TurtleArt/talogo.py | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/TurtleArt/talogo.py b/TurtleArt/talogo.py index 9cbe1dd..b96a2b9 100644 --- a/TurtleArt/talogo.py +++ b/TurtleArt/talogo.py @@ -258,10 +258,7 @@ class LogoCode: self.tw.showblocks() self.tw.running_blocks = False return None - if isinstance(convert(x, float, False), float): - if int(float(x)) == x: - x = int(x) - self.stacks['stack3' + str(x)] = self._readline(code) + self.stacks[self._get_stack_key(x)] = self._readline(code) code = self._blocks_to_code(blk) @@ -686,6 +683,31 @@ class LogoCode: name = float(name) return ('box3' + str(name), False) + def prim_define_stack(self, name): + """ Top of a named stack """ + pass + + def prim_invoke_stack(self, name): + """ Process a named stack """ + key = self._get_stack_key(name) + if self.stacks.get(key) is None: + raise logoerror("#nostack") + self.icall(self.evline, self.stacks[key][:]) + yield True + self.procstop = False + self.ireturn() + yield True + + def _get_stack_key(self, name): + """ Return the key used for this stack in the stacks dictionary """ + if name in ('stack1', 'stack2'): + return name + else: + # make sure '5' and '5.0' point to the same action stack + if isinstance(name, (int, long)): + name = float(name) + return 'stack3' + str(name) + def clear_value_blocks(self): if not hasattr(self, 'value_blocks_to_update'): return @@ -1055,14 +1077,14 @@ class LogoCode: # Create a separate stacks for the forever loop and the whileflow code = self._blocks_to_code(forever_blk) - self.stacks['stack3' + str(action_name)] = self._readline(code) + self.stacks[self._get_stack_key(action_name)] = self._readline(code) if until_blk and whileflow is not None: # Create a stack from the whileflow to be called from # action_first, but then reconnect it to the ifelse block c = whileflow.connections[0] whileflow.connections[0] = None code = self._blocks_to_code(whileflow) - self.stacks['stack3' + str(action_flow_name)] = \ + self.stacks[self._get_stack_key(action_flow_name)] = \ self._readline(code) whileflow.connections[0] = c |