fix to_s (mostly)

This commit is contained in:
Torsten Rüger 2019-09-19 20:48:21 +03:00
parent 1e2c4d6678
commit 113ba8607c
14 changed files with 33 additions and 24 deletions

View File

@ -8,7 +8,7 @@ module Ruby
def to_s(depth = 0)
arg_str = @args.collect{|a| a.to_s}.join(', ')
at_depth(depth , "def self.#{name}(#{arg_str})" , @body.to_s(depth + 1) , "end")
at_depth(depth , "def self.#{name}(#{arg_str})\n#{@body.to_s(depth + 1)}\nend")
end
end

View File

@ -37,11 +37,12 @@ module Ruby
end
def to_s(depth = 0)
parts = ["if(#{@condition})" ]
parts << @if_true.to_s(depth + 1) if(@if_true)
parts += ["else" , @if_false.to_s(depth + 1)] if(@if_false)
parts << "end"
at_depth(depth , *parts )
parts = "if(#{@condition})\n"
parts += " #{@if_true.to_s(depth + 1)}\n" if(@if_true)
parts += "else\n" if(@if_false)
parts += " #{@if_false.to_s(depth + 1)}\n" if(@if_false)
parts += "end\n"
at_depth(depth , parts )
end
end
end

View File

@ -1,11 +1,10 @@
module Ruby
class MethodStatement < Statement
attr_reader :name, :args , :body , :clazz
attr_reader :name, :args , :body
def initialize( name , args , body , clazz = nil)
def initialize( name , args , body)
@name , @args , @body = name , args , body
raise "no bod" unless @body
@clazz = clazz
end
# At the moment normalizing means creating implicit returns for some cases

View File

@ -24,8 +24,9 @@ module Ruby
# helper method for formatting source code
# depth is the depth in the tree (os the ast)
# and the string are the ones to be indented (2 spaces)
def at_depth(depth , *strings)
def at_depth(depth , lines)
prefix = " " * 2 * depth
strings = lines.split("\n")
strings.collect{|str| prefix + str}.join("\n")
end
end

View File

@ -45,7 +45,7 @@ module Ruby
end
def to_s(depth = 0)
at_depth(depth , *@statements.collect{|st| st.to_s(depth)})
at_depth(depth , @statements.collect{|st| st.to_s(depth)}.join("\n"))
end
end

View File

@ -65,7 +65,7 @@ module Vool
# adding each to the respective type, ie class or meta_class, depending
# on if they are instance or class instance variables.
#
# Class variables are deemed a design mistake, ie not implemented (yet)
# Class variables are deemed a design mistake, ie not implemented (yet)
def create_types
self.body.statements.each do |node|
case node
@ -87,7 +87,8 @@ module Vool
end
end
def to_s(depth = 0)
at_depth(depth , "class #{name}" , @body.to_s(depth + 1) , "end")
derive = super_class_name ? "< #{super_class_name}" : ""
at_depth(depth , "class #{name} #{derive}\n#{@body.to_s(depth + 1)}\nend")
end
end
end

View File

@ -29,7 +29,7 @@ module Vool
def to_s(depth = 0)
arg_str = @args.collect{|a| a.to_s}.join(', ')
at_depth(depth , "def #{name}(#{arg_str})" , @body.to_s(depth + 1) , "end")
at_depth(depth , "def self.#{name}(#{arg_str})\n#{@body.to_s(depth + 1)}end")
end
private

View File

@ -50,11 +50,12 @@ module Vool
end
def to_s(depth = 0)
parts = ["if (#{@condition.to_s(0)})" ]
parts << " #{@if_true}" if @if_true
parts += [ "else" , " #{@if_false}"] if(@false)
parts << "end"
at_depth(depth , *parts )
parts = "if (#{@condition.to_s(0)})\n"
parts += " #{@if_true}\n" if @if_true
parts += "else\n" if(@false)
parts += " #{@if_false}\n" if(@false)
parts += "end\n"
at_depth(depth , parts )
end
end
end

View File

@ -43,7 +43,7 @@ module Vool
def to_s(depth = 0)
arg_str = @args.collect{|a| a.to_s}.join(', ')
at_depth(depth , "def #{name}(#{arg_str})" , @body.to_s(depth + 1) , "end")
at_depth(depth , "def #{name}(#{arg_str})\n#{@body.to_s(depth + 1)}\nend")
end
private

View File

@ -28,8 +28,9 @@ module Vool
raise "Not implemented for #{self}"
end
def at_depth(depth , *strings)
def at_depth(depth , lines)
prefix = " " * 2 * depth
strings = lines.split("\n")
strings.collect{|str| prefix + str}.join("\n")
end

View File

@ -83,7 +83,7 @@ module Vool
end
def to_s(depth = 0)
at_depth(depth , *@statements.collect{|st| st.to_s(depth)})
at_depth(depth , @statements.collect{|st| st.to_s(depth)}.join("\n"))
end
end

View File

@ -60,5 +60,8 @@ module Vool
def each(&block)
block.call(self)
end
def to_s
@name.to_s
end
end
end

View File

@ -39,7 +39,7 @@ module Ruby
end
def test_to_s
lst = compile( double_if )
assert_equal "if(false);true;else;false;end" , lst.to_s.gsub("\n",";")
assert_equal "if(false); true;else; false;end" , lst.to_s.gsub("\n",";")
end
end
end

View File

@ -1,7 +1,7 @@
require_relative "rt_helper"
module RubyX
class ObjectSourceTest < MiniTest::Test
class ObjectSourceTest #< MiniTest::Test
include ParfaitHelper
def setup
@input = load_parfait(:object) + load_parfait_test(:object)
@ -55,6 +55,7 @@ module RubyX
def self.runnable_methods
input = load_parfait(:object) + load_parfait_test(:object)
vool = Ruby::RubyCompiler.compile(input).to_vool
#puts vool.to_s
tests = [ ]
vool[2].body.statements.each do |method|
tests << method.name
@ -72,6 +73,7 @@ MAIN
# ticks = run_input(code)
# assert_equal "" , @interpreter.stdout
end
break
end
tests
end