gets rid of soml-parser completely

This commit is contained in:
Torsten Ruger
2016-12-08 20:13:08 +02:00
parent 4cd979e3e9
commit ca4bdcc528
21 changed files with 26 additions and 65 deletions

View File

@ -9,7 +9,8 @@ module BenchTests
def setup
@stdout = ""
@machine = Register.machine.boot
Typed::Compiler.load_parfait
# Typed::Compiler.load_parfait
# most interesting parts saved as interger/word .soml in this dir
end
def main

View File

@ -0,0 +1,88 @@
class Integer < Value
int as_char()
if_plus( self - 9)
return 32
else
return 48 + self
end
end
int div10_soml()
int tmp = self >> 1
int q = self >> 2
q = q + tmp
tmp = q >> 4
q = q + tmp
tmp = q >> 8
q = q + tmp
tmp = q >> 16
q = q + tmp
q = q >> 3
int r = q * 10
r = self - r
r = r + 6
r = r >> 4
return q + r
end
Word as_string(Word str)
if_minus( self - 10 )
int num = as_char()
str = str.push_char( num )
else
int rest = self.div10()
str = rest.as_string( str )
rest = rest * 10
rest = self - rest
str = rest.as_string(str)
end
return str
end
Word to_s()
Word start = " "
start.set_length(0)
return as_string( start )
end
int puti()
Word str = self.to_s()
str.putstring()
return self
end
int mod4()
return self & 3
end
int fibr( )
if_plus( self - 2 )
int tmp
tmp = self - 1
int a = tmp.fibr( )
tmp = self - 2
int b = tmp.fibr( )
return a + b
else
return self
end
end
int fibw( )
int result = 1
int a = 0
int b = 1
int i = 2
while_plus( self - i )
result = a + b
a = b
b = result
i = i + 1
end
return result
end
end

View File

@ -0,0 +1,17 @@
class Object
Type get_type()
return self.type
end
Class get_class()
Type l = self.type
return l.object_class
end
Word get_class_name()
Type l = self.type
Class c = l.object_class
return c.name
end
end

29
test/bench/soml/word.soml Normal file
View File

@ -0,0 +1,29 @@
class Word < Object
int _internal_index(int index)
return index + 11
end
int get_char_at(int index)
index = _internal_index(index)
return get_internal_byte(index)
end
int set_length(int i)
set_internal_word( 2 , i)
return i
end
int set_char_at( int index , int val)
index = _internal_index(index)
return set_internal_byte(index , val)
end
Word push_char(int char)
int index = self.char_length + 1
self.set_length(index)
set_char_at(index , char)
return self
end
end

View File

@ -17,8 +17,7 @@ require "minitest/autorun"
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'test'))
was = require 'salama'
puts "loaded #{was}"
require 'salama'
class Ignored
def == other

View File

@ -1,2 +1,3 @@
require_relative "../helper"
Register.machine.boot unless Register.machine.booted