From f1a2c936de700ddf1c7ccb650be9598db40c13d4 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Wed, 1 Nov 2017 16:49:11 -0700 Subject: Fixed some codegen stuff, optimized "say" for the common case of string literals. --- lib/permissions.nom | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to '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 -- cgit v1.2.3