diff options
| author | dos-reis <gdr@axiomatics.org> | 2008-07-04 16:08:48 +0000 | 
|---|---|---|
| committer | dos-reis <gdr@axiomatics.org> | 2008-07-04 16:08:48 +0000 | 
| commit | 897248c1939a687b7af06e64c59592a52edf1030 (patch) | |
| tree | 6f986f89d52b5c94f88b1ff0fc49e1ace365c587 | |
| parent | ce7fb3cef0b7099970aa5a83d656a3ed39cec630 (diff) | |
| download | open-axiom-897248c1939a687b7af06e64c59592a52edf1030.tar.gz | |
	* interp/category.boot (isCategory): Document.
	(isCategoryForm): Likewise.  Tidy.
	(mkCategory): Likewise.
| -rwxr-xr-x | configure | 18 | ||||
| -rw-r--r-- | configure.ac | 2 | ||||
| -rw-r--r-- | configure.ac.pamphlet | 2 | ||||
| -rw-r--r-- | src/ChangeLog | 6 | ||||
| -rw-r--r-- | src/interp/category.boot | 117 | 
5 files changed, 88 insertions, 57 deletions
@@ -1,6 +1,6 @@  #! /bin/sh  # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.60 for OpenAxiom 1.2.0-2008-07-02. +# Generated by GNU Autoconf 2.60 for OpenAxiom 1.2.0-2008-07-04.  #  # Report bugs to <open-axiom-bugs@lists.sf.net>.  # @@ -713,8 +713,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}  # Identity of this package.  PACKAGE_NAME='OpenAxiom'  PACKAGE_TARNAME='openaxiom' -PACKAGE_VERSION='1.2.0-2008-07-02' -PACKAGE_STRING='OpenAxiom 1.2.0-2008-07-02' +PACKAGE_VERSION='1.2.0-2008-07-04' +PACKAGE_STRING='OpenAxiom 1.2.0-2008-07-04'  PACKAGE_BUGREPORT='open-axiom-bugs@lists.sf.net'  ac_unique_file="src/Makefile.pamphlet" @@ -1403,7 +1403,7 @@ if test "$ac_init_help" = "long"; then    # Omit some internal or obsolete options to make the list less imposing.    # This message is too long to be a string in the A/UX 3.1 sh.    cat <<_ACEOF -\`configure' configures OpenAxiom 1.2.0-2008-07-02 to adapt to many kinds of systems. +\`configure' configures OpenAxiom 1.2.0-2008-07-04 to adapt to many kinds of systems.  Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1473,7 +1473,7 @@ fi  if test -n "$ac_init_help"; then    case $ac_init_help in -     short | recursive ) echo "Configuration of OpenAxiom 1.2.0-2008-07-02:";; +     short | recursive ) echo "Configuration of OpenAxiom 1.2.0-2008-07-04:";;     esac    cat <<\_ACEOF @@ -1577,7 +1577,7 @@ fi  test -n "$ac_init_help" && exit $ac_status  if $ac_init_version; then    cat <<\_ACEOF -OpenAxiom configure 1.2.0-2008-07-02 +OpenAxiom configure 1.2.0-2008-07-04  generated by GNU Autoconf 2.60  Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -1591,7 +1591,7 @@ cat >config.log <<_ACEOF  This file contains any messages produced by compilers while  running configure, to aid debugging if configure makes a mistake. -It was created by OpenAxiom $as_me 1.2.0-2008-07-02, which was +It was created by OpenAxiom $as_me 1.2.0-2008-07-04, which was  generated by GNU Autoconf 2.60.  Invocation command line was    $ $0 $@ @@ -26074,7 +26074,7 @@ exec 6>&1  # report actual input values of CONFIG_FILES etc. instead of their  # values after options handling.  ac_log=" -This file was extended by OpenAxiom $as_me 1.2.0-2008-07-02, which was +This file was extended by OpenAxiom $as_me 1.2.0-2008-07-04, which was  generated by GNU Autoconf 2.60.  Invocation command line was    CONFIG_FILES    = $CONFIG_FILES @@ -26123,7 +26123,7 @@ Report bugs to <bug-autoconf@gnu.org>."  _ACEOF  cat >>$CONFIG_STATUS <<_ACEOF  ac_cs_version="\\ -OpenAxiom config.status 1.2.0-2008-07-02 +OpenAxiom config.status 1.2.0-2008-07-04  configured by $0, generated by GNU Autoconf 2.60,    with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/configure.ac b/configure.ac index 8ed7074c..795bee1a 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@  sinclude(config/open-axiom.m4)  sinclude(config/aclocal.m4) -AC_INIT([OpenAxiom], [1.2.0-2008-07-02],  +AC_INIT([OpenAxiom], [1.2.0-2008-07-04],           [open-axiom-bugs@lists.sf.net])  AC_CONFIG_AUX_DIR(config) diff --git a/configure.ac.pamphlet b/configure.ac.pamphlet index 0751ac4e..d102d419 100644 --- a/configure.ac.pamphlet +++ b/configure.ac.pamphlet @@ -1103,7 +1103,7 @@ information:  <<Autoconf init>>=  sinclude(config/open-axiom.m4)  sinclude(config/aclocal.m4) -AC_INIT([OpenAxiom], [1.2.0-2008-07-02],  +AC_INIT([OpenAxiom], [1.2.0-2008-07-04],           [open-axiom-bugs@lists.sf.net])  @ diff --git a/src/ChangeLog b/src/ChangeLog index 4927e3e9..cb3b7d94 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2008-07-04  Gabriel Dos Reis  <gdr@cs.tamu.edu> + +	* interp/category.boot (isCategory): Document. +	(isCategoryForm): Likewise.  Tidy. +	(mkCategory): Likewise. +  2008-07-03  Gabriel Dos Reis  <gdr@cs.tamu.edu>  	* interp/Makefile.pamphlet (OBJS): Don't include nruntime.$(FASLEXT). diff --git a/src/interp/category.boot b/src/interp/category.boot index 90145569..9568c605 100644 --- a/src/interp/category.boot +++ b/src/interp/category.boot @@ -34,8 +34,21 @@  import g_-util  namespace BOOT + +++ Returns true if `a' is a category (runtime) object. +isCategory: %Thing -> %Boolean +isCategory a ==  +  REFVECP a and #a > 5 and getShellEntry(a,3) = $Category + +++ Return true if the form `x' designates an instantiaion of a +++ category constructor known to the global database or the +++ envronement `e'. +isCategoryForm: (%Form,%Env) -> %Boolean +isCategoryForm(x,e) == +  atom x => u:= get(x,"macro",e) => isCategoryForm(u,e) +  categoryForm? first x --- Functions for building categories +--% Functions for building categories  CategoryPrint(D,$e) ==    SAY "--------------------------------------" @@ -56,10 +69,17 @@ CategoryPrint(D,$e) ==      null u => SAY "another domain"      atom first u => SAY("Alternate View corresponding to: ",u)      PRETTYPRINT u -  + +++ Returns a fresly built category object for a domain or package +++ (as indicated by `domainOrPackage'), with signature list +++ designated by `sigList', attribute list designated by `attList, +++ domain list designatured by `domList', and a princical ancestor +++ category object designated by `PrincipalAncestor'. +mkCategory: (%Symbol,%List,%List,%List, %Maybe %Shell) -> %Shell  mkCategory(domainOrPackage,sigList,attList,domList,PrincipalAncestor) == -  NSigList:= nil -  if PrincipalAncestor=nil then count:= 6 else count:= SIZE PrincipalAncestor +  NSigList := nil +  if PrincipalAncestor=nil then count := 6  +  else count := #PrincipalAncestor    sigList:=      [if s is [sig,pred]         then @@ -86,29 +106,30 @@ mkCategory(domainOrPackage,sigList,attList,domList,PrincipalAncestor) ==            "union"/[Prepare2 x for x in stripUnionTags w]          v is ["Mapping",:w] => "union"/[Prepare2 x for x in w]          v is ["List",w] => Prepare2 w -        v is ["Record",.,:w] => "union"/[Prepare2 CADDR x for x in w] +        v is ["Record",.,:w] => "union"/[Prepare2 third x for x in w]          [v]    OldLocals:= nil -  if PrincipalAncestor then for u in (OldLocals:= CADDR PrincipalAncestor.4) -     repeat NewLocals:= delete(first u,NewLocals) +  if PrincipalAncestor then  +    for u in (OldLocals:= third PrincipalAncestor.4) repeat  +      NewLocals := delete(first u,NewLocals)    for u in NewLocals repeat -    (OldLocals:= [[u,:count],:OldLocals]; count:= count+1) -  v:= newShell count -  v.(0):= nil -  v.(1):= sigList -  v.2:= attList -  v.3:= ["Category"] -  if not PrincipalAncestor=nil -     then -      for x in 6..SIZE PrincipalAncestor-1 repeat v.x:= PrincipalAncestor.x -      v.4:= [first PrincipalAncestor.4,CADR PrincipalAncestor.4,OldLocals] -   else v.4:= [nil,nil,OldLocals] --associated categories and domains -  v.5:= domList -  for [nsig,:sequence] in NSigList repeat v.sequence:= nsig +    OldLocals := [[u,:count],:OldLocals] +    count := count+1 +  v := newShell count +  v.0 := nil +  v.1 := sigList +  v.2 := attList +  v.3 := $Category +  if PrincipalAncestor ^= nil then +    for x in 6..#PrincipalAncestor-1 repeat  +      v.x := PrincipalAncestor.x +    v.4 := [first PrincipalAncestor.4,second PrincipalAncestor.4,OldLocals] +  else v.4 := [nil,nil,OldLocals] --associated categories and domains +  v.5 := domList +  for [nsig,:sequence] in NSigList repeat  +    v.sequence := nsig    v -isCategory a == REFVECP a and #a>5 and a.3=["Category"] -   --% Subsumption code (for operators)  DropImplementations (a is [sig,pred,:implem]) == @@ -169,6 +190,7 @@ SigListUnion(extra,original) ==      original:= [e,:original]    original +mkOr: (%Form,%Form) -> %Form  mkOr(a,b) ==    a=true => true    b=true => true @@ -179,17 +201,18 @@ mkOr(a,b) ==        (b is ["OR",:b'] => union(a',b'); mkOr2(b,a') )      b is ["OR",:b'] => mkOr2(a,b')      (a is ["has",avar,acat]) and (b is ["has",=avar,bcat]) => -      DescendantP(acat,bcat) => LIST b -      DescendantP(bcat,acat) => LIST a +      DescendantP(acat,bcat) => [b] +      DescendantP(bcat,acat) => [a]        [a,b] -    a is ['AND,:a'] and member(b,a') => LIST b -    b is ['AND,:b'] and member(a,b') => LIST a -    a is ["and",:a'] and member(b,a') => LIST b -    b is ["and",:b'] and member(a,b') => LIST a +    a is ['AND,:a'] and member(b,a') => [b] +    b is ['AND,:b'] and member(a,b') => [a] +    a is ["and",:a'] and member(b,a') => [b] +    b is ["and",:b'] and member(a,b') => [a]      [a,b] -  LENGTH l = 1 => CAR l +  #l = 1 => first l    ["OR",:l] +mkOr2: (%Form,%Form) -> %Form  mkOr2(a,b) ==    --a is a condition, "b" a list of them    member(a,b) => b @@ -203,6 +226,7 @@ mkOr2(a,b) ==      [a,:b]    [a,:b] +mkAnd: (%Form,%Form) -> %Form  mkAnd(a,b) ==    a=true => b    b=true => a @@ -213,13 +237,14 @@ mkAnd(a,b) ==        (b is ["AND",:b'] => union(a',b'); mkAnd2(b,a') )      b is ["AND",:b'] => mkAnd2(a,b')      (a is ["has",avar,acat]) and (b is ["has",=avar,bcat]) => -      DescendantP(acat,bcat) => LIST a -      DescendantP(bcat,acat) => LIST b +      DescendantP(acat,bcat) => [a] +      DescendantP(bcat,acat) => [b]        [a,b]      [a,b] -  LENGTH l = 1 => CAR l +  #l = 1 => first l    ["AND",:l] +mkAnd2: (%Form,%Form) -> %Form  mkAnd2(a,b) ==    --a is a condition, "b" a list of them    member(a,b) => b @@ -328,10 +353,11 @@ FindFundAncs l ==    -- descendant of something previously added which is therefore    -- subsumed +CatEval: %Thing -> %Shell  CatEval x ==    REFVECP x => x -  $InteractiveMode => CAR compMakeCategoryObject(x,$CategoryFrame) -  CAR compMakeCategoryObject(x,$e) +  $InteractiveMode => first compMakeCategoryObject(x,$CategoryFrame) +  first compMakeCategoryObject(x,$e)  --RemovePrinAncs(l,leaves) ==  --  l=nil => nil @@ -339,6 +365,7 @@ CatEval x ==  --               --remove the slot pointers  --  [x for x in l | not AncestorP(x.(0),leaves)] +AncestorP: (%Form, %List) -> %Form  AncestorP(xname,leaves) ==    -- checks for being a principal ancestor of one of the leaves    member(xname,leaves) => xname @@ -354,18 +381,21 @@ CondAncestorP(xname,leaves,condition) ==        first rest u      xname = u' or member(xname,first (CatEval u').4) =>        PredImplies(ucond,condition) => return u' -  + + +++ Returns true if the form `a' designates a category that is any  +++ kind of descendant of the category designated by the form `b'. +DescendantP: (%Form,%Form) -> %Boolean  DescendantP(a,b) == -  -- checks to see if a is any kind of Descendant of b    a=b => true -  a is ["ATTRIBUTE",:.] => nil -  a is ["SIGNATURE",:.] => nil +  a is ["ATTRIBUTE",:.] => false +  a is ["SIGNATURE",:.] => false    a:= CatEval a    b is ["ATTRIBUTE",b'] => -    (l:=assoc(b',a.2)) => TruthP CADR l +    (l:=assoc(b',a.2)) => TruthP second l    member(b,first a.4) => true -  AncestorP(b,[first u for u in CADR a.4]) => true -  nil +  AncestorP(b,[first u for u in second a.4]) => true +  false  --% The implementation of Join @@ -547,8 +577,3 @@ Join(:l) ==  --  [c,.,.]:= compMakeCategoryObject(sig,e)  --  -- We assume that the environment need not be kept  --  c.(1) -  -isCategoryForm(x,e) == -  x is [name,:.] => categoryForm? name -  atom x => u:= get(x,"macro",e) => isCategoryForm(u,e) -   | 
