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