summaryrefslogtreecommitdiffstats
path: root/Parser
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1994-08-01 11:34:53 (GMT)
committerGuido van Rossum <guido@python.org>1994-08-01 11:34:53 (GMT)
commitb6775db241f5fe5e3dc2ca09fc6c9e6164d4b2af (patch)
tree9362939305b2d088b8f19a530c9015d886bc2801 /Parser
parent2979b01ff88ac4c5b316d9bf98edbaaaffac8e24 (diff)
downloadcpython-b6775db241f5fe5e3dc2ca09fc6c9e6164d4b2af.zip
cpython-b6775db241f5fe5e3dc2ca09fc6c9e6164d4b2af.tar.gz
cpython-b6775db241f5fe5e3dc2ca09fc6c9e6164d4b2af.tar.bz2
Merge alpha100 branch back to main trunk
Diffstat (limited to 'Parser')
-rw-r--r--Parser/Makefile.in49
-rw-r--r--Parser/assert.h8
-rw-r--r--Parser/myreadline.c77
3 files changed, 106 insertions, 28 deletions
diff --git a/Parser/Makefile.in b/Parser/Makefile.in
index b5649aa..4c1e1fa 100644
--- a/Parser/Makefile.in
+++ b/Parser/Makefile.in
@@ -9,17 +9,17 @@ VPATH= @srcdir@
CC= @CC@
RANLIB= @RANLIB@
+AR= @AR@
+
DEFS= @DEFS@
# === Other things that are customizable but not by configure ===
-TOP= ..
-INCLDIR= $(TOP)/Py
-OPT= -g
-CFLAGS= $(OPT) -I$(INCLDIR) $(DEFS)
+INCLDIR= $(srcdir)/../Include
+OPT= -O
+CFLAGS= $(OPT) -I$(INCLDIR) -I.. $(DEFS)
-AR= ar
MKDEP= mkdep
SHELL= /bin/sh
@@ -34,13 +34,7 @@ PARSEROBJS= acceler.o grammar1.o \
PGENOBJS= pgenmain.o
-PARSERSRCS= acceler.c fgetsintr.c grammar1.c \
- intrcheck.c listnode.c myreadline.c node.c parser.c \
- parsetok.c tokenizer.c bitset.c \
- firstsets.c grammar.c metagrammar.c pgen.c \
- printgrammar.c
-
-PGENSRCS= pgenmain.c
+OBJS= $(PGENOBJS) $(PARSEROBJS)
PGEN= pgen
@@ -64,11 +58,32 @@ clean:
clobber: clean
-rm -f $(PGEN) *.a tags TAGS
-Makefile: Makefile.in $(TOP)/config.status
- CONFIG_FILES=Makefile $(SHELL) $(TOP)/config.status
-
-depend: $(PARSERSRCS) $(PGENSRCS)
- $(MKDEP) $(CFLAGS) $(PARSERSRCS) $(PGENSRCS)
+Makefile: $(srcdir)/Makefile.in ../config.status
+ (cd ..; CONFIG_FILES=Parser/Makefile CONFIG_HEADERS= \
+ $(SHELL) config.status)
+
+depend:
+ $(MKDEP) $(CFLAGS) `echo $(OBJS) | tr ' ' '\012' | \
+ sed 's|\(.*\)\.o|$(srcdir)/\1.c|'`
+
+.PRECIOUS: Makefile
+
+acceler.o: acceler.c
+grammar1.o: grammar1.c
+intrcheck.o: intrcheck.c
+listnode.o: listnode.c
+myreadline.o: myreadline.c
+node.o: node.c
+parser.o: parser.c
+parsetok.o: parsetok.c
+tokenizer.o: tokenizer.c
+bitset.o: bitset.c
+firstsets.o: firstsets.c
+grammar.o: grammar.c
+metagrammar.o: metagrammar.c
+pgen.o: pgen.c
+printgrammar.o: printgrammar.c
+pgenmain.o: pgenmain.c
# DO NOT DELETE THIS LINE -- mkdep uses it.
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
diff --git a/Parser/assert.h b/Parser/assert.h
index dbce369..d007eca 100644
--- a/Parser/assert.h
+++ b/Parser/assert.h
@@ -5,7 +5,7 @@ extern "C" {
#endif
/***********************************************************
-Copyright 1991, 1992, 1993 by Stichting Mathematisch Centrum,
+Copyright 1991, 1992, 1993, 1994 by Stichting Mathematisch Centrum,
Amsterdam, The Netherlands.
All Rights Reserved
@@ -28,7 +28,13 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
******************************************************************/
+#ifdef MPW /* This is for MPW's File command */
+
+#define assert(e) { if (!(e)) { printf("### Python: Assertion failed:\n\
+ File %s; Line %d\n", __FILE__, __LINE__); abort(); } }
+#else
#define assert(e) { if (!(e)) { printf("Assertion failed\n"); abort(); } }
+#endif
#ifdef __cplusplus
}
diff --git a/Parser/myreadline.c b/Parser/myreadline.c
index 870333c..18f8b1d 100644
--- a/Parser/myreadline.c
+++ b/Parser/myreadline.c
@@ -1,5 +1,5 @@
/***********************************************************
-Copyright 1991, 1992, 1993 by Stichting Mathematisch Centrum,
+Copyright 1991, 1992, 1993, 1994 by Stichting Mathematisch Centrum,
Amsterdam, The Netherlands.
All Rights Reserved
@@ -32,12 +32,19 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- a malloc'ed string ending in \n normally
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdio.h>
#include <string.h>
+#include <errno.h>
+#include "myproto.h"
#include "mymalloc.h"
+#include "intrcheck.h"
-#ifdef HAVE_READLINE
+#ifdef WITH_READLINE
extern char *readline();
@@ -54,7 +61,44 @@ onintr(sig)
longjmp(jbuf, 1);
}
-#endif /* HAVE_READLINE */
+#else /* !WITH_READLINE */
+
+/* This function restarts a fgets() after an EINTR error occurred
+ except if intrcheck() returns true. */
+
+static int
+my_fgets(buf, len, fp)
+ char *buf;
+ int len;
+ FILE *fp;
+{
+ char *p;
+ for (;;) {
+ errno = 0;
+ p = fgets(buf, len, fp);
+ if (p != NULL)
+ return 0; /* No error */
+ if (feof(fp)) {
+ return -1; /* EOF */
+ }
+#ifdef EINTR
+ if (errno == EINTR) {
+ if (intrcheck()) {
+ return 1; /* Interrupt */
+ }
+ continue;
+ }
+#endif
+ if (intrcheck()) {
+ return 1; /* Interrupt */
+ }
+ return -2; /* Error */
+ }
+ /* NOTREACHED */
+}
+
+#endif /* WITH_READLINE */
+
char *
my_readline(prompt)
@@ -62,7 +106,7 @@ my_readline(prompt)
{
int n;
char *p;
-#ifdef HAVE_READLINE
+#ifdef WITH_READLINE
RETSIGTYPE (*old_inthandler)();
static int been_here;
if (!been_here) {
@@ -92,28 +136,41 @@ my_readline(prompt)
p[n+1] = '\0';
}
return p;
-#else /* !HAVE_READLINE */
+#else /* !WITH_READLINE */
n = 100;
if ((p = malloc(n)) == NULL)
return NULL;
if (prompt)
fprintf(stderr, "%s", prompt);
- if (fgets(p, n, stdin) == NULL)
- *p = '\0';
- if (intrcheck()) {
+ switch (my_fgets(p, n, stdin)) {
+ case 0: /* Normal case */
+ break;
+ case 1: /* Interrupt */
free(p);
return NULL;
+ case -1: /* EOF */
+ case -2: /* Error */
+ default: /* Shouldn't happen */
+ *p = '\0';
+ break;
}
+#ifdef MPW
+ /* Hack for MPW C where the prompt comes right back in the input */
+ /* XXX (Actually this would be rather nice on most systems...) */
+ n = strlen(prompt);
+ if (strncmp(p, prompt, n) == 0)
+ memmove(p, p + n, strlen(p) - n + 1);
+#endif
n = strlen(p);
while (n > 0 && p[n-1] != '\n') {
int incr = n+2;
p = realloc(p, n + incr);
if (p == NULL)
return NULL;
- if (fgets(p+n, incr, stdin) == NULL)
+ if (my_fgets(p+n, incr, stdin) != 0)
break;
n += strlen(p+n);
}
return realloc(p, n+1);
-#endif /* !HAVE_READLINE */
+#endif /* !WITH_READLINE */
}