gets rid of soml-parser completely
This commit is contained in:
@ -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
|
||||
|
88
test/bench/soml/integer.soml
Normal file
88
test/bench/soml/integer.soml
Normal 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
|
17
test/bench/soml/object.soml
Normal file
17
test/bench/soml/object.soml
Normal 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
29
test/bench/soml/word.soml
Normal 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
|
@ -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
|
||||
|
@ -1,2 +1,3 @@
|
||||
require_relative "../helper"
|
||||
|
||||
Register.machine.boot unless Register.machine.booted
|
||||
|
Reference in New Issue
Block a user