1
0
Fork 0
mirror of https://github.com/Reuh/anselme.git synced 2025-10-27 16:49:31 +00:00

Code style cleaning

This commit is contained in:
Étienne Fildadut 2022-10-03 14:43:48 +09:00
parent f37fbb7594
commit f79e2f5716
3 changed files with 25 additions and 32 deletions

View file

@ -508,8 +508,8 @@ local function eval(state, exp)
})
if not s then return nil, e end
-- for classes: build resulting object
if fn.subtype == "class" then
local object = {
if fn.subtype == "class" and ret and ret.type == "nil" then
ret = {
type = "annotated",
value = {
{
@ -525,9 +525,6 @@ local function eval(state, exp)
}
}
}
if ret and ret.type == "nil" then
ret = object
end
end
-- pop scope
if fn.scoped then

View file

@ -12,42 +12,42 @@ run_line = function(state, line)
if line.type == "condition" then
line.parent_block.last_condition_success = nil
local v, e = eval(state, line.expression)
if not v then return v, ("%s; at %s"):format(e, line.source) end
if not v then return nil, ("%s; at %s"):format(e, line.source) end
if truthy(v) then
line.parent_block.last_condition_success = true
v, e = run_block(state, line.child)
if e then return v, e end
if e then return nil, e end
if v then return v end
end
elseif line.type == "else-condition" then
if not line.parent_block.last_condition_success then
local v, e = eval(state, line.expression)
if not v then return v, ("%s; at %s"):format(e, line.source) end
if not v then return nil, ("%s; at %s"):format(e, line.source) end
if truthy(v) then
line.parent_block.last_condition_success = true
v, e = run_block(state, line.child)
if e then return v, e end
if e then return nil, e end
if v then return v end
end
end
elseif line.type == "while" then
line.parent_block.last_condition_success = nil
local v, e = eval(state, line.expression)
if not v then return v, ("%s; at %s"):format(e, line.source) end
if not v then return nil, ("%s; at %s"):format(e, line.source) end
while truthy(v) do
line.parent_block.last_condition_success = true
v, e = run_block(state, line.child)
if e then return v, e end
if e then return nil, e end
if v then return v end
-- next iteration
v, e = eval(state, line.expression)
if not v then return v, ("%s; at %s"):format(e, line.source) end
if not v then return nil, ("%s; at %s"):format(e, line.source) end
end
elseif line.type == "choice" then
local v, e = events:make_space_for(state, "choice")
if not v then return v, ("%s; in automatic event flush at %s"):format(e, line.source) end
if not v then return nil, ("%s; in automatic event flush at %s"):format(e, line.source) end
v, e = eval(state, line.text)
if not v then return v, ("%s; at %s"):format(e, line.source) end
if not v then return nil, ("%s; at %s"):format(e, line.source) end
local l = v.type == "list" and v.value or { v }
-- convert text events to choices
for _, item in ipairs(l) do
@ -78,39 +78,39 @@ run_line = function(state, line)
end
end
local iv, ie = events:write_buffer(state, final_buffer)
if not iv then return iv, ("%s; at %s"):format(ie, line.source) end
if not iv then return nil, ("%s; at %s"):format(ie, line.source) end
end
end
elseif line.type == "tag" then
local v, e = eval(state, line.expression)
if not v then return v, ("%s; at %s"):format(e, line.source) end
if not v then return nil, ("%s; at %s"):format(e, line.source) end
tags:push(state, v)
v, e = run_block(state, line.child)
tags:pop(state)
if e then return v, e end
if e then return nil, e end
if v then return v end
elseif line.type == "return" then
local v, e = eval(state, line.expression)
if not v then return v, ("%s; at %s"):format(e, line.source) end
if not v then return nil, ("%s; at %s"):format(e, line.source) end
local cv, ce = run_block(state, line.child)
if ce then return cv, ce end
if ce then return nil, ce end
if cv then return cv end
return v
elseif line.type == "text" then
local v, e = events:make_space_for(state, "text") -- do this before any evaluation start
if not v then return v, ("%s; in automatic event flush at %s"):format(e, line.source) end
if not v then return nil, ("%s; in automatic event flush at %s"):format(e, line.source) end
v, e = eval(state, line.text)
if not v then return v, ("%s; at %s"):format(e, line.source) end
if not v then return nil, ("%s; at %s"):format(e, line.source) end
local l = v.type == "list" and v.value or { v }
for _, item in ipairs(l) do
if item.type == "event buffer" then
local iv, ie = events:write_buffer(state, item.value)
if not iv then return iv, ("%s; at %s"):format(ie, line.source) end
if not iv then return nil, ("%s; at %s"):format(ie, line.source) end
end
end
elseif line.type == "flush_events" then
local v, e = events:flush(state)
if not v then return v, ("%s; in event flush at %s"):format(e, line.source) end
if not v then return nil, ("%s; in event flush at %s"):format(e, line.source) end
elseif line.type == "function" and line.subtype == "checkpoint" then
local reached, reachede = get_variable(state, line.namespace.."🏁")
if not reached then return nil, reachede end
@ -146,7 +146,7 @@ run_block = function(state, block, resume_from_there, i, j)
-- run line
if not skip then
local v, e = run_line(state, line)
if e then return v, e end
if e then return nil, e end
if v then return v end
end
i = i + 1
@ -199,10 +199,9 @@ run_block = function(state, block, resume_from_there, i, j)
tags:pop(state)
end
local v, e = run_block(state, parent_line.parent_block, resume_from_there, parent_line.parent_position+1)
if e then return v, e end
if v then return v, e end
if e then return nil, e end
if v then return v end
end
return nil
end
-- returns var in case of success
@ -217,7 +216,7 @@ local function run(state, block, resume_from_there, i, j)
while parent_line and not parent_line.resumable do
if parent_line.type == "tag" then
local v, e = eval(state, parent_line.expression)
if not v then return v, ("%s; at %s"):format(e, parent_line.source) end
if not v then return nil, ("%s; at %s"):format(e, parent_line.source) end
table.insert(tags_to_add, v)
end
parent_line = parent_line.parent_block.parent_line
@ -236,7 +235,7 @@ local function run(state, block, resume_from_there, i, j)
tags:trim(state, tags_len)
end
-- return
if e then return v, e end
if e then return nil, e end
if v then
return v
else

View file

@ -85,9 +85,6 @@ TODO: fn/checkpoint/tag: maybe consider them a regular func call that takes chil
TODO: perform seen/reached/etc default variable not in interpreter but using parse-time macro
TODO: no function call without () (reference to fn instead?). Fn could be stored in save but replaced with new versions on code reload... -> how to track these references?
if we make fn first class this means anonymous fn, is it ok? -> no way to track anonymous fn, so no.
TODO: make language simple enough to be able to reimplement it in, say, nim. Especially the AST interpreter (we could precompile a lot of stuff...)
TODO: test reacheability of script paths + visualization of different branches the script can take. For one of those overarching story visualization thingy.