Dale Weiler
6424ebaf98
Perliminary work on arithmetic exception handling in the constant evaluator. We can safely check for arithmetic underflow, overflow, divison by zero and inexactness now. Inexactness of expressions are propagated through the AST such that using an inexact value in a comparison will trigger a warning with -Winexact-compares.
2014-05-24 09:53:38 -04:00
Wolfgang Bumiller
0f506e768b
sometimes I hate travis
2014-01-07 15:04:29 +01:00
Wolfgang Bumiller
792c1afd95
Do not create coverage calls on array accessors.
2014-01-07 15:01:52 +01:00
Wolfgang Bumiller
4ff68e07e8
Adding coverage support:
...
The -coverage option causes all values have AST_FLAG_BLOCK_COVERAGE
set by default.
The coverage attribute can be used to control coverage:
It takes an optional list of coverage types, currently only "block"
and "none" is recognized.
[[coverage]] defaults to [[coverage(block)]].
Use [[coverage(none)]] or [[coverage()]] to disable.
2014-01-07 14:36:00 +01:00
Dale Weiler
a934e0fe4b
Happy new year!
2014-01-01 06:24:16 -05:00
Wolfgang Bumiller
5319caaaea
definite -> last keyword; testcase updated too
2014-01-01 12:16:19 +01:00
Dale Weiler
0b6637cc67
Cleanup some code duplication. This whole parser ugh I just want to rm -rf all of it. Time for GMQCC2.
2014-01-01 05:32:24 -05:00
Dale Weiler
1e30c2b81d
Remove final attribute and bareword. [[definite]] is now old [[final]]. There is no bareword definite either.
2014-01-01 05:12:21 -05:00
Wolfgang Bumiller
50f905b821
adding 'final'
2013-12-06 22:41:15 +01:00
Dale Weiler
072bff44e6
Bitshifting operators <<, >>, and compound assignment versions now work in non-constant expressions
2013-12-03 17:40:15 -05:00
Wolfgang Bumiller
c3cc6f184e
static variables now don't get re-initialized in functions; cannot be initialized with non-constants anymore; and a counter has been added so you can use the same name in a different scope for another static variable again.
2013-11-28 12:04:01 +01:00
Dale Weiler
2d0f0a3607
Never mind
2013-11-25 13:32:02 -05:00
Dale Weiler
25e86c04eb
Only g++ is this retarded
2013-11-25 13:30:45 -05:00
Dale Weiler
74b58c5bb8
Cleaner handling since intrin_func deals with alias
2013-11-23 07:02:45 -05:00
Dale Weiler
292c8150b4
Resolve undefined functions to compiler builtins if they exist.
2013-11-23 06:57:40 -05:00
Dale Weiler
1900262df4
Use a branch instead of math on enum types
2013-11-13 04:57:18 -05:00
Wolfgang Bumiller
b1016c7f48
fold_binary now used instead of ast_binary_new, which calls fold_superfluous
2013-10-25 13:40:31 +02:00
Wolfgang Bumiller
3988aae73e
type and argument parsing improved to handle the field/vararg ambiguity; tests added
2013-10-18 16:28:28 +02:00
Wolfgang Bumiller
8d5e719026
replacing the current [[accumulate]] implementation: shorter and simpler, and also supports non-void return types
2013-10-18 11:26:41 +02:00
Dale Weiler
02a1d9f4a1
Fix 'declaration does not declare anything' regression i.e this closes #132 .
2013-10-17 05:06:09 -04:00
Dale Weiler
05ac126d6f
Use "##" to ensure the names of the accumulated functions are striped by the IR.
2013-10-17 03:47:26 -04:00
Dale Weiler
4da820ef61
Enforce void type on accumulatable functions.
2013-10-17 03:39:14 -04:00
Dale Weiler
2c975bb344
Implemented [[accumulate]] attribute. This will hopefully be used by Xonotic to replace it's ACCUMULATE_FUNCTION stuff.
2013-10-17 03:21:30 -04:00
Dale Weiler
8699053887
Fix handling on intrinsic folding, this closes #118 .
2013-10-17 00:14:42 -04:00
Dale Weiler
003bb9dfb4
Prevent aliasing functions through forward declared prototypes. This closes #125
2013-10-16 23:37:39 -04:00
Dale Weiler
50d165e173
Some intrinsic code cleanup. The args check is handled anyways in the parser. We use a generated array alongside to prevent generating the intrinsic multiple times instead of using static storage. Other various cleanups as well.
2013-10-16 00:04:39 -04:00
Wolfgang Bumiller
82afdb1e2c
Merge branch 'cooking' of git://github.com/graphitemaster/gmqcc into cooking
2013-10-11 14:10:57 +02:00
Wolfgang Bumiller
62ac7e9966
first part of parsing TOKEN_DOTS as part of a type when needed; allows declarations like: ...float x;
2013-10-11 14:10:47 +02:00
Dale Weiler
87d9371a5c
Refactor some util/platform usage and extend file system file interface to accept its own flags and EOF
2013-10-11 06:12:56 -04:00
Dale Weiler
12a864abf5
Some more platform / compiler specific code refactoring.
2013-10-11 03:02:38 -04:00
Dale Weiler
151606e255
Initial platform / compiler specific code refactoring.
2013-10-11 02:39:30 -04:00
Dale Weiler
7249c2ec18
Simplify parse stage for unary - operator.
2013-09-29 22:08:09 -04:00
Dale Weiler
353455e1ad
Remove pointless thinking comment, fix builds for clang.
2013-09-29 22:06:26 -04:00
Dale Weiler
b10de1b240
Make unary - operator act as an ast_unary node. This allows for consistency (no sense in making unary use binstore nodes, it doesn't make much sense). It also allows for the peephole optimization on unary chains that cancel each other to take place; i.e code like "-(-a)" simplifies to "a", thus eliminating instructions.
2013-09-29 22:01:46 -04:00
Dale Weiler
d61c5d3b16
Fix alias type check
2013-09-26 08:09:55 -04:00
Dale Weiler
894e1976e3
Cheap quick hack for ignoring #pragma to EOL
2013-09-25 15:35:18 -04:00
Dale Weiler
73eca0848c
Fix QuakeWorld compilation by treating assignment to constants as a warning when -std=qcc.
2013-09-24 07:31:53 -04:00
Wolfgang Bumiller
35f9aef729
fix: declaring locals with the name of a parameter now treats the parameter as the local's prototype to avoid it being double-freed later
2013-09-11 11:25:44 +02:00
Dale Weiler
b2c8f3ebc5
Vector cross product virtual instruction, now >< operator works for non-constant vectors. Thanks divVerent for the help.
2013-08-31 14:49:06 -04:00
Dale Weiler
64661f54ea
Implemented >< (vector cross product operator). Currently support for constants only.
2013-08-31 13:41:25 -04:00
Wolfgang Bumiller
702a7664de
Don't allow a stale 'some_type;' declaration without an actual variable name; Same for typedef; closes #119
2013-08-31 11:35:12 +02:00
Wolfgang Bumiller
2ff9adecb2
this one can be reached - make it a little more helpful
2013-08-31 10:55:03 +02:00
Wolfgang Bumiller
79219ae201
factor check for assignment-to-constant into a function; improve its error output; closes #122
2013-08-31 10:39:31 +02:00
Wolfgang Bumiller
87b9fca732
fix unhelpful error message; fixes #123
2013-08-31 10:19:10 +02:00
Wolfgang Bumiller
ff6d55aafc
this should allow for better detection of precedence issues
2013-08-29 10:22:48 +02:00
Wolfgang Bumiller
fa468e0673
also warn about mixing logical and/or operations without parenthesis
2013-08-29 08:26:17 +02:00
Wolfgang Bumiller
f140c39063
warn when mixing different bitops without parenthesis around them
2013-08-29 08:18:06 +02:00
Dale Weiler
a7c1f6f021
Implement [[eraseable]] attribute. When used with a function it instructs the AST (which than transfers logic to the IR) that the function (or variable) is potentially unused (verified by checking the read count). This than propogates through the IR and prevents the IR from generating both the definition and global/function. The intrinsics system uses this as well to prevent intrinsic functions from being generated unless they're used.
2013-08-29 00:05:37 -04:00
Dale Weiler
ceb79f1897
Fix build on clang
2013-08-28 13:01:46 -04:00
Dale Weiler
3b4a5667ea
Constant fold intrinsics if their arguments are constant. TODO: reference count intrinsics such that they're not generated unless they're used, currently when an intrinsic can be folded-away it's marked for generation and makes it to the final output binary even though it isn't used.
2013-08-28 12:46:22 -04:00