45 lines
1.8 KiB
Plaintext
45 lines
1.8 KiB
Plaintext
#!/usr/bin/env nomsu -V2.4.4.3
|
|
#
|
|
This file contains a set of definitions that bring some familiar language features
|
|
from other languages into nomsu (e.g. "==" and "continue")
|
|
|
|
use "core"
|
|
parse [%a == %b] as (%a = %b)
|
|
parse [%a == %b] as (%a is %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 not (%b 's id))
|
|
parse [%a mod %b] as (%a wrapped around %b)
|
|
parse [function %names %body, def %names %body] as (action %names %body)
|
|
parse [switch %branch_value %body] as (if %branch_value is: %body)
|
|
parse [None, Null] as (nil)
|
|
parse [True, true] as (yes)
|
|
parse [False, false] as (no)
|
|
parse [pass] as (do nothing)
|
|
parse [%a || %b] as (%a or %b)
|
|
parse [%a && %b] as (%a and %b)
|
|
parse [continue] as (do next)
|
|
parse [break] as (stop)
|
|
parse [let %thing = %value in %action] as (with [%thing = %value] %action)
|
|
parse [print %] as (say %)
|
|
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 [%cond ? %if_true %if_false] as (%if_true if %cond else %if_false)
|
|
compile [function %args %body, lambda %args %body] to:
|
|
%lua = (Lua value "(function(")
|
|
for %i = %arg in %args.value:
|
|
if (%i > 1): to %lua write ", "
|
|
to %lua write (%arg as lua expr)
|
|
|
|
to %lua write ")\n "
|
|
%body = (%body as lua)
|
|
lua> "\%body:convert_to_statements('return ');"
|
|
for % in %args.value: lua> "\%body:remove_free_vars(\%);"
|
|
to %lua write %body
|
|
to %lua write "\nend)"
|
|
return %lua
|
|
|
|
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)))" |