diff --git a/changelog b/changelog index dd95712..5323199 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,4 @@ +20080217 wxh src/interp/i-intern.boot upload proper file. 20080217 tpd src/algebra/string.spad add function examples 20080217 tpd src/algebra/curve.spad add function examples 20080216 wxh src/interp/i-intern.boot use hashtable to speedup compiles diff --git a/src/interp/i-intern.boot.pamphlet b/src/interp/i-intern.boot.pamphlet index 7520954..9b9c660 100644 --- a/src/interp/i-intern.boot.pamphlet +++ b/src/interp/i-intern.boot.pamphlet @@ -739,14 +739,27 @@ get0(x,prop,e) == @ \subsection{get1} +We try to avoid lookups in the environment if it is clear that +the lookup will fail. The \verb|$envHashTable| was populated in +addBinding (see g-util.boot.pamphlet). <<*>>= get1(x,prop,e) == --this is the old get + negHash := nil null atom x => get(QCAR x,prop,e) + if $envHashTable and _ + (not(EQ($CategoryFrame,e))) and _ + (not(EQ(prop,"modemap"))) then + null (HGET($envHashTable,[x,prop])) => return nil + negHash := false prop="modemap" and $insideCapsuleFunctionIfTrue=true => - LASSOC("modemap",getProplist(x,$CapsuleModemapFrame)) - or get2(x,prop,e) - LASSOC(prop,getProplist(x,e)) or get2(x,prop,e) + ress:=LASSOC("modemap",getProplist(x,$CapsuleModemapFrame)) + or get2(x,prop,e) + ress + ress:=LASSOC(prop,getProplist(x,e)) or get2(x,prop,e) + if ress and negHash then + SAY ["get1",x,prop,ress and true] + ress @ \subsection{get2}