diff options
Diffstat (limited to 'src/interp/define.boot')
-rw-r--r-- | src/interp/define.boot | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/interp/define.boot b/src/interp/define.boot index 829faec9..585c5461 100644 --- a/src/interp/define.boot +++ b/src/interp/define.boot @@ -184,19 +184,20 @@ hasToInfo (pred is ["has",a,b]) == ++ may or may not hold at runtime. knownInfo(pred,env,tbl == makeTable function valueEq?) == pred=true => true - listMember?(pred,get("$Information","special",env)) => true + tableValue(tbl,pred) => true -- re-use previously computed value + listMember?(pred,get("$Information","special",env)) => + tableValue(tbl,pred) := true pred is ["OR",:l] => or/[knownInfo(u,env,tbl) for u in l] pred is ["AND",:l] => and/[knownInfo(u,env,tbl) for u in l] pred is ["or",:l] => or/[knownInfo(u,env,tbl) for u in l] pred is ["and",:l] => and/[knownInfo(u,env,tbl) for u in l] - tableValue(tbl,pred) => true -- re-use previously computed value pred is ["ATTRIBUTE",name,attr] => v := compForMode(name,$EmptyMode,env) or return stackAndThrow('"can't find category of %1pb",[name]) [vv,.,.] := compMakeCategoryObject(v.mode,env) or return stackAndThrow('"can't make category of %1pb",[name]) listMember?(attr,categoryAttributes vv) => - tableTable(tbl,pred) := true + tableValue(tbl,pred) := true x := assoc(attr,categoryAttributes vv) => --format is a list of two elements: information, predicate tableValue(tbl,pred) := knownInfo(second x,env,tbl) |