diff options
author | Guido van Rossum <guido@python.org> | 1994-08-01 11:34:53 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1994-08-01 11:34:53 (GMT) |
commit | b6775db241f5fe5e3dc2ca09fc6c9e6164d4b2af (patch) | |
tree | 9362939305b2d088b8f19a530c9015d886bc2801 /Parser | |
parent | 2979b01ff88ac4c5b316d9bf98edbaaaffac8e24 (diff) | |
download | cpython-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.in | 49 | ||||
-rw-r--r-- | Parser/assert.h | 8 | ||||
-rw-r--r-- | Parser/myreadline.c | 77 |
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 */ } |