Compare commits

..

2 Commits

Author SHA1 Message Date
Starfflame b88cc3a85e fix inputstream 2021-05-19 00:37:47 -05:00
Starfflame 119da5673d refactor inputstream to make it more easily testable 2021-05-18 23:46:50 -05:00
2 changed files with 23 additions and 14 deletions

View File

@ -53,7 +53,7 @@ end
function CoreHelpers.parseToken(state: Environment): string
local chr = state.activeInputStream:readCurrentCharacter()
local chr = ""
local token = ""
while(not CoreHelpers.isWhitespace(chr)) do
token = token..chr

View File

@ -3,7 +3,6 @@ local type InputStream = record
offset: number
refill: function(): string
new: function(InputStream): InputStream
new: function(InputStream, function(): string): InputStream
setRefill: function(InputStream, function(): string)
@ -19,28 +18,36 @@ function InputStream:_manageBuffer()
self.str = self.refill()
self.offset = 1
end
if self.offset > #self.str + 1 then
if self.offset > #self.str then
self.str = self.refill()
self.offset = 1
end
end
local function initial_stream(): string
return "DUMMY"
end
-- constructors
function InputStream:new(): InputStream
return setmetatable(
{
string = "",
offset = 1
} as InputStream,
istream_mt)
end
function InputStream:new(refill: function(): string): InputStream
local mt = setmetatable(
{
string = "",
offset = 1
offset = 1,
refill = initial_stream
} as InputStream,
istream_mt)
mt:setRefill(initial_stream)
return mt
end
function InputStream:new(refill: function(): string): InputStream
refill = refill or initial_stream
local mt = setmetatable(
{
string = "",
offset = 1,
refill = function(): string return "DUMMY" end
} as InputStream,
istream_mt)
mt:setRefill(refill)
@ -53,6 +60,7 @@ end
-- setters/getters
function InputStream:setRefill(func: function(): string)
self.refill = func
self:_manageBuffer()
end
--
@ -62,9 +70,10 @@ function InputStream:readCurrentCharacter(): string
end
function InputStream:advanceOffset(): string
self.offset = self.offset + 1
self:_manageBuffer()
return self.str:sub(self.offset, self.offset)
local current_char = self.str:sub(self.offset, self.offset)
self.offset = self.offset + 1
return current_char
end
return InputStream