| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806 |
- <class name="UserStatechart">
- <relationships>
- <association name="parent" class="MvKController" min="1" max="1"/>
- </relationships>
-
- <constructor>
- <parameter name="taskname"/>
- <parameter name="mvk" />
- <body>
- <![CDATA[
- self.taskname = taskname
- self.mvk = mvk
- self.output_queue = []
- self.source_execution = None
- self.request_id = 0
- self.outstanding_execution = None
- self.outstanding_input = {}
- self.outstanding_output = None
-
- self.curr_file = None
- self.curr_line = None
- self.curr_begin_char = None
- self.curr_end_char = None
- self.curr_phase_v = None
-
- self.big_step_info = None
- self.line_step_info = None
- self.step_into_info = None
- self.breakpoints = []
- self.triggered_bp = -1
-
- self.queue = []
- self.polling_source = None
- ]]>
- </body>
- </constructor>
-
- <method name="enqueue">
- <parameter name="parameters" />
- <body>
- <![CDATA[
- self.queue.append(parameters)
- ]]>
- </body>
- </method>
-
- <method name="extract_line_info">
- <body>
- <![CDATA[
- if self.mvk.debug_info[self.taskname][-1] != 'None':
- splitted = self.mvk.debug_info[self.taskname][-1].split(':')
- self.curr_file = ":".join(splitted[0:-2])[1:]
- self.curr_line = int(splitted[-2])
- splitted_chars = splitted[-1].split("-")
- self.curr_begin_char = splitted_chars[0]
- self.curr_end_char = splitted_chars[1]
- # print 'curr_line = %s %s %s %s' % (self.curr_file, self.curr_line, self.curr_begin_char, self.curr_end_char)
- print (self.curr_file, self.curr_line)
- ]]>
- </body>
- </method>
-
- <method name="add_source_code">
- <parameter name="stack" />
- <body>
- <![CDATA[
- ret_value = []
- for line in stack:
- splitted = line.split(':')
- filename = ":".join(splitted[0:-2])[1:]
- file_line = int(splitted[-2]) - 1
- try:
- with open(filename, 'r') as f:
- lines = f.readlines()
- ret_value.append((line, lines[file_line].strip()))
- except IOError:
- ret_value.append((line, ""))
- return ret_value
- ]]>
- </body>
- </method>
-
- <method name="breakpoint_triggers">
- <body>
- <![CDATA[
- # Now that it includes breakpoints, results are to be interpretted as follows:
- # -1 --> continue simulation
- # other --> breakpoint triggered
- for bp in self.breakpoints:
- if not bp.enabled:
- continue
- if self.curr_file == bp.file_name and self.curr_line == bp.line_number:
- self.triggered_bp = bp.id
- if bp.disable_on_trigger:
- bp.enabled = False
- return bp.id
- else:
- continue
- return -1
- ]]>
- </body>
- </method>
-
- <scxml initial="init" priority="source_child">
- <state id="init">
- <transition event="set_returnpath" target="../running_normal">
- <parameter name="returnpath"/>
- <script>
- self.returnpath = returnpath
- </script>
- </transition>
- </state>
- <state id="running_normal">
- <onentry>
- <script>
- self.mvk.allow_compiled = True
- </script>
- </onentry>
- <parallel id="running">
- <state id="execution" initial="executing">
- <state id="executing" initial="executing">
- <state id="executing">
- <onentry>
- <raise event="execute" scope="narrow" target="'parent/executor'">
- <parameter expr="self.returnpath"/>
- <parameter expr="self.taskname"/>
- <parameter expr="'execute_rule'"/>
- <parameter expr="[]"/>
- <parameter expr="self.request_id"/>
- </raise>
- <script>
- self.outstanding_execution = self.request_id
- self.request_id += 1
- </script>
- </onentry>
- <transition event="executed" cond="success and self.outstanding_execution == request_id" target=".">
- <parameter name="returnvalue"/>
- <parameter name="success"/>
- <parameter name="request_id"/>
- </transition>
- <transition event="executed" cond="not success and self.outstanding_execution == request_id" target="../timeout">
- <parameter name="returnvalue"/>
- <parameter name="success"/>
- <parameter name="request_id"/>
- </transition>
- </state>
- <state id="timeout">
- <transition after="1.0" target="../executing"/>
- <transition event="set_input_done" target="../executing"/>
- </state>
- </state>
- </state>
- <state id="set_input" initial="fetch">
- <state id="fetch">
- <transition event="set_input" target=".">
- <parameter name="source"/>
- <parameter name="args"/>
- <raise event="execute" scope="narrow" target="'parent/executor'">
- <parameter expr="self.returnpath"/>
- <parameter expr="self.taskname"/>
- <parameter expr="'set_input'"/>
- <parameter expr="args"/>
- <parameter expr="self.request_id"/>
- </raise>
- <script>
- if source is not None:
- self.outstanding_input[self.request_id] = source
- self.request_id += 1
- </script>
- </transition>
- <transition event="executed" cond="request_id in self.outstanding_input" target=".">
- <parameter name="returnvalue"/>
- <parameter name="success"/>
- <parameter name="request_id"/>
- <script>
- source = self.outstanding_input.pop(request_id)
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(returnvalue)"/>
- </raise>
- <raise event="set_input_done"/>
- </transition>
- </state>
- </state>
- <state id="get_output_queue">
- <state id="waiting">
- <transition event="get_output" target=".">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.output_queue.append(source)
- </script>
- </transition>
- </state>
- </state>
- <state id="get_output" initial="try_execute">
- <state id="try_execute">
- <transition cond="self.outstanding_output is None and self.output_queue" target=".">
- <raise event="execute" scope="narrow" target="'parent/executor'">
- <parameter expr="self.returnpath"/>
- <parameter expr="self.taskname"/>
- <parameter expr="'get_output'"/>
- <parameter expr="[]"/>
- <parameter expr="self.request_id"/>
- </raise>
- <script>
- self.outstanding_output = self.request_id
- self.request_id += 1
- </script>
- </transition>
- <transition event="executed" cond="success and request_id == self.outstanding_output" target=".">
- <parameter name="returnvalue"/>
- <parameter name="success"/>
- <parameter name="request_id"/>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + self.output_queue.pop(0)">
- <parameter expr="json.dumps(returnvalue)"/>
- </raise>
- <script>
- self.outstanding_output = None
- </script>
- </transition>
- <transition event="executed" cond="not success and request_id == self.outstanding_output" target="../waiting">
- <parameter name="returnvalue"/>
- <parameter name="success"/>
- <parameter name="request_id"/>
- <script>
- self.outstanding_output = None
- </script>
- </transition>
- </state>
- <state id="waiting">
- <transition after="1.0" target="../try_execute"/>
- </state>
- </state>
-
- <state id="polling_listener" initial="listening">
- <state id="listening">
- <transition target="." event="poll_messages">
- <parameter name="source" />
- <parameter name="args"/>
- <script>
- self.polling_source = source
- </script>
- </transition>
- </state>
- </state>
-
- <history id="running_normal_history" type="deep" />
- </parallel>
-
- <transition target="../running_debug" event="attach_debugger">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.enqueue({'task': self.taskname, 'state': 'debugger_attached', 'result': 'success'})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
-
- <transition target="running/running_normal_history" event="detach_debugger">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.enqueue({'task': self.taskname, 'result': 'not allowed'})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- </state>
-
- <state id="running_debug" initial="reading_debug_info">
- <onentry>
- <script>
- self.mvk.allow_compiled = False
- </script>
- </onentry>
- <state id="reading_debug_info">
- <onentry>
- <raise event="execute" scope="narrow" target="'parent/executor'">
- <parameter expr="self.returnpath"/>
- <parameter expr="self.taskname"/>
- <parameter expr="'read_debug_info'"/>
- <parameter expr="[]"/>
- <parameter expr="self.request_id"/>
- </raise>
- <script>
- self.outstanding_execution = self.request_id
- self.request_id += 1
- </script>
- </onentry>
- <transition event="executed" cond="success and self.outstanding_execution == request_id" target="../running">
- <parameter name="returnvalue"/>
- <parameter name="success"/>
- <parameter name="request_id"/>
- <script>
- self.extract_line_info()
- </script>
- </transition>
- <transition event="executed" cond="not success and self.outstanding_execution == request_id" target=".">
- <parameter name="returnvalue"/>
- <parameter name="success"/>
- <parameter name="request_id"/>
- </transition>
- </state>
- <parallel id="running">
- <state id="execution_flow" initial="check_termination">
- <state id="check_termination">
- <transition cond="INSTATE('../../execution_state/running')" target="../stepping" />
- </state>
- <state id="stepping">
- <onentry>
- <raise event="execute_debug" scope="narrow" target="'parent/executor'">
- <parameter expr="self.returnpath"/>
- <parameter expr="self.taskname"/>
- <parameter expr="'execute_rule'"/>
- <parameter expr="[]"/>
- <parameter expr="self.request_id"/>
- </raise>
- <script>
- self.outstanding_execution = self.request_id
- self.request_id += 1
- </script>
- </onentry>
- <transition event="executed" cond="success and self.outstanding_execution == request_id" target="../reading_debug_info">
- <parameter name="returnvalue"/>
- <parameter name="success"/>
- <parameter name="request_id"/>
- </transition>
- <transition event="executed" cond="not success and self.outstanding_execution == request_id" target="../timeout">
- <parameter name="returnvalue"/>
- <parameter name="success"/>
- <parameter name="request_id"/>
- </transition>
- </state>
- <state id="reading_debug_info" initial="reading">
- <state id="reading">
- <onentry>
- <raise event="execute" scope="narrow" target="'parent/executor'">
- <parameter expr="self.returnpath"/>
- <parameter expr="self.taskname"/>
- <parameter expr="'read_debug_info'"/>
- <parameter expr="[]"/>
- <parameter expr="self.request_id"/>
- </raise>
- <script>
- self.outstanding_execution = self.request_id
- self.request_id += 1
- </script>
- </onentry>
- <transition event="executed" cond="success and self.outstanding_execution == request_id" target="../checking_line_step">
- <parameter name="returnvalue"/>
- <parameter name="success"/>
- <parameter name="request_id"/>
- <script>
- if returnvalue:
- if 'debug_info' in returnvalue:
- self.mvk.debug_info[self.taskname] = returnvalue['debug_info']
- self.extract_line_info()
- if 'phase_v' in returnvalue:
- self.curr_phase_v = returnvalue['phase_v']
- </script>
- </transition>
- <transition event="executed" cond="not success and self.outstanding_execution == request_id" target="../timeout">
- <parameter name="returnvalue"/>
- <parameter name="success"/>
- <parameter name="request_id"/>
- </transition>
- </state>
- <state id="checking_line_step">
- <transition target="../checking_step_into" cond="self.line_step_info and (len(self.mvk.debug_info[self.taskname]) < self.line_step_info['stack_len'] or (len(self.mvk.debug_info[self.taskname]) == self.line_step_info['stack_len'] and (self.curr_file != self.line_step_info['file'] or self.curr_line != self.line_step_info['line'])))">
- <raise event="line_step_done" />
- </transition>
- <transition target="../checking_step_into" cond="not self.line_step_info or len(self.mvk.debug_info[self.taskname]) > self.line_step_info['stack_len'] or (self.curr_file == self.line_step_info['file'] and self.curr_line == self.line_step_info['line'])" />
- </state>
- <state id="checking_step_into">
- <transition target="../checking_big_step" cond="self.step_into_info and (self.curr_file != self.step_into_info['file'] or self.curr_line != self.step_into_info['line'])">
- <raise event="step_into_done" />
- </transition>
- <transition target="../checking_big_step" cond="not self.step_into_info or (self.curr_file == self.step_into_info['file'] and self.curr_line == self.step_into_info['line'])" />
- </state>
- <state id="checking_big_step">
- <transition target="../checking_small_step" cond="self.curr_phase_v == 'finish'">
- <raise event="big_step_done" />
- </transition>
- <transition target="../checking_small_step" cond="self.curr_phase_v != 'finish'" />
- </state>
- <state id="checking_small_step">
- <onentry>
- <raise event="small_step_done" />
- </onentry>
- <transition target="../../check_termination" after="self.sccd_yield()" />
- </state>
- <state id="timeout">
- <transition after="1.0" target=".."/>
- <transition event="set_input_done" target=".."/>
- </state>
- </state>
- <state id="timeout">
- <transition after="1.0" target="../check_termination"/>
- <transition event="set_input_done" target="../check_termination"/>
- </state>
- </state>
-
- <state id="execution_state" initial="running">
- <transition target="execution_state_history" event="pause">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.enqueue({'task': self.taskname, 'result': 'not allowed'})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- <transition target="execution_state_history" event="resume">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.enqueue({'task': self.taskname, 'result': 'not allowed'})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- <transition target="execution_state_history" event="big_step">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.enqueue({'task': self.taskname, 'result': 'not allowed'})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- <transition target="execution_state_history" event="line_step">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.enqueue({'task': self.taskname, 'result': 'not allowed'})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- <transition target="execution_state_history" event="step_into">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.enqueue({'task': self.taskname, 'result': 'not allowed'})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- <history id="execution_state_history" type="deep" />
- <state id="running" initial="continuous">
- <state id="continuous">
- <transition event="termination_condition" target="../../stopped" />
- <transition event="pause" target="../../paused">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.enqueue({'task': self.taskname, 'result': 'success', 'state': 'paused', 'stack': self.add_source_code(self.mvk.debug_info[self.taskname])})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- <transition cond="self.breakpoint_triggers() != -1" target="../../paused">
- <script>
- print 'breakpoint %s triggers!' % self.triggered_bp
- self.enqueue({'task': self.taskname, 'result': 'breakpoint triggered', 'state': 'paused', 'triggered_bp': self.triggered_bp, 'stack': self.add_source_code(self.mvk.debug_info[self.taskname])})
- </script>
- </transition>
- </state>
- <state id="big_step">
- <transition event="big_step_done" target="../../paused">
- <script>
- self.enqueue({'task': self.taskname, 'result': 'success', 'state': 'paused', 'stack': self.add_source_code(self.mvk.debug_info[self.taskname]), 'instruction': self.mvk.inst_v['value']})
- </script>
- </transition>
- </state>
- <state id="small_step">
- <transition event="small_step_done" target="../../paused">
- <script>
- self.enqueue({'task': self.taskname, 'result': 'success', 'state': 'paused', 'stack': self.add_source_code(self.mvk.debug_info[self.taskname]), 'instruction': self.mvk.inst_v['value'], 'phase': self.mvk.phase_v})
- </script>
- </transition>
- </state>
- <state id="step_into">
- <transition event="step_into_done" target="../../paused">
- <script>
- self.enqueue({'task': self.taskname, 'result': 'success', 'state': 'paused', 'stack': self.add_source_code(self.mvk.debug_info[self.taskname])})
- </script>
- </transition>
- </state>
- <state id="line_step">
- <transition event="line_step_done" target="../../paused">
- <script>
- self.enqueue({'task': self.taskname, 'result': 'success', 'state': 'paused', 'stack': self.add_source_code(self.mvk.debug_info[self.taskname])})
- </script>
- </transition>
- </state>
- </state>
- <state id="paused">
- <transition target="../running/continuous" event="resume">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.enqueue({'task': self.taskname, 'result': 'success', 'state': 'running'})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- <transition target="../running/big_step" event="big_step">
- <parameter name="source"/>
- <parameter name="args"/>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- <transition target="../running/small_step" event="small_step">
- <parameter name="source"/>
- <parameter name="args"/>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- <transition target="../running/step_into" event="step_into">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.step_into_info = {'stack_len': len(self.mvk.debug_info[self.taskname]),
- 'file': self.curr_file,
- 'line': self.curr_line}
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- <transition target="../running/line_step" event="line_step">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.line_step_info = {'stack_len': len(self.mvk.debug_info[self.taskname]),
- 'file': self.curr_file,
- 'line': self.curr_line}
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- </state>
- <state id="stopped" />
- </state>
-
- <state id="state_manipulation" initial="listening">
- <state id="listening">
- <transition event="read_symbols" target="../reading_symbols">
- <parameter name="source"/>
- <parameter name="args"/>
- <raise event="execute" scope="narrow" target="'parent/executor'">
- <parameter expr="self.returnpath"/>
- <parameter expr="self.taskname"/>
- <parameter expr="'read_symbols'"/>
- <parameter expr="[]"/>
- <parameter expr="self.request_id"/>
- </raise>
- <script>
- self.outstanding_execution = self.request_id
- self.request_id += 1
- self.symbol_source = source
- </script>
- </transition>
- </state>
- <state id="reading_symbols">
- <transition event="executed" cond="success and self.outstanding_execution == request_id" target="../listening">
- <parameter name="returnvalue"/>
- <parameter name="success"/>
- <parameter name="request_id"/>
- <script>
- self.enqueue({'task': self.taskname, 'result': 'success', 'symbols': returnvalue})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + self.symbol_source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- <transition event="executed" cond="not success and self.outstanding_execution == request_id" target="../listening">
- <parameter name="returnvalue"/>
- <parameter name="success"/>
- <parameter name="request_id"/>
- <script>
- self.enqueue({'task': self.taskname, 'result': 'failure'})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + self.symbol_source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- </state>
- </state>
- <state id="set_input" initial="fetch">
- <state id="fetch">
- <transition event="set_input" target=".">
- <parameter name="source"/>
- <parameter name="args"/>
- <raise event="execute" scope="narrow" target="'parent/executor'">
- <parameter expr="self.returnpath"/>
- <parameter expr="self.taskname"/>
- <parameter expr="'set_input'"/>
- <parameter expr="args"/>
- <parameter expr="self.request_id"/>
- </raise>
- <script>
- if source is not None:
- self.outstanding_input[self.request_id] = source
- self.request_id += 1
- </script>
- </transition>
- <transition event="executed" cond="request_id in self.outstanding_input" target=".">
- <parameter name="returnvalue"/>
- <parameter name="success"/>
- <parameter name="request_id"/>
- <script>
- source = self.outstanding_input.pop(request_id)
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(returnvalue)"/>
- </raise>
- <raise event="set_input_done"/>
- </transition>
- </state>
- </state>
-
- <state id="get_output_queue" initial="waiting">
- <state id="waiting">
- <transition event="get_output" target=".">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.output_queue.append(source)
- </script>
- </transition>
- </state>
- </state>
- <state id="get_output" initial="try_execute">
- <state id="try_execute">
- <transition cond="self.outstanding_output is None and self.output_queue" target=".">
- <raise event="execute" scope="narrow" target="'parent/executor'">
- <parameter expr="self.returnpath"/>
- <parameter expr="self.taskname"/>
- <parameter expr="'get_output'"/>
- <parameter expr="[]"/>
- <parameter expr="self.request_id"/>
- </raise>
- <script>
- self.outstanding_output = self.request_id
- self.request_id += 1
- </script>
- </transition>
- <transition event="executed" cond="success and request_id == self.outstanding_output" target=".">
- <parameter name="returnvalue"/>
- <parameter name="success"/>
- <parameter name="request_id"/>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + self.output_queue.pop(0)">
- <parameter expr="json.dumps(returnvalue)"/>
- </raise>
- <script>
- self.outstanding_output = None
- </script>
- </transition>
- <transition event="executed" cond="not success and request_id == self.outstanding_output" target="../waiting">
- <parameter name="returnvalue"/>
- <parameter name="success"/>
- <parameter name="request_id"/>
- <script>
- self.outstanding_output = None
- </script>
- </transition>
- </state>
- <state id="waiting">
- <transition after="1.0" target="../try_execute"/>
- </state>
- </state>
-
- <state id="breakpoint_manager" initial="listening">
- <state id="listening">
- <transition event="add_breakpoint" target=".">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- if not 'file_name' in args or args['file_name'] is None:
- args['file_name'] = self.curr_file
- if not 'line_number' in args or args['line_number'] is None:
- args['line_number'] = self.curr_line
- self.breakpoints.append(Breakpoint(args['breakpoint_id'], args['file_name'], args['line_number'], args['enabled'], args['disable_on_trigger']))
- print 'adding breakpoint %s' % args
- self.breakpoint_source = source
- self.enqueue({'task': self.taskname, 'id': args['breakpoint_id'], 'result': 'breakpoint added'})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- <transition event="del_breakpoint" target=".">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.breakpoints = [breakpoint for breakpoint in self.breakpoints if breakpoint.id != args['del_breakpoint_id']]
- self.enqueue({'task': self.taskname, 'id': args['breakpoint_id'], 'result': 'breakpoint deleted'})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- <transition event="toggle_breakpoint" target=".">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- for breakpoint in self.breakpoints:
- if breakpoint.id == args['breakpoint_id']:
- breakpoint.enabled = args['enabled']
- break
- self.enqueue({'task': self.taskname, 'id': args['breakpoint_id'], 'result': 'breakpoint toggled'})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- <transition event="list_breakpoints" target=".">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.enqueue({'task': self.taskname, 'result': 'breakpoints listed', 'breakpoints': [bp.id for bp in self.breakpoints]})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- </state>
- </state>
-
- <state id="polling_listener" initial="listening">
- <state id="listening">
- <transition target="." event="poll_messages">
- <parameter name="source" />
- <parameter name="args"/>
- <script>
- self.polling_source = source
- </script>
- </transition>
- </state>
- </state>
-
- <state id="polling_sender" initial="sending">
- <state id="sending">
- <transition target="." cond="self.queue and (self.polling_source is not None)">
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + self.polling_source">
- <parameter expr="json.dumps(self.queue)"/>
- </raise>
- <script>
- self.polling_source = None
- self.queue = []
- </script>
- </transition>
- </state>
- </state>
-
- <history id="running_debug_history" type="deep" />
- </parallel>
-
- <transition target="../running_normal" event="detach_debugger">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.enqueue({'task': self.taskname, 'state': 'debugger_detached', 'result': 'success'})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
-
- <transition target="running/running_debug_history" event="attach_debugger">
- <parameter name="source"/>
- <parameter name="args"/>
- <script>
- self.enqueue({'task': self.taskname, 'result': 'not allowed'})
- </script>
- <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
- <parameter expr="json.dumps(True)"/>
- </raise>
- </transition>
- </state>
- </scxml>
- </class>
|