Switch to edit mode.
Name(s): eval_key1: {key, who} = args
2: type = typeof(key)
3: if (!(type in {$LIST, $OBJ}))
4: return 1
5: elseif (typeof(key) == $OBJ)
6: return who == key || $object_utils:contains(who, key)
7: endif
8: op = key[1]
9: if (op == "!")
10: return !this:eval_key(key[2], who)
11: elseif (op == "?")
12: return key[2]:is_unlocked_for(who)
13: elseif (op == "^")
14: return $object_utils:isa(who, key[2]) || $object_utils:hasa(who, key[2])
15: elseif (op == "&&")
16: return this:eval_key(key[2], who) && this:eval_key(key[3], who)
17: elseif (op == "||")
18: return this:eval_key(key[2], who) || this:eval_key(key[3], who)
19: else
20: raise(E_INVARG, op)
21: endif
22: "Last modified by Dax (#789) on Mon Aug 7 21:53:28 2006 MDT."