acqn
ab7e9f8424
Hotfix for Issue #1250 .
2020-09-08 16:28:21 +02:00
acqn
e2f950b15e
Avoided referencing string literals with sizeof so that they are not output if unused elsewhere.
2020-09-05 13:21:21 +02:00
acqn
903e84c24c
Std-functions are no longer inlined if they are unevaluated.
2020-09-05 13:21:21 +02:00
acqn
f849de6769
Object addresses as non-NULL for comparison with NULL.
2020-09-04 19:50:32 +02:00
acqn
8e0b2f0833
Object addresses as non-NULL in boolean context.
2020-09-04 19:50:32 +02:00
acqn
bc5570b708
Fixed logical-NOT in constant context.
2020-09-04 19:50:32 +02:00
acqn
fb6bc275bc
Fixed evaluation flags propagation to subexpressions in assignments and function calls.
2020-09-02 21:36:59 +02:00
acqn
2379504449
Fixed AND/OR in certain cases where the 'E_NEED_TEST' flag set for usage only in subexpressions should be cleared.
2020-09-02 21:36:59 +02:00
acqn
28de3423eb
Merged some switch cases in code generation subroutines.
2020-08-31 09:12:03 +02:00
acqn
6b64b43395
Made local static data use a separated label pool from the code label pool.
2020-08-31 09:12:03 +02:00
Oliver Schmidt
bee559d5f4
Merge pull request #1220 from acqn/StaticConst
...
[cc65] Fixed constant boolean expressions
2020-08-31 08:59:25 +02:00
acqn
74def4608a
The 'E_NEED_TEST' flag shouldn't be overwritten when loading the expression result.
2020-08-31 02:30:12 +08:00
acqn
c0a873e0c8
Reduced exess errors on wrong initializations with curly braces.
2020-08-30 17:35:48 +02:00
acqn
60c59f59a3
Renamed StaticConstExpr() and StaticConstAbsIntExpr() with clearer comments.
2020-08-30 00:26:52 +08:00
acqn
0a96ffc878
Fixed function parameter checking.
...
Fixed function return type checking.
2020-08-29 16:37:16 +02:00
acqn
504aee3835
Merge branch 'master' into StaticConst
2020-08-27 06:27:23 +08:00
acqn
bb9c203222
Fixed integer promotion of unary operations.
2020-08-26 22:17:16 +02:00
acqn
f289ea6c14
Avoided generating unnecessary true-case labels in logic AND/OR.
2020-08-22 11:10:17 +08:00
acqn
0536f4f9bd
Minor fixes on constant expression checking and comments.
2020-08-21 23:27:41 +02:00
acqn
85ea06687b
Fixed logical AND and logical OR.
2020-08-20 07:52:15 +08:00
acqn
725511131a
Fixed constant expression checks with no-code requirement.
...
Used return-by-value initialization for ExprDesc.
2020-08-20 07:52:11 +08:00
acqn
3ea3887c77
Fixed warnings on const comparison.
...
Warnings on expressions with no effects.
Fixed const ternary.
Fixed ternary with struct/union types as the true/false-branch expressions.
2020-08-20 07:52:06 +08:00
acqn
17bbba7327
Added integer boolean type string.
...
No longer set the "expression tested" flag with constant results in comparison.
2020-08-20 07:52:03 +08:00
acqn
87889df9e9
Fixed type checking in relation operations.
2020-08-18 09:39:43 +02:00
acqn
ebae994dc9
Fixed CHECK failure when calling functions defined with repeated parameter names.
...
Clarified the terms "parameter" vs "argument" in FunctionParamList().
2020-08-17 20:27:57 +02:00
Jesse Rosenstock
c4698dfd07
Use C89 semantics for integer conversions
...
Previously, the following rules were used for binary operators:
* If one of the values is a long, the result is long.
* If one of the values is unsigned, the result is also unsigned.
* Otherwise the result is an int.
C89 specifies the "usual arithmetic conversions" as:
* The integral promotions are performed on both operands.
* Then the following rules are applied:
* If either operand has type unsigned long int, the other operand is
converted to unsigned long int.
* Otherwise, if one operand has type long int and the other has type
unsigned int, if a long int can represent all values of an unsigned int,
the operand of type unsigned int is converted to long int; if a long int
cannot represent all the values of an unsigned int, both operands are
converted to unsigned long int.
* Otherwise, if either operand has type long int, the other operand is
converted to long int.
* Otherwise, if either operand has type unsigned int, the other operand is
converted to unsigned int.
* Otherwise, both operands have type int.
https://port70.net/~nsz/c/c89/c89-draft.html#3.2.1.5
As one example, these rules give a different result for an operator
with one long operand and one unsigned int operand. Previously,
the result type was unsigned long. With C89 semantics, it is just long,
since long can represent all unsigned ints.
Integral promotions convert types shorter than int to int (or unsigned int).
Both char and unsigned char are promoted to int since int can represent
all unsigned chars.
https://port70.net/~nsz/c/c89/c89-draft.html#3.2.1.1
Rename promoteint to ArithmeticConvert, since this is more accurate.
Fixes #170
2020-08-15 19:14:31 +02:00
acqn
0dfe9ff5fe
Fixed testing 'struct->field'.
2020-08-14 08:32:22 +08:00
acqn
9317db6642
Slightly improved type error messages of 'op='.
2020-08-12 15:01:31 +02:00
acqn
68d63b089d
Reduced error flood raised by misplaced variable declarations.
2020-08-12 15:01:31 +02:00
acqn
fdef067629
Fixed tentative definition of variables of incomplete types that may be completed later.
...
Tenative arrays that never get completed are now assumed each to have one element.
2020-08-07 10:16:33 +02:00
acqn
6df4f1996b
Improved diagnostics with more detailed type names.
2020-08-02 23:51:11 +02:00
acqn
003d47cc8b
Improved type conversion diagnostic messages.
...
Allowed incompatible pointer assignments with warnings.
Fixed Issue #1089 .
2020-08-02 18:55:46 +02:00
acqn
30fd8592ae
Avoid internal errors when using function-type objects in expressions.
2020-08-02 12:28:11 +02:00
acqn
25d10d9d9a
Fixed nested struct/union initialization.
...
Fixed bit-fields offsets in anonymous structs.
2020-07-30 08:38:24 +02:00
acqn
65081aebed
Made able to recognize global declarations of static arrays. Fixed Issue #975 .
2020-07-21 18:23:52 +02:00
acqn
0250c87ac6
Fixed SC_* type masks by making them all bitwise-exclusive.
2020-07-21 18:23:52 +02:00
acqn
b67b8ddd38
Disabled applying 'sizeof' to bit-fields.
2020-07-20 14:54:32 +02:00
acqn
62a6e37487
Made the code handling '&expression' slightly tidier.
2020-07-20 14:54:32 +02:00
Greg King
fd0a6955da
Changed "IsTypeStruct() || IsTypeUnion()" expressions into shorter "IsClassStruct()" expressions.
...
Type-classes are groups of types that can be handled in the same way (similar syntax).
2020-07-19 14:30:22 -04:00
acqn
29c50ab25f
Corrected the error message about struct/union members not found.
2020-07-19 12:57:59 +02:00
acqn
768e03a474
Small fixes and tidy-up based on PR review.
...
Renamed GetReplacementType() to GetStructReplacementType().
Clarified in comments that most *Struct* facilities work for unions as well.
Made it clear in some error messages with regards to structs/unions.
2020-07-19 10:58:33 +02:00
acqn
b45d373fd6
Fixed passing by value structs/unions <= 4 bytes in size to functions. Larger ones are forbidden for now.
2020-07-19 10:58:33 +02:00
acqn
9f67b45ea0
Fixed returning by value structs/unions <= 4 bytes in size from functions. Larger ones are forbidden for now.
2020-07-19 10:58:33 +02:00
acqn
333fa97326
Whitespaces/newlines fixes.
2020-07-18 12:54:29 +02:00
acqn
9198b3be00
Fixed '&function' and '&array'.
2020-07-18 12:54:29 +02:00
acqn
d23b577331
More compiler flags on address types to match the location types of expressions.
2020-07-18 12:54:29 +02:00
acqn
2108489523
Fix for Issue #1075 and #1077 .
2020-07-18 12:54:29 +02:00
acqn
8066cd9ace
Fixed wrong case in PreDec codegen, which never seems to be in use though.
2020-06-01 22:37:40 +02:00
acqn
33e103fdc6
Fixed Issue #1040 : non-byte pointer +=/-= byte codegen bug.
2020-06-01 22:37:40 +02:00
Greg King
90a2edcfa2
Made cc65 detect a possibly missing argument at the end of a function argument list.
...
(It could be a stray comma at the end of the list.)
2020-01-25 04:14:58 -05:00