Compare commits

..

No commits in common. "b88cc3a85ecd2d1bb5baf1466763e9e02d006b26" and "444a5590cd359f7012ee03330301952129fca798" have entirely different histories.

2 changed files with 8 additions and 17 deletions

View File

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

View File

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