aboutsummaryrefslogtreecommitdiff
path: root/src/interp/i-intern.boot.pamphlet
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2007-11-07 20:54:59 +0000
committerdos-reis <gdr@axiomatics.org>2007-11-07 20:54:59 +0000
commit4edaea6cff2d604009b8f2723a9436b0fc97895d (patch)
treeeb5d3765b2e4f131610571cf5f15eef53419fca0 /src/interp/i-intern.boot.pamphlet
parent45ce0071c30e84b72e4c603660285fa6a462e7f7 (diff)
downloadopen-axiom-4edaea6cff2d604009b8f2723a9436b0fc97895d.tar.gz
remove more pamphlets
Diffstat (limited to 'src/interp/i-intern.boot.pamphlet')
-rw-r--r--src/interp/i-intern.boot.pamphlet478
1 files changed, 0 insertions, 478 deletions
diff --git a/src/interp/i-intern.boot.pamphlet b/src/interp/i-intern.boot.pamphlet
deleted file mode 100644
index aabd6a7e..00000000
--- a/src/interp/i-intern.boot.pamphlet
+++ /dev/null
@@ -1,478 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/interp i-intern.boot}
-\author{The Axiom Team}
-\maketitle
-\begin{abstract}
-\end{abstract}
-\eject
-\tableofcontents
-\eject
-
-\section{License}
-<<license>>=
--- Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
--- All rights reserved.
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions are
--- met:
---
--- - Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
---
--- - Redistributions in binary form must reproduce the above copyright
--- notice, this list of conditions and the following disclaimer in
--- the documentation and/or other materials provided with the
--- distribution.
---
--- - Neither the name of The Numerical ALgorithms Group Ltd. nor the
--- names of its contributors may be used to endorse or promote products
--- derived from this software without specific prior written permission.
---
--- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
--- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
--- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
--- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
--- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
--- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
--- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
--- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
--- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
--- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-@
-<<*>>=
-<<license>>
-
-import '"i-object"
-import '"ptrees"
-)package "BOOT"
-
-$useParserSrcPos := NIL
-$transferParserSrcPos := NIL
-
--- Making Trees
-
-mkAtree x ==
- -- maker of attrib tree from parser form
- mkAtree1 mkAtreeExpandMacros x
-
-mkAtreeWithSrcPos(form, posnForm) ==
- posnForm and $useParserSrcPos => pf2Atree(posnForm)
- transferSrcPosInfo(posnForm, mkAtree form)
-
-mkAtree1WithSrcPos(form, posnForm) ==
- transferSrcPosInfo(posnForm, mkAtree1 form)
-
-mkAtreeNodeWithSrcPos(form, posnForm) ==
- transferSrcPosInfo(posnForm, mkAtreeNode form)
-
-transferSrcPosInfo(pf, atree) ==
- not (pf and $transferParserSrcPos) => atree
- pos := pfPosOrNopos(pf)
- pfNoPosition?(pos) => atree
-
- -- following is a hack because parser code for getting filename
- -- seems wrong.
- fn := lnPlaceOfOrigin poGetLineObject(pos)
- if NULL fn or fn = '"strings" then fn := '"console"
-
- putSrcPos(atree, fn, pfSourceText(pf), pfLinePosn(pos), pfCharPosn(pos))
- atree
-
-mkAtreeExpandMacros x ==
- -- handle macro expansion. if the macros have args we require that
- -- we match the correct number of args
- if x isnt ["MDEF",:.] and x isnt ["DEF",["macro",:.],:.] then
- atom x and (m := isInterpMacro x) =>
- [args,:body] := m
- args => "doNothing"
- x := body
- x is [op,:argl] =>
- op = "QUOTE" => "doNothing"
- op = "where" and argl is [before,after] =>
- -- in a where clause, what follows "where" (the "after" parm
- -- above) might be a local macro, so do not expand the "before"
- -- part yet
- x := [op,before,mkAtreeExpandMacros after]
- argl := [mkAtreeExpandMacros a for a in argl]
- (m := isInterpMacro op) =>
- [args,:body] := m
- #args = #argl =>
- sl := [[a,:s] for a in args for s in argl]
- x := SUBLISNQ(sl,body)
- null args => x := [body,:argl]
- x := [op,:argl]
- x := [mkAtreeExpandMacros op,:argl]
- x
-
-mkAtree1 x ==
- -- first special handler for making attrib tree
- null x => throwKeyedMsg("S2IP0005",['"NIL"])
- VECP x => x
- atom x =>
- x in '(noBranch noMapVal) => x
- x in '(nil true false) => mkAtree2([x],x,NIL)
- x = '_/throwAway =>
- -- don't want to actually compute this
- tree := mkAtree1 '(void)
- putValue(tree,objNewWrap(voidValue(),$Void))
- putModeSet(tree,[$Void])
- tree
- getBasicMode x =>
- v := mkAtreeNode $immediateDataSymbol
- putValue(v,getBasicObject x)
- v
- IDENTP x => mkAtreeNode x
- keyedSystemError("S2II0002",[x])
- x is [op,:argl] => mkAtree2(x,op,argl)
- systemErrorHere '"mkAtree1"
-
--- mkAtree2 and mkAtree3 were created because mkAtree1 got so big
-
-mkAtree2(x,op,argl) ==
- nargl := #argl
- (op= "-") and (nargl = 1) and (INTEGERP CAR argl) =>
- mkAtree1(MINUS CAR argl)
- op=":" and argl is [y,z] => [mkAtreeNode "Declare",:argl]
- op="COLLECT" => [mkAtreeNode op,:transformCollect argl]
- op= "break" =>
- argl is [.,val] =>
- if val = '$NoValue then val := '(void)
- [mkAtreeNode op,mkAtree1 val]
- [mkAtreeNode op,mkAtree1 '(void)]
- op= "return" =>
- argl is [val] =>
- if val = '$NoValue then val := '(void)
- [mkAtreeNode op,mkAtree1 val]
- [mkAtreeNode op,mkAtree1 '(void)]
- op="exit" => mkAtree1 CADR argl
- op = "QUOTE" => [mkAtreeNode op,:argl]
- op="SEGMENT" =>
- argl is [a] => [mkAtreeNode op, mkAtree1 a]
- z :=
- null argl.1 => nil
- mkAtree1 argl.1
- [mkAtreeNode op, mkAtree1 argl.0,z]
- op in '(pretend is isnt) =>
- [mkAtreeNode op,mkAtree1 first argl,:rest argl]
- op = "::" =>
- [mkAtreeNode "COERCE",mkAtree1 first argl,CADR argl]
- x is ["@", expr, type] =>
- t := evaluateType unabbrev type
- t = '(DoubleFloat) and expr is [['_$elt, '(Float), 'float], :args] =>
- mkAtree1 [['_$elt, '(DoubleFloat), 'float], :args]
- t = '(DoubleFloat) and INTEGERP expr =>
- v := mkAtreeNode $immediateDataSymbol
- putValue(v,getBasicObject float expr)
- v
- t = '(Float) and INTEGERP expr =>
- mkAtree1 ["::", expr, t]
- typeIsASmallInteger(t) and INTEGERP expr =>
- mkAtree1 ["::", expr, t]
- [mkAtreeNode 'TARGET,mkAtree1 expr, type]
- (op="case") and (nargl = 2) =>
- [mkAtreeNode "case",mkAtree1 first argl,unabbrev CADR argl]
- op="REPEAT" => [mkAtreeNode op,:transformREPEAT argl]
- op="LET" and argl is [['construct,:.],rhs] =>
- [mkAtreeNode "LET",first argl,mkAtree1 rhs]
- op="LET" and argl is [[":",a,.],rhs] =>
- mkAtree1 ["SEQ",first argl,["LET",a,rhs]]
- op is ['_$elt,D,op1] =>
- op1 is "=" =>
- a' := [mkAtreeNode '_=,:[mkAtree1 arg for arg in argl]]
- [mkAtreeNode "Dollar",D,a']
- [mkAtreeNode "Dollar",D,mkAtree1 [op1,:argl]]
- op='_$elt =>
- argl is [D,a] =>
- INTEGERP a =>
- a = 0 => mkAtree1 [['_$elt,D,'Zero]]
- a = 1 => mkAtree1 [['_$elt,D,'One]]
- t := evaluateType unabbrev [D]
- typeIsASmallInteger(t) and SINTP a =>
- v := mkAtreeNode $immediateDataSymbol
- putValue(v,objNewWrap(a, t))
- v
- mkAtree1 ["*",a,[['_$elt,D,'One]]]
- [mkAtreeNode "Dollar",D,mkAtree1 a]
- keyedSystemError("S2II0003",['"$",argl,
- '"not qualifying an operator"])
- mkAtree3(x,op,argl)
-
-mkAtree3(x,op,argl) ==
- op="REDUCE" and argl is [op1,axis,body] =>
- [mkAtreeNode op,axis,mkAtree1 op1,mkAtree1 body]
- op="has" => [mkAtreeNode op, :argl]
- op="|" => [mkAtreeNode "AlgExtension",:[mkAtree1 arg for arg in argl]]
- op="=" => [mkAtreeNode "equation",:[mkAtree1 arg for arg in argl]]
- op="not" and argl is [["=",lhs,rhs]] =>
- [mkAtreeNode "not",[mkAtreeNode "=",mkAtree1 lhs,mkAtree1 rhs]]
- op="in" and argl is [var ,["SEGMENT",lb,ul]] =>
- upTest:=
- null ul => NIL
- mkLessOrEqual(var,ul)
- lowTest:=mkLessOrEqual(lb,var)
- z :=
- ul => ['and,lowTest,upTest]
- lowTest
- mkAtree1 z
- x is ["IF",p,"noBranch",a] => mkAtree1 ["IF",["not",p],a,"noBranch"]
- x is ["RULEDEF",:.] => [mkAtreeNode "RULEDEF",:CDR x]
- x is ["MDEF",sym,junk1,junk2,val] =>
- -- new macros look like macro f == or macro f(x) ===
- -- so transform into that format
- mkAtree1 ["DEF",["macro",sym],junk1,junk2,val]
- x is ["~=",a,b] => mkAtree1 ["not",["=",a,b]]
- x is ["+->",funargs,funbody] =>
- if funbody is [":",body,type] then
- types := [type]
- funbody := body
- else types := [NIL]
- v := collectDefTypesAndPreds funargs
- types := [:types,:v.1]
- [mkAtreeNode "ADEF",[v.0,types,[NIL for a in types],funbody],
- if v.2 then v.2 else true, false]
- x is ['ADEF,arg,:r] =>
- r := mkAtreeValueOf r
- v :=
- null arg => VECTOR(NIL,NIL,NIL)
- PAIRP arg and rest arg and first arg^= "|" =>
- collectDefTypesAndPreds ['Tuple,:arg]
- null rest arg => collectDefTypesAndPreds first arg
- collectDefTypesAndPreds arg
- [types,:r'] := r
- at := [fn(x,y) for x in rest types for y in v.1]
- r := [[first types,:at],:r']
- [mkAtreeNode "ADEF",[v.0,:r],if v.2 then v.2 else true,false]
- x is ["where",before,after] =>
- [mkAtreeNode "where",before,mkAtree1 after]
- x is ["DEF",["macro",form],.,.,body] =>
- [mkAtreeNode "MDEF",form,body]
- x is ["DEF",a,:r] =>
- r := mkAtreeValueOf r
- a is [op,:arg] =>
- v :=
- null arg => VECTOR(NIL,NIL,NIL)
- PAIRP arg and rest arg and first arg^= "|" =>
- collectDefTypesAndPreds ['Tuple,:arg]
- null rest arg => collectDefTypesAndPreds first arg
- collectDefTypesAndPreds arg
- [types,:r'] := r
- -- see case for ADEF above for defn of fn
- at := [fn(x,y) for x in rest types for y in v.1]
- r := [[first types,:at],:r']
- [mkAtreeNode 'DEF,[[op,:v.0],:r],if v.2 then v.2 else true,false]
- [mkAtreeNode 'DEF,[a,:r],true,false]
---x is ['when,y,pred] =>
--- y isnt ['DEF,a,:r] =>
--- keyedSystemError("S2II0003",['"when",y,'"improper argument form"])
--- a is [op,p1,:pr] =>
--- null pr => mkAtree1 ['DEF,[op,["|",p1,pred]],:r]
--- mkAtree1 ['DEF,[op,["|",['Tuple,p1,:pr],pred]],:r]
--- [mkAtreeNode 'DEF, CDR y,pred,false]
---x is ['otherwise,u] =>
--- throwMessage '" otherwise is no longer supported."
- z :=
- getBasicMode op =>
- v := mkAtreeNode $immediateDataSymbol
- putValue(v,getBasicObject op)
- v
- atom op => mkAtreeNode op
- mkAtree1 op
- [z,:[mkAtree1 y for y in argl]]
- where
- fn(a,b) ==
- a and b =>
- if a = b then a
- else throwMessage '" double declaration of parameter"
- a or b
-
-collectDefTypesAndPreds args ==
- -- given an arglist to a DEF-like form, this function returns
- -- a vector of three things:
- -- slot 0: just the variables
- -- slot 1: the type declarations on the variables
- -- slot 2: a predicate for all arguments
- pred := types := vars := NIL
- junk :=
- IDENTP args =>
- types := [NIL]
- vars := [args]
- args is [":",var,type] =>
- types := [type]
- var is ["|",var',p] =>
- vars := [var']
- pred := addPred(pred,p)
- vars := [var]
- args is ["|",var,p] =>
- pred := addPred(pred,p)
- var is [":",var',type] =>
- types := [type]
- vars := [var']
- var is ['Tuple,:.] or var is ["|",:.] =>
- v := collectDefTypesAndPreds var
- vars := [:vars,:v.0]
- types := [:types,:v.1]
- pred := addPred(pred,v.2)
- vars := [var]
- types := [NIL]
- args is ['Tuple,:args'] =>
- for a in args' repeat
- v := collectDefTypesAndPreds a
- vars := [:vars,first v.0]
- types := [:types,first v.1]
- pred := addPred(pred,v.2)
- types := [NIL]
- vars := [args]
- VECTOR(vars,types,pred)
- where
- addPred(old,new) ==
- null new => old
- null old => new
- ['and,old,new]
-
-mkAtreeValueOf l ==
- -- scans for ['valueOf,atom]
- not CONTAINED("valueOf",l) => l
- mkAtreeValueOf1 l
-
-mkAtreeValueOf1 l ==
- null l or atom l or null rest l => l
- l is ["valueOf",u] and IDENTP u =>
- v := mkAtreeNode $immediateDataSymbol
- putValue(v,get(u,"value",$InteractiveFrame) or
- objNewWrap(u,['Variable,u]))
- v
- [mkAtreeValueOf1 x for x in l]
-
-mkLessOrEqual(lhs,rhs) == ["not",["<",rhs,lhs]]
-
-atree2EvaluatedTree x == atree2Tree1(x,true)
-
-atree2Tree1(x,evalIfTrue) ==
- (triple := getValue x) and objMode(triple) ^= $EmptyMode =>
- coerceOrCroak(triple,$OutputForm,$mapName)
- isLeaf x =>
- VECP x => x.0
- x
- [atree2Tree1(y,evalIfTrue) for y in x]
-
---% Environment Utilities
-
--- getValueFromEnvironment(x,mode) ==
--- $failure ^= (v := getValueFromSpecificEnvironment(x,mode,$env)) => v
--- $failure ^= (v := getValueFromSpecificEnvironment(x,mode,$e)) => v
--- throwKeyedMsg("S2IE0001",[x])
-getValueFromEnvironment(x,mode) ==
- $failure ^= (v := getValueFromSpecificEnvironment(x,mode,$env)) => v
- $failure ^= (v := getValueFromSpecificEnvironment(x,mode,$e)) => v
- null(v := coerceInt(objNew(x, ['Variable, x]), mode)) =>
- throwKeyedMsg("S2IE0001",[x])
- objValUnwrap v
-
-getValueFromSpecificEnvironment(id,mode,e) ==
- PAIRP e =>
- u := get(id,'value,e) =>
- objMode(u) = $EmptyMode =>
- systemErrorHere '"getValueFromSpecificEnvironment"
- v := objValUnwrap u
- mode isnt ['Mapping,:mapSig] => v
- v isnt ['MAP,:.] => v
- v' := coerceInt(u,mode)
- null v' => throwKeyedMsg("S2IC0002",[objMode u,mode])
- objValUnwrap v'
-
- m := get(id,'mode,e) =>
- -- See if we can make it into declared mode from symbolic form
- -- For example, (x : P[x] I; x + 1)
- if isPartialMode(m) then m' := resolveTM(['Variable,id],m)
- else m' := m
- m' and
- (u := coerceInteractive(objNewWrap(id,['Variable,id]),m')) =>
- objValUnwrap u
-
- throwKeyedMsg("S2IE0002",[id,m])
- $failure
- $failure
-
-addBindingInteractive(var,proplist,e is [[curContour,:.],:.]) ==
- -- change proplist of var in e destructively
- u := ASSQ(var,curContour) =>
- RPLACD(u,proplist)
- e
- RPLAC(CAAR e,[[var,:proplist],:curContour])
- e
-
-augProplistInteractive(proplist,prop,val) ==
- u := ASSQ(prop,proplist) =>
- RPLACD(u,val)
- proplist
- [[prop,:val],:proplist]
-
-getFlag x == get("--flags--",x,$e)
-
-putFlag(flag,value) ==
- $e := put ("--flags--", flag, value, $e)
-
-getI(x,prop) == get(x,prop,$InteractiveFrame)
-
-putI(x,prop,val) == ($InteractiveFrame := put(x,prop,val,$InteractiveFrame))
-
-getIProplist x == getProplist(x,$InteractiveFrame)
-
-removeBindingI x ==
- RPLAC(CAAR $InteractiveFrame,deleteAssocWOC(x,CAAR $InteractiveFrame))
-
-rempropI(x,prop) ==
- id:=
- atom x => x
- first x
- getI(id,prop) =>
- recordNewValue(id,prop,NIL)
- recordOldValue(id,prop,getI(id,prop))
- $InteractiveFrame:= remprop(id,prop,$InteractiveFrame)
-
-remprop(x,prop,e) ==
- u:= ASSOC(prop,pl:= getProplist(x,e)) =>
- e:= addBinding(x,DELASC(first u,pl),e)
- e
- e
-
-fastSearchCurrentEnv(x,currentEnv) ==
- u:= QLASSQ(x,CAR currentEnv) => u
- while (currentEnv:= QCDR currentEnv) repeat
- u:= QLASSQ(x,CAR currentEnv) => u
-
-putIntSymTab(x,prop,val,e) ==
- null atom x => putIntSymTab(first x,prop,val,e)
- pl0 := pl := search(x,e)
- pl :=
- null pl => [[prop,:val]]
- u := ASSQ(prop,pl) =>
- RPLACD(u,val)
- pl
- lp := LASTPAIR pl
- u := [[prop,:val]]
- RPLACD(lp,u)
- pl
- EQ(pl0,pl) => e
- addIntSymTabBinding(x,pl,e)
-
-addIntSymTabBinding(var,proplist,e is [[curContour,:.],:.]) ==
- -- change proplist of var in e destructively
- u := ASSQ(var,curContour) =>
- RPLACD(u,proplist)
- e
- RPLAC(CAAR e,[[var,:proplist],:curContour])
- e
-
-
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}