home *** CD-ROM | disk | FTP | other *** search
- Subject: v22i034: Update kit for p2c Pascal to C translator, Part01/02
- Newsgroups: comp.sources.unix
- Approved: rsalz@uunet.UU.NET
- X-Checksum-Snefru: 8d150bd0 6d105e5d ee3f12e0 032ba92d
-
- Submitted-by: David Gillespie <daveg@csvax.caltech.edu>
- Posting-number: Volume 22, Issue 34
- Archive-name: p2cpatches/part01
-
- The following patches convert p2c version 1.14 into p2c version 1.15. To
- apply them automatically with Patch v2.0, first cd into your p2c
- distribution directory (with subdirectories src, examples, etc.), then
- execute "patch -p0 <p2c.patch", where "p2c.patch" is name of this file,
- then "cd src" and execute "make install".
-
- These patches do not cover the example files, nor reproducible files such
- as "p2c.hdrs" and "p2c.cat". Those files will be rebuilt by "make
- install".
-
- Enjoy!
- -- Dave
-
- Dave Gillespie
- 256-80 Caltech, Pasadena CA 91125
- daveg@csvax.caltech.edu, ...!cit-vax!daveg
-
-
-
- *** README Thu Mar 22 14:27:56 1990
- --- ../dist/README Fri Apr 13 20:59:32 1990
- ***************
- *** 1,5 ****
-
- ! This directory contains "p2c" version 1.14, a Pascal to C translator.
-
- "p2c" Copyright 1989 Dave Gillespie
- 256-80 Caltech
- --- 1,5 ----
-
- ! This directory contains "p2c" version 1.15, a Pascal to C translator.
-
- "p2c" Copyright 1989 Dave Gillespie
- 256-80 Caltech
- Files Makefile and ../dist/Makefile are identical
- Files src/COPYING and ../dist/src/COPYING are identical
- diff -c -N -r -s src/HISTORY ../dist/src/HISTORY
- *** src/HISTORY Thu Mar 22 14:27:23 1990
- --- ../dist/src/HISTORY Fri Apr 13 20:58:54 1990
- ***************
- *** 4,9 ****
- --- 4,44 ----
- ------- -- ------- -- ---
-
-
- + Version 1.15:
- +
- + * Taught the line breaker to handle logical/relational operators specially.
- +
- + * Improved code generation for large set constructors.
- +
- + * Changed makeexpr_assign to handle EK_LITCAST's on the lefthand side.
- +
- + * Changed makeexpr_addr to handle casts.
- +
- + * Changed FieldMacros so that the substituted base expr retains its type.
- +
- + * Bug fix in p2c.h: Rewrote P_getbits_US and other small-packed-array macros.
- + Symptom: On many architectures, these macros didn't work at all!
- + NOTE: These now pack small arrays in the opposite direction (LSB first).
- +
- + * Bug fix in funcs.c:handleread_text: changed strread of string to use %255s.
- + Symptom: Previous translation of %255c did not append a null character.
- +
- + * Bug fix in p2clib.c:strrtrim: Added test for empty string input.
- + Symptom: Incorrect behavior on strrtrim("").
- +
- + * Bug fix in p2clib.c:P_addsetr: Changed to signed comparison of v1 and v2.
- + Symptom: Adding [0..-1] to a set failed.
- +
- + * Bug fix in p2clib.c:P_expset: Don't write to d[1] if set is empty.
- + Symptom: Sets allocated to store 0 elements didn't work properly.
- +
- + * Added to sys.p2crc/trans.h the following configuration parameters:
- +
- + LogBreakPenalty Like OpBreakPenalty, but for && and ||.
- + LogBreakExtraPenalty Like OpBreakExtraPenalty, but for && and ||.
- + RelBreakPenalty Like OpBreakPenalty, but for <, ==, etc.
- + RelBreakExtraPenalty Like OpBreakExtraPenalty, but for <, ==, etc.
- +
- Version 1.14:
-
- * Added partial support for Oregon Software Pascal's delete(f) procedure.
- ***************
- *** 41,47 ****
-
- * Added some extra parentheses to the P_clrbits macros. (!)
-
- ! * Added to sys.p2crc/trans.h the following configuration parameter:
-
- CharFileText Treat "file of char" as identical to "text".
- UseStrncmp Use strncmp, not memcmp, to compare packed arrays of char.
- --- 76,82 ----
-
- * Added some extra parentheses to the P_clrbits macros. (!)
-
- ! * Added to sys.p2crc/trans.h the following configuration parameters:
-
- CharFileText Treat "file of char" as identical to "text".
- UseStrncmp Use strncmp, not memcmp, to compare packed arrays of char.
- Files src/Makefile and ../dist/src/Makefile are identical
- Files src/NOTES and ../dist/src/NOTES are identical
- Files src/README and ../dist/src/README are identical
- Files src/citmods.c and ../dist/src/citmods.c are identical
- Files src/comment.c and ../dist/src/comment.c are identical
- diff -c -N -r -s src/decl.c ../dist/src/decl.c
- *** src/decl.c Thu Mar 22 14:27:32 1990
- --- ../dist/src/decl.c Fri Apr 13 20:59:09 1990
- ***************
- *** 2835,2841 ****
- head = NULL;
- for (mp = firstmp; mp; mp = mp->cnext) {
- if (mp->kind == MK_FIELD) {
- ! if (mp->val.i == 8 || mp->val.i == 16) {
- if (!head)
- head = mp;
- } else {
- --- 2835,2844 ----
- head = NULL;
- for (mp = firstmp; mp; mp = mp->cnext) {
- if (mp->kind == MK_FIELD) {
- ! if ((mp->val.i == 8 &&
- ! (mp->type == tp_uint ||
- ! hassignedchar || signedchars == 1)) ||
- ! mp->val.i == 16) {
- if (!head)
- head = mp;
- } else {
- Files src/dir.c and ../dist/src/dir.c are identical
- diff -c -N -r -s src/expr.c ../dist/src/expr.c
- *** src/expr.c Thu Mar 22 14:27:33 1990
- --- ../dist/src/expr.c Fri Apr 13 20:59:11 1990
- ***************
- *** 3505,3510 ****
- --- 3505,3527 ----
- FREE(a);
- ex->val.type = type;
- return ex;
- + } else if (a->kind == EK_CAST) {
- + return makeexpr_cast(makeexpr_addr(a->args[0]), type);
- + } else if (a->kind == EK_ACTCAST) {
- + return makeexpr_actcast(makeexpr_addr(a->args[0]), type);
- + } else if (a->kind == EK_LITCAST) {
- + if (a->args[0]->kind == EK_NAME) {
- + if (my_strchr(a->args[0]->val.s, '(') ||
- + my_strchr(a->args[0]->val.s, '['))
- + note("Constructing pointer type by adding '*' may be incorrect [322]");
- + return makeexpr_bin(EK_LITCAST, tp_integer,
- + makeexpr_name(format_s("%s*",
- + a->args[0]->val.s),
- + tp_integer),
- + makeexpr_addr(a->args[1]));
- + } else
- + return makeexpr_bin(EK_LITCAST, tp_integer, makeexpr_type(type),
- + makeexpr_addr(a->args[1]));
- } else {
- switch (a->val.type->kind) {
-
- ***************
- *** 4088,4094 ****
- --- 4105,4120 ----
- }
-
-
- + Meaning *totempvar(ex)
- + Expr *ex;
- + {
- + while (structuredfunc(ex))
- + ex = ex->args[0];
- + return istempvar(ex);
- + }
- +
-
- +
- Meaning *isretvar(ex)
- Expr *ex;
- {
- ***************
- *** 4416,4432 ****
- return a;
- }
- }
- ! while (a->kind == EK_CAST || a->kind == EK_ACTCAST) {
- ! if (ansiC < 2 || /* in GNU C, a cast is an lvalue */
- ! isarithkind(a->args[0]->kind) ||
- ! (a->val.type->kind == TK_POINTER &&
- ! a->args[0]->val.type->kind == TK_POINTER)) {
- if (a->kind == EK_CAST)
- b = makeexpr_cast(b, a->args[0]->val.type);
- else
- b = makeexpr_actcast(b, a->args[0]->val.type);
- ! a = grabarg(a, 0);
- ! } else
- break;
- }
- if (a->kind == EK_NEG)
- --- 4442,4462 ----
- return a;
- }
- }
- ! while (a->kind == EK_CAST || a->kind == EK_ACTCAST ||
- ! a->kind == EK_LITCAST) {
- ! if (a->kind == EK_LITCAST) {
- ! b = makeexpr_cast(b, a->args[1]->val.type);
- ! a = grabarg(a, 1);
- ! } else if (ansiC < 2 || /* in GNU C, a cast is an lvalue */
- ! isarithkind(a->args[0]->kind) ||
- ! (a->val.type->kind == TK_POINTER &&
- ! a->args[0]->val.type->kind == TK_POINTER)) {
- if (a->kind == EK_CAST)
- b = makeexpr_cast(b, a->args[0]->val.type);
- else
- b = makeexpr_actcast(b, a->args[0]->val.type);
- ! a = grabarg(a, 0);
- ! } else
- break;
- }
- if (a->kind == EK_NEG)
- ***************
- *** 4928,4934 ****
- if (mp->constdefn) {
- nex = makeexpr(EK_MACARG, 0);
- nex->val.type = tp_integer;
- ! ex3 = replaceexprexpr(copyexpr(mp->constdefn), nex, ex);
- freeexpr(ex);
- freeexpr(nex);
- ex = gentle_cast(ex3, mp->val.type);
- --- 4958,4964 ----
- if (mp->constdefn) {
- nex = makeexpr(EK_MACARG, 0);
- nex->val.type = tp_integer;
- ! ex3 = replaceexprexpr(copyexpr(mp->constdefn), nex, ex, 0);
- freeexpr(ex);
- freeexpr(nex);
- ex = gentle_cast(ex3, mp->val.type);
- diff -c -N -r -s src/funcs.c ../dist/src/funcs.c
- *** src/funcs.c Thu Mar 22 14:27:36 1990
- --- ../dist/src/funcs.c Fri Apr 13 20:59:13 1990
- ***************
- *** 3239,3245 ****
- break;
-
- case TK_STRING: /* strread only */
- ! ex = makeexpr_string(format_d("%%%dc", strmax(fex)));
- break;
-
- case TK_ARRAY: /* strread only */
- --- 3239,3245 ----
- break;
-
- case TK_STRING: /* strread only */
- ! ex = makeexpr_string(format_d("%%%lds", strmax(fex)));
- break;
-
- case TK_ARRAY: /* strread only */
- Files src/hpmods.c and ../dist/src/hpmods.c are identical
- Files src/lex.c and ../dist/src/lex.c are identical
- Files src/loc.p2clib.c and ../dist/src/loc.p2clib.c are identical
- Files src/loc.p2crc and ../dist/src/loc.p2crc are identical
- Files src/makeproto.c and ../dist/src/makeproto.c are identical
- diff -c -N -r -s src/out.c ../dist/src/out.c
- *** src/out.c Thu Mar 22 14:27:28 1990
- --- ../dist/src/out.c Fri Apr 13 20:59:05 1990
- ***************
- *** 534,539 ****
- --- 534,540 ----
-
-
-
- +
- /* The following routine explores the tree of all possible line breaks,
- pruning according to the fact that "badness" and "extra" are
- increasing functions. The object is to find the set of breaks and
- ***************
- *** 802,807 ****
- --- 803,823 ----
- penalty += parenbreakpenalty + parenbreakextrapenalty*i;
- else if (outbuf[pos-2] == ',')
- penalty += commabreakpenalty + commabreakextrapenalty*i;
- + else if (((outbuf[pos] == '&' || outbuf[pos] == '|') &&
- + outbuf[pos+1] == outbuf[pos]) ||
- + ((outbuf[pos-3] == '&' || outbuf[pos-3] == '|') &&
- + outbuf[pos-3] == outbuf[pos-2]))
- + penalty += logbreakpenalty + logbreakextrapenalty*i;
- + else if (((outbuf[pos] == '<' || outbuf[pos] == '>') &&
- + outbuf[pos+1] != outbuf[pos]) ||
- + ((outbuf[pos] == '=' || outbuf[pos] == '!') &&
- + outbuf[pos+1] == '=') ||
- + ((outbuf[pos-2] == '<' || outbuf[pos-2] == '>') &&
- + outbuf[pos-3] != outbuf[pos-2]) ||
- + ((outbuf[pos-3] == '<' || outbuf[pos-3] == '>' ||
- + outbuf[pos-3] == '=' || outbuf[pos-3] == '!') &&
- + outbuf[pos-2] == '='))
- + penalty += relbreakpenalty + relbreakextrapenalty*i;
- else if (outbuf[pos-2] == '=')
- penalty += assignbreakpenalty + assignbreakextrapenalty*i;
- else if (outbuf[pos] == '?') {
- diff -c -N -r -s src/p2c.h ../dist/src/p2c.h
- *** src/p2c.h Thu Mar 22 14:27:39 1990
- --- ../dist/src/p2c.h Fri Apr 13 20:59:19 1990
- ***************
- *** 4,10 ****
-
- /* Header file for code generated by "p2c", the Pascal-to-C translator */
-
- ! /* "p2c" Copyright (C) 1989 Dave Gillespie, version 1.14.
- * This file may be copied, modified, etc. in any way. It is not restricted
- * by the licence agreement accompanying p2c itself.
- */
- --- 4,10 ----
-
- /* Header file for code generated by "p2c", the Pascal-to-C translator */
-
- ! /* "p2c" Copyright (C) 1989 Dave Gillespie, version 1.15.
- * This file may be copied, modified, etc. in any way. It is not restricted
- * by the licence agreement accompanying p2c itself.
- */
- ***************
- *** 250,255 ****
- --- 250,256 ----
- extern Void P_readpaoc PP( (FILE *, Char *, int) );
- extern Void P_readlnpaoc PP( (FILE *, Char *, int) );
- extern long P_maxpos PP( (FILE *) );
- + extern Char *P_trimname PP( (Char *, int) );
- extern long *P_setunion PP( (long *, long *, long *) );
- extern long *P_setint PP( (long *, long *, long *) );
- extern long *P_setdiff PP( (long *, long *, long *) );
- ***************
- *** 351,361 ****
- (((~(i))&((1<<(L)-(n))-1)) << (n))) )
-
- /* small packed arrays */
- ! #define P_getbits_US(v,i,n) ((int)((v) >> (~(i) << (n)) & (1<<(1<<(n)))-1))
- ! #define P_getbits_SS(v,i,n) ((int)((long)(v) << (32 - (((~(i))+1) << (n))) >> (32-(1<<(n)))))
- ! #define P_putbits_US(v,i,x,n) ((v) |= (x) << (~(i) << (n)))
- ! #define P_putbits_SS(v,i,x,n) ((v) |= ((x) & (1<<(1<<(n)))-1) << (~(i) << (n)))
- ! #define P_clrbits_S(v,i,n) ((v) &= ~( ((1<<(1<<(n)))-1) << (~(i) << (n)) ))
-
- #define P_max(a,b) ((a) > (b) ? (a) : (b))
- #define P_min(a,b) ((a) < (b) ? (a) : (b))
- --- 352,362 ----
- (((~(i))&((1<<(L)-(n))-1)) << (n))) )
-
- /* small packed arrays */
- ! #define P_getbits_US(v,i,n) ((int)((v) >> ((i)<<(n)) & (1<<(1<<(n)))-1))
- ! #define P_getbits_SS(v,i,n) ((int)((long)(v) << (SETBITS - (((i)+1) << (n))) >> (SETBITS-(1<<(n)))))
- ! #define P_putbits_US(v,i,x,n) ((v) |= (x) << ((i) << (n)))
- ! #define P_putbits_SS(v,i,x,n) ((v) |= ((x) & (1<<(1<<(n)))-1) << ((i)<<(n)))
- ! #define P_clrbits_S(v,i,n) ((v) &= ~( ((1<<(1<<(n)))-1) << ((i)<<(n)) ))
-
- #define P_max(a,b) ((a) > (b) ? (a) : (b))
- #define P_min(a,b) ((a) < (b) ? (a) : (b))
- diff -c -N -r -s src/p2c.man ../dist/src/p2c.man
- *** src/p2c.man Thu Mar 22 14:27:24 1990
- --- ../dist/src/p2c.man Fri Apr 13 20:58:58 1990
- ***************
- *** 1,7 ****
- .\" p2c Copyright 1989 Dave Gillespie
- .TH P2C 1 "local"
- .SH NAME
- ! p2c \- Pascal to C translator, version 1.14
- .SH SYNOPSIS
- .B p2c
- [ options ] [ file [ module ] ]
- --- 1,7 ----
- .\" p2c Copyright 1989 Dave Gillespie
- .TH P2C 1 "local"
- .SH NAME
- ! p2c \- Pascal to C translator, version 1.15
- .SH SYNOPSIS
- .B p2c
- [ options ] [ file [ module ] ]
- diff -c -N -r -s src/p2clib.c ../dist/src/p2clib.c
- *** src/p2clib.c Thu Mar 22 14:27:38 1990
- --- ../dist/src/p2clib.c Fri Apr 13 20:59:15 1990
- ***************
- *** 236,241 ****
- --- 236,243 ----
- {
- register char *s2 = s;
-
- + if (!*s)
- + return s;
- while (*++s2) ;
- while (s2 > s && Isspace(*--s2))
- *s2 = 0;
- ***************
- *** 474,485 ****
-
- /* Use packed array of char for a file name. */
-
- ! char *P_trimname(fn, len)
- ! register char *fn;
- register int len;
- {
- ! static char fnbuf[256];
- ! register char *cp = fnbuf;
-
- while (--len >= 0 && *fn && !isspace(*fn))
- *cp++ = *fn++;
- --- 476,487 ----
-
- /* Use packed array of char for a file name. */
-
- ! Char *P_trimname(fn, len)
- ! register Char *fn;
- register int len;
- {
- ! static Char fnbuf[256];
- ! register Char *cp = fnbuf;
-
- while (--len >= 0 && *fn && !isspace(*fn))
- *cp++ = *fn++;
- ***************
- *** 620,626 ****
- {
- register long *sbase = s;
- register int b1, b2, size;
- ! if (v1 > v2)
- return sbase;
- b1 = v1 % SETBITS;
- v1 /= SETBITS;
- --- 622,628 ----
- {
- register long *sbase = s;
- register int b1, b2, size;
- ! if ((int)v1 > (int)v2)
- return sbase;
- b1 = v1 % SETBITS;
- v1 /= SETBITS;
- ***************
- *** 709,719 ****
-
- long *P_expset(d, s) /* d := s */
- register long *d;
- ! long s;
- {
- ! if ((d[1] = s))
- ! *d = 1;
- ! else
- *d = 0;
- return d;
- }
- --- 711,722 ----
-
- long *P_expset(d, s) /* d := s */
- register long *d;
- ! register long s;
- {
- ! if (s) {
- ! d[1] = s;
- ! *d = 1;
- ! } else
- *d = 0;
- return d;
- }
- diff -c -N -r -s src/parse.c ../dist/src/parse.c
- *** src/parse.c Thu Mar 22 14:27:30 1990
- --- ../dist/src/parse.c Fri Apr 13 20:59:08 1990
- ***************
- *** 1742,1755 ****
-
- /* Replace all occurrences of one expression with another expression */
-
- ! Expr *replaceexprexpr(ex, oldex, newex)
- Expr *ex, *oldex, *newex;
- {
- int i;
- Type *type;
-
- for (i = 0; i < ex->nargs; i++)
- ! ex->args[i] = replaceexprexpr(ex->args[i], oldex, newex);
- if (exprsame(ex, oldex, 2)) {
- if (ex->val.type->kind == TK_POINTER &&
- ex->val.type->basetype == oldex->val.type) {
- --- 1742,1756 ----
-
- /* Replace all occurrences of one expression with another expression */
-
- ! Expr *replaceexprexpr(ex, oldex, newex, keeptype)
- Expr *ex, *oldex, *newex;
- + int keeptype;
- {
- int i;
- Type *type;
-
- for (i = 0; i < ex->nargs; i++)
- ! ex->args[i] = replaceexprexpr(ex->args[i], oldex, newex, keeptype);
- if (exprsame(ex, oldex, 2)) {
- if (ex->val.type->kind == TK_POINTER &&
- ex->val.type->basetype == oldex->val.type) {
- ***************
- *** 1763,1769 ****
- type = ex->val.type;
- freeexpr(ex);
- ex = copyexpr(newex);
- ! ex->val.type = type;
- return ex;
- }
- }
- --- 1764,1771 ----
- type = ex->val.type;
- freeexpr(ex);
- ex = copyexpr(newex);
- ! if (keeptype)
- ! ex->val.type = type;
- return ex;
- }
- }
- ***************
- *** 1779,1789 ****
- replaceexpr(sp->stm1, oldex, newex);
- replaceexpr(sp->stm2, oldex, newex);
- if (sp->exp1)
- ! sp->exp1 = replaceexprexpr(sp->exp1, oldex, newex);
- if (sp->exp2)
- ! sp->exp2 = replaceexprexpr(sp->exp2, oldex, newex);
- if (sp->exp3)
- ! sp->exp3 = replaceexprexpr(sp->exp3, oldex, newex);
- sp = sp->next;
- }
- }
- --- 1781,1791 ----
- replaceexpr(sp->stm1, oldex, newex);
- replaceexpr(sp->stm2, oldex, newex);
- if (sp->exp1)
- ! sp->exp1 = replaceexprexpr(sp->exp1, oldex, newex, 1);
- if (sp->exp2)
- ! sp->exp2 = replaceexprexpr(sp->exp2, oldex, newex, 1);
- if (sp->exp3)
- ! sp->exp3 = replaceexprexpr(sp->exp3, oldex, newex, 1);
- sp = sp->next;
- }
- }
- ***************
- *** 1814,1820 ****
- exproccurs(sp->next->exp1->args[1], sp->exp1->args[0]) == 1) {
- sp->next->exp1->args[1] = replaceexprexpr(sp->next->exp1->args[1],
- sp->exp1->args[0],
- ! sp->exp1->args[1]);
- if (mp && mp->istemporary)
- canceltempvar(mp);
- return sp->next;
- --- 1816,1822 ----
- exproccurs(sp->next->exp1->args[1], sp->exp1->args[0]) == 1) {
- sp->next->exp1->args[1] = replaceexprexpr(sp->next->exp1->args[1],
- sp->exp1->args[0],
- ! sp->exp1->args[1], 1);
- if (mp && mp->istemporary)
- canceltempvar(mp);
- return sp->next;
- ***************
- *** 1992,1998 ****
- case EK_NE: /* (a<>b) -> c2 */
- if ((c1->kind == EK_NE) == not1) {
- if (c1->args[0]->kind == EK_VAR) {
- ! ex = replaceexprexpr(copyexpr(c2), c1->args[0], c1->args[1]);
- i = expr_is_bool(ex, !not2);
- freeexpr(ex);
- if (i)
- --- 1994,2000 ----
- case EK_NE: /* (a<>b) -> c2 */
- if ((c1->kind == EK_NE) == not1) {
- if (c1->args[0]->kind == EK_VAR) {
- ! ex = replaceexprexpr(copyexpr(c2), c1->args[0], c1->args[1], 1);
- i = expr_is_bool(ex, !not2);
- freeexpr(ex);
- if (i)
- ***************
- *** 1999,2005 ****
- return 1;
- }
- if (c1->args[1]->kind == EK_VAR) {
- ! ex = replaceexprexpr(copyexpr(c2), c1->args[1], c1->args[0]);
- i = expr_is_bool(ex, !not2);
- freeexpr(ex);
- if (i)
- --- 2001,2007 ----
- return 1;
- }
- if (c1->args[1]->kind == EK_VAR) {
- ! ex = replaceexprexpr(copyexpr(c2), c1->args[1], c1->args[0], 1);
- i = expr_is_bool(ex, !not2);
- freeexpr(ex);
- if (i)
- diff -c -N -r -s src/pexpr.c ../dist/src/pexpr.c
- *** src/pexpr.c Thu Mar 22 14:27:34 1990
- --- ../dist/src/pexpr.c Fri Apr 13 20:59:12 1990
- ***************
- *** 343,349 ****
- mp = makestmttempvar(ex->val.type, name_SET);
- ex2 = makeexpr(EK_MACARG, 0);
- ex2->val.type = ex->val.type;
- ! ex = replaceexprexpr(ex, ex2, makeexpr_var(mp));
- freeexpr(ex2);
- } else if (mp->kind == MK_CONST &&
- (mp == mp_false ||
- --- 343,349 ----
- mp = makestmttempvar(ex->val.type, name_SET);
- ex2 = makeexpr(EK_MACARG, 0);
- ex2->val.type = ex->val.type;
- ! ex = replaceexprexpr(ex, ex2, makeexpr_var(mp), 0);
- freeexpr(ex2);
- } else if (mp->kind == MK_CONST &&
- (mp == mp_false ||
- ***************
- *** 2158,2173 ****
- Expr *ex;
- int env;
- {
- ! Expr *ex2, *ex3, **ep;
- Type *type, *type2;
- - Meaning *mp;
- char *cp;
- char sbuf[5];
- ! int i;
- Value val;
-
- if (!ex)
- return NULL;
- switch (ex->kind) {
-
- case EK_BICALL:
- --- 2158,2173 ----
- Expr *ex;
- int env;
- {
- ! Expr *ex2, *ex3;
- Type *type, *type2;
- char *cp;
- char sbuf[5];
- ! int i, j;
- Value val;
-
- if (!ex)
- return NULL;
- + if (debug>4) {fprintf(outf, "fixexpr("); dumpexpr(ex); fprintf(outf, ")\n");}
- switch (ex->kind) {
-
- case EK_BICALL:
- ***************
- *** 2208,2213 ****
- --- 2208,2267 ----
- ex = makeexpr_cond(ex->args[0], ex->args[2], ex2);
- } else if (!strcmp(cp, "assert")) {
- ex->args[0] = fixexpr(ex->args[0], ENV_BOOL);
- + } else if ((!strcmp(cp, setaddname) ||
- + !strcmp(cp, setaddrangename)) &&
- + (ex2 = ex->args[0])->kind == EK_BICALL &&
- + (!strcmp(ex2->val.s, setaddname) ||
- + !strcmp(ex2->val.s, setaddrangename))) {
- + while (ex2->kind == EK_BICALL &&
- + (!strcmp(ex2->val.s, setaddname) ||
- + !strcmp(ex2->val.s, setaddrangename) ||
- + !strcmp(ex2->val.s, setexpandname)))
- + ex2 = ex2->args[0];
- + if (nosideeffects(ex2, 1)) {
- + ex = makeexpr_comma(ex->args[0], ex);
- + ex->args[1]->args[0] = ex2;
- + ex = fixexpr(ex, env);
- + } else
- + for (i = 0; i < ex->nargs; i++)
- + ex->args[i] = fixexpr(ex->args[i], ENV_EXPR);
- + } else if (!strcmp(cp, setunionname) &&
- + (ex3 = singlevar(ex->args[0])) != NULL &&
- + ((i=1, exprsame(ex->args[0], ex->args[i], 0)) ||
- + (i=2, exprsame(ex->args[0], ex->args[i], 0))) &&
- + !exproccurs(ex3, ex->args[3-i]) &&
- + ex->args[3-i]->kind == EK_BICALL &&
- + (!strcmp(ex->args[3-i]->val.s, setaddname) ||
- + !strcmp(ex->args[3-i]->val.s, setaddrangename) ||
- + (!strcmp(ex->args[3-i]->val.s, setexpandname) &&
- + checkconst(ex->args[3-i]->args[1], 0))) &&
- + totempvar(ex->args[3-i])) {
- + if (!strcmp(ex->args[3-i]->val.s, setexpandname)) {
- + ex = grabarg(ex, 0);
- + } else {
- + ex = makeexpr_comma(ex, ex->args[3-i]);
- + ex->args[0]->args[3-i] = ex->args[1]->args[0];
- + ex->args[1]->args[0] = copyexpr(ex->args[0]->args[0]);
- + }
- + ex = fixexpr(ex, env);
- + } else if (!strcmp(cp, setdiffname) && *setremname &&
- + (ex3 = singlevar(ex->args[0])) != NULL &&
- + exprsame(ex->args[0], ex->args[1], 0) &&
- + !exproccurs(ex3, ex->args[2]) &&
- + ex->args[2]->kind == EK_BICALL &&
- + (!strcmp(ex->args[2]->val.s, setaddname) ||
- + (!strcmp(ex->args[2]->val.s, setexpandname) &&
- + checkconst(ex->args[2]->args[1], 0))) &&
- + totempvar(ex->args[2])) {
- + if (!strcmp(ex->args[2]->val.s, setexpandname)) {
- + ex = grabarg(ex, 0);
- + } else {
- + ex = makeexpr_comma(ex, ex->args[2]);
- + ex->args[0]->args[2] = ex->args[1]->args[0];
- + ex->args[1]->args[0] = copyexpr(ex->args[0]->args[0]);
- + strchange(&ex->args[1]->val.s, setremname);
- + }
- + ex = fixexpr(ex, env);
- } else {
- for (i = 0; i < ex->nargs; i++)
- ex->args[i] = fixexpr(ex->args[i], ENV_EXPR);
- ***************
- *** 2241,2246 ****
- --- 2295,2301 ----
- if (env != ENV_STMT)
- ex = makeexpr_comma(ex, copyexpr(ex->args[1]));
- }
- + #if 0
- } else if (!strcmp(cp, setunionname) &&
- (ex3 = singlevar(ex->args[0])) != NULL &&
- ((i=1, exprsame(ex->args[0], ex->args[i], 0)) ||
- ***************
- *** 2289,2294 ****
- --- 2344,2350 ----
- ex = ex->args[2];
- }
- }
- + #endif
- } else if (!strcmp(cp, setexpandname) && env == ENV_STMT &&
- checkconst(ex->args[1], 0)) {
- ex = makeexpr_assign(makeexpr_hat(ex->args[0], 0),
- ***************
- *** 2423,2436 ****
- break;
-
- case EK_COMMA:
- ! for (i = 0; i < ex->nargs-1; ) {
- ! ex->args[i] = fixexpr(ex->args[i], ENV_STMT);
- ! if (nosideeffects(ex->args[i], 1))
- delfreearg(&ex, i);
- ! else
- i++;
- }
- - ex->args[ex->nargs-1] = fixexpr(ex->args[ex->nargs-1], env);
- if (ex->nargs == 1)
- ex = grabarg(ex, 0);
- break;
- --- 2479,2498 ----
- break;
-
- case EK_COMMA:
- ! for (i = 0; i < ex->nargs; ) {
- ! j = (i < ex->nargs-1);
- ! ex->args[i] = fixexpr(ex->args[i], j ? ENV_STMT : env);
- ! if (nosideeffects(ex->args[i], 1) && j) {
- delfreearg(&ex, i);
- ! } else if (ex->args[i]->kind == EK_COMMA) {
- ! ex2 = ex->args[i];
- ! ex->args[i++] = ex2->args[0];
- ! for (j = 1; j < ex2->nargs; j++)
- ! insertarg(&ex, i++, ex2->args[j]);
- ! FREE(ex2);
- ! } else
- i++;
- }
- if (ex->nargs == 1)
- ex = grabarg(ex, 0);
- break;
- ***************
- *** 2470,2475 ****
- --- 2532,2538 ----
- ex->args[i] = fixexpr(ex->args[i], ENV_EXPR);
- break;
- }
- + if (debug>4) {fprintf(outf, "fixexpr returns "); dumpexpr(ex); fprintf(outf, "\n");}
- return fix_expression(ex, env);
- }
-
- Files src/string.pas and ../dist/src/string.pas are identical
- Files src/stuff.c and ../dist/src/stuff.c are identical
- diff -c -N -r -s src/sys.p2crc ../dist/src/sys.p2crc
- *** src/sys.p2crc Thu Mar 22 14:27:26 1990
- --- ../dist/src/sys.p2crc Fri Apr 13 20:59:02 1990
- ***************
- *** 1,4 ****
- ! # Standard configuration file for "p2c" 1.14, the Pascal to C translator
- # Copyright (C) 1989 David Gillespie.
- # Author's address: daveg@csvax.caltech.edu; 256-80 Caltech/Pasadena CA 91125.
-
- --- 1,4 ----
- ! # Standard configuration file for "p2c" 1.15, the Pascal to C translator
- # Copyright (C) 1989 David Gillespie.
- # Author's address: daveg@csvax.caltech.edu; 256-80 Caltech/Pasadena CA 91125.
-
- ***************
- *** 412,417 ****
- --- 412,429 ----
-
- OpBreakExtraPenalty # Additional penalty multiplied by nesting
- # level of the operator. Default=20.
- +
- + LogBreakPenalty # Penalty for breaking at an && or || operator.
- + # Default=5.
- +
- + LogBreakExtraPenalty # Additional penalty multiplied by nesting
- + # level of the logical operator. Default=1.
- +
- + LogBreakPenalty # Penalty for breaking at a relational
- + # operator. Default=20.
- +
- + LogBreakExtraPenalty # Additional penalty multiplied by nesting
- + # level of the relational op. Default=10.
-
- ExHyphenPenalty # Additional penalty for breaking a line just
- # after a minus sign. Default=10. :-)
- Files src/system.imp and ../dist/src/system.imp are identical
- Files src/system.m2 and ../dist/src/system.m2 are identical
- Files src/trans.c and ../dist/src/trans.c are identical
- diff -c -N -r -s src/trans.h ../dist/src/trans.h
- *** src/trans.h Thu Mar 22 14:27:40 1990
- --- ../dist/src/trans.h Fri Apr 13 20:59:22 1990
- ***************
- *** 1,4 ****
- ! /* "p2c", a Pascal to C translator, version 1.14.
- Copyright (C) 1989 David Gillespie.
- Author's address: daveg@csvax.caltech.edu; 256-80 Caltech/Pasadena CA 91125.
-
- --- 1,4 ----
- ! /* "p2c", a Pascal to C translator, version 1.15.
- Copyright (C) 1989 David Gillespie.
- Author's address: daveg@csvax.caltech.edu; 256-80 Caltech/Pasadena CA 91125.
-
- ***************
- *** 134,140 ****
- extern char *p2c_home;
- #endif
-
- ! #define P2C_VERSION "1.14"
-
-
-
- --- 134,140 ----
- extern char *p2c_home;
- #endif
-
- ! #define P2C_VERSION "1.15"
-
-
-
- ***************
- *** 1064,1069 ****
- --- 1064,1071 ----
- extern double assignbreakpenalty, assignbreakextrapenalty;
- extern double specialargbreakpenalty;
- extern double opbreakpenalty, opbreakextrapenalty, exhyphenpenalty;
- + extern double logbreakpenalty, logbreakextrapenalty;
- + extern double relbreakpenalty, relbreakextrapenalty;
- extern double morebreakpenalty, morebreakextrapenalty;
- extern double parenbreakpenalty, parenbreakextrapenalty;
- extern double qmarkbreakpenalty, qmarkbreakextrapenalty;
- ***************
- *** 1253,1258 ****
- --- 1255,1264 ----
- 'R', 'V', "SPECIALARGBREAKPENALTY",(anyptr) &specialargbreakpenalty, 500,
- 'R', 'V', "OPBREAKPENALTY", (anyptr) &opbreakpenalty, 2500,
- 'R', 'V', "OPBREAKEXTRAPENALTY", (anyptr) &opbreakextrapenalty, 2000,
- + 'R', 'V', "LOGBREAKPENALTY", (anyptr) &logbreakpenalty, 500,
- + 'R', 'V', "LOGBREAKEXTRAPENALTY", (anyptr) &logbreakextrapenalty, 100,
- + 'R', 'V', "RELBREAKPENALTY", (anyptr) &relbreakpenalty, 2000,
- + 'R', 'V', "RELBREAKEXTRAPENALTY", (anyptr) &relbreakextrapenalty, 1000,
- 'R', 'V', "EXHYPHENPENALTY", (anyptr) &exhyphenpenalty, 1000,
- 'R', 'V', "MOREBREAKPENALTY", (anyptr) &morebreakpenalty, -500,
- 'R', 'V', "MOREBREAKEXTRAPENALTY", (anyptr) &morebreakextrapenalty, -300,
- Files src/turbo.imp and ../dist/src/turbo.imp are identical
-
- exit 0 # Just in case...
-