diff --git a/lib/debugger.rb b/lib/debugger.rb index e8925c9..6d5294d 100644 --- a/lib/debugger.rb +++ b/lib/debugger.rb @@ -8,6 +8,7 @@ require 'browser/http' require 'native' require "rubyx" require "ast" +require "util/eventable" require "risc/interpreter" # the base, our own litle framework, allows for child and parent views and handles updates require "base/list_view" diff --git a/lib/views/classes_view.rb b/lib/views/classes_view.rb index 40446a6..322d8e1 100644 --- a/lib/views/classes_view.rb +++ b/lib/views/classes_view.rb @@ -10,7 +10,7 @@ class ClassesView < ListView def class_views classes = [] - Risc.machine.space.classes.each do |name , claz| + Parfait.object_space.classes.each do |name , claz| classes << claz end classes.sort! {|a,b| a.name <=> b.name } diff --git a/lib/views/html_converter.rb b/lib/views/html_converter.rb index 2755f0e..f958e4a 100644 --- a/lib/views/html_converter.rb +++ b/lib/views/html_converter.rb @@ -11,10 +11,10 @@ class HtmlConverter < AST::Processor "Missing #{s.type}" end def div statement , html - "
" + html + "
" + "
" + html + "
" end def span statement , html - "" + html + "" + "" + html + "" end def on_function statement return_type , name , parameters, kids , receiver = *statement diff --git a/lib/views/object_view.rb b/lib/views/object_view.rb index dae6b8e..430bedf 100644 --- a/lib/views/object_view.rb +++ b/lib/views/object_view.rb @@ -41,7 +41,7 @@ class ObjectView < ListView def class_header clazz = @object.class.name.split("::").last - [clazz, @object.object_id].join " : " + [clazz, @object.object_id.to_s(16)].join " : " end def content_elements @@ -52,7 +52,7 @@ class ObjectView < ListView f = object.get_instance_variable(variable) fields << RefView.new( variable , f , @z ) end - if( object.is_a?(Parfait::Indexed) ) + if( object.is_a?(Parfait::List) ) index = 1 object.each do | o| fields << RefView.new( index.to_s , o , @z ) diff --git a/lib/views/ref_view.rb b/lib/views/ref_view.rb index 82806ba..885a37f 100644 --- a/lib/views/ref_view.rb +++ b/lib/views/ref_view.rb @@ -60,7 +60,7 @@ class RefView < ListView elsif is_object? var = @value str = var.class.name.split("::").last[0,2] - str + " : #{@value.object_id}" + str + " : #{@value.object_id.to_s(16)}" elsif is_label? str = "Label" else diff --git a/lib/views/source_view.rb b/lib/views/source_view.rb index 785c105..409203a 100644 --- a/lib/views/source_view.rb +++ b/lib/views/source_view.rb @@ -19,8 +19,8 @@ class SourceView < ElementView return "" unless i update_method case i.source - when AST::Node - id = i.source.object_id + when Mom::Instruction + id = i.source.object_id.to_s(16) if e = @text.at_css("#i#{id}") if (old = @text.at_css(".fade_in")) old.remove_class("fade_in") @@ -29,7 +29,7 @@ class SourceView < ElementView end when String @ticker.text = i.source - when Typed::Code + when Risc::Instruction @ticker.text = i.source.to_s else raise i.source.class.name @@ -51,10 +51,10 @@ class SourceView < ElementView puts i.name cl_t_name , method_name = *i.name.split(".") 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 type = clazz.instance_type - method = type.get_instance_method( method_name ) + method = type.get_method( method_name ) @element.at_css(".source").text = i.name @text.inner_html = HtmlConverter.new.process( method.source ) end diff --git a/lib/views/switch_view.rb b/lib/views/switch_view.rb index 8f15860..a048558 100644 --- a/lib/views/switch_view.rb +++ b/lib/views/switch_view.rb @@ -39,39 +39,25 @@ class SelectView < ElementView @element.at_css(".code_list") << list end - def select code + def select( code ) puts "selecting #{code}" + machine = Risc.machine.boot @interpreter.set_state :stopped @element.at_css(".selected").text = code - main , clean = get_codes[code] - - machine = Risc.machine.boot - clean_compile(*clean) if clean - Typed.compile( main ) - machine.collect - + ruby = get_codes[code] + Vool::VoolCompiler.ruby_to_vool( as_main(ruby) ) + machine.objects 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 - 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], + {set_internal_byte: "return 'Hello'.set_internal_byte(1,75)" , + called_if: 'if( 10 ); return "then";else;return "else";end' , + hello_world: "return 'Hello again'.putstring" } 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