From 5f43d3d90da0109a83feca96b96399f5eaa72d7c Mon Sep 17 00:00:00 2001 From: dos-reis Date: Sun, 16 Dec 2007 17:14:47 +0000 Subject: * nruncomp.boot (NOTES): Encode quasiquoted values too. ($lookupDefaults): Define. (newLookupInDomain): Look up in the add-chain first. (newLookupInCategories): Likewise. (lazyMatch): Quasiquote is now like a Mapping. (newExpandLocalTypeForm): Quasiquote is no longer like QUOTE. * nrungo.boot (lookupInDomainAndDefaults): New. (compiledLookup): Use it. --- src/interp/ChangeLog | 11 +++++++++++ src/interp/nruncomp.boot | 3 ++- src/interp/nrunfast.boot | 12 +++++++----- src/interp/nrungo.boot | 17 +++++++++++++---- 4 files changed, 33 insertions(+), 10 deletions(-) (limited to 'src/interp') diff --git a/src/interp/ChangeLog b/src/interp/ChangeLog index 212bd868..97546f58 100644 --- a/src/interp/ChangeLog +++ b/src/interp/ChangeLog @@ -1,3 +1,14 @@ +2007-12-16 Gabriel Dos Reis + + * nruncomp.boot (NOTES): Encode quasiquoted values too. + ($lookupDefaults): Define. + (newLookupInDomain): Look up in the add-chain first. + (newLookupInCategories): Likewise. + (lazyMatch): Quasiquote is now like a Mapping. + (newExpandLocalTypeForm): Quasiquote is no longer like QUOTE. + * nrungo.boot (lookupInDomainAndDefaults): New. + (compiledLookup): Use it. + 2007-12-15 Gabriel Dos Reis * nruncomp.boot (buildFunctor): Use $NRTbase instead of hardcoded diff --git a/src/interp/nruncomp.boot b/src/interp/nruncomp.boot index d986a708..b7d91c33 100644 --- a/src/interp/nruncomp.boot +++ b/src/interp/nruncomp.boot @@ -113,7 +113,8 @@ NRTencode(x,y) == encode(x,y,true) where encode(x,compForm,firstTime) == QCAR x='Record or x is ['Union,['_:,a,b],:.] => [QCAR x,:[['_:,a,encode(b,c,false)] for [.,a,b] in QCDR x for [.,=a,c] in CDR compForm]] - isQuasiquote x => x + (x' := isQuasiquote x) => + quasiquote encode(x',isQuasiquote compForm,false) constructor? QCAR x or MEMQ(QCAR x,'(Union Mapping)) => [QCAR x,:[encode(y,z,false) for y in QCDR x for z in CDR compForm]] ['NRTEVAL,NRTreplaceAllLocalReferences COPY_-TREE lispize compForm] diff --git a/src/interp/nrunfast.boot b/src/interp/nrunfast.boot index d791335a..6a6c3ed4 100644 --- a/src/interp/nrunfast.boot +++ b/src/interp/nrunfast.boot @@ -38,6 +38,9 @@ import '"c-util" ++ $doNotCompressHashTableIfTrue := false +++ +$lookupDefaults := false + --======================================================================= -- Basic Functions --======================================================================= @@ -222,7 +225,7 @@ newLookupInDomain(op,sig,addFormDomain,dollar,index) == INTEGERP KAR addFormCell => or/[newLookupInDomain(op,sig,addFormDomain,dollar,i) for i in addFormCell] if null VECP addFormCell then lazyDomainSet(addFormCell,addFormDomain,index) - lookupInDomainVector(op,sig,addFormDomain.index,dollar) + lookupInDomainAndDefaults(op,sig,addFormDomain.index,dollar,false) nil --======================================================= @@ -368,7 +371,7 @@ newLookupInCategories1(op,sig,dom,dollar) == null package => nil if $monitorNewWorld then sayLooking1('"Looking at instantiated package ",package) - res := lookupInDomainVector(op,sig,package,dollar) => + res := lookupInDomainAndDefaults(op,sig,package,dollar,false) => if $monitorNewWorld = true then sayBrightly '"candidate default package succeeds" return res @@ -428,9 +431,8 @@ lazyMatch(source,lazyt,dollar,domain) == MEMQ(op,'(Record Union)) and first argl is [":",:.] => and/[stag = atag and lazyMatchArg(s,a,dollar,domain) for [.,stag,s] in sargl for [.,atag,a] in argl] - MEMQ(op,'(Union Mapping QUOTE)) => + MEMQ(op,'(Union Mapping _[_|_|_] QUOTE)) => and/[lazyMatchArg(s,a,dollar,domain) for s in sargl for a in argl] - op="[||]" => source = lazyt coSig := GETDATABASE(op,'COSIG) NULL coSig => error ["bad Constructor op", op] and/[lazyMatchArg2(s,a,dollar,domain,flag) @@ -513,7 +515,7 @@ newExpandLocalTypeForm([functorName,:argl],dollar,domain) == for [.,tag,dom] in argl]] MEMQ(functorName, '(Union Mapping)) => [functorName,:[newExpandLocalTypeArgs(a,dollar,domain,true) for a in argl]] - functorName in '(QUOTE _[_|_|_]) => [functorName,:argl] + functorName = "QUOTE" => [functorName,:argl] coSig := GETDATABASE(functorName,'COSIG) NULL coSig => error ["bad functorName", functorName] [functorName,:[newExpandLocalTypeArgs(a,dollar,domain,flag) diff --git a/src/interp/nrungo.boot b/src/interp/nrungo.boot index 968f4c09..f9b1f17f 100644 --- a/src/interp/nrungo.boot +++ b/src/interp/nrungo.boot @@ -57,10 +57,8 @@ compiledLookup(op,sig,dollar) == basicLookup(op,sig,domain,dollar) == domain.1 is ['lookupInDomain,:.] => lookupInDomainVector(op,sig,domain,dollar) ----------new world code follows------------ - $lookupDefaults : local := nil -- new world - u := lookupInDomainVector(op,sig,domain,dollar) => u - $lookupDefaults := true - lookupInDomainVector(op,sig,domain,dollar) + u := lookupInDomainAndDefaults(op,sig,domain,dollar,false) => u + lookupInDomainAndDefaults(op,sig,domain,dollar,true) compiledLookupCheck(op,sig,dollar) == fn := compiledLookup(op,sig,dollar) @@ -194,6 +192,17 @@ lookupInDomainVector(op,sig,domain,dollar) == slot1 := domain.1 SPADCALL(op,sig,dollar,slot1) + +++ same as lookupInDomainVector except that the use of defaults +++ (either in category packages or add-chains) is controlled +++ by `useDefaults'. +lookupInDomainAndDefaults(op,sig,domain,dollar,useDefaults) == + savedLookupDefaults := $lookupDefaults + $lookupDefaults := useDefaults + fun := lookupInDomainVector(op,sig,domain,dollar) + $lookupDefaults := savedLookupDefaults + fun + --======================================================= -- Category Default Lookup (from goGet or lookupInAddChain) --======================================================= -- cgit v1.2.3