Updating lib to v2

This commit is contained in:
Bruce Hill 2018-07-17 23:37:20 -07:00
parent af441330ff
commit 88df5c72a3
6 changed files with 89 additions and 92 deletions

View File

@ -1,20 +1,20 @@
#!/usr/bin/env nomsu -V1 #!/usr/bin/env nomsu -V2.2.4.3
# #
This file defines actions for ANSI console color escape codes. This file defines actions for ANSI console color escape codes.
use "core" use "core"
test: bright: "\(green)Color test passed." test: bright "\(green)Color test passed."
%colors <- {..} %colors <- {..}
normal:0, "reset color":0, bright:1, bold:1, dim:2, italic:3, underscore:4 normal: 0, "reset color": 0, bright: 1, bold: 1, dim: 2, italic: 3, underscore: 4
"slow blink":5, "fast blink": 6, reverse:7, inverse:7, inverted:7, hidden:8 "slow blink": 5, "fast blink": 6, reverse: 7, inverse: 7, inverted: 7, hidden: 8
# There's some other codes, but they're not currently implemented # There's some other codes, but they're not currently implemented
black:30, red:31, green:32, yellow:33, blue:34, magenta:35, cyan:36, white:37 black: 30, red: 31, green: 32, yellow: 33, blue: 34, magenta: 35, cyan: 36
"on black":40, "on red":41, "on green":42, "on yellow":43, "on blue":44 white: 37, "on black": 40, "on red": 41, "on green": 42, "on yellow": 43
"on magenta":45, "on cyan":46, "on white":47 "on blue": 44, "on magenta": 45, "on cyan": 46, "on white": 47
for %name = %colornum in %colors for %name = %colornum in %colors:
with {%escapecode: "\27[\(%colornum)m"} with {%escapecode: "\27[\(%colornum)m"}:
run ".." run ".."
#!/usr/bin/env nomsu -V1 #!/usr/bin/env nomsu -V1
compile [\%name] to: Lua value (quote \(quote %escapecode)) compile [\%name] to: Lua value (quote \(quote %escapecode))

View File

@ -1,10 +1,10 @@
#!/usr/bin/env nomsu -V1 #!/usr/bin/env nomsu -V2.2.4.3
# #
This file defines some actions for hashing files and looking up files by hash. This file defines some actions for hashing files and looking up files by hash.
use "core" use "core"
action [file with hash %hash] action [file with hash %hash]:
lua> ".." lua> ".."
local Hash = require("openssl.digest") local Hash = require("openssl.digest")
for filename in io.popen('find -L . -not -path "*/\\\\.*" -type f -name "*.nom"'):lines() do for filename in io.popen('find -L . -not -path "*/\\\\.*" -type f -name "*.nom"'):lines() do
@ -18,11 +18,11 @@ action [file with hash %hash]
end end
end end
action [hash %, sha1 %] action [hash %, sha1 %]:
%hashlib <- (=lua "require('openssl.digest')") %hashlib <- (=lua "require('openssl.digest')")
%hash <- (=lua "\%hashlib.new('sha1'):final(\%)") %hash <- (=lua "\%hashlib.new('sha1'):final(\%)")
return: =lua "\%hash:gsub('.', function(c) return string.format('%02x', string.byte(c)) end)" return (..)
=lua "\%hash:gsub('.', function(c) return string.format('%02x', string.byte(c)) end)"
parse [hash of file %filename] as
sha1: =lua "io.open(\%filename):read('*a')"
parse [hash of file %filename] as (..)
sha1 (=lua "io.open(\%filename):read('*a')")

View File

@ -1,37 +1,35 @@
#!/usr/bin/env nomsu -V1 #!/usr/bin/env nomsu -V2.2.4.3
# #
This file contains the implementation of an Object-Oriented programming system. This file contains the implementation of an Object-Oriented programming system.
use "core" use "core"
compile [@, me] to: Lua value "self" compile [@, me] to (Lua value "self")
compile [method %actions %body] to:
compile [method %actions %body] to %lua <- (compile as (action %actions %body))
%lua <- (compile as: action %actions %body)
add free vars ((% as lua id) for % in %actions) to %lua add free vars ((% as lua id) for % in %actions) to %lua
declare locals in %lua declare locals in %lua
for % in %actions for % in %actions:
to %lua write "\nclass.\(% as lua id) = \(% as lua id)" to %lua write "\nclass.\(% as lua id) = \(% as lua id)"
return
return (..)
Lua ".." Lua ".."
do -- Method: \(%actions.1.stub) do -- Method: \(%actions.(1).stub)
\%lua \%lua
end end
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
parse [as %instance %body] as
result of parse [as %instance %body] as (..)
result of:
%old_self <- (me) %old_self <- (me)
(me) <- %instance (me) <- %instance
try try %body and if it barfs %msg:
%body
..and if it barfs %msg
(me) <- %old_self (me) <- %old_self
barf %msg barf %msg
..or if it succeeds ..or if it succeeds: (me) <- %old_self
(me) <- %old_self
compile [object %classname extends %parent %class_body] to compile [object %classname extends %parent %class_body] to (..)
Lua ".." Lua ".."
do do
local class = {name=\(%classname as lua expr)} local class = {name=\(%classname as lua expr)}
@ -57,5 +55,7 @@ compile [object %classname extends %parent %class_body] to
class.__tostring = class["A"..string.as_lua_id("as text")] class.__tostring = class["A"..string.as_lua_id("as text")]
end end
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
parse [object %classname %class_body] as: object %classname extends (nil) %class_body
parse [object %classname %class_body] as (..)
object %classname extends (nil) %class_body

View File

@ -1,33 +1,29 @@
#!/usr/bin/env nomsu -V1 #!/usr/bin/env nomsu -V2.2.4.3
# #
This file defines some actions that interact with the operating system and filesystem. This file defines some actions that interact with the operating system and filesystem.
use "core" use "core"
action [path of Nomsu file %filename]:
action [path of Nomsu file %filename] lua> "for i,f in files.walk(\%filename) do return f end"
lua> ".."
for i,f in files.walk(\%filename) do return f end
barf "Could not find file: \%filename" barf "Could not find file: \%filename"
action [sh> %cmd] action [sh> %cmd]:
lua> ".." lua> ".."
local result = io.popen(\%cmd) local result = io.popen(\%cmd)
local contents = result:read("*a") local contents = result:read("*a")
result:close() result:close()
return contents return contents
action [read file %filename] action [read file %filename] (=lua "files.read(\%filename)")
=lua "files.read(\%filename)" compile [for file %f in %path %body] to (..)
compile [for file %f in %path %body] to
Lua ".." Lua ".."
for i,\(%f as lua expr) in files.walk(\(%path as lua expr)) do for i,\(%f as lua expr) in files.walk(\(%path as lua expr)) do
\(%body as lua statements) \(%body as lua statements)
\(compile as: === next %f ===) \(compile as (===next %f ===))
end end
\(compile as: === stop %f ===) \(compile as (===stop %f ===))
compile [%expr for file %f in %path] to compile [%expr for file %f in %path] to (..)
Lua value ".." Lua value ".."
(function() (function()
local ret = list{} local ret = list{}
@ -37,14 +33,14 @@ compile [%expr for file %f in %path] to
return ret return ret
end)() end)()
action [write to file %filename %text, to file %filename write %text, write %text to file %filename] action [..]
lua> ".." write to file %filename %text, to file %filename write %text
local file = io.open(\%filename, 'w') write %text to file %filename
file:write(\%text) ..:
file:close() lua> "local file = io.open(\%filename, 'w')\nfile:write(\%text)\nfile:close()"
action [line number of %pos in %str] action [line number of %pos in %str] (..)
=lua "files.get_line_number(\%str, \%pos)" =lua "files.get_line_number(\%str, \%pos)"
action [line %line_num in %str] action [line %line_num in %str] (..)
=lua "files.get_line(\%str, \%line_num)" =lua "files.get_line(\%str, \%line_num)"

View File

@ -1,45 +1,46 @@
#!/usr/bin/env nomsu -V1 #!/usr/bin/env nomsu -V2.2.4.3
# #
This file contains a set of definitions that bring some familiar language features This file contains a set of definitions that bring some familiar language features
from other languages into nomsu (e.g. "==" and "continue") from other languages into nomsu (e.g. "==" and "continue")
use "core" use "core"
parse [%a = %b] as: %a <- %b parse [%a = %b] as (%a <- %b)
parse [%a == %b] as: %a is %b parse [%a == %b] as (%a is %b)
parse [%a ~= %b, %a != %b, %a <> %b] as: %a is not %b parse [%a ~= %b, %a != %b, %a <> %b] as (%a is not %b)
parse [%a === %b] as: (%a's id) is (%b's id) parse [%a === %b] as ((%a 's id) is (%b 's id))
parse [%a !== %b] as: (%a's id) is not (%b's id) parse [%a !== %b] as ((%a 's id) is not (%b 's id))
parse [%a mod %b] as: %a wrapped around %b parse [%a mod %b] as (%a wrapped around %b)
parse [function %names %body, def %names %body] as: action %names %body parse [function %names %body, def %names %body] as (action %names %body)
parse [switch %branch_value %body] as: when %branch_value = ? %body parse [switch %branch_value %body] as (when %branch_value = ? %body)
parse [None, Null] as: nil parse [None, Null] as (nil)
parse [True, true] as: yes parse [True, true] as (yes)
parse [False, false] as: no parse [False, false] as (no)
parse [pass] as: do nothing parse [pass] as (do nothing)
parse [%a || %b] as: %a or %b parse [%a || %b] as (%a or %b)
parse [%a && %b] as: %a and %b parse [%a && %b] as (%a and %b)
parse [continue] as: do next parse [continue] as (do next)
parse [break] as: stop parse [break] as (stop)
parse [let %thing = %value in %action] as: with [%thing <- %value] %action parse [let %thing = %value in %action] as (with [%thing <- %value] %action)
parse [print %] as: say % parse [print %] as (say %)
parse [error!, panic!, fail!, abort!] as: barf! parse [error!, panic!, fail!, abort!] as (barf!)
parse [error %, panic %, fail %, abort %] as: barf % parse [error %, panic %, fail %, abort %] as (barf %)
parse [assert %condition %message] as: assume %condition or barf %message parse [assert %condition %message] as (assume %condition or barf %message)
parse [%cond ? %if_true %if_false] as: %if_true if %cond else %if_false parse [%cond ? %if_true %if_false] as (%if_true if %cond else %if_false)
compile [function %args %body, lambda %args %body] to compile [function %args %body, lambda %args %body] to:
%lua <-: Lua value "(function(" %lua <- (Lua value "(function(")
for %i = %arg in %args.value for %i = %arg in %args.value:
if: %i > 1 if (%i > 1): to %lua write ", "
to %lua write ", " to %lua write (%arg as lua expr)
to %lua write: %arg as lua expr
to %lua write ")\n " to %lua write ")\n "
%body <-: %body as lua %body <- (%body as lua)
lua> "\%body:convert_to_statements('return ');" lua> "\%body:convert_to_statements('return ');"
for % in %args.value: lua> "\%body:remove_free_vars(\%);" for % in %args.value: lua> "\%body:remove_free_vars(\%);"
to %lua write %body to %lua write %body
to %lua write "\nend)" to %lua write "\nend)"
return %lua return %lua
parse [function %name %args %body] as: %name <- (function %args %body)
compile [call %fn %args] to parse [function %name %args %body] as (%name <- (function %args %body))
compile [call %fn %args] to (..)
Lua value "\(%fn as lua expr)(unpack(\(%args as lua expr)))" Lua value "\(%fn as lua expr)(unpack(\(%args as lua expr)))"

View File

@ -1,3 +1,3 @@
#!/usr/bin/env nomsu -V1 #!/usr/bin/env nomsu -V2.2.4.3
# This file sets the current library version. # This file sets the current library version.
lua> "NOMSU_LIB_VERSION = 3" lua> "NOMSU_LIB_VERSION = 3"