Commit graph

621 commits

Author SHA1 Message Date
Dale Weiler
479f3b9343 Implemented __builtin_exp 2013-03-08 03:46:25 +00:00
Dale Weiler
12340a6bd0 Actually generate an ast_call for __builtin_pow for the ** operator, otherwise the operator yeilds a ast_function, making "a ** b" not work, but since it's a function, allows **(a, b). Also added tests for exponentiation operator. 2013-03-07 23:05:40 +00:00
Dale Weiler
d3c7b6fb39 Implement exponentiation operator ** as well as __builtin_pow (used for exponentiation operator). Use of exponentiation operator with constants results in const folded (precomputed at compile time exponentiation), otherwise runtime exponentiation with some clever loops (slow!). 2013-03-07 21:31:19 +00:00
Dale Weiler
eb0e3c2898 Make it compile as C++ code again. 2013-02-06 10:36:27 +00:00
Wolfgang Bumiller
9bc774dcd3 find aliases in parser_find_global instead of parser_sya_operand 2013-02-06 10:55:06 +01:00
Dale Weiler
cb1a6a6a6b Store the ast nodes for aliases 2013-02-06 09:44:23 +00:00
Dale Weiler
1e60bafcdc Aliases to aliases is a bad idea, revert. Added better tests to show unused aliases 2013-02-06 09:28:42 +00:00
Dale Weiler
21e890602d Fix alias bug. Implemented support for aliases of vectors (x, y, z components). Also made aliases corrector resident (e.g alias to vector foo, named bop, indexing bol_x [instead of bop_x] will result in a correction suggestion of bop_x now). 2013-02-06 09:09:47 +00:00
Dale Weiler
6fc141733f Support for aliases to aliases too. 2013-02-06 08:43:11 +00:00
Dale Weiler
060bc0be10 Some sanity checks for aliases (undeclared variable checks, and incompatible types in alias checks.) 2013-02-06 05:51:05 +00:00
Dale Weiler
3dc8e9bb9c add todo 2013-02-06 05:38:34 +00:00
Dale Weiler
e464cc1ea6 Implemented generalized attribute aliases. You can now alias functions, locals, or globals with [[alias("old_name")]] type new_name; 2013-02-06 05:30:09 +00:00
Dale Weiler
52ffc6db10 Merge branch 'cooking' of github.com:graphitemaster/gmqcc into cooking 2013-02-05 17:16:09 +00:00
Dale Weiler
b3e87c3280 ast referencing 2013-02-05 17:14:56 +00:00
Wolfgang Bumiller
4b5afe3456 ast_array_index_codegen: never regenerate code 2013-02-05 17:54:14 +01:00
Dale Weiler
e2c424d607 Merge branch 'cooking' of github.com:graphitemaster/gmqcc into cooking 2013-02-05 16:35:12 +00:00
Dale Weiler
8e87082e1d Merge branch 'cooking' of github.com:graphitemaster/gmqcc into cooking
Conflicts:
	parser.c
2013-02-05 16:34:55 +00:00
Wolfgang Bumiller
72106b0982 removing some left-over alloc checks 2013-02-05 17:34:40 +01:00
Dale Weiler
fed0f8b6b4 Work in progress <=> operator. 2013-02-05 16:34:03 +00:00
Wolfgang Bumiller
f860759758 fixing that comment 2013-02-05 17:24:02 +01:00
Wolfgang Bumiller
15141897ae insert an error when an operator doesn't get found - note the comment... 2013-02-05 17:17:38 +01:00
Dale Weiler
31ce4c2afa Better handling of multiple body functions. 2013-02-05 03:28:20 +00:00
Wolfgang Bumiller
e662efae61 fix: rotate_entfield_array_index_nodes deleting the old array caused expressions to be deleted recursively 2013-02-03 23:38:06 +01:00
Dale Weiler
319783e873 Better printing of token errors. 2013-02-02 01:03:39 +00:00
Dale Weiler
ccdfd4c65a oops 2013-02-01 23:12:48 +00:00
Dale Weiler
a3559548a8 Fix ~ unary operator (can now const-fold). Also things like b &= ~1 work now. We also cache ast_value of float (-1) for -1-x (which is how ~ is implemented). 2013-02-01 23:10:23 +00:00
Dale Weiler
03b933bc7a Work in progress ~ operator implemented as -1-x. 2013-02-01 12:56:01 +00:00
Dale Weiler
b9f46f4ef7 Not an assembler instruction, but virtual instruction used by the IR. 2013-01-30 06:31:24 +00:00
Dale Weiler
9f5f2b6d74 Fix pragma parsing that I broke. 2013-01-30 05:51:28 +00:00
Dale Weiler
e12d492d67 Removing #error/#warning/#message from parser, and making it part of preprocessor as directives again. 2013-01-30 05:49:08 +00:00
Dale Weiler
36c5722273 Rename 2013-01-30 05:35:07 +00:00
Dale Weiler
d201cfe6b4 Work in progress options cleanup. 2013-01-30 05:24:30 +00:00
Dale Weiler
f3c5c40104 Fix splint warning 2013-01-30 01:38:37 +00:00
Dale Weiler
3d35804a7d Removed #warning and #error from ftepp, and made it part of the parser routine. These are "directives" that should exist regardless if -fftepp is enabled, like #pragma. Implemented #warning, #message and #error as directives in parser instead. 2013-01-30 01:24:58 +00:00
Wolfgang Bumiller
edfe340d09 Fix a warning 2013-01-26 14:43:49 +01:00
Wolfgang Bumiller
b39b61e514 store the actual parsing context before parsing into an expression and use that for the effectless-statement warning 2013-01-25 23:37:06 +01:00
Wolfgang Bumiller
9afe41471b error when using a type not usable as boolean in a condition, ie an if statement 2013-01-25 19:19:23 +01:00
Wolfgang Bumiller
dca9dd56d1 adding missing wantop flag and some related parentheses code 2013-01-18 15:22:03 +01:00
Wolfgang Bumiller
ba207cc04c Major expression parsing code refactoring, getting rid of lots of duplicated code and in the process also fixing a bug. Still thie will require more testing. xonotic code works with it though 2013-01-18 14:50:37 +01:00
Wolfgang Bumiller
1410840ef6 Make the varargs counter more stable, it'll now work with a function pointer with a different number of fixed params 2013-01-17 10:30:32 +01:00
Wolfgang Bumiller
00a9d2a9e3 fixing a possible NULL deref 2013-01-16 20:32:37 +01:00
Wolfgang Bumiller
e311dffcb3 fixing a warning 2013-01-16 16:16:52 +01:00
Wolfgang Bumiller
0ba8455f6a initialize max_param_count to 1 so vararg functions don't try to create an accessor for an array of 0 elements... 2013-01-16 09:37:32 +01:00
Wolfgang Bumiller
e695a5919d reduce the hashtable size a bit 2013-01-15 20:35:30 +01:00
Wolfgang Bumiller
73afc98699 fix: on error it was possible that leaveblock() is called after the function's already been deleted 2013-01-15 14:28:15 +01:00
Wolfgang Bumiller
150c6e21e7 fix a goto to a wrong error-cleanup part 2013-01-15 14:23:17 +01:00
Wolfgang Bumiller
c7ca5683b9 fix a possible leak 2013-01-15 14:20:08 +01:00
Wolfgang Bumiller
0f190026e8 Error on an empty paren expression 2013-01-15 14:18:03 +01:00
Wolfgang Bumiller
ee7d45f492 add a hint about -fvariadic-args to -Wvariadic-function 2013-01-15 11:35:18 +01:00
Wolfgang Bumiller
b208c1a49f Fix a crash... if (!x) delete(x) yeah right... 2013-01-15 10:50:14 +01:00
Wolfgang Bumiller
ab8cc64dfd constant-fold the 1/N division from a_vector/N 2013-01-13 20:53:07 +01:00
Wolfgang Bumiller
3d62cb37f1 allow vec/float 2013-01-13 20:49:16 +01:00
Wolfgang Bumiller
12ffd83d4f parsewarning->compile_warning 2013-01-13 17:32:54 +01:00
Wolfgang Bumiller
8d4e395092 Replacing lots of parseerror calls with compile_error calls and a more correct context information 2013-01-13 17:31:31 +01:00
Wolfgang Bumiller
3652a122ed Removed -fenhanced-diagnostics - it's now --correct, which makes sense since it doesn't affect the compilation process itself 2013-01-12 17:10:07 +01:00
Wolfgang Bumiller
4df6d1e028 guarding vararg code by -fvariadic-args 2013-01-12 16:28:04 +01:00
Wolfgang Bumiller
7dd31ccf77 entity setter array subscript needs to get a correct field type 2013-01-12 15:49:31 +01:00
Wolfgang Bumiller
a01388ea7d Copying arg counter into the local 2013-01-12 15:06:19 +01:00
Wolfgang Bumiller
57c0a09800 Creating the argument counter if requested 2013-01-12 14:59:30 +01:00
Wolfgang Bumiller
e149551744 Added '...(idx,type)' to access varargs 2013-01-12 14:53:48 +01:00
Wolfgang Bumiller
1861660585 builtins are generally not declared const, so don't expect CV_CONST, otherwise we write out va_count for builtin calls as well... 2013-01-12 13:52:42 +01:00
Wolfgang Bumiller
c10d127fd7 While at it: moving generation of reserved:version to just before the functions so no global/immedate is generated _after_ it - at least from the parser's point of view 2013-01-12 13:49:06 +01:00
Wolfgang Bumiller
d78997599a create store to reserved:va_count; fix: don't build vararg accessor ast tree after generating immediates as they create new ones 2013-01-12 13:47:56 +01:00
Wolfgang Bumiller
6dfdf69a8e vararg accessor generation 2013-01-12 13:01:20 +01:00
Wolfgang Bumiller
c69ba2c734 parsing of vararg-counter 2013-01-12 11:29:03 +01:00
Wolfgang Bumiller
ca947d782c Declaration of type-restricted varargs 2013-01-12 11:03:17 +01:00
Wolfgang Bumiller
2f9db8972e keep track of the highest parameter count of calls for later for varargs 2013-01-12 10:58:01 +01:00
Wolfgang Bumiller
3429e7d0cb 'static' shouldn't be accepted in the global scope for now 2013-01-12 10:52:18 +01:00
Wolfgang Bumiller
3436fa7d89 added the --add-info compile switch: it adds a global const string named version to the 'reserved' namespace, ie ends up named 'reserved:version', containing the --version string 2013-01-11 19:18:51 +01:00
Wolfgang Bumiller
88cfa53dc2 replacing an error message in the enum parsing 2013-01-10 22:08:49 +01:00
Wolfgang Bumiller
9c2bc7f381 Allow accessing vector components via the . operator, including components
of expressions, like: (3 * a_vector).y.
2013-01-10 21:03:35 +01:00
Wolfgang Bumiller
aa8b9eb1ad parse_expression_leave: also end at a closing } - enum: check for } and , after an expression again 2013-01-10 18:52:43 +01:00
Wolfgang Bumiller
a468d0b478 simple 'enum' implementation 2013-01-10 18:38:57 +01:00
Wolfgang Bumiller
81cc4194dc fixed a bug which allowed some statements to end in tokens other than semicolons... (ie closing parens) 2013-01-10 15:23:04 +01:00
Wolfgang Bumiller
428453a132 for compile-time constants << and >> are now available 2013-01-10 15:12:19 +01:00
Wolfgang Bumiller
10c7f4f838 don't call correct_edit anew for each scope 2013-01-09 21:16:22 +01:00
Wolfgang Bumiller
6b0a522bb9 Factor out the adding of globals in various places into parser_addglobal; Add globals to the correct_variables lists 2013-01-09 20:42:33 +01:00
Wolfgang Bumiller
be6942d972 fixing a crash caused by the correction: setting correct=NULL after freeing so the later if(correct) check properly fails 2013-01-09 19:12:27 +01:00
Wolfgang Bumiller
57c3d48711 error when trying to break/continue outside of loops/switches instead of segfaulting at codegen 2013-01-07 15:19:53 +01:00
Wolfgang Bumiller
f4d1ef4740 Fix some possible NULL access in an error case 2013-01-07 00:22:16 +01:00
Wolfgang Bumiller
8bc9d4b427 Committing an evil allocator and a trie to speed up the correction stuff 2013-01-05 19:09:36 +01:00
Dale Weiler
793547a132 Implemented -f[no]enhanced-diagnostics, to enable/disable the usage of enhanced diagnostics. 2013-01-04 12:07:42 +00:00
Dale Weiler
5377835f1e Remove constant string literal for correction check, use parse_tokval of the current parser state instead. Accidently left it behind from debugging. 2013-01-04 11:58:27 +00:00
Dale Weiler
2d96b2a3ec Merge branch 'correct' 2013-01-04 11:56:07 +00:00
Dale Weiler
36d02d010e Got rid of all the memleaks. We can now merge with master. 2013-01-04 11:53:40 +00:00
Dale Weiler
18b9473cf8 Itegration of corrector. Seems to be some leaks in the score keeping for the probability system. 2013-01-04 11:44:25 +00:00
Wolfgang Bumiller
cf293bc669 handling the ast-destruction in computed goto 2013-01-03 13:21:11 +01:00
Dale Weiler
7d14fdf530 Merge branch 'master' of github.com:graphitemaster/gmqcc 2013-01-03 12:05:02 +00:00
Dale Weiler
9bda8f61f4 Add specialized diagnostics for when predefined macros are used and ftepp predefined macros are not enabled. 2013-01-03 12:04:32 +00:00
Wolfgang Bumiller
614fcb12f5 check for TYPE_NOEXPR in general when applying an operator 2013-01-03 12:56:26 +01:00
Wolfgang Bumiller
e146fd121c parse_expression now takes a boolean flag on whether or not it should be creating ast_labels for undefined identifiers; creating the label later will pick it up and set its undefined flag to false 2013-01-03 12:46:33 +01:00
Dale Weiler
a168c5efbe More error checking and proper unreferencing of ast nodes if expressions for computed goto fails. 2013-01-02 22:39:24 +00:00
Dale Weiler
c1734d1b27 Some error checking for computed goto. 2013-01-02 22:28:26 +00:00
Dale Weiler
e08e4a9ce0 Remove "got" left behind from debugging. 2013-01-02 21:35:18 +00:00
Dale Weiler
a421d9a33b Implemented computed goto + added goto test for testsuite (tests both normal and computed goto statements). 2013-01-02 21:32:57 +00:00
Wolfgang Bumiller
558a091c08 remove ast.h-include from lexer.h to parser.c... 2013-01-02 15:08:02 +01:00
Dale Weiler
29db4a44ed Happy new years! 2013-01-01 05:08:55 +00:00
Wolfgang Bumiller
0920cb6ec4 Another hardcoded -std=gmqcc option removed and added to the implied -std=gmqcc flags 2012-12-31 12:43:15 +01:00
Wolfgang Bumiller
0626bbef8e remove another hardcoded -std=gmqcc case 2012-12-31 12:40:09 +01:00
Wolfgang Bumiller
d8254cede0 -std=gmqcc now implies -Werror-missing-return-values; another hardcoded error removed 2012-12-31 12:37:47 +01:00
Wolfgang Bumiller
17951ac92c Just allow variable declarations in for-loop initializers in any standard... 2012-12-31 12:35:26 +01:00
Wolfgang Bumiller
d47da25b82 Changing -Wtoo-few-parameters to -Winvalid-parameter-count; removing hardcoded COMPILER_GMQCC code which makes invalid parameter counts an error and instead make -std=gmqcc imply -Werror-invalid-parameter-count 2012-12-31 12:29:25 +01:00
Wolfgang Bumiller
a170154927 nil in ternary, and fix ternary to honor -fcorrect-logic/-ftrue/false-empty-strings 2012-12-31 11:45:00 +01:00
Wolfgang Bumiller
2cf4b4e56d Explicitly allow 'return nil' 2012-12-31 11:39:00 +01:00
Wolfgang Bumiller
4d5153854b This should actually cover all nil cases 2012-12-31 11:34:29 +01:00
Wolfgang Bumiller
5bb9351a3f Allow assigning nil to a field 2012-12-31 11:23:49 +01:00
Wolfgang Bumiller
0c4806b4a0 Adding -Wparenthesis, fixing constant folding of && and || 2012-12-31 11:11:46 +01:00
Wolfgang Bumiller
5a013c5b89 Do we REALLY need to listen to splint? 2012-12-30 11:59:29 +01:00
Wolfgang Bumiller
d9282ed988 Clean up trailing whitespaces 2012-12-30 11:03:59 +01:00
Dale Weiler
46374e94ca Add support for user defined messages for [[deprecated]] generalized attribute 2012-12-30 09:58:52 +00:00
Dale Weiler
921877e8a4 Implement [[deprecated]] general attribute, will mark functions as deprecated. Making calls to functions marked as such will trigger a compiler warning. Enabled by default. 2012-12-30 06:43:07 +00:00
Wolfgang Bumiller
755ee5462f Properly support globals initialized to nil 2012-12-29 21:15:59 +01:00
Wolfgang Bumiller
8bdd060112 -Wdifferent-qualifiers, -Wdifferent-attributes 2012-12-29 17:41:20 +01:00
Wolfgang Bumiller
33be9d4559 Don't allow code like: v * '0 1 0' = 3; to actually work... 2012-12-29 15:13:54 +01:00
Wolfgang Bumiller
73bc4cc3e4 -Ovector-components 2012-12-29 15:05:04 +01:00
Wolfgang Bumiller
14e954284e more general qualifier/attribute parsing, added not-yet-used AST_FLAG_INLINE and [[inline]] 2012-12-28 19:46:28 +01:00
Wolfgang Bumiller
47baca22d9 -Wuninitialized-const, -Wuninitialized-global 2012-12-28 19:07:43 +01:00
Wolfgang Bumiller
77d454725a -Wreserved-names, -fpermissive allows local variables named 'nil' to be created even with -funtyped-nil, they supersede the global untyped 'nil' 2012-12-28 18:22:09 +01:00
Wolfgang Bumiller
2e0216b7c6 'nil' global with -funtyped-nil 2012-12-28 18:16:19 +01:00
Dale Weiler
3688dab048 Fix a very possible bug 2012-12-28 12:50:37 +00:00
Wolfgang Bumiller
a60d0182db finish parsing of labeled loops; ast support added 2012-12-28 00:04:09 +01:00
Wolfgang Bumiller
c702970a0e distinguish between break/continue levels in the parser 2012-12-27 23:52:57 +01:00
Wolfgang Bumiller
ebb7cb2ae3 parsing of loop labels 2012-12-27 23:43:20 +01:00
Wolfgang Bumiller
517b6fed81 Another bool->int fix; now clang-compiled gmqcc actually works... 2012-12-27 14:33:58 +01:00
Wolfgang Bumiller
5cfd97c344 -fbail-on-werror option 2012-12-27 12:46:36 +01:00
Wolfgang Bumiller
f832b86dcd Fixing uninitialized warnings in parser.c 2012-12-26 20:00:17 +01:00
Wolfgang Bumiller
da927b5d41 print an error when static is used in global scope - this is currently not being handled as expected 2012-12-24 11:38:33 +01:00
Wolfgang Bumiller
2b468cb0ee Added the 'static' keyword.
Implements #71
2012-12-24 11:30:58 +01:00
Dale Weiler
d51a6ab3db Whitespace 2012-12-23 09:10:31 +00:00
Dale Weiler
5bc815c63f Revert "Whitespace fixes"
This reverts commit 4580dcf1ea.
2012-12-23 09:10:07 +00:00
Dale Weiler
4580dcf1ea Whitespace fixes 2012-12-23 08:42:53 +00:00
Dale Weiler
c3964cf29d Make compiler and virtual-machine compile as C++ code, also removed gmqcc_voidptr hack. 2012-12-23 07:51:19 +00:00
Dale Weiler
d35d953a91 Remove parser_compile_string_len, and make parser_compiler_string take an additional length argument. 2012-12-23 07:22:15 +00:00
Wolfgang Bumiller
e8cd9411b0 -Wunknown-attribute; and don't error on unknown attributes 2012-12-22 18:16:41 +01:00
Wolfgang Bumiller
7cf0ba5aa8 'noreturn' is now an attribute and parsed as [[noreturn]] 2012-12-22 18:09:56 +01:00
Wolfgang Bumiller
1f070b740f -ffalse-empty-strings in && and || 2012-12-22 17:31:31 +01:00
Wolfgang Bumiller
0fe71af4ce -fcorrect-logic now handles only vectors 2012-12-22 17:18:37 +01:00
Wolfgang Bumiller
8459895fdd Fix a bug with -fperl-logic and -fcorrect-logic 2012-12-22 16:25:19 +01:00
Dale Weiler
fa401b6f56 Cleanups and make compile with clang again with no warnings. 2012-12-22 08:22:50 +00:00
Dale Weiler
7d2a2f2ade cleanups and fixes that cppcheck found 2012-12-22 08:07:54 +00:00
Wolfgang Bumiller
93341dd009 *sigh* 2012-12-20 20:57:05 +01:00
Wolfgang Bumiller
a6547a15f3 no need to check the array, the 2nd NOT is a NOT_F 2012-12-20 20:56:49 +01:00
Wolfgang Bumiller
ccbccad994 fix -fcorrect-logic to use double-not instead of a single one - wow that was a bad one 2012-12-20 20:55:56 +01:00
Wolfgang Bumiller
68c4070f62 Fix the -fcorrect-logic condition 2012-12-20 20:40:59 +01:00
Wolfgang Bumiller
0988b731b7 Fix -fcorrect-logic 2012-12-20 20:33:05 +01:00
Wolfgang Bumiller
4f9c7861ec For loops may have an empty condition - don't try processing a NULL 2012-12-20 20:23:35 +01:00
Wolfgang Bumiller
a985a5cab1 while/for/do now all use process_condition, ast_loop got 2 new parameters for more efficient translation 2012-12-20 20:22:31 +01:00
Wolfgang Bumiller
d72cb42b08 process_condition function used by parse_if - need to still add it to loops 2012-12-20 19:51:30 +01:00
Wolfgang Bumiller
34063108a6 since unary not doesn't fold these, remove them from immediate_is_true 2012-12-20 19:19:12 +01:00
Wolfgang Bumiller
4319922b3c introducing an immediate_is_true which follows the new -f flags on strings and vector truthfulness, used in logic-op constant folding; const folding now disabled for functions-constants on NOT because it's stupid 2012-12-20 19:18:22 +01:00