Bumped version number, fixed REPL, and simplified/fixed (use %).
This commit is contained in:
parent
ea3197aaff
commit
83219f8522
22
files.lua
22
files.lua
@ -191,20 +191,18 @@ Files.walk = function(path, flush_cache)
|
||||
end
|
||||
end
|
||||
end
|
||||
local iter
|
||||
iter = function(files, i)
|
||||
if not (files) then
|
||||
return
|
||||
end
|
||||
i = i + 1
|
||||
do
|
||||
local f = files[i]
|
||||
if f then
|
||||
return i, f
|
||||
end
|
||||
files = files or { }
|
||||
do
|
||||
local _accum_0 = { }
|
||||
local _len_0 = 1
|
||||
for _index_0 = 1, #files do
|
||||
local f = files[_index_0]
|
||||
_accum_0[_len_0] = gsub(f, "^%./", "")
|
||||
_len_0 = _len_0 + 1
|
||||
end
|
||||
files = _accum_0
|
||||
end
|
||||
return iter, files, 0
|
||||
return ipairs(files)
|
||||
end
|
||||
local line_counter = re.compile([[ lines <- {| line (%nl line)* |}
|
||||
line <- {} (!%nl .)*
|
||||
|
10
files.moon
10
files.moon
@ -33,7 +33,6 @@ Files.read = (filename)->
|
||||
_FILE_CACHE[filename] = contents
|
||||
return contents
|
||||
|
||||
-- `walk` returns an iterator over all files matching a path.
|
||||
{:match, :gsub} = string
|
||||
|
||||
-- TODO: improve sanitization
|
||||
@ -108,12 +107,9 @@ Files.walk = (path, flush_cache=false)->
|
||||
else
|
||||
for nomsupath in package.nomsupath\gmatch("[^;]+")
|
||||
if files = browse(nomsupath.."/"..path) then break
|
||||
iter = (files, i)->
|
||||
return unless files
|
||||
i += 1
|
||||
if f = files[i]
|
||||
return i, f
|
||||
return iter, files, 0
|
||||
files or= {}
|
||||
files = [gsub(f, "^%./", "") for f in *files]
|
||||
return ipairs(files)
|
||||
|
||||
line_counter = re.compile([[
|
||||
lines <- {| line (%nl line)* |}
|
||||
|
15
nomsu.lua
15
nomsu.lua
@ -133,8 +133,7 @@ end
|
||||
local nomsu = NomsuCompiler
|
||||
nomsu.environment.arg = NomsuCompiler.environment._List(args.nomsu_args)
|
||||
if args.version then
|
||||
nomsu:run([[use "core"
|
||||
say (Nomsu version)]])
|
||||
nomsu:run([[(: use "core"; say (Nomsu version))]])
|
||||
os.exit(EXIT_SUCCESS)
|
||||
end
|
||||
FILE_CACHE = setmetatable({ }, {
|
||||
@ -183,11 +182,7 @@ run = function()
|
||||
return true
|
||||
end
|
||||
if not (args.no_core) then
|
||||
for _, filename in Files.walk('core') do
|
||||
if filename:match("%.nom$") then
|
||||
nomsu:import(nomsu:run_file(filename))
|
||||
end
|
||||
end
|
||||
nomsu:import_file('core')
|
||||
end
|
||||
local get_file_and_source
|
||||
get_file_and_source = function(filename)
|
||||
@ -280,8 +275,8 @@ run = function()
|
||||
if not (args.primary_file or args.exec_strings) then
|
||||
nomsu:run([[#!/usr/bin/env nomsu -V4
|
||||
use "lib/consolecolor.nom"
|
||||
action [quit, exit]: lua> "os.exit(0)"
|
||||
action [help]:
|
||||
[quit, exit] all mean: lua> "os.exit(0)"
|
||||
(help) means:
|
||||
say "\
|
||||
..This is the Nomsu v\(Nomsu version) interactive console.
|
||||
You can type in Nomsu code here and hit 'enter' twice to run it.
|
||||
@ -320,7 +315,7 @@ say "\
|
||||
return Errhand.print_error(error_message)
|
||||
end
|
||||
local ret
|
||||
ok, ret = xpcall(nomsu.run, err_hand, nomsu, buff, Source(pseudo_filename, 1, #buff))
|
||||
ok, ret = xpcall(nomsu.run, err_hand, nomsu, NomsuCode(Source(pseudo_filename, 1, #buff), buff))
|
||||
if ok and ret ~= nil then
|
||||
if type(ret) == 'number' then
|
||||
print("= " .. tostring(ret))
|
||||
|
15
nomsu.moon
15
nomsu.moon
@ -89,9 +89,7 @@ nomsu = NomsuCompiler
|
||||
nomsu.environment.arg = NomsuCompiler.environment._List(args.nomsu_args)
|
||||
|
||||
if args.version
|
||||
nomsu\run [[
|
||||
use "core"
|
||||
say (Nomsu version)]]
|
||||
nomsu\run [[(: use "core"; say (Nomsu version))]]
|
||||
os.exit(EXIT_SUCCESS)
|
||||
|
||||
export FILE_CACHE
|
||||
@ -123,9 +121,7 @@ run = ->
|
||||
return true
|
||||
|
||||
unless args.no_core
|
||||
for _,filename in Files.walk('core')
|
||||
if filename\match "%.nom$"
|
||||
nomsu\import(nomsu\run_file(filename))
|
||||
nomsu\import_file('core')
|
||||
|
||||
get_file_and_source = (filename)->
|
||||
local file, source
|
||||
@ -185,8 +181,8 @@ run = ->
|
||||
nomsu\run [[
|
||||
#!/usr/bin/env nomsu -V4
|
||||
use "lib/consolecolor.nom"
|
||||
action [quit, exit]: lua> "os.exit(0)"
|
||||
action [help]:
|
||||
[quit, exit] all mean: lua> "os.exit(0)"
|
||||
(help) means:
|
||||
say "\
|
||||
..This is the Nomsu v\(Nomsu version) interactive console.
|
||||
You can type in Nomsu code here and hit 'enter' twice to run it.
|
||||
@ -215,11 +211,12 @@ say "\
|
||||
break -- Exit
|
||||
|
||||
buff = table.concat(buff)
|
||||
|
||||
pseudo_filename = "user input #"..repl_line
|
||||
Files.spoof(pseudo_filename, buff)
|
||||
err_hand = (error_message)->
|
||||
Errhand.print_error error_message
|
||||
ok, ret = xpcall(nomsu.run, err_hand, nomsu, buff, Source(pseudo_filename, 1, #buff))
|
||||
ok, ret = xpcall nomsu.run, err_hand, nomsu, NomsuCode(Source(pseudo_filename,1,#buff), buff)
|
||||
if ok and ret != nil
|
||||
if type(ret) == 'number'
|
||||
print "= #{ret}"
|
||||
|
@ -157,7 +157,7 @@ do
|
||||
return false
|
||||
end
|
||||
NomsuCompiler.environment = {
|
||||
NOMSU_COMPILER_VERSION = 9,
|
||||
NOMSU_COMPILER_VERSION = 10,
|
||||
NOMSU_SYNTAX_VERSION = max_parser_version,
|
||||
next = next,
|
||||
unpack = unpack,
|
||||
@ -459,19 +459,10 @@ do
|
||||
return add_lua_bits(self, "value", code)
|
||||
end,
|
||||
["use 1"] = function(self, tree, path)
|
||||
local lua = LuaCode(tree.source)
|
||||
if path.type == 'Text' and #path == 1 and type(path[1]) == 'string' then
|
||||
for _, f in Files.walk(path[1]) do
|
||||
if match(f, "%.lua$") or match(f, "%.nom$") or match(f, "^/dev/fd/[012]$") then
|
||||
self:import(self:run_file(f))
|
||||
if #lua.bits > 0 then
|
||||
lua:append("\n")
|
||||
end
|
||||
lua:append("nomsu:import(nomsu:run_file(" .. tostring(f:as_lua()) .. "))")
|
||||
end
|
||||
end
|
||||
self:import_file(path[1])
|
||||
end
|
||||
return lua
|
||||
return LuaCode(tree.source, "nomsu:import_file(" .. tostring(self:compile(path)) .. ")")
|
||||
end,
|
||||
["tests"] = function(self, tree)
|
||||
return LuaCode.Value(tree.source, "TESTS")
|
||||
@ -533,6 +524,13 @@ do
|
||||
end
|
||||
end
|
||||
end
|
||||
NomsuCompiler.import_file = function(self, path)
|
||||
for _, f in Files.walk(path) do
|
||||
if match(f, "%.lua$") or match(f, "%.nom$") or match(f, "^/dev/fd/[012]$") then
|
||||
self:import(self:run_file(f))
|
||||
end
|
||||
end
|
||||
end
|
||||
NomsuCompiler.run = function(self, to_run, compile_actions)
|
||||
local source = to_run.source or Source(to_run, 1, #to_run)
|
||||
if type(source) == 'string' then
|
||||
|
@ -97,7 +97,7 @@ with NomsuCompiler
|
||||
|
||||
-- Discretionary/convenience stuff
|
||||
.environment = {
|
||||
NOMSU_COMPILER_VERSION: 9, NOMSU_SYNTAX_VERSION: max_parser_version
|
||||
NOMSU_COMPILER_VERSION: 10, NOMSU_SYNTAX_VERSION: max_parser_version
|
||||
-- Lua stuff:
|
||||
:next, :unpack, :setmetatable, :coroutine, :rawequal, :getmetatable, :pcall,
|
||||
:error, :package, :os, :require, :tonumber, :tostring, :string, :xpcall, :module,
|
||||
@ -264,14 +264,9 @@ with NomsuCompiler
|
||||
return add_lua_bits(@, "value", code)
|
||||
|
||||
["use 1"]: (tree, path)=>
|
||||
lua = LuaCode(tree.source)
|
||||
if path.type == 'Text' and #path == 1 and type(path[1]) == 'string'
|
||||
for _,f in Files.walk(path[1])
|
||||
if match(f, "%.lua$") or match(f, "%.nom$") or match(f, "^/dev/fd/[012]$")
|
||||
@import(@run_file(f))
|
||||
if #lua.bits > 0 then lua\append "\n"
|
||||
lua\append "nomsu:import(nomsu:run_file(#{f\as_lua!}))"
|
||||
return lua
|
||||
@import_file(path[1])
|
||||
return LuaCode(tree.source, "nomsu:import_file(#{@compile(path)})")
|
||||
|
||||
["tests"]: (tree)=> LuaCode.Value(tree.source, "TESTS")
|
||||
["test 1"]: (tree, body)=>
|
||||
@ -299,6 +294,11 @@ with NomsuCompiler
|
||||
continue if k == "__imported" or k == "__parent"
|
||||
@environment.COMPILE_ACTIONS.__imported[k] or= v
|
||||
|
||||
.import_file = (path)=>
|
||||
for _,f in Files.walk(path)
|
||||
if match(f, "%.lua$") or match(f, "%.nom$") or match(f, "^/dev/fd/[012]$")
|
||||
@import(@run_file(f))
|
||||
|
||||
.run = (to_run, compile_actions)=>
|
||||
source = to_run.source or Source(to_run, 1, #to_run)
|
||||
if type(source) == 'string' then source = Source\from_string(source)
|
||||
|
Loading…
Reference in New Issue
Block a user