diff options
| author | Bruce Hill <bitbucket@bruce-hill.com> | 2017-11-01 16:49:11 -0700 |
|---|---|---|
| committer | Bruce Hill <bitbucket@bruce-hill.com> | 2017-11-01 16:49:11 -0700 |
| commit | f1a2c936de700ddf1c7ccb650be9598db40c13d4 (patch) | |
| tree | 237ac9a52295f0c5dbc0dbb5624e0c2e5940f263 /lib | |
| parent | cbd876673a4accc23aca16c015c20b819a2685b5 (diff) | |
Fixed some codegen stuff, optimized "say" for the common case of string
literals.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/core.nom | 1 | ||||
| -rw-r--r-- | lib/permissions.nom | 16 | ||||
| -rw-r--r-- | lib/utils.nom | 3 | ||||
| -rw-r--r-- | lib/utils2.nom | 10 |
4 files changed, 21 insertions, 9 deletions
diff --git a/lib/core.nom b/lib/core.nom index f00bd22..d5517f2 100644 --- a/lib/core.nom +++ b/lib/core.nom @@ -3,4 +3,5 @@ require "lib/utils.nom" require "lib/operators.nom" require "lib/control_flow.nom" require "lib/collections.nom" +require "lib/utils2.nom" require "lib/permissions.nom" diff --git a/lib/permissions.nom b/lib/permissions.nom index c60471e..543938f 100644 --- a/lib/permissions.nom +++ b/lib/permissions.nom @@ -6,14 +6,14 @@ require "lib/collections.nom" # Permission functions rule [standardize rules %rules] =: if ((type of %rules) == "string"): %rules = [%rules] - (nomsu "get_stub" [%]) for all %rules + %stubs = (nomsu "get_stubs" [%rules]) %result = [] - for %rule in %rules: - %stub = (nomsu "get_stub" [%rule]) + for %stub in %stubs: %def = ((nomsu's "defs")->%stub) - assert %def "Undefined rule: \(%stub)" - %aliases = (%def's "aliases") - for all %aliases: add % to %result + if %def: + %aliases = (%def's "aliases") + for all %aliases: add % to %result + ..else: add %def to %result unique %result rule [restrict %rules to within %elite_rules] =: @@ -52,3 +52,7 @@ rule [forbid %pleb_rules to use %rules] =: |Cannot individually restrict permissions for \(%) because it is currently |available to everyone. Perhaps you meant to use "restrict % to within %" instead? for all %pleb_rules: %whiteset's % = (nil) + +parse [rule %spec = %body restricted to %elite_rules] as: + rule %spec = %body + restrict (nomsu "get_stubs" [\%spec]) to within %elite_rules diff --git a/lib/utils.nom b/lib/utils.nom index b398827..965d338 100644 --- a/lib/utils.nom +++ b/lib/utils.nom @@ -27,9 +27,6 @@ compile [%str with %patt replaced with %sub, %str s/%patt/%sub] to: compile [%str with %patt replaced with %sub %n times, %str s/%patt/%sub/%n] to: "((\(%str as lua)):gsub(\(%patt as lua), \(%sub as lua), \(%n as lua)))" -compile [say %str] to: ".." - |nomsu:writeln(nomsu:stringify(\(%str as lua))) - # Number ranges compile [%start to %stop by %step, %start to %stop via %step] to: ".." |nomsu.utils.range(\(%start as lua), \(%stop as lua), \(%step as lua)) diff --git a/lib/utils2.nom b/lib/utils2.nom new file mode 100644 index 0000000..2562471 --- /dev/null +++ b/lib/utils2.nom @@ -0,0 +1,10 @@ +require "lib/metaprogramming.nom" +require "lib/utils.nom" +require "lib/control_flow.nom" +require "lib/operators.nom" + +compile [say %str] to: + if ((%str's "type") == "String"): + "nomsu:writeln(\(%str as lua))" + ..else: + "nomsu:writeln(nomsu:stringify(\(%str as lua)))" |
