aboutsummaryrefslogtreecommitdiff
path: root/src/interp
diff options
context:
space:
mode:
Diffstat (limited to 'src/interp')
-rw-r--r--src/interp/br-data.boot8
-rw-r--r--src/interp/cattable.boot3
-rw-r--r--src/interp/database.boot3
-rw-r--r--src/interp/define.boot13
4 files changed, 16 insertions, 11 deletions
diff --git a/src/interp/br-data.boot b/src/interp/br-data.boot
index d4d41461..dbc7eb16 100644
--- a/src/interp/br-data.boot
+++ b/src/interp/br-data.boot
@@ -94,11 +94,11 @@ buildLibdb(:options) == --called by buildDatabase (database.boot)
removeFile '"temp.text"
buildLibdbConEntry conname ==
- null getConstructorModemap conname => nil
+ builtinConstructor? conname => nil
abb:= getConstructorAbbreviationFromDB conname
$conname := conname
- conform := getConstructorFormFromDB conname or [conname] --hack for Category,..
- $conform := dbMkForm substitute('T,"T$",conform)
+ conform := getConstructorFormFromDB conname
+ $conform := dbMkForm substitute("T","T$",conform)
null $conform => nil
$exposed? := (isExposedConstructor conname => '"x"; '"n")
$doc := getConstructorDocumentationFromDB conname
@@ -441,7 +441,7 @@ getDefaultPackageClients con == --called by mkUsersHashTable
--============================================================================
mkDependentsHashTable() == --called by buildDatabase (database.boot)
$depTb := MAKE_-HASH_-TABLE()
- for nam in allConstructors() repeat
+ for nam in allConstructors() | not builtinConstructor? nam repeat
for con in getArgumentConstructors nam repeat
tableValue($depTb,con) := [nam,:tableValue($depTb,con)]
for [k,:v] in entries $depTb repeat
diff --git a/src/interp/cattable.boot b/src/interp/cattable.boot
index a25c91b5..4cd1d444 100644
--- a/src/interp/cattable.boot
+++ b/src/interp/cattable.boot
@@ -61,7 +61,8 @@ genCategoryTable() ==
genTempCategoryTable()
domainTable :=
[addDomainToTable(con,getConstrCat getConstructorCategory con)
- for con in allConstructors() | getConstructorKindFromDB con is "domain"]
+ for con in allConstructors() | not builtinFunctorName? con
+ and getConstructorKindFromDB con is "domain"]
-- $nonLisplibDomains, $noCategoryDomains are set in BUILDOM BOOT
specialDs := setDifference($nonLisplibDomains,$noCategoryDomains)
domainTable:= [:[addDomainToTable(id, getConstrCat eval([id]).3)
diff --git a/src/interp/database.boot b/src/interp/database.boot
index dc942f85..648ce919 100644
--- a/src/interp/database.boot
+++ b/src/interp/database.boot
@@ -82,7 +82,8 @@ getConstructorAncestorsFromDB ctor ==
getConstructorModemap: %Constructor -> %Mode
getConstructorModemap ctor ==
GETDATABASE(ctor, 'CONSTRUCTORMODEMAP)
-
+ or dbConstructorModemap loadDBIfNecessary constructorDB ctor
+
getConstructorFormFromDB: %Constructor -> %Form
getConstructorFormFromDB ctor ==
GETDATABASE(ctor,"CONSTRUCTORFORM")
diff --git a/src/interp/define.boot b/src/interp/define.boot
index c13b52f7..5e46a464 100644
--- a/src/interp/define.boot
+++ b/src/interp/define.boot
@@ -517,15 +517,15 @@ getXmode(x,e) ==
NRTgetLookupFunction(db,addForm,env) ==
$why: local := nil
domform := dbSubstituteFormals(db,dbConstructorForm db)
- exCategory := dbCategory db
+ cat := dbCategory db
addForm isnt [.,:.] =>
ident? addForm and (m := getmode(addForm,env)) ~= nil and
isCategoryForm(m,env) and
- extendsCategory(db,domform,exCategory,dbSubstituteFormals(db,m),env) =>
+ extendsCategory(db,domform,cat,dbSubstituteFormals(db,m),env) =>
'lookupIncomplete
'lookupComplete
addForm := dbSubstituteFormals(db,addForm)
- NRTextendsCategory1(db,domform,exCategory,getExportCategory addForm,env) =>
+ NRTextendsCategory1(db,domform,cat,getBaseExports(db,addForm),env) =>
'lookupIncomplete
[u,msg,:v] := $why
SAY '"--------------non extending category----------------------"
@@ -537,12 +537,15 @@ NRTgetLookupFunction(db,addForm,env) ==
SAY '"----------------------------------------------------------"
'lookupComplete
-getExportCategory form ==
+getBaseExports(db,form) ==
[op,:argl] := form
op is 'Record => ['RecordCategory,:argl]
op is 'Union => ['UnionCategory,:argl]
op is 'Enumeration => ['EnumerationCategory,:argl]
op is 'Mapping => ['MappingCategory,:argl]
+ op is '%Comma => ['Join,
+ :[getBaseExports(db,substSlotNumbers(x,dbTemplate db,dbConstructorForm db))
+ for x in argl]]
[[.,target,:tl],:.] := getConstructorModemap op
applySubst(pairList($FormalMapVariableList,argl),target)
@@ -562,7 +565,7 @@ extendsCategory(db,dom,u,v,env) ==
v is ["CATEGORY",.,:l] => and/[extendsCategory(db,dom,u,x,env) for x in l]
v is ["SubsetCategory",cat,d] =>
extendsCategory(db,dom,u,cat,env) and isSubset(dom,d,env)
- v := substSlotNumbers(v,dbTemplate db,$functorForm)
+ v := substSlotNumbers(v,dbTemplate db,dbConstructorForm db)
extendsCategoryBasic(dom,u,v,env) => true
$why :=
v is ['SIGNATURE,op,sig,:.] =>