reinstate word creation and use for strings

so string constants become words, so we can fiddle with them
This commit is contained in:
Torsten Ruger 2015-11-08 23:58:35 +02:00
parent c8fa5238ee
commit f746218765
3 changed files with 14 additions and 15 deletions

View File

@ -15,6 +15,15 @@ module Register
end
list
end
# Functions to generate parfait objects
def self.new_word( string )
string = string.to_s if string.is_a? Symbol
word = Parfait::Word.new( string.length )
string.codepoints.each_with_index do |code , index |
word.set_char(index + 1 , code)
end
word
end
end
class Symbol
include Positioned
@ -61,8 +70,8 @@ end
module Parfait
# Objects memory functions. Object memory is 1 based
# but we implement it with ruby array (0 based) and use 0 as type-word
# These are the same functions that Builtin implements at run-time
# but we implement it with ruby array (0 based) and don't use 0
# These are the same functions that Builtin implements for run-time
class Object
include Padding
include Positioned
@ -80,6 +89,7 @@ module Parfait
# 1 -based index
def set_internal(index , value)
raise "failed init for #{self.class}" unless @memory
raise "Word[#{index}] = " if((self.class == Parfait::Word) and value.nil? )
@memory[index] = value
value
end
@ -122,7 +132,7 @@ module Parfait
def to_string
string = ""
index = 1
while( index <= self.length)
while( index <= self.char_length)
string[index - 1] = get_char(index).chr
index = index + 1
end

View File

@ -36,7 +36,7 @@ module Soml
end
def on_string expression
value = expression.first.to_sym
value = Register.new_word expression.first.to_sym
reg = use_reg :Word
Register.machine.constants << value
add_code Register::LoadConstant.new( expression, value , reg )

View File

@ -19,17 +19,6 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'test'))
require 'salama'
module Register
# Functions to generate parfait objects
def self.new_word( string )
string = string.to_s if string.is_a? Symbol
word = Parfait::Word.new( string.length )
string.codepoints.each_with_index do |code , index |
word.set_char(index + 1 , code)
end
word
end
end
class Ignored
def == other