home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #1 / NN_1993_1.iso / spool / comp / os / minix / 5124 / patch4.2a.Z / patch4.2a
Encoding:
Text File  |  1993-01-11  |  34.5 KB  |  1,238 lines

  1. *** docs/BUGS.o    Tue Dec  8 00:02:47 1992
  2. --- docs/BUGS    Tue Dec  8 00:02:31 1992
  3. ***************
  4. *** 1,5 ****
  5.   
  6. ! c68/c386 Version 4.1
  7.   ~~~~~~~~~~~~~~~~~~~~
  8.   
  9.   The following problems are known to be outstanding in c68/c386 at this
  10. --- 1,5 ----
  11.   
  12. ! c68/c386 Version 4.2
  13.   ~~~~~~~~~~~~~~~~~~~~
  14.   
  15.   The following problems are known to be outstanding in c68/c386 at this
  16. ***************
  17. *** 21,26 ****
  18. --- 21,32 ----
  19.   
  20.       N.B.  This is not a problem if the pre-processor removes comments.
  21.   
  22. + 4.    An unterninated comment at the end of the file can cause the compiler
  23. +     to loop.   This will only be a problem if comments are not removed
  24. +     at the pre-processor stage.
  25. + 5.    No code for handling:
  26. +         i %= c;         where i in an int and c is a char
  27.   
  28.   c386
  29.   ~~~~
  30. *** docs/CHANGELOG.o    Tue Dec  8 00:02:53 1992
  31. --- docs/CHANGELOG    Mon Dec  7 23:44:14 1992
  32. ***************
  33. *** 1,9 ****
  34. --- 1,141 ----
  35.   The following is a log (in reverse date order) of the changes made to 
  36.   c68/c386 since Release 4.0.
  37.   
  38. + Planned Changes
  39. +        djw    Change 68K IEEE support routines to correctly raise a
  40. +         floating point exception signal when an error occurs
  41. +         with errno set accordingly.  (As suggested by Michael
  42. +         Mueller)
  43. + ---------------------------------------------------------------------------
  44. + 09 Dec 92  kdw    Packaged for release to usenet as release 4.2
  45. + 06 Dec 92  djw    Corrected problem with c68 IEEE version support routines
  46. +         because routines handling op= construct for floating point
  47. +         were not returning address of result as compiler expected.
  48. + 05 Dec 92  kdw    Corrected problem with double constants being incorrectly
  49. +         assigned to float tree constants.
  50. +        kdw    Corrected problem in c68 IEEE version with constructs of the
  51. +         form 'op = ' when flaoting point numbers involved.  Incorrect
  52. +         code was being generated.
  53. + 27 Nov 92  djw    Allowed for initialisation of character arrays by a
  54. +         construct of the form:  char x[6]="123456";
  55. +         Previously this would have been reported as an error
  56. +         due to the initialiser being too long.
  57. + 26 Nov 92  djw    Incorporated changes provided by Vincent Broman to allow
  58. +         bootstrapping c386 using bcc.
  59. +        djw    Incorporated changes based on those supplied by Peter
  60. +            Holzer for the handling of U and L suffixes on numbers.
  61. +        djw    Made changes based on those supplied by (?)
  62. +         to allow c386 to be bootstrapped using bcc.
  63. + 22 Nov 92  kdw    Added support for expression of the form p++->n (as
  64. +         ANSI does) unless -trad flag set.
  65. +        kdw    Added new warning for when arrays initialisation
  66. +         expression does not set all fields of an array.
  67. +        kdw    Allowed & operator to be used on array names - but
  68. +         warning is generated.
  69. +        kdw    Reworked code to do with parsing of qualifier keywords
  70. +         such as signed, unsigned, const and volatile.
  71. + 13 Nov 92  kdw    Fixed problem in branch optimiser code to handle
  72. +         instruction branching to itself.  The previous fix for
  73. +         this had proved to be incomplete.
  74. + 26 Oct 92  kdw  Fixed problem with signed keyowrd not being recognised
  75. +         properly.
  76. + 25 Oct 92  djw    The space for the buffer used to hold strings is now 
  77. +         allocated dynamically as required removing the upper
  78. +         limit on total string size.
  79. +        djw  Changed the generation of string literals so that they
  80. +         are put into the data section if the 'trad' flag is set
  81. +         (when they are potentially writeable), but into the text
  82. +         section otherwise (when they are read only.
  83. + 24 Oct 92  kdw    Fixed bug when you to try to return a void value in
  84. +         an function which is not of type void.
  85. +        djw    Added TRACE option to configuration file, and run-time
  86. +         switch to activate trace mode.
  87. +        kdw    Overhauled routine that does the 'cast' operation to pick
  88. +         up a number of cast operations that should generate either
  89. +         error or warning messages.
  90. +        djw    Fixed bug with using the U qualifier on a 0 constant.
  91. +         (reported by David Gillam)
  92. +        djw    Fixed bug with using both the U and L qualifiers on the
  93. +         same constant.
  94. +         (reported by Michael Mueller)
  95. + 20 Oct 92  kdw    Added code that is being used as a basis for work on trying
  96. +         to develop source level debugger/trace capability.  This is
  97. +         still experimental, but has been added to the main source to
  98. +         avoid having diverging source trees.  It is conditionally 
  99. +         included so taht it is not activated unless so desired.
  100. +              
  101. + 13 Oct 92  kdw    Fixed problem with initialising 'int' variables with
  102. +         a floating point value cast to int.   Also now will
  103. +         recognise casts of floating point constants to int
  104. +         at compile stage rather than generating run-time code
  105. +         to do this.
  106. + 11 Oct 92  kdw    The test phase of for and while loops moved to physically
  107. +         occur after the code inside the loop, and a jump to it
  108. +         inserted at the head.   This has the effect of reducing
  109. +         the number of branch instructions executed for going n
  110. +         times around the loop to n+1 rather than 2n.
  111. + 10 Oct 92  kdw    Patch (supplied by Michael Mueller) to getsym.c to reduce
  112. +         chance of rounding errors when calaculating floating
  113. +         point constants.
  114. + 08 Oct 92  kdw    Fixed bug in branch optimisers whereby an instruction
  115. +         that branches to itself would cause the compiler to loop.
  116. +         Such code occurs in the init.c module of Minix 1.6.16.
  117. +         (reported by malte)
  118. + 06 Oct 92  kdw  Generate .extern instead of .define in ACK 68K assembler
  119. +         files.  It is not clear that this is necessary, but that
  120. +         is the way ACK does it.
  121. +         (reported by Mark Newton)
  122. +        kdw    Case jump tables now generated in store and output at the
  123. +         end of a generating the code for a function  (Previously
  124. +         they were output before generating the code).  This
  125. +         allows the peephole optimisers access to jump table
  126. +                 labels.
  127. +        kdw    Delete redundant labels.  Allows better optimisation,
  128. +         particularily with reference to elimination of dead
  129. +         code.
  130. +        djw    Fixed bug in msgout.c when __STDC__ defined, and also
  131. +         HAS_STDARG defined.
  132. + 05 Oct 92  kdw    Implement user configuration of the types of 'sizeof'
  133. +         and pointer difference.
  134.   ---------------------------------------------------------------------
  135.   04 Oct 92      Packaged for release to usenet as Version 4.1
  136.   
  137. + 03 Oct 92  kdw    Added configuration option to allow users to specify
  138. +         whether varargs.h or stdarg.h is to be used - the
  139. +         msgout.c module changed to reflect this.
  140.   02 Oct 92  kdw    Added error message for void expressions passed as
  141.           parameters to functions (reported by Mark Newton)
  142.   
  143. *** docs/install.doc.o    Tue Dec  8 00:03:22 1992
  144. --- docs/install.doc    Mon Dec  7 15:21:00 1992
  145. ***************
  146. *** 33,38 ****
  147. --- 33,44 ----
  148.       install the supplied binary in /usr/lib/c68.    The binary supplied
  149.       is actually built using the IEEE floating point support option.
  150.   
  151. +     A version of the c386 binary is not supplied.  You can boot the c386
  152. +     compiler in this case using either the GNU gcc compiler, or you can
  153. +     use bcc.   Note that in this last case you need to make sure that
  154. +     you have a recent version that supports floating point if you wish
  155. +     to build a version of c386 that supports floating point.
  156.   4.    If you do not have a vesion of cc that supports c68, then a simple
  157.       version is supplied as a shell script called cc68.   Install
  158.       this on your normal search path.
  159. ***************
  160. *** 51,56 ****
  161. --- 57,71 ----
  162.   7.    Install the compiler on your search path - you are now ready to go!
  163.   
  164.   
  165. + Using standard MINIX stdio with c68/c386
  166. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  167. + The standard MINIX distribution is missing the library routine
  168. + vfprintf() which is required to build c68/c386.   A version of this
  169. + routine that is useable with the standard MINIX stdio routines is
  170. + supplied with the c68/c386 source.
  171.   Using ESTDIO with c68
  172.   ~~~~~~~~~~~~~~~~~~~~~
  173.   
  174. *** libieee/Makefile.o    Mon Dec  7 23:34:53 1992
  175. --- libieee/Makefile    Mon Dec  7 23:34:54 1992
  176. ***************
  177. *** 14,19 ****
  178. --- 14,22 ----
  179.   
  180.   all : ${OBJ}
  181.   
  182. + .s.o :
  183. +     ${AS} $<
  184.   install:    ${OBJ}
  185.       ar crv ${LIB}/libc.a ${OBJ}
  186.   
  187. *** libieee/_asf4.s.o    Mon Dec  7 23:35:07 1992
  188. --- libieee/_asf4.s    Mon Dec  7 23:32:54 1992
  189. ***************
  190. *** 5,17 ****
  191.    !
  192.    !  #1  Redid register usage, and then added wrapper routine
  193.    !    to provide C68 IEEE compatibility    Dave & Keith Walker    02/92
  194.    !-----------------------------------------------------------------------------
  195.   
  196.       .sect .text
  197.   
  198. - V    =    4 + 3*4        ! stack offset of v
  199. - U    =    V + 4        ! stack offset of u
  200.   #ifndef NOC68
  201.       .define .assfadd
  202.       .define .assfsub
  203. --- 5,15 ----
  204.    !
  205.    !  #1  Redid register usage, and then added wrapper routine
  206.    !    to provide C68 IEEE compatibility    Dave & Keith Walker    02/92
  207. +  !  #2  Changed exit code to put pointer to result in D0   Dave Walker  12/92
  208.    !-----------------------------------------------------------------------------
  209.   
  210.       .sect .text
  211.   
  212.   #ifndef NOC68
  213.       .define .assfadd
  214.       .define .assfsub
  215. ***************
  216. *** 32,45 ****
  217.   .assfadd:
  218.       move.l    #0,d0
  219.   1:
  220.       pea    tidyc68a    ! set exit routine address
  221.       movem.l    d3/d4/d6,-(sp)    ! save registers
  222.   
  223. -     move.l    V+8(sp),a0    ! address of v
  224.       move.l    (a0),d4        ! load v
  225.       eor.l    d0,d4        ! reverse sign of v if necessary
  226.   
  227. -     move.l    V+4(sp),a1    ! address of u
  228.       move.l    (a1),d6        ! load u
  229.       bra    shared
  230.   
  231. --- 30,43 ----
  232.   .assfadd:
  233.       move.l    #0,d0
  234.   1:
  235. +     move.l    8(sp),a0    ! address of v
  236. +     move.l    4(sp),a1    ! address of u
  237.       pea    tidyc68a    ! set exit routine address
  238.       movem.l    d3/d4/d6,-(sp)    ! save registers
  239.   
  240.       move.l    (a0),d4        ! load v
  241.       eor.l    d0,d4        ! reverse sign of v if necessary
  242.   
  243.       move.l    (a1),d6        ! load u
  244.       bra    shared
  245.   
  246. ***************
  247. *** 47,52 ****
  248. --- 45,51 ----
  249.   
  250.   tidyc68a:
  251.       move.l    (sp)+,a0    ! get return address
  252. +     move.l    (sp),d0        ! address of u returned as result
  253.       lea    8(sp),sp    ! remove 2 parameters from stack
  254.       jmp    (a0)        ! ... and return
  255.   
  256. *** libieee/_asf8.s.o    Mon Dec  7 23:35:14 1992
  257. --- libieee/_asf8.s    Mon Dec  7 23:35:16 1992
  258. ***************
  259. *** 6,11 ****
  260. --- 6,12 ----
  261.    !  #2  replaced shifts by swap if possible for speed increase    -kub-, 01/90
  262.    !  #3  Redid register usage, and then added wrapper routine
  263.    !    to provide C68 IEEE compatibility    Dave & Keith Walker    02/92
  264. +  !  #4  Changed exit code to put pointer to result in D0   Dave Walker  12/92
  265.    !-----------------------------------------------------------------------------
  266.   
  267.       .sect .text
  268. ***************
  269. *** 38,50 ****
  270.   .asdfadd:
  271.       move.l    #0,d0
  272.   1:
  273. !     pea    tidyc68a    ! set exit routine address
  274. !     movem.l    d3-d7,-(sp)    ! save registers
  275. !     move.l    V+8(sp),a0    ! address of v
  276. !     movem.l    (a0),d4-d5    ! load v
  277. !     eor.l    d0,d4        ! reverse sign of v if needed
  278. !     move.l    V+4(sp),a1    ! address of u
  279.       movem.l    (a1),d6-d7    ! load u
  280.   
  281.       bra    shared
  282. --- 39,50 ----
  283.   .asdfadd:
  284.       move.l    #0,d0
  285.   1:
  286. !     move.l    8(sp),a0    ! address of v
  287. !     move.l    4(sp),a1    ! address of u
  288. !     pea    tidyc68a    ! set exit routine address
  289. !     movem.l    d3-d7,-(sp)    ! save registers
  290. !     movem.l    (a0),d4-d5    ! load v
  291. !     eor.l    d0,d4        ! reverse sign of v if needed
  292.       movem.l    (a1),d6-d7    ! load u
  293.   
  294.       bra    shared
  295. ***************
  296. *** 53,58 ****
  297. --- 53,59 ----
  298.   
  299.   tidyc68a:
  300.       move.l    (sp)+,a0    ! get return address
  301. +     move.l    (sp),d0        ! address of u needs to be returned
  302.       lea    8(sp),sp    ! remove 2 parameters from stack
  303.       jmp    (a0)        ! ... and return
  304.   #endif /* NOC68 */
  305. *** libieee/_cif4.s.o    Mon Dec  7 23:35:51 1992
  306. --- libieee/_cif4.s    Mon Dec  7 23:35:53 1992
  307. ***************
  308. *** 64,70 ****
  309.       clr.w    d1        ! extend it to long value
  310.       move.w    #BIAS4+16-8,d0    ! radix point after 16 bits
  311.       bra    0f
  312. ! #endif NOACK
  313.   
  314.   !-----------------------------------------------
  315.   !    The code from here is common to the
  316. --- 64,70 ----
  317.       clr.w    d1        ! extend it to long value
  318.       move.w    #BIAS4+16-8,d0    ! radix point after 16 bits
  319.       bra    0f
  320. ! #endif /* NOACK */
  321.   
  322.   !-----------------------------------------------
  323.   !    The code from here is common to the
  324. *** libieee/_dvf4.s.o    Mon Dec  7 23:36:31 1992
  325. --- libieee/_dvf4.s    Mon Dec  7 23:36:33 1992
  326. ***************
  327. *** 14,19 ****
  328. --- 14,20 ----
  329.    !    Due to speed improvements the code is rather cryptic.
  330.    !  #4  Redid register usage, and then added wrapper routine
  331.    !    to provide C68 IEEE compatibility    Dave & Keith Walker    02/92
  332. +  !  #5  Changed exit code to put pointer to result in D0   Dave Walker  12/92
  333.    !-----------------------------------------------------------------------------
  334.   
  335.   BIAS4    =    0x7F - 1
  336. ***************
  337. *** 48,53 ****
  338. --- 49,55 ----
  339.   
  340.   tidyc68a:
  341.       move.l    (sp)+,a0    ! get return address
  342. +     move.l    (sp),d0        ! address of u returned as result
  343.       lea    8(sp),sp    ! remove 2 parameters from stack
  344.       jmp    (a0)        ! ... and return
  345.   
  346. *** libieee/_dvf8.s.o    Mon Dec  7 23:36:40 1992
  347. --- libieee/_dvf8.s    Mon Dec  7 23:36:42 1992
  348. ***************
  349. *** 14,19 ****
  350. --- 14,20 ----
  351.    !    Due to speed improvements the code is rather cryptic.
  352.    !  #4  Redid register usage, and then added wrapper routine
  353.    !    to provide C68 IEEE compatibility    Dave & Keith Walker    02/92
  354. +  !  #5  Changed exit code to put pointer to result in D0   Dave Walker  12/92
  355.    !-----------------------------------------------------------------------------
  356.   
  357.   V    =    4 + 5*4        ! offset of multiplicand
  358. ***************
  359. *** 53,58 ****
  360. --- 54,60 ----
  361.   
  362.   tidyc68a:
  363.       move.l    (sp)+,a0    ! get return address
  364. +     move.l    (sp),d0        ! address of u returned as a result
  365.       lea    8(sp),sp    ! remove 2 parameters from stack
  366.       jmp    (a0)        ! ... and return
  367.   
  368. *** libieee/_mlf4.s.o    Mon Dec  7 23:36:55 1992
  369. --- libieee/_mlf4.s    Mon Dec  7 23:36:57 1992
  370. ***************
  371. *** 7,12 ****
  372. --- 7,13 ----
  373.    !    to provide C68 IEEE compatibility    Dave & Keith Walker    02/92
  374.    !  #2  Corrected problem with corrupting D7.  Redid register
  375.    !    useage to slightly increase effeciency.  Dave Walker        09/92
  376. +  !  #3  Changed exit code to put pointer to result in D0   Dave Walker  12/92
  377.    !-----------------------------------------------------------------------------
  378.   
  379.   BIAS4    =    0x7F - 1
  380. ***************
  381. *** 39,44 ****
  382. --- 40,46 ----
  383.   
  384.   tidyc68a:
  385.       move.l    (sp)+,a0    ! get return address
  386. +     move.l    (sp),d0        ! address of v returned as result
  387.       lea    8(sp),sp    ! remove 2 parameters from stack
  388.       jmp    (a0)        ! ... and return
  389.   
  390. *** libieee/_mlf8.s.o    Mon Dec  7 23:37:05 1992
  391. --- libieee/_mlf8.s    Mon Dec  7 23:37:07 1992
  392. ***************
  393. *** 9,14 ****
  394. --- 9,15 ----
  395.    !  #3    added support for denormalized numbers            -kub-, 01/90
  396.    !  #4  Redid register usage, and then added wrapper routine
  397.    !    to provide C68 IEEE compatibility    Dave & Keith Walker    02/92
  398. +  !  #5  Changed exit code to put pointer to result in D0   Dave Walker  12/92
  399.    !-----------------------------------------------------------------------------
  400.   
  401.   V    =    4 + 5*4        ! offset of multiplicand
  402. ***************
  403. *** 46,51 ****
  404. --- 47,53 ----
  405.   
  406.   tidyc68a:
  407.       move.l    (sp)+,a0    ! get return address
  408. +     move.l    (sp),d0        ! address of v returned as result
  409.       lea    8(sp),sp    ! remove 2 parameters from stack
  410.       jmp    (a0)        ! ... and return
  411.   
  412. *** src/Makefile.o    Mon Dec  7 13:08:44 1992
  413. --- src/Makefile    Mon Dec  7 13:08:46 1992
  414. ***************
  415. *** 3,12 ****
  416.   #    N.B.  Some modules will generate empty source files
  417.   #        according to the DEFINES set in config.h
  418.   
  419. ! # Select either GCC or c68 or bcc to compile this  (not ACK!!)
  420. ! CC= cc68
  421. ! CFLAGS= -O -Qwarn=5
  422. ! LDFLAGS = -s -m250000
  423.   
  424.   HDR =     c.h cglbdec.h expr.h gen.h version.h config.h
  425.   
  426. --- 3,27 ----
  427.   #    N.B.  Some modules will generate empty source files
  428.   #        according to the DEFINES set in config.h
  429.   
  430. ! #--------------------------------------------------------
  431. ! # Use the following if compiling with c68
  432. ! CC= cc68
  433. ! CFLAGS= -O -Qwarn=5 -DNDEBUG -D__STDC__=1
  434. ! LDFLAGS= -s -m250000
  435. ! LIB=
  436. ! #--------------------------------------------------------
  437. ! # Use the following if compiling with GNU C
  438. ! # CC= gcc
  439. ! # CFLAGS= -O -NDEBUG
  440. ! # LDFLAGS= -s -m250000
  441. ! # LIB=
  442. ! #--------------------------------------------------------
  443. ! # Use the following if compiling with bcc
  444. ! # CC= bcc -3
  445. ! # CFLAGS=  -DNDEBUG -DINTEL_32BITS
  446. ! # LDFLAGS = -i
  447. ! # LIB=
  448. ! #--------------------------------------------------------
  449.   
  450.   HDR =     c.h cglbdec.h expr.h gen.h version.h config.h
  451.   
  452. ***************
  453. *** 14,19 ****
  454. --- 29,40 ----
  455.       intexpr.c searchkw.c cglbdef.c list.c \
  456.       stmt.c cmain.c genstmt.c memmgt.c msgout.c \
  457.       symbol.c decl.c getsym.c genicode.c outgen.c
  458. + #    The following is only required if your library does not
  459. + #    already contain this routine.
  460. + # SRCLIB = vfprintf.c
  461. + #    Use this setting if you already have vfprintf
  462. + SRCLIB =
  463.   #
  464.   SRC68K =config.c68 gen68k.c reg68k.c peep68k.c genffp.c genieee.c \
  465.       out68k_ack.c out68k_cpm.c out68k_gas.c
  466. ***************
  467. *** 26,31 ****
  468. --- 47,58 ----
  469.       stmt.o cmain.o genstmt.o memmgt.o msgout.o \
  470.       symbol.o decl.o getsym.o genicode.o outgen.o
  471.   #
  472. + #    The following is only required if your library does not
  473. + #    already contain this routine.
  474. + # OBJLIB = vfprintf.o
  475. + #    Use this setting if you already have vfprintf
  476. + OBJLIB =
  477. + #
  478.   OBJ68K= gen68k.o reg68k.o peep68k.o genffp.o genieee.o \
  479.       out68k_ack.o out68k_cpm.o out68k_gas.o
  480.   #
  481. ***************
  482. *** 39,56 ****
  483.       @echo "    make c68"
  484.       @echo "    make c386"
  485.   
  486. ! c68:    config_check_c68 $(OBJ) $(OBJ68K) $(OBJ386)
  487. !     $(CC) $(LDFLAGS) -o c68 $(OBJ) \
  488. !             $(OBJ68K) \
  489. !             $(OBJ386)
  490.   
  491.   config_check_c68:
  492.       ./copy-if-change config.c68 config.h
  493.   
  494. ! c386:    config_check_c386 $(OBJ) $(OBJ68K) $(OBJ386)
  495. !     $(CC) $(LDFLAGS) -o c386 $(OBJ) \
  496. !             $(OBJ68K) \
  497. !             $(OBJ386)
  498.   
  499.   config_check_c386:
  500.       ./copy-if-change config.c386 config.h
  501. --- 66,86 ----
  502.       @echo "    make c68"
  503.       @echo "    make c386"
  504.   
  505. ! c68:    config_check_c68 $(OBJ) ${OBJLIB} $(OBJ68K) $(OBJ386)
  506. !     $(CC) $(LDFLAGS) -o c68 $(OBJ) \
  507. !             $(OBJ68K) \
  508. !             $(OBJ386) \
  509. !             ${OBJLIB} ${LIB}
  510.   
  511.   config_check_c68:
  512.       ./copy-if-change config.c68 config.h
  513.   
  514. ! c386:    config_check_c386 $(OBJ) ${OBJLIB} $(OBJ68K) $(OBJ386)
  515. !     $(CC) $(LDFLAGS) -o c386 $(OBJ) \
  516. !             $(OBJ68K) \
  517. !             $(OBJ386) \
  518. !             ${OBJLIB} ${LIB}
  519. !     chmem =200000 c386
  520.   
  521.   config_check_c386:
  522.       ./copy-if-change config.c386 config.h
  523. *** src/c.h.o    Mon Dec  7 13:09:03 1992
  524. --- src/c.h    Thu Nov 26 22:04:23 1992
  525. ***************
  526. *** 24,30 ****
  527.   
  528.   
  529.   #include <sys/types.h>
  530. ! #include <sys/times.h>
  531.   #include <string.h>
  532.   #include <stdlib.h>
  533.   #include <stdio.h>
  534. --- 24,32 ----
  535.   
  536.   
  537.   #include <sys/types.h>
  538. ! #ifdef VERBOSE
  539. ! #include <sys/times.h>
  540. ! #endif
  541.   #include <string.h>
  542.   #include <stdlib.h>
  543.   #include <stdio.h>
  544. ***************
  545. *** 50,56 ****
  546.       kw_register, kw_typedef, kw_static, kw_goto, kw_return,
  547.       kw_sizeof, kw_break, kw_continue, kw_if, kw_else, kw_for,
  548.       kw_do, kw_while, kw_switch, kw_case, kw_default,
  549. !     uconst, eof
  550.   };
  551.   
  552.   /* storage classes */
  553. --- 52,58 ----
  554.       kw_register, kw_typedef, kw_static, kw_goto, kw_return,
  555.       kw_sizeof, kw_break, kw_continue, kw_if, kw_else, kw_for,
  556.       kw_do, kw_while, kw_switch, kw_case, kw_default,
  557. !     uconst, ulconst, eof
  558.   };
  559.   
  560.   /* storage classes */
  561. ***************
  562. *** 120,125 ****
  563. --- 122,134 ----
  564.       int             used;
  565.   };
  566.   
  567. + struct swtab {
  568. +     int           tablab;
  569. +     int           numlabs;
  570. +     int *       labels;
  571. +     struct swtab  *next;
  572. + };
  573.   #define    SYM_USED    1
  574.   #define    SYM_DEFINED    2
  575.   
  576. ***************
  577. *** 127,133 ****
  578.   #define TABLE    struct stab
  579.   
  580.   #define MAX_ERROR_COUNT 200
  581. - #define MAX_STRLEN    1500
  582.   #define MAX_ID_LEN    50
  583.   #define MAX_PARAMS    100
  584.   #define REG_LIST    20
  585. --- 136,141 ----
  586. ***************
  587. *** 282,287 ****
  588. --- 290,296 ----
  589.       ERR_FIELD,
  590.       ERR_FPCON,
  591.       ERR_IDEXPECT,
  592. +     ERR_ILLCAST,
  593.       ERR_ILLCHAR,
  594.       ERR_ILLCLASS,
  595.       ERR_ILLINIT,
  596. ***************
  597. *** 345,355 ****
  598. --- 354,366 ----
  599.    */
  600.   #define    WARN_LEVEL4    WARN_0TYPEDEF
  601.       WARN_0TYPEDEF,
  602. +     WARN_ADDARRAY,
  603.       WARN_ADDFUNC,
  604.       WARN_EMPTY,
  605.       WARN_HIDE,
  606.       WARN_IMPLICIT,
  607.       WARN_IMPLICITFN,
  608. +     WARN_INCOMPLETE,
  609.       WARN_NOTKANDR,
  610.       WARN_NOTUSED,
  611.   /*
  612. ***************
  613. *** 386,392 ****
  614.       WARN_FLDTYPE,
  615.       WARN_NOCOPY,
  616.       WARN_PRAGMA,
  617. -     WARN_STRINGCUT,
  618.   /*
  619.    *    Messages below this point are output without file/line number details
  620.    */
  621. --- 397,402 ----
  622. *** src/cglbdec.h.o    Mon Dec  7 13:09:12 1992
  623. --- src/cglbdec.h    Thu Nov 26 22:04:26 1992
  624. ***************
  625. *** 29,36 ****
  626.   extern unsigned int nextlabel;
  627.   extern int      lastch;
  628.   extern enum e_sym lastst;
  629. ! #define lastid laststr
  630. ! extern char     laststr[MAX_STRLEN + 1];
  631.   extern int      lstrlen;
  632.   extern unsigned long ival;
  633.   #ifndef NOFLOAT
  634. --- 29,36 ----
  635.   extern unsigned int nextlabel;
  636.   extern int      lastch;
  637.   extern enum e_sym lastst;
  638. ! #define lastid laststr        /* same buffer for last string and last id */
  639. ! extern char     *laststr;
  640.   extern int      lstrlen;
  641.   extern unsigned long ival;
  642.   #ifndef NOFLOAT
  643. ***************
  644. *** 40,45 ****
  645. --- 40,46 ----
  646.   extern TABLE    gsyms, lsyms, labsyms, gtags, ltags;
  647.   
  648.   extern struct slit *strtab;
  649. + extern struct swtab *swtables;
  650.   extern long     lc_auto;
  651.   extern long     max_scratch;
  652.   extern long    act_scratch;
  653. ***************
  654. *** 63,68 ****
  655. --- 64,72 ----
  656.   #endif
  657.   extern int    verbose_option;
  658.   extern int    trad_option;
  659. + #ifdef TRACE
  660. + extern int    trace_option;
  661. + #endif /* TRACE */
  662.   extern int    max_error_count;
  663.   
  664.   extern TYP     *ret_type;
  665. *** src/cglbdef.c.o    Mon Dec  7 13:09:19 1992
  666. --- src/cglbdef.c    Mon Dec  7 13:09:21 1992
  667. ***************
  668. *** 36,42 ****
  669.   unsigned int    nextlabel;
  670.   int             lastch = ' ';
  671.   enum e_sym      lastst;
  672. ! char            laststr[MAX_STRLEN + 1];
  673.   int             lstrlen;
  674.   unsigned long   ival;
  675.   #ifndef NOFLOAT
  676. --- 36,42 ----
  677.   unsigned int    nextlabel;
  678.   int             lastch = ' ';
  679.   enum e_sym      lastst;
  680. ! char            *laststr = NULL;
  681.   int             lstrlen;
  682.   unsigned long   ival;
  683.   #ifndef NOFLOAT
  684. ***************
  685. *** 46,51 ****
  686. --- 46,52 ----
  687.   TABLE           gsyms, gtags, lsyms, labsyms, ltags;
  688.   
  689.   struct slit    *strtab;
  690. + struct swtab   *swtables;
  691.   long            lc_auto;
  692.   long            max_scratch;
  693.   long        act_scratch;
  694. ***************
  695. *** 79,84 ****
  696. --- 80,88 ----
  697.   #endif
  698.   int        verbose_option = 0;
  699.   int        trad_option = 0;
  700. + #ifdef TRACE
  701. + int        trace_option = 0;
  702. + #endif
  703.   int        max_error_count = MAX_ERROR_COUNT;
  704.   
  705.   #ifdef QDOS
  706. ***************
  707. *** 90,96 ****
  708.   long        _stackmargin = 1024L;
  709.   void        consetup_title();
  710.   void        (*_consetup)() = consetup_title;
  711. ! long        (*_writetrans)() = NULL;
  712.   char        _version[] = VERSION;
  713.   char        _copyright[] = LAST_CHANGE_DATE;
  714.   #endif /* QDOS */
  715. --- 94,100 ----
  716.   long        _stackmargin = 1024L;
  717.   void        consetup_title();
  718.   void        (*_consetup)() = consetup_title;
  719. ! long        (*_conwrite)() = NULL;
  720.   char        _version[] = VERSION;
  721.   char        _copyright[] = LAST_CHANGE_DATE;
  722.   #endif /* QDOS */
  723. ***************
  724. *** 106,112 ****
  725.   long            decl_time = 0, parse_time = 0, opt_time = 0, gen_time = 0, flush_time = 0;
  726.   #endif
  727.   
  728. ! TYP             tp_void = {{0, 0}, 0, 0, -1, bt_void, 0, 1, 0, 0};
  729.   TYP             tp_long = {{0, 0}, 0, 0, 4, bt_long, 0, 1, 0, 0};
  730.   TYP             tp_ulong = {{0, 0}, 0, 0, 4, bt_ulong, 0, 1, 0, 0};
  731.   TYP             tp_char = {{0, 0}, 0, 0, 1, bt_char, 0, 1, 0, 0};
  732. --- 110,116 ----
  733.   long            decl_time = 0, parse_time = 0, opt_time = 0, gen_time = 0, flush_time = 0;
  734.   #endif
  735.   
  736. ! TYP             tp_void = {{0, 0}, 0, 0, UNKNOWN_SIZE, bt_void, 0, 1, 0, 0};
  737.   TYP             tp_long = {{0, 0}, 0, 0, 4, bt_long, 0, 1, 0, 0};
  738.   TYP             tp_ulong = {{0, 0}, 0, 0, 4, bt_ulong, 0, 1, 0, 0};
  739.   TYP             tp_char = {{0, 0}, 0, 0, 1, bt_char, 0, 1, 0, 0};
  740. *** src/cmain.c.o    Mon Dec  7 13:09:29 1992
  741. --- src/cmain.c    Mon Dec  7 13:09:31 1992
  742. ***************
  743. *** 63,69 ****
  744.       char    *ptr;
  745.   
  746.       for (i = 1; i < _NSIG; ++i)
  747. !     (void) signal(i, exception);
  748.   
  749.       /* Accept parameters from Environment */
  750.   #ifdef MC680X0
  751. --- 63,69 ----
  752.       char    *ptr;
  753.   
  754.       for (i = 1; i < _NSIG; ++i)
  755. !     VOIDCAST signal(i, exception);
  756.   
  757.       /* Accept parameters from Environment */
  758.   #ifdef MC680X0
  759. ***************
  760. *** 199,204 ****
  761. --- 199,210 ----
  762.       volatile_found = !trad_option;
  763.       return;
  764.       }
  765. + #ifdef TRACE
  766. +     if (!strcmp(s, "trace")) {
  767. +     trace_option = value;
  768. +     return;
  769. +     }
  770. + #endif
  771.       if (!strcmp(s, "v")) {
  772.       verbose_option = 1;
  773.       eprintf ("%s %s (%s)\n",PROGNAME, VERSION, LAST_CHANGE_DATE);
  774. ***************
  775. *** 266,275 ****
  776.   closefiles()
  777.   {
  778.       if (list_option)
  779. !     (void) fclose(list);
  780. ! #ifdef ICODE
  781. !     if (icode_option)
  782. !     (void) fclose(icode);
  783.   #endif
  784.   }
  785.   
  786. --- 272,281 ----
  787.   closefiles()
  788.   {
  789.       if (list_option)
  790. !     VOIDCAST fclose(list);
  791. ! #ifdef ICODE
  792. !     if (icode_option)
  793. !     VOIDCAST fclose(icode);
  794.   #endif
  795.   }
  796.   
  797. *** src/config.c386.o    Tue Dec 01 23:26:11 1992
  798. --- src/config.c386    Wed Dec 09 21:41:51 1992
  799. ***************
  800. *** 20,25 ****
  801. --- 20,26 ----
  802.   /* #define HAS_NLS 1    /* system supports message catalogues */
  803.   #define HAS_STDARG 1    /* system supports stdarg.h */
  804.   /* #define NOFLOAT 1     /* Do not generate floating point support */
  805. + #define NO_FLOAT_PRINTF    /* no FP printf for emitting float constants */
  806.   /* #define NODOUBLE 1    /* Treat 'float' and 'double' as same (MFFP version) */
  807.   /*
  808.    *    These options tend not to be changed except when developing
  809. ***************
  810. *** 26,31 ****
  811. --- 27,37 ----
  812.    */
  813.   /* #define VERBOSE 1    /* Generate verbose mode code in compiler */
  814.   /* #define ICODE   1    /* Generate icode analysis code in compiler */
  815. + /*
  816. +  *    This option is still experimental and under development, so it
  817. +  *    should not normally be activated.
  818. +  */
  819. + #define TRACE   1    /* Generate calls for trace/debugger support */
  820.   
  821.   /*
  822.    *    MOTOROLA 68000 OPTIONS
  823. ***************
  824. *** 50,56 ****
  825.   #define INTEL_386 1    /* This is an Intel 386 compiler */
  826.   #define SEPARATE_I_D 1    /* Separate I and D spaces */
  827.   
  828. ! #define FUNCS_USE_387 1    /* ... very special option */
  829.   
  830.   /* #define TARGET_GAS    /* Assembler Syntax is for GAS/Sun386i */
  831.   /* #define TARGET_SUN    /* Assembler Syntax is for Sun386i */
  832. --- 56,69 ----
  833.   #define INTEL_386 1    /* This is an Intel 386 compiler */
  834.   #define SEPARATE_I_D 1    /* Separate I and D spaces */
  835.   
  836. ! /*
  837. !  * if FUNCS_USE_387 is defined, extra library calls are generated if the
  838. !  * nofpu option is in effect that allows to use code generated by
  839. !  * this compiler to be linked with functions that return values
  840. !  * on the 387 stack.
  841. !  * there is no provision for returns on the ESP stack.
  842. !  */
  843. ! #define FUNCS_USE_387 1    
  844.   
  845.   /* #define TARGET_GAS    /* Assembler Syntax is for GAS/Sun386i */
  846.   /* #define TARGET_SUN    /* Assembler Syntax is for Sun386i */
  847. ***************
  848. *** 70,75 ****
  849. --- 83,104 ----
  850.   #define VOIDCAST (void)        /* Set to space if 'void' not supported */
  851.   
  852.   /*
  853. +  * Many K&R compiler have assumed that the result of the sizeof operator
  854. +  * is an int.  However ANSI assumes that the result is the type size_t.
  855. +  * Ensure that the setting is compatible with the value defined in your
  856. +  * library and header files.
  857. +  */
  858. + #define    TP_SIZE        tp_uint    /* size_t type; either tp_uint or tp_ulong */
  859. + /*
  860. +  * Many K&R compilers have assumed that the result of the pointer difference
  861. +  * operation is an int.  However ANSI assumes that the result is the type
  862. +  * ptrdiff_t.  Ensure that the setting is compatible with the value defined
  863. +  * in your library and header files.
  864. +  * NOTE: This must be a signed value.
  865. +  */
  866. + #define    TP_PTRDIFF    tp_int    /* ptrdiff_t type; either tp_int or tp_long */
  867. + /*
  868.    *    Do not change anything beyond this point
  869.    *    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  870.    */
  871. ***************
  872. *** 144,156 ****
  873.   #define PROGNAME   "c386"
  874.   #define LIST_NAME  "c386.list"
  875.   #define ICODE_NAME "c386.icode"
  876. - /*
  877. -  * if FUNCS_USE_387 is defined, extra library calls are generated if the
  878. -  * nofpu option is in effect that allows to use code generated by
  879. -  * this compiler to be linked with functions that return values
  880. -  * on the 387 stack
  881. -  */
  882. - #define FUNCS_USE_387
  883.   #endif
  884.   
  885.   #ifndef CPU_DEFINED
  886. --- 173,178 ----
  887. *** src/config.c68.o    Mon Dec  7 13:09:50 1992
  888. --- src/config.c68    Thu Nov 26 22:04:13 1992
  889. ***************
  890. *** 20,31 ****
  891. --- 20,37 ----
  892.   /* #define HAS_NLS 1    /* system supports message catalogues */
  893.   #define HAS_STDARG 1    /* system supports stdarg.h */
  894.   /* #define NOFLOAT 1     /* Do not generate floating point support */
  895. + /* #define NO_FLOAT_PRINTF /* no FP printf for emitting float constants */
  896.   /* #define NODOUBLE 1    /* Treat 'float' and 'double' as same (MFFP version) */
  897.   /*
  898.    *    These options tend not to be changed except when developing
  899.    */
  900.   /* #define VERBOSE 1    /* Generate verbose mode code in compiler */
  901.   /* #define ICODE   1    /* Generate icode analysis code in compiler */
  902. + /*
  903. +  *    This option is still experimental and under development, so it
  904. +  *    should not normally be activated.
  905. +  */
  906. + #define TRACE   1    /* Generate calls for trace/debugger support */
  907.   
  908.   /*
  909.    *    MOTOROLA 68000 OPTIONS
  910. ***************
  911. *** 50,55 ****
  912. --- 56,68 ----
  913.   /* #define INTEL_386 1    /* This is an Intel 386 compiler */
  914.   /* #define SEPARATE_I_D 1    /* Separate I and D spaces */
  915.   
  916. + /*
  917. +  * if FUNCS_USE_387 is defined, extra library calls are generated if the
  918. +  * nofpu option is in effect that allows to use code generated by
  919. +  * this compiler to be linked with functions that return values
  920. +  * on the 387 stack.
  921. +  * there is no provision for returns on the ESP stack.
  922. +  */
  923.   /* #define FUNCS_USE_387 1    /* ... very special option */
  924.   
  925.   /* #define TARGET_GAS    /* Assembler Syntax is for GAS/Sun386i */
  926. ***************
  927. *** 70,75 ****
  928. --- 83,104 ----
  929.   #define VOIDCAST (void)        /* Set to space if 'void' not supported */
  930.   
  931.   /*
  932. +  * Many K&R compiler have assumed that the result of the sizeof operator
  933. +  * is an int.  However ANSI assumes that the result is the type size_t.
  934. +  * Ensure that the setting is compatible with the value defined in your
  935. +  * library and header files.
  936. +  */
  937. + #define    TP_SIZE        tp_uint    /* size_t type; either tp_uint or tp_ulong */
  938. + /*
  939. +  * Many K&R compilers have assumed that the result of the pointer difference
  940. +  * operation is an int.  However ANSI assumes that the result is the type
  941. +  * ptrdiff_t.  Ensure that the setting is compatible with the value defined
  942. +  * in your library and header files.
  943. +  * NOTE: This must be a signed value.
  944. +  */
  945. + #define    TP_PTRDIFF    tp_int    /* ptrdiff_t type; either tp_int or tp_long */
  946. + /*
  947.    *    Do not change anything beyond this point
  948.    *    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  949.    */
  950. ***************
  951. *** 144,156 ****
  952.   #define PROGNAME   "c386"
  953.   #define LIST_NAME  "c386.list"
  954.   #define ICODE_NAME "c386.icode"
  955. - /*
  956. -  * if FUNCS_USE_387 is defined, extra library calls are generated if the
  957. -  * nofpu option is in effect that allows to use code generated by
  958. -  * this compiler to be linked with functions that return values
  959. -  * on the 387 stack
  960. -  */
  961. - #define FUNCS_USE_387
  962.   #endif
  963.   
  964.   #ifndef CPU_DEFINED
  965. --- 173,178 ----
  966. *** src/decl.c.o    Mon Dec  7 13:09:59 1992
  967. --- src/decl.c    Mon Dec  7 13:10:05 1992
  968. ***************
  969. *** 98,129 ****
  970.       return tp;
  971.   }
  972.   
  973. ! void
  974. ! decl(table)
  975. !     TABLE          *table;
  976. ! {
  977. !     struct sym     *sp;
  978. !     /*
  979. !      * at top level, 'int' is changed to 'short' or 'long'
  980. !      */
  981.       /* for now just swallow "const" and "volatile" */
  982.       switch (lastst) {
  983.         case kw_const:
  984.         getsym();
  985. !     head = tail = &tp_int;
  986.       if (lastst == kw_volatile)
  987.           getsym();
  988.       break;
  989.         case kw_volatile:
  990.       getsym();
  991. !     head = tail = &tp_int;
  992.       if (lastst == kw_const)
  993.           getsym();
  994.       break;
  995.       }
  996.       switch (lastst) {
  997.         case kw_void:
  998.       head = tail = &tp_void;
  999. --- 98,134 ----
  1000.       return tp;
  1001.   }
  1002.   
  1003. ! static void
  1004. ! qualifier()
  1005. ! {
  1006.       /* for now just swallow "const" and "volatile" */
  1007.       switch (lastst) {
  1008.         case kw_const:
  1009.         getsym();
  1010. !     if (head == NULL)
  1011. !         head = tail = &tp_int;
  1012.       if (lastst == kw_volatile)
  1013.           getsym();
  1014.       break;
  1015.         case kw_volatile:
  1016.       getsym();
  1017. !     if (head == NULL)
  1018. !         head = tail = &tp_int;
  1019.       if (lastst == kw_const)
  1020.           getsym();
  1021.       break;
  1022.       }
  1023. ! }
  1024. ! void
  1025. ! decl()
  1026. ! {
  1027. !     struct sym     *sp;
  1028. !     /*
  1029. !      * at top level, 'int' is changed to 'short' or 'long'
  1030. !      */
  1031. !     qualifier();
  1032.       switch (lastst) {
  1033.         case kw_void:
  1034.       head = tail = &tp_void;
  1035. ***************
  1036. *** 135,145 ****
  1037.       break;
  1038.         case kw_short:
  1039.           getsym();
  1040. !         if (lastst == kw_unsigned) {
  1041. !             getsym();
  1042. !             head = tail = &tp_ushort;
  1043. !         } else
  1044. !             head = tail = &tp_short;
  1045.       if (lastst == kw_int)
  1046.           getsym();
  1047.       break;
  1048. --- 140,156 ----
  1049.       break;
  1050.         case kw_short:
  1051.           getsym();
  1052. !     qualifier();
  1053. !     switch (lastst) {
  1054. !       case kw_unsigned:
  1055. !             getsym();
  1056. !             head = tail = &tp_ushort;
  1057. !         break;
  1058. !       case kw_signed:
  1059. !         getsym();
  1060. !       default:
  1061. !             head = tail = &tp_short;
  1062. !     }
  1063.       if (lastst == kw_int)
  1064.           getsym();
  1065.       break;
  1066. ***************
  1067. *** 149,154 ****
  1068. --- 160,166 ----
  1069.       break;
  1070.         case kw_long:
  1071.       getsym();
  1072. +     qualifier();
  1073.           switch (lastst) {
  1074.         case kw_unsigned:
  1075.           getsym();
  1076. ***************
  1077. *** 166,171 ****
  1078. --- 178,184 ----
  1079.           getsym();
  1080.           head = tail = &tp_longdouble;
  1081.           break;
  1082. +       case kw_signed:
  1083.             case kw_int:
  1084.               getsym();
  1085.           /*FALLTHROUGH*/
  1086. ***************
  1087. *** 176,181 ****
  1088. --- 189,195 ----
  1089.       break;
  1090.         case kw_unsigned:
  1091.       getsym();
  1092. +     qualifier();
  1093.       switch (lastst) {
  1094.         case kw_long:
  1095.           getsym();
  1096. ***************
  1097. *** 202,207 ****
  1098. --- 216,222 ----
  1099.       break;
  1100.         case kw_signed:
  1101.       getsym();
  1102. +     qualifier();
  1103.       switch (lastst) {
  1104.         case kw_long:
  1105.           getsym();
  1106. ***************
  1107. *** 270,287 ****
  1108.       TYP            *temp1, *temp2, *temp3, *temp4;
  1109.       decl1_level++;
  1110.       /* for now just swallow "const" and "volatile" */
  1111. !     switch (lastst) {
  1112. !       case kw_const:
  1113. !       getsym();
  1114. !     if (lastst == kw_volatile)
  1115. !         getsym();
  1116. !     break;
  1117. !       case kw_volatile:
  1118. !     getsym();
  1119. !     if (lastst == kw_const)
  1120. !         getsym();
  1121. !     break;
  1122. !     }
  1123.       switch (lastst) {
  1124.         case id:
  1125.       declid = strsave(lastid);
  1126. --- 285,291 ----
  1127.       TYP            *temp1, *temp2, *temp3, *temp4;
  1128.       decl1_level++;
  1129.       /* for now just swallow "const" and "volatile" */
  1130. !     qualifier();
  1131.       switch (lastst) {
  1132.         case id:
  1133.       declid = strsave(lastid);
  1134. ***************
  1135. *** 376,381 ****
  1136. --- 380,386 ----
  1137.         case kw_char:
  1138.         case kw_short:
  1139.         case kw_unsigned:
  1140. +       case kw_signed:
  1141.         case kw_long:
  1142.         case kw_struct:
  1143.         case kw_union:
  1144. ***************
  1145. *** 387,393 ****
  1146.         case kw_const:
  1147.         case kw_volatile:
  1148.       do_decl:
  1149. !         decl (proto);
  1150.           break;
  1151.         default:
  1152.           message(ERR_PARMS);
  1153. --- 392,398 ----
  1154.         case kw_const:
  1155.         case kw_volatile:
  1156.       do_decl:
  1157. !         decl ();
  1158.           break;
  1159.         default:
  1160.           message(ERR_PARMS);
  1161. ***************
  1162. *** 568,574 ****
  1163.       int             no_append;
  1164.       static long     old_nbytes;
  1165.       nbytes = 0;
  1166. !     decl(table);
  1167.       dhead = head;
  1168.       for (;;) {
  1169.       declid = 0;
  1170. --- 573,579 ----
  1171.       int             no_append;
  1172.       static long     old_nbytes;
  1173.       nbytes = 0;
  1174. !     decl();
  1175.       dhead = head;
  1176.       for (;;) {
  1177.       declid = 0;
  1178. ***************
  1179. *** 1080,1085 ****
  1180. --- 1085,1091 ----
  1181.         case kw_char:
  1182.         case kw_short:
  1183.         case kw_unsigned:
  1184. +       case kw_signed:
  1185.         case kw_long:
  1186.         case kw_struct:
  1187.         case kw_union:
  1188.