add code options
this time inline (not server generated) into the switch view
This commit is contained in:
parent
a6c63f4e57
commit
7be8e040bb
@ -1,2 +1 @@
|
|||||||
Opal.use_gem "salama"
|
Opal.use_gem "salama"
|
||||||
Opal.use_gem "salama-arm"
|
|
||||||
|
@ -38,13 +38,7 @@ class MainView < ListView
|
|||||||
include AST::Sexp
|
include AST::Sexp
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
machine = Register.machine.boot
|
Register.machine.boot
|
||||||
code = s(:statements, s(:call,
|
|
||||||
s(:name, :set_internal_byte),
|
|
||||||
s(:arguments, s(:int, 1), s(:int, 104)),
|
|
||||||
s(:receiver, s(:string, "Hello"))))
|
|
||||||
Typed.compile( code )
|
|
||||||
machine.collect
|
|
||||||
@interpreter = Register::Interpreter.new
|
@interpreter = Register::Interpreter.new
|
||||||
super( [SwitchView.new(@interpreter) ,
|
super( [SwitchView.new(@interpreter) ,
|
||||||
SourceView.new(@interpreter) ,
|
SourceView.new(@interpreter) ,
|
||||||
|
@ -22,44 +22,56 @@ class SelectView < ElementView
|
|||||||
def draw
|
def draw
|
||||||
@element = div("h4", "Code") << (list = div("ul.nav!"))
|
@element = div("h4", "Code") << (list = div("ul.nav!"))
|
||||||
list << (div("li.code_list") << div("a.selected" , "none selected"))
|
list << (div("li.code_list") << div("a.selected" , "none selected"))
|
||||||
get_codes unless @codes
|
selection_codes unless @codes
|
||||||
@element << div("br")
|
@element << div("br")
|
||||||
@element << div("br")
|
@element << div("br")
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_codes
|
def selection_codes
|
||||||
@codes = ["set_internal_byte"]
|
@codes = get_codes.keys
|
||||||
add_selection
|
|
||||||
end
|
|
||||||
|
|
||||||
def add_selection
|
|
||||||
list = div "ul"
|
list = div "ul"
|
||||||
@codes << @codes.first if @codes.length == 1
|
@codes << @codes.first if @codes.length == 1 #otherwise unselectable
|
||||||
@codes.each do |c|
|
@codes.each do |c|
|
||||||
code = div("li") << div("a" , c )
|
code = div("li") << div("a" , c )
|
||||||
code.on("click"){ select(c) }
|
code.on("click"){ select(c) }
|
||||||
list << code
|
list << code
|
||||||
end
|
end
|
||||||
Promise.new.then{
|
|
||||||
select(@codes.first)
|
|
||||||
}
|
|
||||||
@element.at_css(".code_list") << list
|
@element.at_css(".code_list") << list
|
||||||
end
|
end
|
||||||
|
|
||||||
def select code
|
def select code
|
||||||
|
puts "selecting #{code}"
|
||||||
@interpreter.set_state :stopped
|
@interpreter.set_state :stopped
|
||||||
@element.at_css(".selected").text = code
|
@element.at_css(".selected").text = code
|
||||||
input = s(:statements, s(:call,
|
main , clean = get_codes[code]
|
||||||
s(:name, :set_internal_byte),
|
|
||||||
s(:arguments, s(:int, 1), s(:int, 104)),
|
|
||||||
s(:receiver, s(:string, "Hello"))))
|
|
||||||
|
|
||||||
machine = Register.machine.boot
|
machine = Register.machine.boot
|
||||||
#do_clean_compile
|
clean_compile(*clean) if clean
|
||||||
Typed.compile( input )
|
Typed.compile( main )
|
||||||
machine.collect
|
machine.collect
|
||||||
|
|
||||||
puts "starting"
|
puts "starting"
|
||||||
@interpreter.start machine.init
|
@interpreter.start machine.init
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_codes
|
||||||
|
{"set_internal_byte" => [s(:statements, s(:call,
|
||||||
|
s(:name, :set_internal_byte),
|
||||||
|
s(:arguments, s(:int, 1), s(:int, 104)),
|
||||||
|
s(:receiver, s(:string, "Hello")))) , nil ] ,
|
||||||
|
"called_if" => [s(:statements, s(:call, s(:name, :itest), s(:arguments, s(:int, 20)))) ,
|
||||||
|
[:Space , :itest , {:n => :Integer} ,
|
||||||
|
s(:statements, s(:if_statement, :zero, s(:condition, s(:operator_value, :-, s(:name, :n), s(:int, 12))),
|
||||||
|
s(:true_statements, s(:call, s(:name, :putstring), s(:arguments), s(:receiver, s(:string, "then")))),
|
||||||
|
s(:false_statements, s(:call, s(:name, :putstring), s(:arguments), s(:receiver, s(:string, "else"))))))]],
|
||||||
|
"hello world" => [ s(:statements, s(:return, s(:call, s(:name, :putstring), s(:arguments),
|
||||||
|
s(:receiver, s(:string, "Hello again\\n"))))),
|
||||||
|
nil],
|
||||||
|
}
|
||||||
|
end
|
||||||
|
def clean_compile(clazz_name , method_name , args , statements)
|
||||||
|
compiler = Typed::MethodCompiler.new.create_method(clazz_name,method_name,args ).init_method
|
||||||
|
compiler.process( Typed.ast_to_code( statements ) )
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user