aboutsummaryrefslogtreecommitdiff
path: root/src/interp
diff options
context:
space:
mode:
authorGabriel Dos Reis <gdr@axiomatics.org>2016-01-21 20:41:53 -0800
committerGabriel Dos Reis <gdr@axiomatics.org>2016-01-21 20:41:53 -0800
commit28501b2d6ae273f3be80b087f4e508ffcff3c182 (patch)
treea5c60bf60309952729342f67eedc2a5cc7889b13 /src/interp
parente572854c495b63ee446831a7d61a27e5bc84550f (diff)
downloadopen-axiom-28501b2d6ae273f3be80b087f4e508ffcff3c182.tar.gz
getConstructorAncestorsFromDB: get them from generated code
Ancestors for category constructors are stored in databases with parameter names of the form #1, #2, etc. called "formals", instead of the user-writtern parameters in the input souce code. However, the ancestors as previously stored in generated code used the input source-level parameter names. Changed to formals, so no rewrite needed before making databases.
Diffstat (limited to 'src/interp')
-rw-r--r--src/interp/daase.lisp14
-rw-r--r--src/interp/database.boot7
-rw-r--r--src/interp/define.boot2
3 files changed, 7 insertions, 16 deletions
diff --git a/src/interp/daase.lisp b/src/interp/daase.lisp
index 4bfd30da..294936ff 100644
--- a/src/interp/daase.lisp
+++ b/src/interp/daase.lisp
@@ -453,7 +453,7 @@
(setf (|dbCategory| dbstruct) (sixth item))
(setf (get (seventh item) 'abbreviationfor) (first item)) ;invert
; (setf (|dbDualSignature| dbstruct) (eighth item))
- (setf (|dbAncestors| dbstruct) (nth 10 item))
+; (setf (|dbAncestors| dbstruct) (nth 10 item))
; (setf (|dbSuperDomain| dbstruct) (nth 11 item))
))
@@ -659,10 +659,6 @@
(when (setq data (get constructor 'abbreviationfor))))
(defaultdomain
(setq data (cadr (assoc constructor *defaultdomain-list*))))
- (ancestors
- (setq stream *interp-stream*)
- (when struct
- (setq data (|dbAncestors| struct))))
(sourcefile
(setq stream *browse-stream*)
(when struct
@@ -697,8 +693,6 @@
(setf (|dbModule| struct) data))
(constructor
(setf (|dbConstructor| struct) data))
- (ancestors
- (setf (|dbAncestors| struct) data))
(documentation
(setf (database-documentation struct) data))
(users
@@ -845,12 +839,6 @@
(fetchdata alist in "superDomain"))
(addoperations key oldmaps)
(unless make-database?
- (if (eq kind '|category|)
- (setf (|dbAncestors| dbstruct)
- (|applySubst|
- (|pairList| (cdr constructorform)
- |$FormalMapVariableList|)
- (fetchdata alist in "ancestors"))))
(|updateDatabase| key key systemdir?) ;makes many hashtables???
(|installConstructor| key kind) ;used to be key cname ...
(|updateCategoryTable| key kind)
diff --git a/src/interp/database.boot b/src/interp/database.boot
index da33e22b..f7834c15 100644
--- a/src/interp/database.boot
+++ b/src/interp/database.boot
@@ -101,10 +101,13 @@ getConstructorKindFromDB ctor ==
db := constructorDB ctor => dbConstructorKind db
nil
-getConstructorAncestorsFromDB: %Symbol -> %List %Constructor
+getConstructorAncestorsFromDB: %Symbol -> %List %Pair(%Instantiation,%Code)
getConstructorAncestorsFromDB ctor ==
builtinConstructor? ctor => nil -- FIXME: catch at cal sites.
- GETDATABASE(ctor,"ANCESTORS")
+ db := constructorDB ctor
+ if not dbBeingDefined? db and dbAncestors db isnt [.,:.] then
+ loadDBIfNecessary db
+ dbAncestors db
++ return the modemap of the constructor or the instantiation
++ of the constructor `form'.
diff --git a/src/interp/define.boot b/src/interp/define.boot
index a1c1765f..788e4827 100644
--- a/src/interp/define.boot
+++ b/src/interp/define.boot
@@ -1176,7 +1176,7 @@ compDefineCategory2(db,form,signature,body,m,e,$formalArgList) ==
dbConstructorModemap(db) :=
[[parForm,:parSignature],[buildConstructorCondition db,$op]]
dbPrincipals(db) := getParentsFor db
- dbAncestors(db) := computeAncestorsOf(db,nil)
+ dbAncestors(db) := applySubst(pairlis,computeAncestorsOf(db,nil))
dbModemaps(db) := modemapsFromCategory(db,[op',:sargl],formalBody,signature')
[fun,$Category,e]