Commit 57131ad0 authored by sewardj's avatar sewardj

[project @ 1999-02-03 17:08:25 by sewardj]

Preliminary results of the merge of STG hugs and 990121.  These files
will compile and link, but don't work yet.
parent a73f9466
# ----------------------------------------------------------------------------- #
# $Id: Makefile,v 1.3 1999/01/14 18:08:26 sewardj Exp $ #
# $Id: Makefile,v 1.4 1999/02/03 17:08:25 sewardj Exp $ #
# ----------------------------------------------------------------------------- #
TOP = ../..
......@@ -13,21 +13,26 @@ RTS_DIR = $(TOP)/ghc/rts
# interpreter and relevant .a/.so files #
# --------------------------------------------------------------------- #
YACC = bison -y
%.c: %.y
-$(YACC) $<
mv y.tab.c $@
HS_SRCS =
C_SRCS = \
charset.c codegen.c compiler.c connect.c derive.c desugar.c \
dynamic.c free.c hugs.c input.c interface.c lift.c link.c \
machdep.c modules.c optimise.c output.c pat.c pmc.c pp.c static.c \
stg.c stgSubst.c storage.c subst.c translate.c type.c
Y_SRCS = parser.y
C_SRCS = link.c type.c static.c storage.c derive.c input.c compiler.c subst.c \
translate.c codegen.c lift.c free.c stgSubst.c optimise.c output.c \
hugs.c dynamic.c stg.c
SRC_CC_OPTS = -g -I$(GHC_DIR)/includes -D__HUGS__ -Wall -Wno-unused
SRC_CC_OPTS = -g -I$(GHC_DIR)/includes -I$(GHC_DIR)/rts -D__HUGS__ -Wall -Wno-unused
GHC_LIBS_NEEDED = $(TOP)/ghc/rts/libHSrts.a $(TOP)/ghc/rts/gmp/libgmp.a
GHC_DYN_CBITS_DIR = $(TOP)/ghc/lib/std/cbits
GHC_DYN_CBITS = $(GHC_DYN_CBITS_DIR)/libHS_cbits.so
all :: $(GHC_LIBS_NEEDED) $(GHC_DYN_CBITS) hugs Prelude.hs
all :: parser.c $(GHC_LIBS_NEEDED) $(GHC_DYN_CBITS) hugs Prelude.hs
hugs: $(C_OBJS)
$(CC) -rdynamic -o $@ $(CC_OPTS) $^ $(GHC_LIBS_NEEDED) -lbfd -liberty -ldl -lm
......@@ -41,7 +46,6 @@ $(TOP)/ghc/rts/libHSrts.a:
$(TOP)/ghc/rts/gmp/libgmp.a:
(cd $(TOP)/ghc/rts/gmp ; make clean ; make)
# --------------------------------------------------------------------- #
# Prelude #
# --------------------------------------------------------------------- #
......@@ -153,6 +157,7 @@ checkrun: all
CLEAN_FILES += hugs libHS_cbits.so $(GHC_DYN_CBITS) $(GHC_DYN_CBITS_DIR)/*.o
CLEAN_FILES += $(TOP)/ghc/rts/libHSrts.a $(TOP)/ghc/rts/*.o
CLEAN_FILES += $(TOP)/ghc/rts/gmp/libgmp.a $(TOP)/ghc/rts/gmp/*.o $(TOP)/ghc/rts/gmp/*/*.o
CLEAN_FILES += parser.c
INSTALL_LIBEXECS = hugs
......
/* -*- mode: hugs-c; -*- */
/* --------------------------------------------------------------------------
* Code generator
*
......@@ -7,20 +7,18 @@
* Hugs version 1.4, December 1997
*
* $RCSfile: codegen.c,v $
* $Revision: 1.2 $
* $Date: 1998/12/02 13:21:59 $
* $Revision: 1.3 $
* $Date: 1999/02/03 17:08:25 $
* ------------------------------------------------------------------------*/
#include "prelude.h"
#include "storage.h"
#include "backend.h"
#include "connect.h"
#include "errors.h"
#include "stg.h"
#include "Assembler.h"
#include "lift.h"
#include "link.h"
#include "pp.h"
#include "codegen.h"
/* --------------------------------------------------------------------------
* Local function prototypes:
......@@ -193,7 +191,7 @@ static AsmBCO cgAlts( AsmSp root, AsmSp sp, List alts )
setPos(hd(vs),asmUnbox(bco,boxingConRep(con)));
} else {
asmBeginUnpack(bco);
map1Proc(cgBind,bco,reverse(vs));
map1Proc(cgBind,bco,rev(vs));
asmEndUnpack(bco);
}
cgExpr(bco,root,body);
......@@ -237,7 +235,7 @@ static AsmBCO cgLambda( StgExpr e )
AsmBCO bco = asmBeginBCO();
AsmSp root = asmBeginArgCheck(bco);
map1Proc(cgBind,bco,reverse(stgLambdaArgs(e)));
map1Proc(cgBind,bco,rev(stgLambdaArgs(e)));
asmEndArgCheck(bco,root);
/* ppStgExpr(e); */
......@@ -296,7 +294,7 @@ static Void cgExpr( AsmBCO bco, AsmSp root, StgExpr e )
/* No need to use return address or to Slide */
AsmSp beginPrim = asmBeginPrim(bco);
map1Proc(pushAtom,bco,reverse(stgPrimArgs(scrut)));
map1Proc(pushAtom,bco,rev(stgPrimArgs(scrut)));
asmEndPrim(bco,(AsmPrim*)name(stgPrimOp(scrut)).primop,beginPrim);
for(; nonNull(alts); alts=tl(alts)) {
......@@ -304,7 +302,7 @@ static Void cgExpr( AsmBCO bco, AsmSp root, StgExpr e )
List pats = stgPrimAltPats(alt);
StgExpr body = stgPrimAltBody(alt);
AsmSp altBegin = asmBeginAlt(bco);
map1Proc(cgBind,bco,reverse(pats));
map1Proc(cgBind,bco,rev(pats));
testPrimPats(bco,root,pats,body);
asmEndAlt(bco,altBegin);
}
......@@ -343,7 +341,7 @@ static Void cgExpr( AsmBCO bco, AsmSp root, StgExpr e )
case STGAPP: /* Tail call */
{
AsmSp env = asmBeginEnter(bco);
map1Proc(pushAtom,bco,reverse(stgAppArgs(e)));
map1Proc(pushAtom,bco,rev(stgAppArgs(e)));
pushAtom(bco,stgAppFun(e));
asmEndEnter(bco,env,root);
break;
......@@ -378,7 +376,7 @@ static Void cgExpr( AsmBCO bco, AsmSp root, StgExpr e )
case STGPRIM: /* Tail call again */
{
AsmSp beginPrim = asmBeginPrim(bco);
map1Proc(pushAtom,bco,reverse(stgPrimArgs(e)));
map1Proc(pushAtom,bco,rev(stgPrimArgs(e)));
asmEndPrim(bco,(AsmPrim*)name(e).primop,beginPrim);
/* map1Proc(cgBind,bco,rs_vars); */
assert(0); /* asmReturn_retty(); */
......@@ -435,7 +433,7 @@ static Void build( AsmBCO bco, StgVar v )
doNothing(); /* already done in alloc */
} else {
AsmSp start = asmBeginPack(bco);
map1Proc(pushAtom,bco,reverse(args));
map1Proc(pushAtom,bco,rev(args));
asmEndPack(bco,getPos(v),start,stgConInfo(con));
}
return;
......@@ -451,12 +449,12 @@ static Void build( AsmBCO bco, StgVar v )
&& whatIs(stgVarBody(fun)) == LAMBDA
&& length(stgLambdaArgs(stgVarBody(fun))) > length(args)) {
AsmSp start = asmBeginMkPAP(bco);
map1Proc(pushAtom,bco,reverse(args));
map1Proc(pushAtom,bco,rev(args));
pushAtom(bco,fun);
asmEndMkPAP(bco,getPos(v),start); /* optimisation */
} else {
AsmSp start = asmBeginMkAP(bco);
map1Proc(pushAtom,bco,reverse(args));
map1Proc(pushAtom,bco,rev(args));
pushAtom(bco,fun);
asmEndMkAP(bco,getPos(v),start);
}
......@@ -575,7 +573,7 @@ static void endTop( StgVar v )
/* ToDo: merge this code with cgLambda */
AsmBCO bco = (AsmBCO)getObj(v);
AsmSp root = asmBeginArgCheck(bco);
map1Proc(cgBind,bco,reverse(stgLambdaArgs(rhs)));
map1Proc(cgBind,bco,rev(stgLambdaArgs(rhs)));
asmEndArgCheck(bco,root);
cgExpr(bco,root,stgLambdaBody(rhs));
......
/* --------------------------------------------------------------------------
* Interpreter command structure
*
* Copyright (c) The University of Nottingham and Yale University, 1994-1997.
* All rights reserved. See NOTICE for details and conditions of use etc...
* Hugs version 1.4, December 1997
* Hugs 98 is Copyright (c) Mark P Jones, Alastair Reid and the Yale
* Haskell Group 1994-99, and is distributed as Open Source software
* under the Artistic License; see the file "Artistic" that is included
* in the distribution for details.
*
* $RCSfile: command.h,v $
* $Revision: 1.2 $
* $Date: 1998/12/02 13:22:01 $
* $Revision: 1.3 $
* $Date: 1999/02/03 17:08:26 $
* ------------------------------------------------------------------------*/
typedef Int Command;
......@@ -37,7 +38,6 @@ extern Command readCommand Args((struct cmd *, Char, Char));
#define INFO 15
#define COLLECT 16
#define SETMODULE 17
#define SHOWVERSION 18
#define NOCMD 19
#define NOCMD 18
/*-------------------------------------------------------------------------*/
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/* -*- mode: hugs-c; -*- */
/* --------------------------------------------------------------------------
* Dynamic loading (of .dll or .so files) for Hugs
*
......@@ -7,8 +7,8 @@
* Hugs version 1.4, December 1997
*
* $RCSfile: dynamic.c,v $
* $Revision: 1.2 $
* $Date: 1998/12/02 13:22:06 $
* $Revision: 1.3 $
* $Date: 1999/02/03 17:08:28 $
* ------------------------------------------------------------------------*/
#include "prelude.h"
......@@ -29,7 +29,7 @@ String fn; {
void* lookupSymbol(file,symbol)
ObjectFile file;
String symbol; {
return dlsym(file,symbol)
return dlsym(file,symbol);
}
void* getDLLSymbol(dll,symbol) /* load dll and lookup symbol */
......
/* -*- mode: hugs-c; -*- */
/* --------------------------------------------------------------------------
* Error handling support functions
*
* Copyright (c) The University of Nottingham and Yale University, 1994-1997.
* All rights reserved. See NOTICE for details and conditions of use etc...
* Hugs version 1.4, December 1997
* Hugs 98 is Copyright (c) Mark P Jones, Alastair Reid and the Yale
* Haskell Group 1994-99, and is distributed as Open Source software
* under the Artistic License; see the file "Artistic" that is included
* in the distribution for details.
*
* $RCSfile: errors.h,v $
* $Revision: 1.2 $
* $Date: 1998/12/02 13:22:07 $
* $Revision: 1.3 $
* $Date: 1999/02/03 17:08:28 $
* ------------------------------------------------------------------------*/
extern Void internal Args((String)) HUGS_noreturn;
extern Void fatal Args((String)) HUGS_noreturn;
extern Void internal Args((String)) HUGS_noreturn;
extern Void fatal Args((String)) HUGS_noreturn;
#if HUGS_FOR_WINDOWS
#define Hilite() WinTextcolor(hWndText,RED);
......@@ -41,6 +42,13 @@ extern Void errAbort Args((Void));
extern sigProto(breakHandler);
#include "output.h"
extern Bool breakOn Args((Bool)); /* in machdep.c */
extern Void printExp Args((FILE *,Cell)); /* in output.c */
extern Void printType Args((FILE *,Cell));
extern Void printContext Args((FILE *,List));
extern Void printPred Args((FILE *,Cell));
extern Void printKind Args((FILE *,Kind));
extern Void printKinds Args((FILE *,Kinds));
/*-------------------------------------------------------------------------*/
/* -*- mode: hugs-c; -*- */
/* --------------------------------------------------------------------------
* Free variable analysis
*
......@@ -7,16 +7,16 @@
* Hugs version 1.4, December 1997
*
* $RCSfile: free.c,v $
* $Revision: 1.2 $
* $Date: 1998/12/02 13:22:08 $
* $Revision: 1.3 $
* $Date: 1999/02/03 17:08:29 $
* ------------------------------------------------------------------------*/
#include "prelude.h"
#include "storage.h"
#include "backend.h"
#include "connect.h"
#include "errors.h"
#include "stg.h"
#include "free.h"
/* --------------------------------------------------------------------------
* Local functions
......
This diff is collapsed.
This diff is collapsed.
/* -*- mode: hugs-c; -*- */
/* --------------------------------------------------------------------------
* Lambda Lifter
*
......@@ -10,19 +10,16 @@
* Hugs version 1.4, December 1997
*
* $RCSfile: lift.c,v $
* $Revision: 1.2 $
* $Date: 1998/12/02 13:22:17 $
* $Revision: 1.3 $
* $Date: 1999/02/03 17:08:31 $
* ------------------------------------------------------------------------*/
#include "prelude.h"
#include "storage.h"
#include "backend.h"
#include "connect.h"
#include "errors.h"
#include "stg.h"
#include "lift.h"
#include "free.h"
#include "stgSubst.h"
/* #include "pp.h" */
/* --------------------------------------------------------------------------
* Local function prototypes:
......
......@@ -7,16 +7,14 @@
* Hugs version 1.4, December 1997
*
* $RCSfile: link.c,v $
* $Revision: 1.3 $
* $Date: 1999/01/13 16:47:27 $
* $Revision: 1.4 $
* $Date: 1999/02/03 17:08:31 $
* ------------------------------------------------------------------------*/
#include "prelude.h"
#include "storage.h"
#include "backend.h"
#include "connect.h"
#include "static.h"
#include "translate.h"
#include "type.h"
#include "errors.h"
#include "Assembler.h" /* for asmPrimOps and AsmReps */
......@@ -91,7 +89,7 @@ Class classFloating;
Class classNum;
Class classMonad; /* Monads and monads with a zero */
Class classMonad0;
/*Class classMonad0;*/
List stdDefaults; /* standard default values */
......@@ -138,6 +136,33 @@ Name nameInd;
Name nameForce;
Name nameAnd;
Name nameHw;
Name nameConCmp;
Name nameCompAux;
Name nameEnFrTh;
Name nameEnFrTo;
Name nameEnFrom;
Name nameEnFrEn;
Name nameEnToEn;
Name nameEnInRng;
Name nameEnIndex;
Name nameEnRange;
Name nameRangeSize;
Name nameComp;
Name nameShowField;
Name nameApp;
Name nameShowParen;
Name nameReadParen;
Name nameLex;
Name nameReadField;
Name nameFlip;
Name nameFromTo;
Name nameFromThen;
Name nameFrom;
Name nameFromThenTo;
Name nameNegate;
/* these names are required before we've had a chance to do the right thing */
Name nameSel;
Name nameUnsafeUnpackCString;
......@@ -184,9 +209,11 @@ Name nameMkMVar; /* MVar# -> MVar */
*
* ------------------------------------------------------------------------*/
static Tycon linkTycon( String s );
static Tycon linkClass( String s );
static Name linkName ( String s );
static Tycon linkTycon ( String s );
static Tycon linkClass ( String s );
static Name linkName ( String s );
static Void mkTypes ();
static Tycon linkTycon( String s )
{
......@@ -222,7 +249,7 @@ static Name linkName( String s )
static Name predefinePrim ( String s );
static Name predefinePrim ( String s )
{
Name nm = newName(findText(s));
Name nm = newName(findText(s),NIL);
name(nm).defn=PREDEFINED;
return nm;
}
......@@ -297,7 +324,7 @@ Void linkPreludeTC() { /* Hook to tycons and classes in */
classFloating = linkClass("Floating");
classNum = linkClass("Num");
classMonad = linkClass("Monad");
classMonad0 = linkClass("MonadZero");
/*classMonad0 = linkClass("MonadZero");*/
stdDefaults = NIL;
stdDefaults = cons(typeDouble,stdDefaults);
......@@ -376,6 +403,17 @@ Void linkPreludeTC() { /* Hook to tycons and classes in */
}
}
static Void mkTypes()
{
arrow = fn(aVar,mkOffset(1));
listof = ap(typeList,aVar);
predNum = ap(classNum,aVar);
predFractional = ap(classFractional,aVar);
predIntegral = ap(classIntegral,aVar);
predMonad = ap(classMonad,aVar);
/*predMonad0 = ap(classMonad0,aVar);*/
}
Void linkPreludeCM() { /* Hook to cfuns and mfuns in */
static Bool initialised = FALSE; /* prelude when first loaded */
if (!initialised) {
......@@ -421,11 +459,13 @@ Void linkPreludeNames() { /* Hook to names defined in Prelude */
Text t = findText(asmPrimOps[i].name);
Name n = findName(t);
if (isNull(n)) {
n = newName(t);
n = newName(t,NIL);
}
name(n).line = 0;
name(n).defn = NIL;
name(n).type = primType(asmPrimOps[i].monad,asmPrimOps[i].args,asmPrimOps[i].results);
name(n).type = primType(asmPrimOps[i].monad,
asmPrimOps[i].args,
asmPrimOps[i].results);
name(n).arity = strlen(asmPrimOps[i].args);
name(n).primop = &(asmPrimOps[i]);
implementPrim(n);
......@@ -503,3 +543,189 @@ Int what; {
}
/*-------------------------------------------------------------------------*/
#if 0
--## this stuff from 98
--##
--##
--## Void linkPreludeTC() { /* Hook to tycons and classes in */
--## if (isNull(typeBool)) { /* prelude when first loaded */
--## Int i;
--##
--## typeBool = findTycon(findText("Bool"));
--## typeChar = findTycon(findText("Char"));
--## typeString = findTycon(findText("String"));
--## typeInt = findTycon(findText("Int"));
--## typeInteger = findTycon(findText("Integer"));
--## typeDouble = findTycon(findText("Double"));
--## typeAddr = findTycon(findText("Addr"));
--## typeMaybe = findTycon(findText("Maybe"));
--## typeOrdering = findTycon(findText("Ordering"));
--## if (isNull(typeBool) || isNull(typeChar) || isNull(typeString) ||
--## isNull(typeInt) || isNull(typeDouble) || isNull(typeInteger) ||
--## isNull(typeAddr) || isNull(typeMaybe) || isNull(typeOrdering)) {
--## ERRMSG(0) "Prelude does not define standard types"
--## EEND;
--## }
--## stdDefaults = cons(typeInteger,cons(typeDouble,NIL));
--##
--## classEq = findClass(findText("Eq"));
--## classOrd = findClass(findText("Ord"));
--## classIx = findClass(findText("Ix"));
--## classEnum = findClass(findText("Enum"));
--## classShow = findClass(findText("Show"));
--## classRead = findClass(findText("Read"));
--## #if EVAL_INSTANCES
--## classEval = findClass(findText("Eval"));
--## #endif
--## classBounded = findClass(findText("Bounded"));
--## if (isNull(classEq) || isNull(classOrd) || isNull(classRead) ||
--## isNull(classShow) || isNull(classIx) || isNull(classEnum) ||
--## #if EVAL_INSTANCES
--## isNull(classEval) ||
--## #endif
--## isNull(classBounded)) {
--## ERRMSG(0) "Prelude does not define standard classes"
--## EEND;
--## }
--##
--## classReal = findClass(findText("Real"));
--## classIntegral = findClass(findText("Integral"));
--## classRealFrac = findClass(findText("RealFrac"));
--## classRealFloat = findClass(findText("RealFloat"));
--## classFractional = findClass(findText("Fractional"));
--## classFloating = findClass(findText("Floating"));
--## classNum = findClass(findText("Num"));
--## if (isNull(classReal) || isNull(classIntegral) ||
--## isNull(classRealFrac) || isNull(classRealFloat) ||
--## isNull(classFractional) || isNull(classFloating) ||
--## isNull(classNum)) {
--## ERRMSG(0) "Prelude does not define numeric classes"
--## EEND;
--## }
--## predNum = ap(classNum,aVar);
--## predFractional = ap(classFractional,aVar);
--## predIntegral = ap(classIntegral,aVar);
--##
--## classMonad = findClass(findText("Monad"));
--## if (isNull(classMonad)) {
--## ERRMSG(0) "Prelude does not define Monad class"
--## EEND;
--## }
--## predMonad = ap(classMonad,aVar);
--##
--## #if IO_MONAD
--## { Type typeIO = findTycon(findText("IO"));
--## if (isNull(typeIO)) {
--## ERRMSG(0) "Prelude does not define IO monad constructor"
--## EEND;
--## }
--## typeProgIO = ap(typeIO,aVar);
--## }
--## #endif
--##
--## /* The following primitives are referred to in derived instances and
--## * hence require types; the following types are a little more general
--## * than we might like, but they are the closest we can get without a
--## * special datatype class.
--## */
--## name(nameConCmp).type
--## = mkPolyType(starToStar,fn(aVar,fn(aVar,typeOrdering)));
--## name(nameEnRange).type
--## = mkPolyType(starToStar,fn(boundPair,listof));
--## name(nameEnIndex).type
--## = mkPolyType(starToStar,fn(boundPair,fn(aVar,typeInt)));
--## name(nameEnInRng).type
--## = mkPolyType(starToStar,fn(boundPair,fn(aVar,typeBool)));
--## name(nameEnToEn).type
--## = mkPolyType(starToStar,fn(aVar,fn(typeInt,aVar)));
--## name(nameEnFrEn).type
--## = mkPolyType(starToStar,fn(aVar,typeInt));
--## name(nameEnFrom).type
--## = mkPolyType(starToStar,fn(aVar,listof));
--## name(nameEnFrTo).type
--## = name(nameEnFrTh).type
--## = mkPolyType(starToStar,fn(aVar,fn(aVar,listof)));
--##
--## #if EVAL_INSTANCES
--## addEvalInst(0,typeArrow,2,NIL); /* Add Eval instances for builtins */
--## addEvalInst(0,typeList,1,NIL);
--## addEvalInst(0,typeUnit,0,NIL);
--## #endif
--## for (i=2; i<=NUM_DTUPLES; i++) {/* Add derived instances of tuples */
--## #if EVAL_INSTANCES
--## addEvalInst(0,mkTuple(i),i,NIL);
--## #endif
--## addTupInst(classEq,i);
--## addTupInst(classOrd,i);
--## addTupInst(classShow,i);
--## addTupInst(classRead,i);
--## addTupInst(classIx,i);
--## }
--## }
--## }
--##
--##
--## static Void linkPreludeCM() { /* Hook to cfuns and mfuns in */
--## if (isNull(nameFalse)) { /* prelude when first loaded */
--## nameFalse = findName(findText("False"));
--## nameTrue = findName(findText("True"));
--## nameJust = findName(findText("Just"));
--## nameNothing = findName(findText("Nothing"));
--## nameLeft = findName(findText("Left"));
--## nameRight = findName(findText("Right"));
--## nameLT = findName(findText("LT"));
--## nameEQ = findName(findText("EQ"));
--## nameGT = findName(findText("GT"));
--## if (isNull(nameFalse) || isNull(nameTrue) ||
--## isNull(nameJust) || isNull(nameNothing) ||
--## isNull(nameLeft) || isNull(nameRight) ||
--## isNull(nameLT) || isNull(nameEQ) || isNull(nameGT)) {
--## ERRMSG(0) "Prelude does not define standard constructors"
--## EEND;
--## }
--##
--## nameFromInt = findName(findText("fromInt"));
--## nameFromInteger = findName(findText("fromInteger"));
--## nameFromDouble = findName(findText("fromDouble"));
--## nameEq = findName(findText("=="));
--## nameCompare = findName(findText("compare"));
--## nameLe = findName(findText("<="));
--## nameGt = findName(findText(">"));
--## nameShowsPrec = findName(findText("showsPrec"));
--## nameReadsPrec = findName(findText("readsPrec"));
--## nameIndex = findName(findText("index"));
--## nameInRange = findName(findText("inRange"));
--## nameRange = findName(findText("range"));
--## nameMult = findName(findText("*"));
--## namePlus = findName(findText("+"));
--## nameMinBnd = findName(findText("minBound"));
--## nameMaxBnd = findName(findText("maxBound"));
--## #if EVAL_INSTANCES
--## nameStrict = findName(findText("strict"));
--## nameSeq = findName(findText("seq"));
--## #endif
--## nameReturn = findName(findText("return"));
--## nameBind = findName(findText(">>="));
--## nameMFail = findName(findText("fail"));
--## if (isNull(nameFromInt) || isNull(nameFromDouble) ||
--## isNull(nameEq) || isNull(nameCompare) ||
--## isNull(nameLe) || isNull(nameGt) ||
--## isNull(nameShowsPrec) || isNull(nameReadsPrec) ||
--## isNull(nameIndex) || isNull(nameInRange) ||
--## isNull(nameRange) || isNull(nameMult) ||
--## isNull(namePlus) || isNull(nameFromInteger) ||
--## isNull(nameMinBnd) || isNull(nameMaxBnd) ||
--## #if EVAL_INSTANCES
--## isNull(nameStrict) || isNull(nameSeq) ||
--## #endif
--## isNull(nameReturn) || isNull(nameBind) ||
--## isNull(nameMFail)) {
--## ERRMSG(0) "Prelude does not define standard members"
--## EEND;
--## }
--## }
--## }
--##
#endif
/* -*- mode: hugs-c; -*- */
extern Void linkPreludeTC Args((Void));
extern Void linkPreludeCM Args((Void));
extern Void linkPreludeNames Args((Void));
extern Module modulePreludeHugs;