Commit Graph

592 Commits (cff5358f60bac70728c9b738c8311e055e96d04a)

Author SHA1 Message Date
Andrew Kelley 647d13168a IR: implement maybe return expression 2016-12-13 19:36:56 -05:00
Andrew Kelley 3f3630d7e3 IR: implement the rest of the builtin functions
* returnAddress
 * frameAddress
 * addWithOverflow
 * subWithOverflow
 * mulWithOverflow
 * shlWithOverflow
 * alignOf
2016-12-13 04:30:41 -05:00
Andrew Kelley 9b17c0ff7f IR: implement intType builtin
and int type field access
and fix compile time bool not
2016-12-11 16:30:01 -05:00
Andrew Kelley 3429639e84 IR: implement truncate builtin 2016-12-11 15:31:07 -05:00
Andrew Kelley 433c17aeb1 IR: implement divExact builtin 2016-12-11 14:27:37 -05:00
Andrew Kelley 8fcb1a141b IR: implement fence and cmpxchg builtins 2016-12-11 04:06:07 -05:00
Andrew Kelley 6feae8a4e9 IR: support error union type 2016-12-10 18:38:53 -05:00
Andrew Kelley 443e14afbd IR: fix errorName builtin 2016-12-10 17:11:35 -05:00
Andrew Kelley 7d0fb281fe IR: a bunch of fixes and some additions
* add errorName builtin function
 * add assertion for generated memcopy being on correct types
 * respect handle_is_ptr for constant values
 * fix return codegen to respect sret semantics
 * remove ArrayLen IR instruction; we already have StructFieldPtr
   with "len" field
 * fix gen_const_val for pointers inside aggregates
2016-12-08 01:52:57 -05:00
Andrew Kelley 0ad580f001 IR: add minValue, maxValue, and negation 2016-12-07 01:23:38 -05:00
Andrew Kelley 7d9fa01ed5 IR: implement compile time eval unwrap maybe 2016-12-06 22:04:55 -05:00
Andrew Kelley 6ed202ab16 IR: implement defer 2016-12-06 21:26:17 -05:00
Andrew Kelley bed83bc5a1 IR: implement short circuit bool or, and 2016-12-05 19:12:19 -05:00
Andrew Kelley 24048b2af6 IR: implement break and continue 2016-12-05 18:43:16 -05:00
Andrew Kelley 0541532ed6 IR: implement generic function calls 2016-12-05 05:12:44 -05:00
Andrew Kelley 25a89e7a36 IR: compile time function evaluation 2016-12-04 23:52:43 -05:00
Andrew Kelley eb5693d91f IR: function call porting progress
also implemented container init
generics is still todo
2016-11-28 02:40:01 -05:00
Andrew Kelley a52ede6494 IR: support goto and labels 2016-11-26 23:16:38 -05:00
Andrew Kelley 84f7805029 IR: support import builtin function 2016-11-26 20:52:22 -05:00
Andrew Kelley 4619b5de06 IR: support inline switch 2016-11-26 15:38:07 -05:00
Andrew Kelley 697c768730 IR: support switch with range 2016-11-26 04:03:39 -05:00
Andrew Kelley 0c22358cc1 IR: generating a switch statement 2016-11-24 02:44:03 -05:00
Andrew Kelley a2257e4b81 IR: implement setFnVisible builtin 2016-11-21 15:36:25 -05:00
Andrew Kelley bf7cde62c5 IR: support setDebugSafety builtin function 2016-11-18 20:57:27 -05:00
Andrew Kelley c8333d0cc9 add concept of inline for, inline while, inline var 2016-11-03 14:13:57 -04:00
Andrew Kelley e4271f4fb2 more test coverage, change 'got' to 'found' in errors 2016-10-28 12:15:37 -04:00
Andrew Kelley e3857a361c more test coverage 2016-10-28 12:04:46 -04:00
Andrew Kelley b581da41f8 remove compiler directives
* add `setFnTest`, `setFnVisible`, `setFnStaticEval`,
   `setFnNoInline` builtin functions to replace previous
   directive functionality
 * add `coldcc` and `nakedcc` as keywords which can be used as part
   of a function prototype.
 * `setDebugSafety` builtin can be used to set debug safety features
   at a per block scope level.
 * closes #169
2016-09-28 02:33:32 -04:00
Andrew Kelley e5fd8efcb6 clean up test directory 2016-09-27 00:09:43 -04:00
Andrew Kelley 183976b242 add this keyword refers to thing in immediate scope
See #169
2016-09-26 23:47:30 -04:00
Andrew Kelley 7ce7e2c9d1 emit error for extern function
with byvalue return value or parameter.

currently we don't codegen byvalue parameters or return values
correctly for C compatibilty functions so instead of generating
incorrect code, we emit a compile error.

eventually we'll support this feature and remove the compile error.

See #180
2016-09-26 20:01:42 -04:00
Andrew Kelley 7f4d4bdb3f fix crash when doing binary not on integer literal
closes #201
2016-09-26 19:42:51 -04:00
Andrew Kelley 4b68224c60 add error message for method call on non method
closes #199
2016-09-26 01:01:02 -04:00
Andrew Kelley 683da0e4ec ability to have struct to have a field which is slice of itself
closes #197
2016-09-25 13:39:46 -04:00
Andrew Kelley e06885d64e enums support member functions 2016-09-23 15:18:02 -04:00
Andrew Kelley 9ec6a78f12 fix compiler crash for misspelled type with pointer only reference
closes #196
2016-09-23 11:53:05 -04:00
Andrew Kelley 46eb77dbb2 stack trace is able to figure out compilation unit
each address is contained within

also fix a bug having to do with codegen for enum value
initialization expressions
2016-09-23 02:00:23 -04:00
Andrew Kelley c64f6f9503 fix compile crash when leaving out for loop parameter 2016-09-22 10:40:05 -04:00
Andrew Kelley b97bfc3ecb fix error when switch prong has implicit cast
closes #194
2016-09-20 16:10:34 -04:00
Andrew Kelley e397ea43c0 tests: correct test name 2016-09-19 20:19:02 -04:00
Andrew Kelley 3239b3cb69 use size_t for indexes
protect against incorrect copies in debug mode
2016-09-19 11:54:01 -04:00
Andrew Kelley b738cbdc76 fix compiler crash involving slice with const slice child
also fix compiler crash for multiple errors in main fn prototype

closes #191
2016-09-15 14:09:08 -04:00
Andrew Kelley 3f05fdc8e8 tests: use a more robust path to self_hosted.zig
closes #184
2016-09-14 03:10:56 -04:00
Andrew Kelley f1761632da darwin compat fixups
- delete commented out code
 - delete redundant check for missing
   mmacosx-version-min/maxdir
 - add TODO comment in std library
 - rename 'os' to 'self' in io.zig
 - `openSelfExe` aborts on darwin instead of compile error
 - only allow warnings on the one parseh test that has
   `#include <stdint.h>`.
2016-09-14 02:47:16 -04:00
alter cf9b21c09f MacOSX compatibility
- Implemented some syscall for MacOSX
- tested on : El Capitan 10.11 x86_64
- make self hosted test run on macosx
- modified run_test so it does not fail when parseh throws
  warnings (most of them are related to buildin types from
  gcc that arent defined in header files and unions)
- making -mmacosx-version-min and -mios-version-min works like
  gcc (command line paramers have precedence over enviroment variables)
2016-09-14 02:46:02 -04:00
Andrew Kelley 06f2f4d64b change `unreachable{}` to `@unreachable()`
instead of a container init expression, it's a builtin
function call.
2016-09-13 16:46:27 -04:00
Andrew Kelley 56f8325799 add compile error for assigning through const
pointer and slice

closes #188
2016-09-11 14:12:24 -04:00
Andrew Kelley 28811234bb fix compile error message for wrong arg count on method 2016-09-10 20:53:57 -04:00
Andrew Kelley d324b1befa ability to infer parameter types 2016-09-08 00:24:48 -04:00
Andrew Kelley 64034a3d1a maxValue and minValue builtins return number literal
closes #170
2016-09-05 23:19:13 -04:00
Andrew Kelley cfaced3f73 rename errName builtin to errorName 2016-09-05 17:03:11 -04:00
Andrew Kelley 9193a3cdad stronger static eval recursive test 2016-08-30 16:06:02 -07:00
Andrew Kelley 6e6d138c2f add ability to explicitly cast enum with no payload to int 2016-08-29 22:14:10 -07:00
Andrew Kelley 651dc31247 implement null as a literal type 2016-08-29 22:14:09 -07:00
Andrew Kelley 1f7ec741fa implement `?return` expression 2016-08-29 22:14:09 -07:00
Andrew Kelley 0fbb9e09ea fix crash when calling method on slice 2016-08-16 23:24:33 -07:00
Andrew Kelley a2ac06dcd5 std: replace print_u64/i64 with printInt 2016-08-16 22:59:32 -07:00
Andrew Kelley 37d167f6e0 std: conform to style guidelines 2016-08-16 22:42:50 -07:00
Andrew Kelley 2ed949a6ae add zeroes value 2016-08-08 20:43:38 -07:00
Andrew Kelley 0d5ecc4312 ability to have a return type of 'type' 2016-08-07 20:08:37 -07:00
Andrew Kelley 275410dc33 implement multiline C string syntax 2016-08-04 23:10:24 -07:00
Andrew Kelley d0b11af2bd new multiline string syntax
This patch also moves a bunch of the parser code into the tokenizer.

Closes #162.
2016-08-04 22:52:38 -07:00
Andrew Kelley 1fa0cabf9d remove multiline comments
closes #161
2016-07-27 23:26:12 -07:00
Andrew Kelley 8552d7fd19 explicit wrapping integer operations
instead of wrapping integer types

closes #159
2016-07-27 23:08:27 -07:00
Andrew Kelley 06c4b35eb1 std: improve rand implementation and API 2016-07-26 23:51:58 -07:00
Andrew Kelley bc81ddfea6 unsigned integers for sizes of things
Closes #62.
2016-07-26 20:40:11 -07:00
Andrew Kelley 78d4fb20c4 inline parameters
This replaces the current generic syntax for functions and replaces
it with the concept of inline parameters.

This paves the way for the "all structs anonymous" proposal.

Closes #151.
2016-07-25 22:55:15 -07:00
Andrew Kelley 49a4b1b930 ability to cast explicitly from int to enum
This commit also fixes a bug where pure functions are marked with
the read-only attribute in debug mode. This resulted in incorrect
codegen because calls to read-only functions with unused values
were not generated.

For example, a call to assert() would not be generated if assert
is marked with read-only. Which it *is* marked with in release
mode.
2016-07-09 15:22:04 -07:00
Andrew Kelley a5251a1c10 parseh: support octal in C macro string literal 2016-07-09 12:17:31 -07:00
Andrew Kelley 7edef4f3fd add beginning of print stack trace function
introduce std.debug and move std.assert to std.debug.assert
add mem.copy
2016-05-17 13:32:43 -07:00
Andrew Kelley 2c710382a8 fix crash when error evaluating target of for expr
closes #153
2016-05-16 22:51:08 -07:00
Andrew Kelley 9813ae8586 add bit_count, is_wrapping, is_signed fields to int types 2016-05-15 01:30:25 -07:00
Andrew Kelley 6ff996f60f add int_type builtin function 2016-05-15 01:05:24 -07:00
Andrew Kelley 50310cf9df add 64 bit division test 2016-05-15 00:42:48 -07:00
Andrew Kelley 7f90dbbb11 switch on compile var marks entire namespaces
as depending on compile vars.

closes #154
2016-05-15 00:25:13 -07:00
Andrew Kelley 33e3d56453 add error for wrong return type of main 2016-05-13 13:08:54 -07:00
Andrew Kelley 1eafc85f1f add readonly attribute to relevant functions and parameters 2016-05-11 15:58:00 -07:00
Andrew Kelley d92ae20f45 add hashmap to standard library
closes #22
2016-05-09 15:07:38 -07:00
Andrew Kelley f1e5be9686 fix ability to use previous generic params and
add error when `%return` shows up in a function with incorrect
return type
2016-05-09 13:44:29 -07:00
Andrew Kelley 745c325d0f support variable declarations in structs
See #22
2016-05-09 12:34:03 -07:00
Andrew Kelley 56908dcb9d add debug safety for shortening casts
closes #150
2016-05-09 08:44:41 -07:00
Andrew Kelley 0c32b0b4ad add list implementation to standard library 2016-05-08 01:34:00 -07:00
Andrew Kelley 18ed87c695 ability to cast u8 slice to bigger slice 2016-05-08 00:59:21 -07:00
Andrew Kelley aed96e3512 fix null literal outside function 2016-05-08 00:15:05 -07:00
Andrew Kelley 404defd99b add div_exact builtin fn
closes #149
2016-05-07 20:53:16 -07:00
Andrew Kelley eb83111f02 add debug safety for division
See #149
2016-05-07 19:58:02 -07:00
Andrew Kelley 9d29674711 ability to cast slice to u8 slice 2016-05-07 18:45:28 -07:00
Andrew Kelley 9e0165147e generic args available to member functions
See #22
2016-05-07 17:27:57 -07:00
Andrew Kelley 2ed72022ce support generic data structures
See #22
2016-05-07 17:00:58 -07:00
Andrew Kelley 01c46eef3a std: separate str and cstr 2016-05-07 10:52:52 -07:00
Andrew Kelley 6f0f357ee4 self hosted tests test release mode too
closes #69
2016-05-07 10:14:16 -07:00
Andrew Kelley 8c79438f6b better array concatenation semantics
closes #87
2016-05-07 10:05:59 -07:00
Andrew Kelley 271a37b418 implicit wrap widening cast on integer peer types
closes #46
2016-05-06 19:49:28 -07:00
Andrew Kelley 6131b37163 fix eval integer wrapping and add tests
See #46
2016-05-06 19:23:21 -07:00
Andrew Kelley 9db45ac362 add shl_with_overflow builtin function
See #46
2016-05-06 16:45:04 -07:00
Andrew Kelley 100802cdc0 add debug safety for left shifting
See #46
2016-05-06 15:46:38 -07:00
Andrew Kelley 0c96920172 add tests for integer wrapping
See #46
2016-05-06 15:02:02 -07:00
Andrew Kelley b8d17b11a7 add tests for integer overflow crashing
see #46
2016-05-05 18:07:15 -07:00
Andrew Kelley dedde0d790 add fence builtin function 2016-05-04 18:34:17 -07:00
Andrew Kelley c95e497857 add cmpxchg builtin function 2016-05-04 18:19:49 -07:00
Andrew Kelley 7f589c0cab support maybe destructuring into a pointer variable 2016-05-03 15:06:34 -07:00
Andrew Kelley 9ccd0ba961 implement string escapes 2016-05-01 14:53:48 -07:00
Andrew Kelley d908afe105 add array multiplication operator 2016-04-28 18:03:44 -07:00
Andrew Kelley 46b0b84b90 ability to specify body of an extern function
closes #101
2016-04-28 16:04:44 -07:00
Andrew Kelley 4815c03caa better parameter codegen
* ability to take address of a parameter (closes #97)
 * debug symbols work for parameters
2016-04-27 17:34:53 -07:00
Andrew Kelley 8ec109de3c ability to compare booleans 2016-04-26 11:39:31 -07:00
Andrew Kelley d1fa5692c6 add array bounds checking in debug mode
closes #27
2016-04-26 11:36:11 -07:00
Andrew Kelley d0378057d1 support switching on error union type
closes #23
2016-04-25 21:51:04 -07:00
Andrew Kelley d1b65c6f46 fix ability to parse character literals 2016-04-24 16:36:05 -07:00
Andrew Kelley 8583fd7f9f add codegen for pointer comparison
see #145
2016-04-24 12:27:59 -07:00
Andrew Kelley 8ad75a9bf3 add compile error for invalid equality operator uses
See #145
2016-04-24 12:09:51 -07:00
Andrew Kelley 899fb14c30 fix handling of slice of zero bits type
closes #143
2016-04-23 13:58:30 -07:00
Andrew Kelley 55b28ab030 fix returning empty struct from function
closes #142
2016-04-23 12:21:47 -07:00
Andrew Kelley 66163692ad parseh: support anonymous enums and enums with initializers 2016-04-22 21:43:48 -07:00
Andrew Kelley 8187396f64 add syntax to allow symbols to have arbitrary strings as names 2016-04-22 15:24:18 -07:00
Andrew Kelley 35362f8137 better parsing of C macros
See #88
2016-04-21 15:48:13 -07:00
Andrew Kelley a380b803ac ability to use a struct with no fields 2016-04-21 09:47:41 -07:00
Andrew Kelley ae600d2f7f fix undeclared identifier not marking function as impure 2016-04-20 17:25:26 -07:00
Andrew Kelley 6acc354957 for loop: add ability to get pointer to elem var
see #51
2016-04-20 11:58:01 -07:00
Andrew Kelley a25307c0a1 add optional continue expression to while loop
closes #139
2016-04-19 20:28:44 -07:00
Andrew Kelley 04364c45ce fix casting with imported symbol not working 2016-04-19 19:37:25 -07:00
Andrew Kelley 36c6acfc76 enum init uses container init syntax instead of fn call
See #5
2016-04-19 18:52:09 -07:00
Andrew Kelley 7a7f83033c add test for public enums
See #5
2016-04-19 17:20:23 -07:00
Andrew Kelley 4e37fb2fa2 implement constant initialization of enum values
see #5
2016-04-19 17:15:55 -07:00
Andrew Kelley ff1ab3fe9c fix crash in non-const expression in struct literal outside fn 2016-04-18 18:18:41 -07:00
Andrew Kelley f4c7e1bf49 rearrange standard library a bit 2016-04-18 16:42:56 -07:00
Andrew Kelley 5e33175517 add @embed_file builtin function 2016-04-18 15:47:21 -07:00
Andrew Kelley 832454f38b move 2 tests to self hosted land 2016-04-18 13:06:17 -07:00
Andrew Kelley 7f56e4ac16 move more tests to self-hosted land 2016-04-14 11:15:02 -07:00
Andrew Kelley fcedc35551 fix crash with generic function and implicit cast 2016-04-14 10:39:03 -07:00
Andrew Kelley 3f9632bb40 eval: support array literals 2016-04-13 10:13:49 -07:00
Andrew Kelley 3c27cb2527 more eval tests and fix eval call analyze code 2016-04-12 17:33:46 -07:00
Andrew Kelley 69109bc270 add error for dividing by zero in static function evaluation 2016-04-12 16:18:41 -07:00
Andrew Kelley be4df96e4b passing all tests 2016-04-12 13:30:52 -07:00
Andrew Kelley 954a451c51 unsigned ints implicitly cast to signed ints when they fit
also fix #135
2016-04-11 22:57:32 -07:00
Andrew Kelley 4a3bce4b63 move some tests into self hosted 2016-04-10 13:58:04 -07:00
Andrew Kelley b117b5907c add error for accessing empty array
closes #134
2016-04-10 13:18:42 -07:00
Andrew Kelley 0683bd8bf6 fix crash when casting undefined to slice
also fix crash having to do with runtime allocated stack memory
2016-04-10 12:04:25 -07:00
Andrew Kelley e66ed0f2e2 add error for assigning null to non-nullable pointer
closes #133
2016-04-09 17:35:26 -07:00
Andrew Kelley 707131e37b goto: jumping out of scope runs defers
see #44
2016-04-09 17:26:04 -07:00
Andrew Kelley 21eca6478f re-introduce goto
see #44
2016-04-09 16:41:17 -07:00
Andrew Kelley 7026bed462 fix debug symbols regression after llvm 3.8.0 2016-04-09 14:21:55 -07:00
Andrew Kelley 7a05e18efb implement @err_name builtin function 2016-04-09 08:55:53 -07:00
Andrew Kelley 73c814e5c0 support hex escapes in string literals 2016-04-08 17:30:26 -07:00
Andrew Kelley 491e3cb5c5 fix crash when passing empty string to function 2016-04-08 17:09:07 -07:00
Andrew Kelley 5dbc21b511 update cat example, refactor std
partial implementation of @err_name
2016-04-08 16:21:30 -07:00
Andrew Kelley 28ad4e6d83 fix segfault in generic functions
See #22
2016-04-07 15:09:55 -07:00
Andrew Kelley 3b535d2c3a fix evaluating generic function instance in wrong context
See #22
2016-04-07 14:23:06 -07:00
Andrew Kelley ee22e87296 generic functions use correct type for generic args
See #22
2016-04-07 11:34:24 -07:00
Andrew Kelley 1d4c66b56b support multiple generic function instances
See #22
2016-04-07 10:34:54 -07:00
Andrew Kelley 57688dea36 add error for gt and lt comparison of invalid types 2016-04-06 14:15:20 -07:00
Andrew Kelley 7bb67b1fd0 ability to compare function pointers at compile time 2016-04-06 14:09:27 -07:00
Andrew Kelley 67152f7294 support simple generic functions 2016-04-06 12:58:54 -07:00
Andrew Kelley e144ddab24 add multiline string literal
and make multiple lines in normal string literals an error
2016-04-03 18:59:43 -07:00
Andrew Kelley f72c36cd37 fix detection of @import and @c_import inside fn body 2016-03-01 17:59:56 -07:00
Andrew Kelley 5df091fea9 c_void is provided outside of C imports 2016-03-01 15:26:41 -07:00
Andrew Kelley f1d338194e rewrite how importing works
* Introduce the concept of packages. Closes #3
 * Add support for error notes.
 * Introduce `@import` and `@c_import` builtin functions and
   remove the `import` and `c_import` top level declarations.
 * Introduce the `use` top level declaration.
 * Add `--check-unused` parameter to perform semantic
   analysis and codegen on all top level declarations, not
   just exported ones and ones referenced by exported ones.
 * Delete the root export node and add `--library` argument.
2016-03-01 03:13:40 -07:00
Andrew Kelley 04cc59be65 update run_tests to work on windows 2016-02-17 20:44:07 -07:00
Andrew Kelley baf889c879 parseh: fix __cdecl causing a fn ptr to be double ptr 2016-02-14 16:14:30 -07:00
Andrew Kelley c8376af92d add @ctz, @clz and compiler_rt implementation 2016-02-13 12:50:13 -07:00
Andrew Kelley b8a1cb299e avoid codegening functions never called from conditional compilation 2016-02-12 15:51:12 -07:00
Andrew Kelley 7828456b30 std: delete malloc and free
later we'll add a full featured allocator instead of this
2016-02-12 02:23:22 -07:00
Andrew Kelley 592210a173 i386 support
closes #115

Thanks to Seo Sanghyeon for the port code.
2016-02-12 02:04:46 -07:00
Andrew Kelley 2dc4ac0e21 add @compile_var("os") and @compile_var("arch") 2016-02-11 18:33:04 -07:00
Andrew Kelley 08eb19456b add compile error for missing enumeration value in switch 2016-02-11 16:15:08 -07:00
Andrew Kelley a180168871 fix division by 0 crashing compiler
closes #99
closes #124

thanks to Michael Patraw for submitting a patch for this.
2016-02-11 15:02:22 -07:00
Andrew Kelley d8f6388b63 if statements can be const expr evaluated
also introduce error for unnecessary if statement
but if the condition depends on a compile variable, then
the if statement is OK
2016-02-09 18:53:28 -07:00
Andrew Kelley 207862647c std: fix parse_u64 implementation and add test
also codegen implement comparision with pure errors
2016-02-09 09:51:25 -07:00
Andrew Kelley 6b3ce918db array.len generates a constant number literal expression 2016-02-07 15:52:52 -07:00
Andrew Kelley 42fe4e3cc8 remove ptr field access of arrays
use &array[0] instead
2016-02-07 15:43:19 -07:00
Andrew Kelley 36cf9f0c72 error for non const expr in array size outside fn 2016-02-07 15:16:36 -07:00
Andrew Kelley 26ea20d88f implement @const_eval
closes #73
2016-02-07 15:11:20 -07:00
Andrew Kelley 94ed9f622a blocks with one statement pass constant expression eval 2016-02-07 12:38:51 -07:00
Andrew Kelley 7f6b0ba6ea ability to explicitly cast maybe pointers to each other 2016-02-07 01:25:04 -07:00
Andrew Kelley 4174134108 unreachable return type can cast to any other return type 2016-02-07 00:23:05 -07:00
Andrew Kelley f19fa590e5 parseh understands simple string literal macros 2016-02-06 21:44:22 -07:00
Andrew Kelley c7dc56f737 add test for ?? return and add const expr eval for ? prefix op 2016-02-06 19:35:33 -07:00
Andrew Kelley 73727bd1c5 parser recognizes %return in a prefix op expression
also defer only valid at statement level now

see #110
2016-02-06 19:16:01 -07:00
Andrew Kelley 65a03c5859 implement %defer and ?defer
see #110
2016-02-06 16:36:49 -07:00
Andrew Kelley 34a7e6fdb3 codegen: return respects unconditional defer
See #110
2016-02-06 01:18:39 -07:00
Andrew Kelley ec33e5a638 simple unconditional defer support
See #110
2016-02-06 01:00:29 -07:00
Andrew Kelley 6a2ede5a6e parsing code for defer and more
* disable goto and label support see #44
 * refactor the way block contexts work
2016-02-05 23:20:34 -07:00
Andrew Kelley 4339d55562 update for loop syntax
it matches more closely the %% binary operator syntax

See #51
2016-02-05 17:15:19 -07:00
Andrew Kelley 093e0d1bb0 support variable in switch expression prongs
See #43
2016-02-04 17:21:08 -07:00
Andrew Kelley a4cba900e5 no namespace required when switching on enum
See #43
2016-02-04 16:09:06 -07:00
Andrew Kelley 5490f907fe switch statements resolve peer compatibility 2016-02-04 15:50:06 -07:00
Andrew Kelley fcbeaddbb2 codegen: fix switch expressions for enums with payloads 2016-02-04 15:26:27 -07:00
Andrew Kelley 25e74cb385 ability to explicitly cast bool to int 2016-02-04 12:59:06 -07:00
Andrew Kelley 32642ac9cb for loop supports break and continue
See #51
2016-02-04 02:49:12 -07:00
Andrew Kelley fdadab40c6 implement constant values for enums with payload 2016-02-04 02:11:50 -07:00
Andrew Kelley 1f9734d1ee allow defining errors with the same name
they get the same value, too.
2016-02-04 00:58:45 -07:00
Andrew Kelley 2521afef69 add ability to call function pointer field
also introduce the self hosted tests

closes #108
2016-02-03 21:34:09 -07:00
Andrew Kelley b28f7d0808 types sized and aligned with LLVM target data layout API 2016-02-03 02:01:42 -07:00
Andrew Kelley b04e64d300 add @compile_var builtin and "is_big_endian" compile var 2016-02-02 21:46:53 -07:00
Andrew Kelley a50474e7cf fix false positive error with same named methods in incomplete struct 2016-02-02 20:06:51 -07:00
Andrew Kelley d3de73739f fix various semantic analyzer crashes 2016-02-02 19:35:02 -07:00
Andrew Kelley 8058b5e0a9 fix crash when incomplete struct used as argument
closes #107
2016-02-02 19:09:53 -07:00
Andrew Kelley 79adf55699 fx segfault with colliding bogus top level functions 2016-02-02 15:58:13 -07:00
Andrew Kelley 0216293430 add test for var local eval const expr
closes #53
2016-02-01 20:54:48 -07:00
Andrew Kelley 06f6acb4b1 inline is a keyword instead of a directive 2016-02-01 17:25:38 -07:00
Andrew Kelley 179443bd61 add ?? prefix operator 2016-02-01 02:11:46 -07:00
Andrew Kelley b3459f64e7 parseh understands macros which alias global fn ptr vars 2016-02-01 02:00:25 -07:00
Andrew Kelley 6b2e29c6ac parseh: do not create macro alias for extern vars 2016-02-01 00:01:30 -07:00
Andrew Kelley 2e092e08f4 fix invalid const expr eval for negative floats 2016-01-31 21:50:41 -07:00
Andrew Kelley a4e19f94f1 support casting between floats 2016-01-31 21:22:05 -07:00
Andrew Kelley e74a7264ad support casting between int and float types 2016-01-31 21:05:17 -07:00
Andrew Kelley 954afe5d9a fix C interaction with maybe function pointers
See #88
2016-01-31 20:15:47 -07:00
Andrew Kelley 41b95cc237 parseh: correct debug for forward decls
also C typedefs emit simply `const Foo = Bar;`
since in C you can implicitly cast from a typedef
child to parent but in zig you can't.
2016-01-31 17:48:19 -07:00
Andrew Kelley 1053172854 parseh handles typedef void better
and introduce c_long_double type
2016-01-31 15:44:02 -07:00
Andrew Kelley c77637d172 parseh understands forward struct definitions
See #88
2016-01-31 14:54:28 -07:00
Andrew Kelley c1640a9246 parseh: use the decayed type not original type 2016-01-31 13:20:44 -07:00
Andrew Kelley 3c2093fec6 parseh understands types better and handles some situations better
See #88

Also, includes partial implementation of typedef top level declaration.
See #95

Also, fix function types. Previously the way we were deduping function type
pointers was incorrect.
2016-01-31 01:20:47 -07:00
Andrew Kelley e4b0435946 parseh understands variable declarations
and some initializers such as integers
2016-01-29 16:06:17 -07:00
Andrew Kelley a94ad9e89c parseh defines can reference other defines 2016-01-29 02:17:51 -07:00
Andrew Kelley c1691afdd9 parseh understands number literal defines 2016-01-29 01:31:40 -07:00
Andrew Kelley 9b2ed1fac5 parseh understands simple character literal macro 2016-01-29 00:28:52 -07:00
Andrew Kelley 53c14da220 parseh understands bodyless struct used in fn 2016-01-28 21:53:46 -07:00
Andrew Kelley c3516b8004 parseh handles self referential structs and fn pointers 2016-01-28 21:38:01 -07:00
Andrew Kelley a5c2de5fee ability to specify function type
closes #14
2016-01-28 20:26:40 -07:00
Andrew Kelley 2bb2e61ee2 parser: allow missing fn name and missing param names
now these problems are caught in analyzer

this is for purpose of function type, see #14
2016-01-28 18:58:28 -07:00
Andrew Kelley ff028525e5 add test for calling the result of if-else expr
See #14
2016-01-28 17:49:40 -07:00
Andrew Kelley d0a1901cb0 fix function calling of pointers
See #14
2016-01-28 17:42:29 -07:00
Andrew Kelley 974d69ea3d ability to call member functions directly
see #14
2016-01-28 16:55:54 -07:00
Andrew Kelley bb4f783528 ability to refer to member function directly
See #14
2016-01-28 16:45:17 -07:00
Andrew Kelley 13220ccb51 parsh understands constant sized arrays 2016-01-28 16:09:06 -07:00
Andrew Kelley ed3117a77f parseh understands elaborated structs and enums 2016-01-28 15:41:12 -07:00
Andrew Kelley 47c3a30310 parseh understands simple structs 2016-01-28 14:49:34 -07:00
Andrew Kelley a09b505558 null pointer optimization for ?&T
this is necessary for the parseh change where all
pointers from .h files are maybe pointers.
2016-01-28 14:04:22 -07:00
Andrew Kelley 347866f3a7 add parseh test for multiple fn prototypes 2016-01-28 11:59:21 -07:00
Andrew Kelley 6f85b956de add restrict -> noalias parseh test 2016-01-28 11:57:11 -07:00
Andrew Kelley f1c5d3d3a1 add parseh tests 2016-01-28 11:54:34 -07:00
Andrew Kelley 97c61313da c_import of stdio.h works for some functions
See #88
2016-01-27 23:23:02 -07:00
MovingtoMars 1a913f6bf2 simple malloc and free using mmap 2016-01-28 12:39:02 +13:00
Andrew Kelley b508441859 fix `%%` prefix operator codegen for simple values
closes #93
2016-01-27 14:49:48 -07:00
Andrew Kelley 0a26586724 fix comparing incompatible number literals crash
closes #94
2016-01-27 14:33:31 -07:00
Andrew Kelley 707154da36 fix codegen for pointers to void 2016-01-27 14:18:20 -07:00
Andrew Kelley 261517aa44 add explicit cast from isize/usize to pointer
closes #91
2016-01-27 12:43:03 -07:00
Andrew Kelley d27b76fc31 add error for `@typeof` or `&` of number literal
closes #85
2016-01-27 12:28:05 -07:00
Andrew Kelley fe0c6a3df9 fix crash when compiling empty file
closes #90
2016-01-27 12:09:36 -07:00
Andrew Kelley 0278468479 upgrade to the libclang C++ API
c_import creates a tmp .h file and parses it with libclang,
reporting any errors found.

See #88
2016-01-27 00:01:49 -07:00
Andrew Kelley 5afe473a86 different extern syntax and simplify parsing top level decls 2016-01-26 13:08:21 -07:00
Andrew Kelley 4e43973413 variable initializations are now mandatory
use `undefined` if you want uninitialized memory
2016-01-25 23:56:46 -07:00
Andrew Kelley b215a3e0b6 add constant expression evaluation for negation 2016-01-25 23:44:16 -07:00
Andrew Kelley a37bb4a4da add the C integer types 2016-01-25 23:21:13 -07:00
Andrew Kelley a3e288ab5b implement compile time string concatenation
See #76
2016-01-25 21:56:29 -07:00
Andrew Kelley 1d68150242 compiler enforces checking for error
See #23
2016-01-25 20:27:57 -07:00
Andrew Kelley 50854226a6 syntax: back to -> for return type, no more => 2016-01-25 17:08:18 -07:00
Andrew Kelley 4b9e1dd438 fix tests and add %% operator test 2016-01-25 14:04:29 -07:00
Andrew Kelley bcb18338cd update std lib to use error type and global variables 2016-01-24 22:53:00 -07:00
Andrew Kelley f5cc7f65a3 fix parameter access of sret functions 2016-01-24 19:27:12 -07:00