add status view and fixes
This commit is contained in:
parent
557c455167
commit
756ab31a61
@ -1,5 +1,4 @@
|
|||||||
|
|
||||||
require "source_view"
|
|
||||||
require "instruction_view"
|
require "instruction_view"
|
||||||
|
|
||||||
class BlockView
|
class BlockView
|
||||||
@ -16,6 +15,7 @@ class BlockView
|
|||||||
end
|
end
|
||||||
|
|
||||||
def update_block
|
def update_block
|
||||||
|
return unless interpreter.instruction
|
||||||
block_name! interpreter.block.name
|
block_name! interpreter.block.name
|
||||||
codes = interpreter.block.codes.dup
|
codes = interpreter.block.codes.dup
|
||||||
slice = codes.index(interpreter.instruction) #- 1
|
slice = codes.index(interpreter.instruction) #- 1
|
||||||
@ -32,12 +32,18 @@ class BlockView
|
|||||||
return unless block
|
return unless block
|
||||||
div.block_view do
|
div.block_view do
|
||||||
div do
|
div do
|
||||||
|
h4 { method_name}
|
||||||
h4 {"Block: #{block_name}"}
|
h4 {"Block: #{block_name}"}
|
||||||
button.btn.btn_default { "next" }.on(:click) { interpreter.tick }
|
|
||||||
end
|
end
|
||||||
block.each do |code|
|
block.each do |code|
|
||||||
InstructionView :interpreter => interpreter , :instruction => code
|
InstructionView :interpreter => interpreter , :instruction => code
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def method_name
|
||||||
|
bl = interpreter.block
|
||||||
|
return bl.method if bl.method.is_a? String
|
||||||
|
"#{bl.method.for_class.name}.#{bl.method.name}"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -3,6 +3,7 @@ require "register_view"
|
|||||||
require "class_view"
|
require "class_view"
|
||||||
require "source_view"
|
require "source_view"
|
||||||
require "block_view"
|
require "block_view"
|
||||||
|
require "status_view"
|
||||||
|
|
||||||
class Debugger
|
class Debugger
|
||||||
|
|
||||||
@ -24,6 +25,7 @@ class Debugger
|
|||||||
end
|
end
|
||||||
SourceView :interpreter => interpreter
|
SourceView :interpreter => interpreter
|
||||||
BlockView :interpreter => interpreter
|
BlockView :interpreter => interpreter
|
||||||
|
StatusView :interpreter => interpreter
|
||||||
div.registers_view do
|
div.registers_view do
|
||||||
interpreter.registers.each do |r , oid|
|
interpreter.registers.each do |r , oid|
|
||||||
RegisterView interpreter: interpreter , register: r
|
RegisterView interpreter: interpreter , register: r
|
||||||
|
@ -12,7 +12,7 @@ class SourceView
|
|||||||
end
|
end
|
||||||
|
|
||||||
def instruction_changed old , ins
|
def instruction_changed old , ins
|
||||||
text = source_text(ins.source)
|
text = ins ? source_text(ins.source) : "exit"
|
||||||
return if sources.last == text
|
return if sources.last == text
|
||||||
sources << text
|
sources << text
|
||||||
sources.shift if sources.length > 5
|
sources.shift if sources.length > 5
|
||||||
|
41
app/status_view.rb
Normal file
41
app/status_view.rb
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
|
||||||
|
class StatusView
|
||||||
|
|
||||||
|
include React::Component
|
||||||
|
required_param :interpreter
|
||||||
|
|
||||||
|
define_state :state => "starting"
|
||||||
|
define_state :stdout
|
||||||
|
|
||||||
|
before_mount do
|
||||||
|
interpreter.register_event(:instruction_changed, self)
|
||||||
|
end
|
||||||
|
|
||||||
|
def update_state
|
||||||
|
state! interpreter.state
|
||||||
|
stdout! interpreter.stdout
|
||||||
|
end
|
||||||
|
|
||||||
|
def instruction_changed old , nex
|
||||||
|
update_state
|
||||||
|
end
|
||||||
|
|
||||||
|
def render
|
||||||
|
div.status_view do
|
||||||
|
div do
|
||||||
|
button.btn.btn_default { "next" }.on(:click) { interpreter.tick }
|
||||||
|
" ".br
|
||||||
|
end
|
||||||
|
div do
|
||||||
|
h4 {"Status:"}
|
||||||
|
state.to_s.br
|
||||||
|
end
|
||||||
|
div do
|
||||||
|
h4 {"Stdout:"}
|
||||||
|
end
|
||||||
|
div do
|
||||||
|
interpreter.stdout.br
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -20,7 +20,10 @@ class Interpreter
|
|||||||
# collect the output
|
# collect the output
|
||||||
attr_reader :stdout
|
attr_reader :stdout
|
||||||
|
|
||||||
|
attr_reader :state
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
|
@state = "runnnig"
|
||||||
@stdout = ""
|
@stdout = ""
|
||||||
@registers = {}
|
@registers = {}
|
||||||
(0...12).each do |r|
|
(0...12).each do |r|
|
||||||
@ -42,8 +45,8 @@ class Interpreter
|
|||||||
end
|
end
|
||||||
|
|
||||||
def set_instruction i
|
def set_instruction i
|
||||||
|
@state = "exited" unless i
|
||||||
return if @instruction == i
|
return if @instruction == i
|
||||||
raise "Error, nil instruction" unless i
|
|
||||||
old = @instruction
|
old = @instruction
|
||||||
@instruction = i
|
@instruction = i
|
||||||
trigger(:instruction_changed, old , i)
|
trigger(:instruction_changed, old , i)
|
||||||
@ -142,7 +145,7 @@ class Interpreter
|
|||||||
raise "NO string for putstring #{str}" unless str.is_a? Symbol
|
raise "NO string for putstring #{str}" unless str.is_a? Symbol
|
||||||
@stdout += str.to_s
|
@stdout += str.to_s
|
||||||
when :exit
|
when :exit
|
||||||
@instruction = nil
|
set_instruction(nil)
|
||||||
return false
|
return false
|
||||||
else
|
else
|
||||||
raise "un-implemented syscall #{name}"
|
raise "un-implemented syscall #{name}"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user