Bob Andrews
fef8436eb4
Merge pull request #1881 from acqn/ExprDesc
...
[cc65] Organized ExprDesc functions and fixed several comments
2022-11-04 14:22:22 +01:00
Bob Andrews
7146dbc87d
Merge pull request #1879 from acqn/SymEntryFix
...
[cc65] SymEntry cleanups
2022-11-04 14:06:47 +01:00
Bob Andrews
0eba33ee74
Merge pull request #1897 from acqn/TernaryFix
...
[cc65] Fixed errors in the conditional operator "? :" parser
2022-11-02 18:13:45 +01:00
Bob Andrews
37efb40c69
Merge pull request #1898 from acqn/PPFix
...
[cc65] Fixed '\\' + newline
2022-11-02 18:09:04 +01:00
acqn
aa5d44b2b0
Fixed endlessly repeated error messages when a declaration lacks a required identifier.
2022-11-02 23:58:20 +08:00
acqn
9b39c3f949
Fixed garbage enum tag name appeared in diagnostic messages if the enum tag declaration failed.
2022-11-02 23:58:18 +08:00
acqn
d2f74db4d8
Fixed compatibility checks on "pointer to pointer" vs "pointer to array" etc.
2022-11-02 22:44:57 +08:00
acqn
deb5e97732
Fixed diagnostic messages on enumerator overflow.
...
An enumerator that would be incremented greater than ULONG_MAX now causes an error.
2022-11-02 14:22:21 +08:00
acqn
e9413567d7
Renamed several functions relevent with input file info.
2022-11-02 14:16:15 +08:00
acqn
8fb2576626
Fixed processing '\\' followed with a newline and line number output (-E) with it.
2022-11-02 14:09:15 +08:00
acqn
d84cc2d122
Fixed errors in the conditional operator "? :" parser.
2022-11-02 13:56:55 +08:00
acqn
b81e54c1d2
Organized ExprDesc functions and fixed several comments.
2022-10-24 14:55:39 +08:00
acqn
03ceeb4ad1
Removed warning on implicit "return 0" in C99 standard main function in default cc65 mode.
2022-10-22 12:45:51 +08:00
Bob Andrews
34ff99aef0
Merge pull request #1877 from bbbradsmith/integer_constant_warning_rephrase
...
Rephrasing warnings for suspicious decimal integer constants
2022-10-16 22:15:59 +02:00
Bob Andrews
89031594eb
Merge pull request #1876 from bbbradsmith/constant_overflow_warning
...
Emit warning for signed integer constant overflow
2022-10-16 22:15:22 +02:00
Bob Andrews
b2238fdcd4
Merge pull request #1868 from acqn/PPFix
...
[cc65] Fixed and improved C preprocessor
2022-10-16 19:02:23 +02:00
Bob Andrews
3aadf6c66e
Merge pull request #1867 from acqn/Diagnostics
...
[cc65] Diagnostics improvements
2022-10-16 18:26:26 +02:00
bbbradsmith
66698d4b1a
Rephrasing warnings for suspicious decimal integer constants
2022-10-14 16:47:11 -04:00
bbbradsmith
4540205b0d
Emit warning for signed integer constant overflow
2022-10-13 23:49:07 -04:00
Lauri Kasanen
d52ef67d51
Fix compilation after the postproc merge
2022-10-12 10:28:14 +03:00
acqn
e57c409894
Fixed TypeHasAttrData(), GetSignedType() and GetUnsignedType(), none in use yet though.
2022-10-12 13:13:15 +08:00
acqn
45da20e770
Fixed CheckedSizeOf() for unknown-size types (no such use case yet though).
2022-10-12 13:13:37 +08:00
acqn
1dccd1333b
Added more type utility functions.
...
Changed result of GetBasicTypeName() for unknown types from "type" to "<type>".
2022-10-12 13:10:17 +08:00
acqn
cf3a0c4a30
Corrected and entailed comments and cleaned up code with type comparison.
2022-10-13 13:45:22 +08:00
acqn
01d2b809a1
Renamed struct Segments to SegContext as well as some related functions.
2023-10-21 23:41:36 +08:00
acqn
5fd9169904
Renamed type facility functions for deciding code generation type flags.
2022-10-12 13:10:17 +08:00
acqn
a4a1230c62
Renamed some C type facility and fixed a few comments.
...
Added some new C type code facility.
Removed some unused type predicates.
2022-10-12 13:10:17 +08:00
acqn
feaedc5b50
Better organized stuff related to C types.
2022-10-12 13:10:17 +08:00
acqn
a2dfa7c721
More consistent names for SymEntry functions.
2022-10-12 13:10:17 +08:00
acqn
164eb198ce
Moved type facility functions for deciding code generation type flags.
2022-10-12 13:10:17 +08:00
acqn
d1e84a6dae
Avoided unnecessary BSS name duplication for tentative global variables.
2022-10-11 14:23:21 +08:00
acqn
2cda47cd36
More descriptive names for SymEntry usage.
2022-10-11 14:14:48 +08:00
acqn
959be2c98c
SymEntry struct cleanups.
2022-10-11 14:14:38 +08:00
Bob Andrews
71d64a3c1c
Merge pull request #1857 from acqn/PPFix
...
[cc65] Improved preprocessor
2022-10-09 19:00:07 +02:00
acqn
9eab36b95a
Fixed block-scope extern declarations visibility.
...
Fixed missing file-scope static function codegen output in a rare care.
2022-09-30 14:32:08 +08:00
acqn
9900e7361d
#pragma message now uses the new "note" level message routine.
2022-09-30 09:09:09 +08:00
acqn
715aa919e6
C++ style comments in C89 mode will cause errors only once per input file.
2022-09-29 19:47:31 +08:00
acqn
29c9cb3e00
Improved diagnostics on conflicting type declarations.
2022-09-29 19:38:32 +08:00
acqn
96df4e8b5e
Added a diagnostic level "note" for infomative messages.
2022-09-29 19:38:32 +08:00
acqn
133507b031
Fixed line info for #pragma messages and diagnostics.
2022-09-29 17:55:09 +08:00
Rutger van Bergen
2b07204952
Merge branch 'cc65:master' into kim1
2022-09-19 20:03:23 +02:00
mrdudz
fd6d00a4dd
revert 6096a24
- this breaks the case when the "label" is an expression containing spaces.
...
fixes bug #1853
2022-09-17 14:41:59 +02:00
acqn
b4ddd01d78
Fixed checks on __VA_ARGS__.
2022-09-01 12:58:52 +08:00
acqn
950606d46a
Improved diagnostics on wrong number of arguments in function-like macro calls.
2022-09-01 12:59:00 +08:00
acqn
92f94e4e5b
A space character will be inserted in front of a leading '#' pp-token as the result of macro expansion.
2022-09-01 12:58:52 +08:00
acqn
770e529b20
Fixed newline counting inside old C style comments.
2022-09-01 12:58:52 +08:00
acqn
3d1e322519
Fixed keeping spacing in certain rare cases.
2022-09-01 12:58:52 +08:00
acqn
942ee47d05
Changed supposed usage of the original line input stack. It is now used for reusing input lines.
2022-09-01 12:58:52 +08:00
acqn
dc001cb4be
Reverted E_ADDRESS_OF logic fix.
...
Added testcase.
2022-09-01 12:56:46 +08:00
mrdudz
5bda57de87
add extra underscore to _bzero, add a test for bzero/memset
2022-08-29 23:20:48 +02:00
mrdudz
d371046ae4
Despite not technically needed, it seems to be desirable to remove all trailing whitespace from inline assembly
2022-08-28 03:43:02 +02:00
mrdudz
6096a24f1d
dont add whitespace after a label to the actual label, this fixes the root cause of #1252
2022-08-28 03:41:48 +02:00
acqn
9f8bfb859c
Fixed handling adjacent macro expansions that should not concatenate.
...
Example: F()G /* expansion results of F() shall not be concatenated with G */
2022-08-22 14:34:50 +08:00
acqn
c7ff416ce9
Fixed wide strings for preprocessor.
2022-08-22 14:34:50 +08:00
acqn
be95cb8f58
Fixed stringized macro argument concatenation.
...
Example: #define s(a) L## #a.
2022-08-22 14:34:50 +08:00
acqn
6260414136
The '#' operator in macro replacement is now checked at macro definition instead of macro expansion.
2022-08-22 14:34:50 +08:00
acqn
2f6b5621cc
Changed handling on nested macro replacement to match up with the behavior of other major C compilers, which is unspecified by the C standard.
2022-08-22 14:34:50 +08:00
acqn
95e5471cd6
Better preprocess macro expansion.
2022-08-22 14:34:50 +08:00
acqn
43d2fd2a96
Added support for the popular __COUNTER__ macro.
2022-07-24 23:19:05 +08:00
Bob Andrews
d2628d5949
Merge pull request #1840 from acqn/FnParamFix
...
[cc65] Fixed function parameters declared as function types rather than function pointers
2022-08-26 23:19:55 +02:00
Bob Andrews
68610490c9
Merge pull request #1837 from acqn/PPLineFix
...
[cc65] Fixed predefined __FILE__, __LINE__ and added missing preprocessing directive #line
2022-08-26 23:12:59 +02:00
acqn
26945c32ac
Fixed function parameters declared as function types rather than function pointers.
2022-08-24 15:30:52 +08:00
acqn
57ad7c8766
Improved diagnostics about C++ style comments for c89.
2022-08-22 14:31:53 +08:00
acqn
fd7f32ecd3
Improved error handling and diagnostics with failed macro definitions.
2022-08-22 14:31:51 +08:00
acqn
9565f41381
Improved Diagnostic with #include.
2022-08-19 13:27:56 +08:00
acqn
5d5bd472c6
Removed extra whitespace at line ends in preprocess-only output (-E).
...
Increased threshold from 5 to 7 for skipped newlines with #line directives in preprocess-only output (-E).
2022-08-22 00:27:21 +08:00
acqn
79f97e7714
Reused code more for macros in preprocessing directives.
2022-08-22 00:24:28 +08:00
acqn
bb9c98f4c9
Added support for the #line directive.
2022-07-24 23:19:05 +08:00
acqn
36123c9c8f
Improved naming for stuff related to preprocessing directives.
2022-07-24 23:19:05 +08:00
acqn
624e5025b0
Fixed parsing wide char constants.
2022-08-17 22:28:00 +08:00
acqn
5cca1e8b1d
Fixed parsing numeric constants.
2022-08-11 10:55:16 +08:00
acqn
4bb4f033ea
Fixed the bug that C keywords were not simply recognized as identifiers in preprocessing.
2022-08-07 16:14:45 +08:00
acqn
7a139a800e
Added # and ## as punctuators recognized by the tokenizer.
...
Reorganized the token enum.
2022-08-06 18:45:49 +08:00
Bob Andrews
12b9b10355
Merge pull request #1832 from acqn/PPDefineFix
...
[cc65] Preprocessor directive #define fixes
2022-08-20 14:27:25 +02:00
Bob Andrews
03421694b2
Merge pull request #1817 from acqn/PPFix
...
[cc65] More preprocessor fixes
2022-08-19 21:37:16 +02:00
acqn
3fbefdef45
Fixed warning on forward declaration of enums.
...
Fixed the issue that global static variables put on zeropage were missing optimization.
2022-08-19 18:48:52 +08:00
acqn
cf7558add3
Added check for ## at either end of macro expansion.
2022-08-18 23:16:29 +08:00
acqn
47d5e74a6e
Modified way to keep undefined macro handling more consistent.
2022-08-18 22:51:23 +08:00
acqn
78e80eb942
Fixed superfluous warning on pointer types comparing a non-void pointer to a void pointer.
2022-08-09 13:13:33 +08:00
acqn
a3a5fbe809
Disallowed 'defined' as a macro name.
2022-08-07 13:56:47 +08:00
acqn
7971eec3cc
Fixed parentheses handling when a function-like macro name itself is used as an macro argument.
2022-08-07 12:45:48 +08:00
acqn
ae811baaf1
Fixed the bug that redefined macros could co-exist but not all be undefined with a single #undef.
2022-08-06 18:21:42 +08:00
acqn
0a051a4dee
Unsupported #pragma within argument lists of function-like macro invocation.
2022-08-06 16:56:28 +08:00
acqn
251e984ba8
Fixed error recovery with preprocessing directives failures.
2022-08-05 14:03:51 +08:00
Bob Andrews
2c742ffc1c
Merge pull request #1800 from acqn/PPFix
...
[cc65] Preprocessor fixes
2022-07-28 01:48:41 +02:00
acqn
f8d08b1e1a
More post-C99 predefined macros.
2022-07-26 21:40:19 +08:00
acqn
2f357ba9b2
Preprocessor directives can now appear in the argument list of function-like macro calls.
...
#pragma PP-tokens can now be macro replaced.
#include header names directly enclosed in <> are free of macro replacement.
Preprocess-only mode (-E) now outputs with #line as source info.
Moved testcases for #760 and #1357 .
Added testcase for #1643 .
2022-07-26 21:10:38 +08:00
acqn
80fc8cd11e
Added preprocessor warning on missing terminating characters of character/string literals.
2022-07-26 21:10:36 +08:00
acqn
2c9c8ee196
Fixed extra "Macro argument count mismatch" message when a macro argument list is unterminated.
2022-07-26 21:10:31 +08:00
acqn
60c1290468
Fixed the bug that preprocessor could run past the end of included files.
...
Fixed the wrong filename and 0 line number in disgnostics when a preprocessor error occurred at the end of a file.
Fixed diagnostics for missing #endif.
2022-07-26 21:10:26 +08:00
acqn
8289c94e69
Fixed skipped lines consist of a leading # followed by any non-directive PP-token sequence.
2022-07-26 14:28:27 +08:00
acqn
0063f73f8a
Fixed __FILE__ and __LINE__ macros for preprocessor.
2022-07-24 23:19:05 +08:00
acqn
7381a2c420
Added check for extra tokens at the end of directives.
...
Improved diagnostics on missing/illegal macro names.
2022-07-24 19:07:16 +08:00
acqn
be26b0631b
Fixed #ifdef and #ifndef.
2022-07-24 19:07:02 +08:00
acqn
066a5e0fec
Fixed #pragma charmap for string literals.
2022-07-24 16:38:41 +08:00
acqn
ac4cb258be
Removed a mysterious "Hey!" message.
2022-07-21 11:59:38 +08:00
acqn
16a8a64746
Use a dedicated expression parser for the preprocessor.
2022-07-21 11:10:02 +08:00
acqn
f91c8ad247
Allowed comments right after "#" in preporcessor directives.
2022-07-21 11:09:59 +08:00
acqn
d3d6de2704
Allowed the pp-tokens following #error and #warning directives to be optional.
2022-07-21 11:09:56 +08:00
Bob Andrews
560317c8ba
Merge pull request #1789 from acqn/PPDiagnostics
...
[cc65] Fixed ICE with duplicate macro parameters
2022-07-19 17:38:29 +02:00
Bob Andrews
6b0afe0834
Merge pull request #1785 from acqn/Effectless
...
[cc65] Avoid generating asm from C code that has no observable effects
2022-07-19 17:38:03 +02:00
Bob Andrews
c802980d6a
Merge pull request #1784 from acqn/Diagnostics
...
[cc65] Slight improvements on diagnostics
2022-07-19 17:37:42 +02:00
Bob Andrews
82b268ee50
Merge pull request #1783 from acqn/MiscFixes
...
[cc65] Misc fixes and improvements
2022-07-19 17:37:19 +02:00
mrdudz
a6b807b1d8
more verbose comment
2022-07-14 22:39:29 +02:00
acqn
9e3b759540
Fixed ICE with duplicate macro parameters.
2022-07-05 22:22:49 +08:00
Dave Plummer
799aec23a6
Add KIM-1 Support
2022-06-04 13:00:48 -07:00
compyx
2fdb1e6b0d
Fix set but unused variable
2022-05-17 10:05:25 +02:00
mrdudz
43af562ce1
At the end of the optimizer run, remove jump cascades again. fixes the
...
regression reported in #1652
2022-05-08 13:22:10 +02:00
mrdudz
5813fd81d3
add extra optimizer step that replaces BRA by JMP if the target is external
2022-05-08 13:20:18 +02:00
rofl0r
d78672a4b4
rename AddSubSearchPathFromWinBin to AddSubSearchPathFromBin
2022-04-28 18:35:05 +00:00
rofl0r
bf1ef6157c
build: properly quote strings passed as cpp macros
...
until now, the strings intended to be hardcoded into the binary,
such as directory names and build id, were passed unquoted, which
means they're interpreted by the preprocessor as C tokens, rather
than strings, which can result in all sorts of "interesting"
behaviour such as interpreting paths starting with // as C++-style
comment.
this was then worked around using a stringize macro which turned
the tokens into a string (if they happened to be in a compatible
format).
adresses #1726
2022-04-25 16:52:46 +00:00
acqn
4f4487cb03
Added supports for long bit-fields.
2022-01-04 18:23:04 +08:00
acqn
21858b52e7
Separated data initializer stuff from declaration stuff.
2022-01-03 13:10:32 +08:00
acqn
970607cde5
Optimized g_testbitfield() and g_extractbitfield() with enhanced support for long bit-fields.
2021-12-05 12:21:01 +08:00
acqn
2d96f79bc7
Added and used new utility type functions for bit-fields.
...
Fixed GetUnderlyingTypeCode() for bit-fields with widths > 16.
2021-12-01 09:45:17 +08:00
mrdudz
3c1bb85b8e
remove dangling spaces
2022-04-17 16:07:09 +02:00
Bob Andrews
4cf7db1ef5
Merge pull request #1692 from karrika/atari7800
...
#805 Atari7800 target
2022-03-20 20:39:36 +01:00
Bob Andrews
58de94edd4
Merge pull request #1560 from empathicqubit/master
...
Add --debug-tables <filename> option and output struct fields
2022-03-20 20:27:15 +01:00
nyanpasu64
9cb81f1410
Replace #include "inttypes.h" with <inttypes.h>
2022-03-06 14:48:51 -08:00
nyanpasu64
3466abc60c
Fix format strings to properly format uintptr_t
2022-03-06 14:48:03 -08:00
nyanpasu64
f36b9b544d
Fix segfault on 64-bit LLP64 Windows builds
...
There are many occurrences of unsigned long in codegen.h's function
arguments. Changing g_getimmed and g_defdata makes `make` succeed
without segfaulting. I don't know if it makes cc65 behave correctly in
all cases, or if there are more unsigned long that need to be changed.
2022-03-06 14:47:51 -08:00
Karri Kaksonen
786b4310d0
Merge branch 'cc65:master' into atari7800
2022-03-05 19:09:05 +02:00
acqn
c8956ce19b
Fixed signed long comparisons with smaller unsigned types.
2022-03-03 20:24:14 +08:00
Bob Andrews
0587d9f5d4
Merge pull request #1675 from acqn/ShiftFix
...
[cc65] Fixed bitwise shift with numeric constant operand(s)
2022-03-01 19:50:21 +01:00
Karri Kaksonen
3266e70de4
Add target atari7800
2022-03-01 06:44:55 +02:00
acqn
5ef420af5a
Fixed OptCmp1 with certain code patterns with labels.
2022-03-01 10:40:01 +08:00
Jeff Tranter
2bf8be5b3b
Fix some commonly made spelling errors in comments.
2022-02-21 15:44:31 -05:00
acqn
2bda128ef1
Fixed LimitExprValue() for 64-bit long env.
2022-02-26 23:02:51 +08:00
acqn
14988f5dda
Fixed bitwise shift with numeric constant operand(s).
2022-02-16 20:10:54 +08:00
acqn
6beb090193
Fixed anonymous bit-fields declared with typedef'ed type names.
2022-01-03 23:54:14 +08:00
acqn
38511843e5
Fixed crash with labels in non-function/block scopes.
2022-01-03 23:50:48 +08:00
Greg King
112e216e53
Removed an obsolete command-line option from the cc65 compiler.
2022-01-30 22:10:06 -05:00
Greg King
325ff9667e
Used (size_t), instead of (long) where converting between pointers and integers.
...
(long) still is 32 bits on 64-bit Windows!
2021-12-12 19:40:43 -05:00
Bob Andrews
332742b688
Merge branch 'master' into master
2021-12-11 22:35:50 +01:00
Oliver Schmidt
8b0de8a931
Merge branch 'master' into master
2021-11-23 22:56:51 +01:00
empathicqubit
fd8d51497c
Add --debug-tables <filename> option and output struct and union fields
2021-09-29 05:20:44 +02:00
acqn
eeaa111835
Fixed crash in Opt_a_toscmpbool caused by wrong order of condition checks.
2021-09-28 17:02:37 +02:00
acqn
25a35d6b59
Fixed result type of certain operations, which was broken with the bit-field fix.
2021-06-10 21:54:32 +02:00
acqn
5adb29ce31
Made "bit-field-ness" a type property instead of a SymbolEntry or ExprDesc property.
...
Fixed integer promotion and result type in certain operations.
Fixed bit-fields 'op=' and postfix inc/dec operators.
2021-06-09 08:03:12 +02:00
acqn
1d7bf7355c
Better function naming in declare.c.
...
Scalar initialization routines need only 'const Type*' as parameters.
2021-06-09 08:03:12 +02:00
acqn
004c60de39
Optional flags for the codegen to skip restoring the expression results into the primary registers.
2021-06-09 08:03:12 +02:00
acqn
dcacba472a
Moved ArithmeticConvert() from cc65/expr.c to cc65/datatype.c.
...
Reorganized a few functions in cc65/datatype.c.
Added SignedType() and UnsignedType() for future usage.
Made LimitExprValue() external so that it can be used more often.
2021-06-09 08:03:12 +02:00
acqn
2324bd62f6
If __A__,__AX__ or __EAX__ is used, post-inc/dec within the same statement will not modify it.
...
Moved testcase from src/test/todo to src/test/val plus minor improvement on portability.
2021-06-08 14:16:14 +08:00
polluks2
ed9f9ccbab
Fix #1536
2021-06-07 23:12:50 +02:00
Wayne Parham
69e2313a63
First round of requested code changes
2021-06-06 23:20:54 +01:00
acqn
4d5fe38540
Fixed OptStackOps when the stuff pushed on stack top is accessed before the op.
2021-06-03 12:03:53 +02:00
acqn
79be6dec16
More quick hack for CE_GenRegInfo.
2021-06-03 12:03:53 +02:00
acqn
0bfa13722b
More funcinfo on register usage fixes.
2021-06-03 12:03:53 +02:00
Greg King
0d3c827d80
Made the C preprocessor #if nesting stack have 256 levels.
...
Closes #1523 .
2021-05-30 03:52:32 -04:00
acqn
1450f146a5
Fixed '[]', '()' '.' and '->' operators following a postfix increment/decrement.
2021-05-16 20:43:49 +02:00
acqn
43ca887263
Fixed 'case'/'default' labels in non-compound 'switch' body statement.
2021-05-16 20:43:49 +02:00
WayneParham
e9fd87d07a
Merge branch 'master' into master
2021-05-16 10:02:37 -05:00
acqn
f5dacda69b
NoCodeConstExpr() fix to avoid exessive error messages.
2021-05-16 19:08:43 +08:00
acqn
6a3b9a9880
E_ADDRESS_OF logic fix.
2021-05-16 19:08:42 +08:00
acqn
aac03eae6f
Better future-proof bit-masking.
2021-05-16 19:08:42 +08:00
acqn
2d014383cd
Replaced certain usage of "(New-)PointerTo()" with "AddressOf()".
2021-06-08 00:43:26 +08:00
acqn
924fcf5d06
Replaced several occurance of PtrConversion() with StdConversion().
...
Variadic arguments of functions should be default-promoted.
2021-06-08 09:32:58 +08:00
acqn
18ae09f682
Less excessive errors with failed array declarations.
2021-05-14 10:48:17 +02:00
acqn
dfba8d77ca
Error messages shouldn't raise warnings about unused expressions by themselves.
2021-05-14 10:48:17 +02:00
Greg King
e5813cfb1a
Removed two duplicate TYPEDEFs from a header.
...
The first one is replaced by an #include of the header that has its original TYPEDEF.
The second one is replaced by its base type.
That change allows pedantic C90-compliant compilers to accept the header.
2021-05-13 00:24:32 -04:00
Greg King
af4c4f6aaf
Removed a "return" keyword from an inline function that must return (void).
2021-05-12 19:43:32 -04:00
Andrea Odetti
bcc670ee36
Standard formatting of error messages.
...
https://www.gnu.org/prep/standards/html_node/Errors.html
Issue: https://github.com/cc65/cc65/issues/1494
2021-05-11 17:41:59 +02:00
Bob Andrews
82ee502f57
Merge branch 'master' into wrapped-call
2021-05-11 14:16:25 +02:00
mrdudz
07dd1e3849
fix formatting
2021-05-11 14:14:44 +02:00
mrdudz
18f94d1fe0
rework to use a magic value instead of a flag, as suggested by Oliver
2021-05-11 14:00:49 +02:00
mrdudz
ef74226993
improve error message
2021-05-11 13:37:53 +02:00
Oliver Schmidt
b7856ddd4f
Just some source formatting adjustments.
2021-05-11 10:40:44 +02:00
Wayne Parham
a2def19de5
Added TGT_SYM1
2021-05-10 15:20:49 +01:00
Wayne Parham
044a0838a3
Changes to existing cc65 source to support Synertek Systems Sym-1
2021-05-09 16:52:48 -05:00
mrdudz
0fbf2af09d
Fix the warning that is produced for unused functions
2021-05-08 01:03:43 +02:00
mrdudz
c9f242e566
Extend #pragma wrapped-call to support "bank" argument
2021-05-05 14:42:29 +02:00
acqn
71bd6415d6
No more unnecessary jump-over labels generated for logical OR false cases.
2021-04-24 23:53:26 +02:00
Oliver Schmidt
5d84a4ba13
Removed non-ASCII chars.
2021-04-19 16:06:10 +02:00
Oliver Schmidt
f272bc8f42
Removed non-ASCII chars.
2021-04-19 15:50:52 +02:00
acqn
f901adba22
Predefined type strings for inlined std function parameters.
2021-04-19 15:36:55 +02:00
acqn
9cea9ce5e2
Made the code more constness-correct with 'Type' usage.
2021-04-19 15:36:55 +02:00
acqn
cb64aaf20c
Made the code more constness-correct with 'Type' usage for inlined std functions.
2021-04-19 15:36:55 +02:00
acqn
328345b9c3
Removed a helper function that is no longer used.
2021-04-19 15:36:55 +02:00
acqn
24d36854d2
Minor cleanups with array element qualifiers.
2021-04-19 15:36:55 +02:00
acqn
896f463a23
Used more specific pointers instead of the "arbitary attribute pointer" used in type strings.
2021-04-19 15:36:55 +02:00
acqn
bfb7c936aa
Preparation for constness-correction.
2021-04-19 15:36:55 +02:00
acqn
6e61093e79
Fixed pointer subtraction in certain very rare cases.
2021-04-17 11:14:37 +02:00
acqn
e9545d68ee
Minor clean-ups and typo fixes.
2021-04-17 11:43:03 +08:00
Dirk Lehmann
eb1cf750f2
-W-unreachable-code option added, alphabetic order of --list-warnings
2021-04-13 09:37:55 +02:00
acqn
e435da6234
Interim fix for Issue #897 .
2021-04-06 22:20:39 +02:00
acqn
bd8eae67f1
Fixed local struct field access via the address of the struct.
2021-04-05 15:49:54 +02:00
acqn
1a3628df1a
Fixed the term 'argument' vs 'parameter' in function parser.
2021-04-03 17:50:46 +02:00
acqn
2864b3ef8a
Fixed composition of prototypes and old-style function definitions with default promotions.
...
Fixed function parameter list comparison with empty ones.
2021-04-03 17:50:46 +02:00
acqn
91fd30611a
Fixed ICE on error cases such as '&func + int a'.
2021-04-03 17:45:52 +02:00
acqn
4a38965384
Warnings on discarding pointer qualifiers always.
...
Added new -W options to turn on/off warnings on certain pointer conversion cases:
- pointer-sign: to a pointer type differing in pointee signedness. Default on.
- pointer-types: to a pointer type incompatible. Default on.
2021-03-30 19:41:20 +02:00
acqn
b802efde54
Fixed ternary result type detection with pointer types.
...
Fixed pointer type comparison and conversion, especially regarding qualifiers.
Improved diagnostics about type comparison and conversion.
Reorganized some type-comparison/conversion functions.
2021-03-30 19:41:20 +02:00
acqn
f9812930c1
More detailed diagnostic info about conflicted function types.
2021-03-30 16:47:57 +08:00
acqn
cb8fbf4772
Removed the non-existing-in-C "struct/union scope" for structs/unions.
...
Fixed handling of struct/union field declarations without identifiers, which do nothing.
2021-03-29 19:28:22 +02:00
acqn
f273b1ebcb
Fixed crash with non-inlined __fastcall__ function invocation with no arguments.
2021-03-26 11:02:46 +08:00
acqn
3755e4a863
Replaced checking for __fastcall__ aginst AutoCDecl etc. with IsFastcallFunc().
2021-03-24 14:35:44 +08:00
acqn
3c2e7ce41c
More reliable test for true/false with addresses for AND, OR and ternary operators.
...
Minor comment typo fix.
2021-03-20 01:39:32 +01:00
acqn
f8835d2867
Fixed codegen with addresses as boolean test conditions.
...
Fixed warning on unreachable code of if body.
2021-03-20 01:39:32 +01:00
acqn
325b7b4ab3
Enabled 'a ? b, c : d'.
2021-03-20 00:09:47 +01:00
acqn
a51d6d40de
Ternary fix for some obscure cases.
2021-03-20 00:09:47 +01:00
acqn
6974c1ff12
Fixed and cleaned up codegen logic with arithmetic conversion in addition and subtraction.
2021-03-19 16:35:03 +01:00
acqn
b02838439c
Changed g_addaddr_local() codegen to reduce code size.
2021-03-16 22:29:20 +01:00
acqn
8eeaaa3f36
Made certain types of comparison between addresses in constant expressions work.
2021-03-16 22:29:20 +01:00
acqn
99c7fe0ada
Reusing code from parseadd() for ArrayRef().
...
Now index[ptr] works in constant expressions.
Fixed codegen for cast type in constant expressions.
Calls on swapstk in 'i[ptr]' is avoided when possible.
2021-03-16 22:29:20 +01:00
acqn
f5972dfd08
Made int+pointer work in constant expressions.
...
Fixed codegen for cast type addition in constant expressions.
Calls on swapstk in 'i+ptr' is avoided when possible.
2021-03-16 22:29:20 +01:00
acqn
aa6fdf58b8
Addresses in constant subtraction expressions now work.
...
Fixed codegen for cast type subtraction in constant expressions.
2021-03-16 22:29:20 +01:00
acqn
c4a2620e29
Added an utility function to check for quasi-constant addresses (of stack variables).
2021-03-16 22:29:20 +01:00
acqn
0a8ca3041a
Changd all Find*Last*InOpenRange() to return the beginning of the open range.
...
Fixed FindArgLastUsageInOpenRange().
2021-03-16 22:24:19 +01:00
acqn
4376b83390
Fixed LoadAAt().
2021-03-16 22:24:19 +01:00
acqn
bd5d5b7385
Removed the prototype of evalexpr() that no longer exists.
2021-03-16 22:24:19 +01:00
acqn
047d0f479b
Comments format fix.
2021-03-03 10:07:24 +01:00
acqn
2aad72af90
Removed trailing whitespaces.
2021-03-03 10:07:24 +01:00
acqn
8b6d78a075
Added Opt_a_tosbitwise for 8-bit bitwise operations.
2021-03-01 22:11:22 +08:00
acqn
3caceb8174
Fixed result type in certain contant expression addition cases.
2021-02-26 19:45:46 +01:00
acqn
f2eed38fc8
Fixed expression type of the result of numeric constant comparison.
2021-02-26 19:45:46 +01:00
acqn
ea0c634e12
Improved codegen for unsigned char type comparison with numeric constants.
2021-02-23 22:06:21 +01:00
acqn
d628772cd1
Fixed signed char type comparison with unsigned numeric constants.
2021-02-23 22:06:21 +01:00
acqn
f1c715c455
Fixed a bug that pointer subtraction results from two absolute addresses are calculated as unsigned long.
2021-02-22 14:14:59 -05:00
acqn
81d6321cd7
Fixed internal representation of calculated constant results.
...
Minor clean-up.
2021-02-22 14:14:59 -05:00
acqn
eadaf2fef8
Fixed deferred post-inc and post-dec in unevaluated context such as 'sizeof(i++)'.
2021-02-22 11:02:47 +01:00
acqn
40b26f4060
Now the compiler removes code that has no observable effect.
2021-02-22 13:47:32 +08:00
acqn
7f05bd797f
Now the compiler tracks code that has no observable effect.
2021-02-21 16:36:29 +08:00
acqn
55ae350fed
Fixed 'Opt_staxspidx' for the invariant of 'staxspidx'.
2021-02-17 07:03:11 -05:00
acqn
6617a017fa
Added Opt_a_tossub for 8-bit subtraction.
2021-02-05 17:29:49 +08:00
acqn
bfc7a51a44
Fixed Issue #1265 according to C89/C99 standards.
2021-01-30 14:31:51 +01:00
acqn
c9ac515286
Functions with no prototypes might use EAX registers.
2021-01-30 14:31:51 +01:00
acqn
a1992702f8
Declarations of 'extern' object and function should be visible in the file scope.
2021-01-30 14:31:51 +01:00
acqn
b99455cc47
Fixed Issue #1374 .
2021-01-19 14:33:27 +01:00
Rocky
a9b71b6207
return-type - new warning suppression type added
2021-01-06 16:05:04 +01:00
Jesse Rosenstock
e0c12c90cd
g_asr, g_asl: Use ROL/ROR for char shifts by >= 6
...
Instead of `val` right (left) shifts, we can also do `9 - val` left (right)
rotates and a mask. This saves 3 bytes and 8 cycles for `val == 7` and
1 byte and 4 cycles for `val == 6`.
2020-12-27 14:22:40 -05:00
Christian Groessler
ef258bdc19
remove TABs which again slipped in....
2020-12-25 07:16:26 +01:00
Jesse Rosenstock
dfd047ce6a
g_typeadjust: Use CF_CHAR for char args
...
If lhs and rhs are either both signed char or both unsigned char,
return flags for that type instead of (unsigned) int. The flags
are used only for codegen. Currently, this does nothing, since
codegen treats chars as ints unless CF_FORCECHAR is set, but it
allows more efficient char x char -> int codegen to be added in
the future.
2020-12-24 14:40:39 -05:00
Greg King
b2c1a77bb3
Fixed the cc65 code that optimizes 16-bit compares when the high bytes are known to be equal.
...
Only the low bytes are compared. Originally, signed 16-bit compares were optimized into signed 8-bit compares. But, the sign bits are in the high bytes; and, they're equal. Therefore, the low bytes always must be compared as unsigned numbers.
Fixes #1348 .
2020-12-24 12:27:09 -05:00
Tim Gates
2646c06f61
docs: fix simple typo, paramater -> parameter
...
There is a small typo in src/cc65/pragma.c.
Should read `parameter` rather than `paramater`.
2020-11-29 10:26:08 +01:00
Greg King
8b42f570e9
Fixed code that caused a seg-fault after parsing a (deferred) post-count argument followed by a (nested) function-call argument.
...
The old broken code defers the count until the end of the (parent function's) argument list. But, a nested function call clears the pointer to the deferred type. That leads to an access violation.
The new code defers only until the end of each argument. Fixes #1320 .
2020-11-20 17:45:14 -05:00
Polluks
bd6e5927c4
Fixed #1341
2020-11-18 10:28:19 +01:00
Oliver Schmidt
116682c190
Avoid C99 idioms.
2020-11-16 18:08:00 +01:00
Jesse Rosenstock
060417b0dc
Adjust type of int constants that fit in char
...
When there is an integral constant like `3` in an expression, it has
type `int` according to the C spec, even though it can be represented
as an `unsigned char`. Change codegen (`hie_internal` and `typeadjust`)
to treat it as `unsigned char` instead of `int` so that faster,
unsigned operations can be used.
For the test case in #1298 , reduces the cycles per iteration from
4311 to 1884. This is a great improvement, but still much worse than
the 1053 cycles/iter from `c4698df~`, so more work remains to be done.
Further partial fix for #1298 and #1308 .
2020-11-16 00:56:19 +01:00
Greg King
2915464667
Fixed cc65's generation of char-type bit-shift code.
...
Fixed CHAR-to-INT type conversions in the right-shift code generator. Also fixed some printf-style format specifiers.
2020-11-15 15:22:23 -05:00
Zsolt Branyiczky
b33b053307
add c64dtv support
2020-11-15 16:35:55 +01:00
Jesse Rosenstock
5db74b4b19
Use u16 codegen for u8 x u8 ops
...
In g_typeadjust, before we apply the integral promotions, we check if
both types are unsigned char. If so, we promote to unsigned int, rather
than int, which would be chosen by the standard rules. This is only a
performance optimization and does not affect correctness, as the flags
returned by g_typeadjust are only used for code generation, and not to
determine types of other expressions containing this one. All unsigned
char bit-patterns are valid as both int and unsigned int and represent
the same value, so either signed or unsigned int operations can be used.
This special case part is not duplicated by ArithmeticConvert.
Partial fix for #1308 .
2020-11-09 21:19:22 +01:00
acqn
07cc6a3d20
Made optimization steps aware of long branches better.
2020-10-24 21:25:24 +02:00
acqn
5c43d1e04f
Changed codegen for postfix inc/dec operations by deferring them till sequence points.
...
This usually allows faster & smaller code.
Note that deferred operations must still be called at sequence points even if the whole expressions containing them had constant values.
2020-10-20 22:01:55 +02:00
acqn
bb7b69f513
Added OptShiftBack for shifting the C flag into register A and back.
2020-10-20 21:55:39 +02:00
acqn
0354322413
Added OptSignExtened for testing signness right after sign extention.
2020-10-20 21:55:39 +02:00
acqn
9c776a24e5
Use bcc instead of bne in OptNegAX2 to ease optimizations.
2020-10-20 21:55:39 +02:00
acqn
4f3a96a535
Added new opt OptPushPop2.
...
Also renamed OptPushPop to OptPushPop1.
2020-10-20 21:55:39 +02:00
acqn
262c4235df
Symbols in ZP segments will use '.exportzp' instead of '.export' if exported.
2020-10-11 23:05:20 +02:00
acqn
e58c84acf7
Support for optionally specifying address size for segments with:
...
#pragma ***-name([push,] "name"[, "addrsize"])
where "addrsize" is any addressing size supported in ca65.
2020-10-11 23:05:20 +02:00
acqn
f8c9dde989
The instruction parser can now recognize ZP locations and set the addressing mode for them.
2020-10-11 23:05:20 +02:00
Jesse Rosenstock
81550ca1ee
CS_MergeLabels: Keep labels referenced by data
...
Partial fix for ICE in #1211 . This may fix enough to allow #1049 to be
fixed.
When merging labels, keep the first label with a ref that has no JumpTo;
this is a data segment label, used by computed gotos.
The real fix is to track and rewrite labels in data, but this is more
involved.
2020-10-08 12:11:03 +02:00