* included in the distribution.
*
* $RCSfile: static.c,v $
- * $Revision: 1.26 $
- * $Date: 2000/03/09 06:14:38 $
+ * $Revision: 1.27 $
+ * $Date: 2000/03/09 10:19:33 $
* ------------------------------------------------------------------------*/
#include "prelude.h"
}
}
}
-#if 0
- } else if (STAR == impList) {
- List xs;
- for(xs=module(m).names; nonNull(xs); xs=tl(xs)) {
- Cell e = hd(xs);
- imports = cons(e,imports);
- }
- for(xs=module(m).classes; nonNull(xs); xs=tl(xs)) {
- Cell cl = hd(xs);
- imports = cons(cl,imports);
- imports = dupOnto(cclass(cl).members,imports);
- }
- for(xs=module(m).tycons; nonNull(xs); xs=tl(xs)) {
- Cell t = hd(xs);
- imports = cons(t,imports);
- if (isTycon(t)
- && (tycon(t).what == DATATYPE
- || tycon(t).what == NEWTYPE))
- imports = dupOnto(tycon(t).defn,imports);
- }
-#endif
} else {
map2Accum(checkImportEntity,imports,m,priv,impList);
}
hidden = resolveImportList(m, snd(impList),FALSE);
imports = resolveImportList(m, DOTDOT,FALSE);
} else if (isPair(impList) && STAR == fst(impList)) {
- /* Somewhat inefficient - but obviously correct:
- * imports = importsOf("module Foo") `setDifference` hidden;
- */
- imports = resolveImportList(m, snd(impList),TRUE);
+ List privileged;
+ imports = resolveImportList(m, DOTDOT, FALSE);
+ privileged = resolveImportList(m, snd(impList),TRUE);
+ imports = dupOnto(privileged,imports);
} else {
imports = resolveImportList(m, impList,FALSE);
}
* included in the distribution.
*
* $RCSfile: subst.c,v $
- * $Revision: 1.11 $
- * $Date: 2000/03/06 08:38:04 $
+ * $Revision: 1.12 $
+ * $Date: 2000/03/09 10:19:33 $
* ------------------------------------------------------------------------*/
#include "prelude.h"
Int o1; /* with the same class. */
Cell pi;
Int o; {
- for (; isAp(pi1); pi1=fun(pi1), pi=fun(pi))
- if (!unify(arg(pi1),o1,arg(pi),o))
- return FALSE;
+ for (; isAp(pi1); pi1=fun(pi1), pi=fun(pi)) {
+ if (!isAp(pi) || !unify(arg(pi1),o1,arg(pi),o))
+ return FALSE;
+ }
+ /* pi1 has exhausted its argument chain, we also need to check that
+ pi has no remaining arguments. However, under this condition,
+ the pi1 == pi will always return FALSE, giving the desired
+ result. */
+
#if IPARAM
if (isIP(pi1) && isIP(pi))
return textOf(pi1)==textOf(pi);