Commit graph

2016 commits

Author SHA1 Message Date
tkchia 3b1d440d5c Fix cpp.ansi crash when stringifying missing macro argument
Fixes https://github.com/davidgiven/ack/issues/238
2022-08-02 15:28:21 +00:00
David Given 50d3354ccb
Merge pull request #264 from davidgiven/dtrg-fixes
Fix or silence a lot of annoying build warnings.
2022-08-01 22:37:19 +02:00
David Given 511c3e99ee Fix a whole bunch of warnings. 2022-08-01 22:08:23 +02:00
tkchia 14c386561a Fix use-after-free in Modula-2 middle-end's em_m2
Partly fixes https://github.com/davidgiven/ack/issues/262
2022-08-01 17:48:54 +00:00
David Given 56b0eb81c1 Treat \r as a space. 2022-07-18 20:35:53 +02:00
David Given 5c2f190c29 Lots of binary mode flags. 2022-07-17 12:58:48 +02:00
David Given f30bf70832 Symbols called 'eof' conflict with Windows io.h. 2022-07-16 19:40:11 +02:00
David Given 496424acf6 Merge from default. 2022-07-16 19:35:49 +02:00
David Given 04f723b406 Eliminate make.allocd --- something about it makes Windows unhappy and it
doesn't add value anyway.
2022-07-16 19:34:25 +02:00
David Given 1a861669c5 Try and work around CRLF problems... again. 2022-07-16 17:58:39 +02:00
David Given f15075f9a4 Don't use ed to generate the Basic token list. 2022-07-16 13:47:22 +02:00
tkchia 80d1932ff8 libcc.ansi: make abort() try harder to abort the process 2022-07-16 07:27:46 +00:00
David Given 9519588f59 Convert all the things to Unix format. 2022-07-16 00:02:46 +02:00
David Given 020c84db3d Try forcing ed to produce LF output files rather than CRLF ones. 2022-07-15 23:42:23 +02:00
David Given b727599882 Try some build debugging. 2022-07-15 23:34:55 +02:00
David Given 25b6712e63 Rework all the ackbuilder scripts not to use wildcards, because we can't expand
them without luaposix, which isn't available (easily) on OSX or Windows.
2022-07-14 23:57:54 +02:00
Tee-Kiah Chia 2dfddf3fa8 libcc.ansi: add support for O_TEXT, O_BINARY file status flags 2021-03-27 19:12:35 +00:00
David Given 3eed6db007 Fix some issues caused by, I think, COMMON variables no longer working in
recent gccs?
2020-09-14 22:38:01 +02:00
David Given 53a3630d2c Don't try to allocate a ridiculous 1025 bytes on the stack (which completely
explodes on CP/M).
2020-02-05 23:05:33 +01:00
George Koehler b9bd89914f Add back _EM_LSIZE == 8 to <stdint.h>
This will cause ACK libc to provide int64_t as long (instead of long
long) on LP64, if we ever get such a platform.

LP64 would have 64-bit long and 64-bit long long, so int64_t might be
either type.  For example on amd64, int64_t is long in NetBSD libc,
and long long in OpenBSD libc.  Support for long long in ACK remains
incomplete (no printf "%lld"), so it seems better to prefer long where
possible.  Also, int64_t being long before long long is more
consistent with int32_t being int before long.

Put suffixes on the values of INT32_MAX, INT64_MAX, and related
constants, so they have the same types as int32_t and int64_t.
2019-10-05 01:34:01 -04:00
George Koehler 485faa2944 Remove extra conversion of shift count in ACK C.
Given `long long o1` and `unsigned int o2`, then `o1 << o2` was
converting o2 to long long and then to int.  Remove the first
conversion and just convert o2 to int.
2019-09-16 21:35:38 -04:00
George Koehler aeb8ed53e4 Define _EM_LLSIZE, int64_t, uint64_t for linux386.
Also change UINT32_MAX in <stdint.h> from 4294967295 to 4294967295U.
The U suffix avoids a promotion to long or unsigned long if it would
fit in unsigned int.

Define _EM_LLSIZE but not EM_LLSIZE.  The leading underscore is a
convention for such macros.  If code always uses _EM_LLSIZE, we will
never need to add EM_LLSIZE.  The flag -D_EM_LLSIZE={q} is in
plat/linux386/descr, not lib/descr/fe, so platforms without long long
don't define _EM_LLSIZE.

<stdint.h> doesn't keep the old code for _EM_LSIZE == 8, because I
change it to _EM_LLSIZE == 8.  No platform had _EM_LSIZE == 8, and the
old limits like INT64_MAX were wrong.
2019-09-12 13:40:07 -04:00
George Koehler 15950f9c95 Add long long literals like 123LL to ACK C.
For now, a long long literal must have the 'LL' or 'll' suffix.  A
literal without 'LL' or 'll' acts as before: it may become unsigned
long but not long long.  (For targets where int and long have the same
size, some literals change from unsigned int to unsigned long.)

Type `arith` may be too narrow for long long values.  Add a second
type `writh` for wide arithmetic, and change some variables from arith
to writh.  This may cause bugs if I forget to use writh, or if a
conversion from writh to arith overflows.  I mark some conversions
with (arith) or (writh) casts.

 - BigPars, SmallPars: Remove SPECIAL_ARITHMETICS.  This feature
   would change arith to a different type, but can't work, because it
   would conflict with definitions of arith in both <em_arith.h> and
   <flt_arith.h>.
 - LLlex.c: Understand 'LL' or 'll' suffix.  Cut size of constant when
   it overflows writh, not only when it overflows the target machine's
   types.  (This cut might not be necessary, because we might cut it
   again later.)  When picking signed long or unsigned long, check the
   target's long type, not the compiler's arith type; the old check
   for `val >= 0` was broken where sizeof(arith) > 4.
 - LLlex.h: Change struct token's tok_ival to writh, so it can hold a
   long long literal.
 - arith.c: Adjust to VL_VALUE being writh.  Don't convert between
   float and integer at compile-time if the integer might be too wide
   for <flt_arith.h>.  Add writh2str(), because writh might be too
   wide for long2str().
 - arith.h: Remove SPECIAL_ARITHMETICS.  Declare full_mask[] here,
   not in several *.c files.  Declare writh2str().
 - ch3.c, ch3bin.c, ch3mon.c, declarator.c, statement.g: Remove
   obsolete casts.  Adjust to VL_VALUE being writh.
 - conversion.c, stab.c: Don't declare full_mask[].
 - cstoper.c: Use writh for constant operations on VL_VALUE, and for
   full_mask[].
 - declar., field.c, ival.g: Add casts.
 - dumpidf.c: Need to #include "parameters.h" before checking DEBUG.
   Use writh2str, because "%ld" might not work.
 - eval.c, eval.h: Add casts.  Use writh when writing a wide constant
   in EM.
 - expr.c: Add and remove casts.  In fill_int_expr(), make expression
   from long long literal.  In chk_cst_expr(), allow long long as
   constant expression, so the compiler may accept `case 123LL:` in a
   switch statement.
 - expr.str: Change struct value's vl_value and struct expr's VL_VALUE
   to writh, so an expression may have a long long value at compile
   time.
 - statement.g: Remove obsolete casts.
 - switch.c, switch.str: Use writh in case entries for switch
   statements, so `switch (ll) {...}` with long long ll works.
 - tokenname.c: Add ULNGLNG so LLlex.c can use it for literals.
2019-09-04 22:14:38 -04:00
George Koehler 007a63d529 Begin to add long long to C compiler for linux386.
Add long long type, but without literals; you can't say '123LL' yet.
You can try constant operations, like `(long long)123 + 1`, but the
compiler's `arith` type might not be wide enough.  Conversions,
shifts, and some other operations don't work in i386 ncg; I am using a
union instead of conversions:

	union q {
		long long ll;
		unsigned long long ull;
		int i[2];
	};

Hack plat/linux386/descr to enable long long (size 8, alignment 4)
only for this platform.  The default for other platforms is to disable
long long (size -1).

In lang/cem/cemcom.ansi,

 - BigPars, SmallPars: Add default size, alignment of long long.
 - align.h: Add lnglng_align.
 - arith.c: Convert arithmetic operands to long long or unsigned long
   long when necessary; avoid conversion from long long to long.
   Allow long long as an arithmetic, integral, or logical operand.
 - ch3.c: Handle long long like int and long when erroneously applying
   a selector, like `long long ll; ll.member` or `ll->member`.  Add
   long long to integral and arithmetic types.
 - code.c: Add long long to type stabs for debugging.
 - conversion.c: Add long long to integral conversions.
 - cstoper.c: Write masks up to full_mask[8].  Add FIXME comment.
 - declar.g: Parse `long long` in code.
 - decspecs.c: Understand long long in type declarations.
 - eval.c: Add long long to operations, to generate code like `adi 8`.
   Don't use `ldc` with constant over 4 bytes.
 - ival.g: Allow long long in initializations.
 - main.c: Set lnglng_type and related values.
 - options.c: Add option like `-Vq8.4` to set long long to size 8,
   alignment 4.  I chose 'q', because Perl's pack and Ruby's
   Array#pack use 'q' for 64-bit or long long values; it might be a
   reference to BSD's old quad_t alias for long long.
 - sizes.h: Add lnglng_size.
 - stab.c: Allow long long when writing the type stab for debugging.
   Switch from calculating the ranges to hardcoding them in strings;
   add 8-byte ranges as a special case.  This also hardcodes the
   unsigned 4-byte range as "0;-1".  Before it was either "0;-1" or
   "0;4294967295", depending on sizeof(long) in the compiler.
 - struct.c: Try long long bitfield, but it will probably give the
   error, "bit field type long long does not fit in a word".
 - switch.c: Update comment.
 - tokenname.c: Define LNGLNG (long long) like LNGDBL (long double).
 - type.c, type.str: Add lnglng_type and ulnglng_type.  Add function
   no_long_long() to check if long long is disabled.
2019-09-02 11:24:44 -04:00
David Given 1bd6a9d4fa Add an itoa() function, following the most common prototype I can find. 2019-06-24 20:52:56 +02:00
David Given c9d14f6c9e Cause B programs to fail on startup if they detect alignment issues. 2019-06-17 22:27:13 +02:00
David Given 50dca8b954 First at-least-slightly working version of the CP/M read/write stuff. Not as
bad as I expected, but far too big.
2019-06-16 19:04:17 +02:00
David Given 3131dc9915 Partially working port of stdio to CP/M. I'm not sure this will work; it's
getting way too complicated (stdio is horribly subtle). I think I need to
rethink things.
2019-06-15 22:22:01 +02:00
David Given 1387c8713b Now that printf and scanf contain no FILE*-specific code, we can move them into
core (and split them up).
2019-06-15 13:53:20 +02:00
David Given 9109d7af7f First stage in modularising FILE*. Refactor so that printf/scanf don't rely on
FILE* innards; allow plats to replace the entire emulated FILE* system.
2019-06-15 13:07:10 +02:00
carl cb65e6426c Memory overflow bugfix 2019-05-14 23:14:59 +08:00
carl e8243402be Move to use C structures instead of typedef to align with other ACK compilers and to avoid forward declaration issues with include files. 2019-05-11 01:09:03 +08:00
carl 72dcbea3c6 Add missing C compiler command line option. 2019-05-11 01:07:33 +08:00
carl e2d2c11a6e Fix some compiler warnings. 2019-05-11 01:07:00 +08:00
carl e533626413 - Remove rcsid tag.
+ ANSI C conversion.
2019-05-11 01:06:36 +08:00
carl 9f29c76c74 + Have the DEBUG version compile 2019-03-17 22:46:31 +08:00
David Given c59eae1429 Don't buffer overflow when trying to process source bytes with the high bit
set.
2019-03-11 13:50:30 +00:00
carl 8f6073d446 + Better type checking in function tables. 2019-03-02 01:44:16 +08:00
carl 3867cfdaca + M2 Compiler ISO C90 compatibility
* Fixing of potential crash issue with function tables in compiler.
+ SYSTEM.h is now renamed to SYSTEMM2.h to avoid conflicts on non case sensitive filesystems.
2019-03-02 01:44:16 +08:00
carl 5f9a199257 CPP ISO C90 compatibility and conversion. 2019-03-02 01:44:16 +08:00
carl f371f452b5 Basic compiler is now ISO C90 compliant. 2019-03-02 01:44:16 +08:00
carl 9fab867333 Fix issue again with wrong macro on error. 2019-02-26 00:46:10 +08:00
carl bd52b1f8f5 * Fix more tabs. 2019-02-26 00:44:52 +08:00
carl e233db6dc0 * Convert spaces -> tabs to keep consistency with existing code. 2019-02-24 01:15:23 +08:00
carl f74b29d303 * Remove some more compiler warnings. 2019-02-24 00:46:05 +08:00
carl 9622898131 Bugfix of fprint using correct output redirection (fix from last commit). 2019-02-24 00:45:35 +08:00
carl 41cb541e7e Pascal compiler better type checking and function declarations (Better ISO C compatibility) 2019-02-24 00:44:50 +08:00
carl f7ba3eec50 Remove CMake changes and generic sed scripts so they are move to a separate branch. 2019-02-21 00:43:04 +08:00
carl 9ca8f42930 + Add missing files. 2019-02-20 00:32:19 +08:00
carl 750a6bc684 Better ANSI C compatibility and portability:
+ Addition of function prototypes and include files.
+ Change function definitions to ANSI C style.
+ Initial support for CMake
+ Scripts to generate compiler header is now sed based.
2019-02-19 00:54:23 +08:00