aboutsummaryrefslogtreecommitdiff
path: root/lib/permissions.nom
diff options
context:
space:
mode:
authorBruce Hill <bitbucket@bruce-hill.com>2017-11-01 16:49:11 -0700
committerBruce Hill <bitbucket@bruce-hill.com>2017-11-01 16:49:11 -0700
commitf1a2c936de700ddf1c7ccb650be9598db40c13d4 (patch)
tree237ac9a52295f0c5dbc0dbb5624e0c2e5940f263 /lib/permissions.nom
parentcbd876673a4accc23aca16c015c20b819a2685b5 (diff)
Fixed some codegen stuff, optimized "say" for the common case of string
literals.
Diffstat (limited to 'lib/permissions.nom')
-rw-r--r--lib/permissions.nom16
1 files changed, 10 insertions, 6 deletions
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