slow first steps, 6 before exceptions
This commit is contained in:
parent
0c2738cdef
commit
2feb287b50
@ -8,6 +8,7 @@ require 'browser/http'
|
|||||||
require 'native'
|
require 'native'
|
||||||
require "rubyx"
|
require "rubyx"
|
||||||
require "ast"
|
require "ast"
|
||||||
|
require "util/eventable"
|
||||||
require "risc/interpreter"
|
require "risc/interpreter"
|
||||||
# the base, our own litle framework, allows for child and parent views and handles updates
|
# the base, our own litle framework, allows for child and parent views and handles updates
|
||||||
require "base/list_view"
|
require "base/list_view"
|
||||||
|
@ -10,7 +10,7 @@ class ClassesView < ListView
|
|||||||
|
|
||||||
def class_views
|
def class_views
|
||||||
classes = []
|
classes = []
|
||||||
Risc.machine.space.classes.each do |name , claz|
|
Parfait.object_space.classes.each do |name , claz|
|
||||||
classes << claz
|
classes << claz
|
||||||
end
|
end
|
||||||
classes.sort! {|a,b| a.name <=> b.name }
|
classes.sort! {|a,b| a.name <=> b.name }
|
||||||
|
@ -11,10 +11,10 @@ class HtmlConverter < AST::Processor
|
|||||||
"Missing #{s.type}"
|
"Missing #{s.type}"
|
||||||
end
|
end
|
||||||
def div statement , html
|
def div statement , html
|
||||||
"<div class='statement' id='i#{statement.object_id}'>" + html + "</div>"
|
"<div class='statement' id='i#{statement.object_id.to_s(16)}'>" + html + "</div>"
|
||||||
end
|
end
|
||||||
def span statement , html
|
def span statement , html
|
||||||
"<span class='expression' id='i#{statement.object_id}'>" + html + "</span>"
|
"<span class='expression' id='i#{statement.object_id.to_s(16)}'>" + html + "</span>"
|
||||||
end
|
end
|
||||||
def on_function statement
|
def on_function statement
|
||||||
return_type , name , parameters, kids , receiver = *statement
|
return_type , name , parameters, kids , receiver = *statement
|
||||||
|
@ -41,7 +41,7 @@ class ObjectView < ListView
|
|||||||
|
|
||||||
def class_header
|
def class_header
|
||||||
clazz = @object.class.name.split("::").last
|
clazz = @object.class.name.split("::").last
|
||||||
[clazz, @object.object_id].join " : "
|
[clazz, @object.object_id.to_s(16)].join " : "
|
||||||
end
|
end
|
||||||
|
|
||||||
def content_elements
|
def content_elements
|
||||||
@ -52,7 +52,7 @@ class ObjectView < ListView
|
|||||||
f = object.get_instance_variable(variable)
|
f = object.get_instance_variable(variable)
|
||||||
fields << RefView.new( variable , f , @z )
|
fields << RefView.new( variable , f , @z )
|
||||||
end
|
end
|
||||||
if( object.is_a?(Parfait::Indexed) )
|
if( object.is_a?(Parfait::List) )
|
||||||
index = 1
|
index = 1
|
||||||
object.each do | o|
|
object.each do | o|
|
||||||
fields << RefView.new( index.to_s , o , @z )
|
fields << RefView.new( index.to_s , o , @z )
|
||||||
|
@ -60,7 +60,7 @@ class RefView < ListView
|
|||||||
elsif is_object?
|
elsif is_object?
|
||||||
var = @value
|
var = @value
|
||||||
str = var.class.name.split("::").last[0,2]
|
str = var.class.name.split("::").last[0,2]
|
||||||
str + " : #{@value.object_id}"
|
str + " : #{@value.object_id.to_s(16)}"
|
||||||
elsif is_label?
|
elsif is_label?
|
||||||
str = "Label"
|
str = "Label"
|
||||||
else
|
else
|
||||||
|
@ -19,8 +19,8 @@ class SourceView < ElementView
|
|||||||
return "" unless i
|
return "" unless i
|
||||||
update_method
|
update_method
|
||||||
case i.source
|
case i.source
|
||||||
when AST::Node
|
when Mom::Instruction
|
||||||
id = i.source.object_id
|
id = i.source.object_id.to_s(16)
|
||||||
if e = @text.at_css("#i#{id}")
|
if e = @text.at_css("#i#{id}")
|
||||||
if (old = @text.at_css(".fade_in"))
|
if (old = @text.at_css(".fade_in"))
|
||||||
old.remove_class("fade_in")
|
old.remove_class("fade_in")
|
||||||
@ -29,7 +29,7 @@ class SourceView < ElementView
|
|||||||
end
|
end
|
||||||
when String
|
when String
|
||||||
@ticker.text = i.source
|
@ticker.text = i.source
|
||||||
when Typed::Code
|
when Risc::Instruction
|
||||||
@ticker.text = i.source.to_s
|
@ticker.text = i.source.to_s
|
||||||
else
|
else
|
||||||
raise i.source.class.name
|
raise i.source.class.name
|
||||||
@ -51,10 +51,10 @@ class SourceView < ElementView
|
|||||||
puts i.name
|
puts i.name
|
||||||
cl_t_name , method_name = *i.name.split(".")
|
cl_t_name , method_name = *i.name.split(".")
|
||||||
class_name = cl_t_name.split(" ").last.split("_").first
|
class_name = cl_t_name.split(" ").last.split("_").first
|
||||||
clazz = Risc.machine.space.get_class_by_name class_name
|
clazz = Parfait.object_space.get_class_by_name class_name
|
||||||
raise "No class for #{cl_name} , #{i.name}" unless clazz
|
raise "No class for #{cl_name} , #{i.name}" unless clazz
|
||||||
type = clazz.instance_type
|
type = clazz.instance_type
|
||||||
method = type.get_instance_method( method_name )
|
method = type.get_method( method_name )
|
||||||
@element.at_css(".source").text = i.name
|
@element.at_css(".source").text = i.name
|
||||||
@text.inner_html = HtmlConverter.new.process( method.source )
|
@text.inner_html = HtmlConverter.new.process( method.source )
|
||||||
end
|
end
|
||||||
|
@ -39,39 +39,25 @@ class SelectView < ElementView
|
|||||||
@element.at_css(".code_list") << list
|
@element.at_css(".code_list") << list
|
||||||
end
|
end
|
||||||
|
|
||||||
def select code
|
def select( code )
|
||||||
puts "selecting #{code}"
|
puts "selecting #{code}"
|
||||||
|
machine = Risc.machine.boot
|
||||||
@interpreter.set_state :stopped
|
@interpreter.set_state :stopped
|
||||||
@element.at_css(".selected").text = code
|
@element.at_css(".selected").text = code
|
||||||
main , clean = get_codes[code]
|
ruby = get_codes[code]
|
||||||
|
Vool::VoolCompiler.ruby_to_vool( as_main(ruby) )
|
||||||
machine = Risc.machine.boot
|
machine.objects
|
||||||
clean_compile(*clean) if clean
|
|
||||||
Typed.compile( main )
|
|
||||||
machine.collect
|
|
||||||
|
|
||||||
puts "starting"
|
puts "starting"
|
||||||
@interpreter.start machine.init
|
@interpreter.start machine.risc_init
|
||||||
|
end
|
||||||
|
def as_main(statements)
|
||||||
|
"class Space ;def main(arg) ; #{statements}; end; end"
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_codes
|
def get_codes
|
||||||
{"set_internal_byte" => [s(:statements, s(:call,
|
{set_internal_byte: "return 'Hello'.set_internal_byte(1,75)" ,
|
||||||
s(:name, :set_internal_byte),
|
called_if: 'if( 10 ); return "then";else;return "else";end' ,
|
||||||
s(:arguments, s(:int, 1), s(:int, 104)),
|
hello_world: "return 'Hello again'.putstring"
|
||||||
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
|
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