Andrew Kelley
0919ea0afd
ability to set global variable alignment and ...
...
..section in the initialization expression
2017-02-04 10:22:07 -05:00
Andrew Kelley
67b02326f8
preserve names of exported variables
2017-02-03 16:27:24 -05:00
Andrew Kelley
d3f1889951
in freestanding environment, assume gnu binutils
...
for now. soon LLD will free us from depending on
system linkers.
2017-02-03 15:53:23 -05:00
Andrew Kelley
5a86c04996
add volatileStore() builtin function
...
See #238
We can revisit how volatile will work later - for now
here's a builtin function to do it.
2017-02-03 15:14:18 -05:00
Andrew Kelley
8c9016b6d1
add setGlobalAlign and setGlobalSection builtin functions
...
closes #241
2017-02-03 13:56:56 -05:00
Andrew Kelley
3be4b6434c
add ability to set linker script
2017-02-03 12:34:20 -05:00
Andrew Kelley
e00eec1c29
typedefs work for binary math operations
2017-02-03 12:09:13 -05:00
Andrew Kelley
aae168550f
exported global variables get emitted as external in LLVM
2017-02-03 11:59:56 -05:00
Andrew Kelley
71d335e5cc
implement packed structs
...
closes #183
2017-02-03 11:39:24 -05:00
Andrew Kelley
cd7713b178
make --target-os freestanding work
2017-02-02 23:14:08 -05:00
Andrew Kelley
0cf0739b0a
update outdated comment
2017-02-02 17:18:36 -05:00
Andrew Kelley
c0b37e8514
add try expression
...
See #83
2017-02-02 17:09:27 -05:00
Andrew Kelley
8b1c6d8b76
fix ability to call method on variable at compile time
2017-02-02 15:03:21 -05:00
Andrew Kelley
2b88441295
fix behavior when initializing struct with undefined
2017-02-02 14:55:01 -05:00
Andrew Kelley
b78c91951a
remove ability to mark if and switch as inline
...
if and switch are implicitly inline if the condition/target
expression is known at compile time.
instead of:
```
inline if (condition) ...
inline switch (target) ...
```
one can use:
```
if (comptime condition) ...
switch (comptime target) ...
```
2017-02-02 13:23:18 -05:00
Andrew Kelley
cd08c1f3be
prefix op maybe and error are for types only
2017-02-02 12:21:11 -05:00
Andrew Kelley
d13cec6894
fix var args allocating wrong amount of memory in compiler
2017-01-31 16:04:26 -05:00
Andrew Kelley
88a253c64d
fix crash when passing void to var args function
...
closes #235
2017-01-31 15:50:38 -05:00
Andrew Kelley
b258fdb532
add integer literal to pointer explicit cast
...
closes #227
2017-01-31 13:38:04 -05:00
Andrew Kelley
d8da34c64c
fix crash when assigning too large value to integer
...
closes #228
2017-01-31 02:30:10 -05:00
Andrew Kelley
d2b94afaf2
fix compile time initialization of array with undefined
2017-01-29 23:35:34 -05:00
Andrew Kelley
3caf6bacdc
fix sometimes using wrong outer scope for generating defers
2017-01-29 21:57:49 -05:00
Andrew Kelley
c75e58ffe6
fix behavior for comptime and runtime basic block phi
2017-01-29 19:10:56 -05:00
Andrew Kelley
e0a422ae7e
fix runtime branching tricking the comptime evaluation
...
closes #167
2017-01-26 15:34:36 -05:00
Andrew Kelley
4b3f18de3c
printf var args proof of concept
...
See #167
Need to troubleshoot when we send 2 slices to printf. It goes
into an infinite loop.
This commit introduces 4 builtin functions:
* `@isInteger`
* `@isFloat`
* `@canImplictCast`
* `@typeName`
2017-01-24 02:02:48 -05:00
Andrew Kelley
32d8686da8
various fixes
...
* comptime expression is a block expression as it should be
* fix var args when number of args passed is 0
* implement const value equality for structs
* fix indent when rendering container decl AST
* IR: prevent duplicate generation of code when it is partially
compile-time evaluated
* implement compile time struct field pointer evaluation
* fix compile time evaluation of slicing
2017-01-23 23:30:20 -05:00
Andrew Kelley
17cb85dfb8
basic support for functions with variable length arguments
...
See #77
2017-01-23 16:40:17 -05:00
Andrew Kelley
e5b1758010
remove staticEval builtin in favor of comptime expression
2017-01-22 23:21:00 -05:00
Andrew Kelley
201a3c121a
introduce comptime expression
...
closes #221
2017-01-22 22:59:52 -05:00
Andrew Kelley
47cf8520ad
use comptime instead of inline for var and params
...
See #221
2017-01-22 19:51:37 -05:00
Andrew Kelley
6a5e61acd1
get rid of zeroes literal
...
closes #222
2017-01-16 17:24:13 -05:00
Andrew Kelley
0caee421e3
ability to equality compare with null
...
closes #106
2017-01-16 16:39:31 -05:00
Andrew Kelley
867686af42
equality comparison of void types is known at compile time
...
closes #56
2017-01-16 16:07:03 -05:00
Andrew Kelley
fdbc2d8da1
implement error when assigning to field of const struct
...
closes #48
2017-01-16 15:24:03 -05:00
Andrew Kelley
4cbeb87e83
fix handling of const values for 2d arrays
2017-01-16 12:42:46 -05:00
Andrew Kelley
c7591736b4
fix array of enums. also render debug info for const vars
2017-01-16 01:44:47 -05:00
Andrew Kelley
3752e0c290
fix get_maybe_type not ensuring complete child type
2017-01-15 23:36:14 -05:00
Andrew Kelley
d0b59f20ab
fix llvm assertion failure for zero bits structs
2017-01-15 23:27:14 -05:00
Andrew Kelley
0b6cf0aa63
fix handling of invalid enumeration
2017-01-15 22:34:20 -05:00
Andrew Kelley
8106f9846a
fix enum codegen and implement comptime switch var on enums
2017-01-15 22:16:39 -05:00
Andrew Kelley
0c1800a9c9
fix some stuff when llvm has assertions on
2017-01-13 17:33:19 -05:00
Andrew Kelley
83f1a6fae2
fix some bugs with structs
2017-01-13 16:24:13 -05:00
Andrew Kelley
652bfab3d0
fix crash when casting fn call arg
2017-01-12 18:10:18 -05:00
Andrew Kelley
c793c534b8
fix use decl regression
2017-01-12 18:10:05 -05:00
Andrew Kelley
18f248b94d
IR: fix array concatenation
...
all tests passing
2017-01-12 15:10:58 -05:00
Andrew Kelley
d784705353
IR: implement macro for function aliasing function pointer
2017-01-12 03:15:06 -05:00
Andrew Kelley
76b1cbc2ea
pass some parseh tests
2017-01-11 22:25:17 -05:00
Andrew Kelley
25a670d74e
pass more tests
2017-01-11 19:09:17 -05:00
Andrew Kelley
fc53708dc0
better error message for unable to eval const expr
2017-01-11 18:06:21 -05:00
Andrew Kelley
7493af5953
fix a few tests
2017-01-11 00:38:24 -05:00
Andrew Kelley
fde276a3bf
IR: implement error for missing or extra switch prongs
2017-01-10 16:28:49 -05:00
Andrew Kelley
430e33b869
partially fix parseh command
2017-01-10 15:39:52 -05:00
Andrew Kelley
8d27a02705
pass division by zero test
2017-01-08 22:35:31 -05:00
Andrew Kelley
6caf32195a
pass unnecessary if statement test
2017-01-08 22:25:38 -05:00
Andrew Kelley
76d0e49e61
fix unable to eval const expr test case
2017-01-08 10:54:05 -05:00
Andrew Kelley
3ef447fa20
don't try to eval extern functions at compile time
2017-01-08 10:30:05 -05:00
Andrew Kelley
090ff05054
add compile error for initializing struct with non struct type
2017-01-07 14:24:08 -05:00
Andrew Kelley
cf62f02ba9
don't mark call instruction as generated
...
pass cast unreachable test
2017-01-06 02:04:27 -05:00
Andrew Kelley
23feafdef0
pass more tests
...
by removing assertion, fixing error column,
and updating expected message
2017-01-05 19:25:36 -05:00
Andrew Kelley
28403eaad0
pass more tests by updating expected error messages
2017-01-05 19:20:31 -05:00
Andrew Kelley
837cc467f7
pass array access compile error tests
2017-01-05 19:05:48 -05:00
Andrew Kelley
e621ad014e
pass cannot assign to constant test
2017-01-05 18:50:36 -05:00
Andrew Kelley
438feebbcf
pass undeclared identifier test
2017-01-05 04:01:11 -05:00
Andrew Kelley
9d94c2ccd0
fix mul and sub overflow ops being rendered as addition
2017-01-05 03:29:50 -05:00
Andrew Kelley
349cd79fe4
containers created during eval get names for parameters
2017-01-05 03:22:00 -05:00
Andrew Kelley
6ec6589bd8
IR: pass MT19937_64 test
2017-01-05 00:59:37 -05:00
Andrew Kelley
c32a060d4f
IR: add unreachable code compiler error
2017-01-04 23:21:33 -05:00
Andrew Kelley
664b41af65
fix debug information for function pointers in structs
2017-01-04 01:56:21 -05:00
Andrew Kelley
dbb1018ca6
IR: std library passes codegen
2016-12-31 19:48:17 -05:00
Andrew Kelley
ff5120c584
IR: std makes it to codegen
2016-12-31 18:25:10 -05:00
Andrew Kelley
69132bdeda
IR: progress toward compiling standard library
...
* comptime fn call
* is_comptime doesn't count as an instruction dependency
* update more std code to latest zig
2016-12-31 17:10:29 -05:00
Andrew Kelley
5f89393acb
IR: implement binary not instruction
2016-12-31 02:23:39 -05:00
Andrew Kelley
2ccdaee101
IR: add error for goto jumping over variable declaration
2016-12-31 01:58:37 -05:00
Andrew Kelley
76fa6cdce3
eradicate use of zeroes in std
2016-12-31 01:31:23 -05:00
Andrew Kelley
29bb175f4f
IR: handle phi instruction with 0 resulting incoming values
2016-12-30 18:47:54 -05:00
Andrew Kelley
6bbee194b9
IR: better basic block dependency detection
2016-12-30 18:34:05 -05:00
Andrew Kelley
a9acc8cb45
IR: error for returning from defer expression
...
also fix peer type resolution for pure error mixed with error union
2016-12-28 03:47:02 -05:00
Andrew Kelley
94f977a6c1
IR: pass genericFnWithImplicitCast test
2016-12-28 01:35:13 -05:00
Andrew Kelley
f6ac2fa70e
IR: pass pointerToVoidReturnType test
2016-12-28 01:31:46 -05:00
Andrew Kelley
25a5fc32fe
IR: pass passSliceOfEmptyStructToFn test
2016-12-28 01:15:09 -05:00
Andrew Kelley
15f843e70f
IR: pass castSliceToU8Slice test
2016-12-26 17:11:36 -05:00
Andrew Kelley
66a83d8738
IR: pass intToEnum test
2016-12-26 16:34:18 -05:00
Andrew Kelley
c8a7ab7eff
IR: pass cStringConcatenation test
2016-12-26 16:04:14 -05:00
Andrew Kelley
735cdbfdac
IR: pass intToPtrCast test
2016-12-26 15:45:50 -05:00
Andrew Kelley
73a751911e
IR: pass staticEvalListInit test
2016-12-26 03:16:19 -05:00
Andrew Kelley
3ef6663b72
IR: pass genericMallocFree test
2016-12-26 03:02:20 -05:00
Andrew Kelley
110a6f39ca
IR: pass explicitCastMaybePointers test
2016-12-26 02:53:42 -05:00
Andrew Kelley
4664f793dc
IR: pass enumToInt test
2016-12-26 02:36:04 -05:00
Andrew Kelley
f47dea2a2e
IR: support compile time global pointer reinterpret
...
this required moving the place we store types to ConstExprValue
2016-12-25 04:15:23 -05:00
Andrew Kelley
6f91fb4c37
IR: support const ref
2016-12-22 10:39:10 -05:00
Andrew Kelley
ba8af0f1e2
IR: fix missing implicit casts in init expressions
...
and implement runtime struct init instruction
2016-12-22 09:35:07 -05:00
Andrew Kelley
3e25ff65c3
IR: fix switch enum variable for void enum field
2016-12-22 08:05:37 -05:00
Andrew Kelley
5fc95c2a53
IR: port some tests
2016-12-22 00:55:21 -05:00
Andrew Kelley
46033a2128
pass void parameters test
2016-12-22 00:46:17 -05:00
Andrew Kelley
d544672ed4
IR: fix compile time evaluation of else prong in switch
2016-12-21 23:48:02 -05:00
Andrew Kelley
43be6ccb03
IR: fix phi instruction when one of the predecessors is unreachable
2016-12-21 23:04:04 -05:00
Andrew Kelley
b4c2f7e310
get_error_type calls ensure_complete_type on child
2016-12-21 22:42:58 -05:00
Andrew Kelley
9b61682037
IR: implement runtime enum init and switch on enum with variable
2016-12-21 21:49:05 -05:00
Andrew Kelley
1f6dacbb2f
IR: enum init support
2016-12-20 01:50:32 -05:00
Andrew Kelley
c10ae8622b
IR: fix lazy eval of enum field access
2016-12-19 21:06:55 -05:00
Andrew Kelley
3ea4f264ff
IR: update all error messages to be useful if generic instantiation
2016-12-19 19:54:51 -05:00
Andrew Kelley
2419f0c914
IR: support maybe defers
2016-12-19 17:25:09 -05:00
Andrew Kelley
09d50e35a4
IR: support error defers
2016-12-19 16:45:15 -05:00
Andrew Kelley
6b2d06710c
IR: start a new passing self hosted test suite
2016-12-19 00:41:37 -05:00
Andrew Kelley
09c34352f8
IR: if and switch guaranteed compile time if target expr is
2016-12-19 00:04:51 -05:00
Andrew Kelley
956ff8a7f9
better error message generic instantiations
2016-12-18 21:15:40 -05:00
Andrew Kelley
132e2fa5d9
errors from inline fn calls include stack trace
2016-12-18 20:52:40 -05:00
Andrew Kelley
cfc9f7422f
IR: add MaybeOkOr instruction
2016-12-18 20:22:28 -05:00
Andrew Kelley
82101198f1
workaround for Arch being a primitive type
2016-12-18 20:09:34 -05:00
Andrew Kelley
a71fbe49cb
IR: add FnProto instruction
2016-12-18 19:40:26 -05:00
Andrew Kelley
f12fbce0f5
IR: memoize compile-time evaluated fn invocations
2016-12-18 18:23:46 -05:00
Andrew Kelley
4816121e00
remove duplicate definition of container_string
2016-12-18 17:53:12 -05:00
Andrew Kelley
ba008fb9d7
IR: ability to return a container from a function
2016-12-18 17:50:47 -05:00
Andrew Kelley
37b13bf151
hello.zig working with all structs anonymous
2016-12-18 17:24:52 -05:00
Andrew Kelley
e50ced44a2
IR: all structs anonymous
2016-12-18 16:56:50 -05:00
Andrew Kelley
2e6aa6d813
IR: fix codegen of ref instruction
2016-12-18 13:55:34 -05:00
Andrew Kelley
a76b048354
IR: phi instruction handles unreachable values correctly
2016-12-18 13:37:50 -05:00
Andrew Kelley
b59841a80f
IR: fix err variable in ErrOkOr instruction
2016-12-18 13:20:19 -05:00
Andrew Kelley
0cdfd5c141
IR: fix container field access via container pointer
2016-12-18 02:13:07 -05:00
Andrew Kelley
0d2f2b79ea
IR: basic support for implicit casting to const pointer
2016-12-18 01:54:27 -05:00
Andrew Kelley
69cf0ea568
IR: fix type of decls accessed via namespace
2016-12-18 00:53:29 -05:00
Andrew Kelley
3e4194bf9e
IR: add runime negation
2016-12-18 00:36:11 -05:00
Andrew Kelley
83a668b9ca
IR: unreachable has lowest priority when resolving peer types
2016-12-18 00:25:07 -05:00
Andrew Kelley
9f08bfb38d
IR: make generic function type have zero_bits flag
2016-12-18 00:24:39 -05:00
Andrew Kelley
85b6d14637
IR: support var type args and fix phi peer type resolution
2016-12-18 00:09:43 -05:00
Andrew Kelley
e73faf9a9e
IR: allow undefined compile time values sometimes
2016-12-17 22:13:15 -05:00
Andrew Kelley
d245fabb80
IR: consolidate Ref and PrefixOpAddressOf instructions
2016-12-17 22:00:55 -05:00
Andrew Kelley
0f047337ac
IR: fix this
expression
...
Previously it returned a block instead of a function when
a function had any arguments.
2016-12-17 20:47:35 -05:00
Andrew Kelley
a07d7ee53d
IR: fix compile time switch eval for enums
2016-12-17 17:57:26 -05:00
Andrew Kelley
c64f9991d5
IR: fix switching on enum
2016-12-17 17:48:07 -05:00
Andrew Kelley
12fcbecbf8
IR: add more instructions
...
* MaybeWrap
* TestErr
* UnwrapErrCode
* UnwrapErrPayload
* ErrUnionTypeChild
* ErrWrapCode
* ErrWrapPayload
2016-12-17 16:16:17 -05:00
Andrew Kelley
3a3cc7bf76
IR: panic with a TODO instead of generating invalid code
...
for returning from a function without running maybe and error defers
2016-12-14 15:43:24 -05:00
Andrew Kelley
cca49b84b6
fix external function calls
2016-12-14 15:24:00 -05:00
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
8bb5f54b29
IR: implement character literal
2016-12-13 01:58:36 -05:00
Andrew Kelley
a6d2bdf605
IR: implement breakpoint builtin
2016-12-13 01:48:40 -05:00
Andrew Kelley
76a849b1f2
IR: implement memberCount builtin
2016-12-12 01:59:55 -05:00
Andrew Kelley
ef63bc9cca
IR: implement memcpy, memset, and slice expression
2016-12-12 00:31:35 -05:00
Andrew Kelley
fb21570630
IR: implement alloca builtin
2016-12-11 19:43:06 -05:00
Andrew Kelley
a963fba246
IR: implement compile time array concatenation
2016-12-11 18:43:52 -05:00
Andrew Kelley
df0cdceff7
IR: implement compile time array multiplication
2016-12-11 17:17:00 -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
10cea15cc3
IR: implement embedFile builtin
2016-12-11 00:43:23 -05:00
Andrew Kelley
2dd85d52cc
IR: fix implementation of parseh
...
libc hello world works now
2016-12-11 00:13:43 -05:00
Andrew Kelley
3cfbec3eef
IR: don't crash if number literal used with pure error
2016-12-10 18:43:28 -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
0ab953acb2
IR: better array len instruction
...
reference the "len" field directly instead of looking it up by
name since we already know exactly where the field metadata is
2016-12-08 02:15:48 -05:00
Andrew Kelley
d4a93dbac5
IR: omit debug safety checks in for loop codegen
2016-12-08 02:09:26 -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
a148096e6a
IR: add compileError builtin fn
2016-12-07 11:29:44 -05:00
Andrew Kelley
0ad580f001
IR: add minValue, maxValue, and negation
2016-12-07 01:23:38 -05:00
Andrew Kelley
5e4ee659a6
delete unused builtin function stuff
2016-12-07 00:35:39 -05:00
Andrew Kelley
c0b2fe4d6c
IR: add error for assigning runtime value to inline var
2016-12-07 00:22:14 -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
0c531d447d
remove the boolean argument from setFnTest
2016-12-05 21:39:15 -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
363606d87b
IR: inline function evaluation works on generic functions
2016-12-05 01:08:17 -05:00
Andrew Kelley
25a89e7a36
IR: compile time function evaluation
2016-12-04 23:52:43 -05:00
Andrew Kelley
9f23475b17
add missing copyright notices
2016-12-04 21:06:13 -05:00
Andrew Kelley
2f259b8176
IR: re-organize where state goes to prepare for generics
...
* Rip out legacy code for generics
* put scope in instruction instead of AST nodes
* separate top level decl stuff from AST nodes
- remove the assumption that there is a 1:1 correspondence
between an output instruction and an AST node
- This way we won't have to clone AST nodes for generics.
2016-12-04 03:40:40 -05:00
Andrew Kelley
f6cbb73c74
rewrite scope implementation
...
* now there are not extra unused hash tables
* each variable declaration opens a new scope inside a function
2016-12-01 21:08:12 -05:00
Andrew Kelley
c6ace9720c
rename BlockContext to Scope
2016-12-01 13:55:56 -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
9e7c475979
IR: silence irrelevant function prototype errors
2016-11-27 01:45:29 -05:00
Andrew Kelley
e5325c7ef3
IR: fix not checking for error in unary bool not
2016-11-27 01:31:09 -05:00
Andrew Kelley
d9329ed389
IR: add ref instruction
2016-11-27 01:22:30 -05:00
Andrew Kelley
bd4d4ee51e
IR: detect error for exceeding branch quota
2016-11-27 00:14:19 -05:00
Andrew Kelley
1fba7f3696
IR: add inline goto
2016-11-26 23:33:07 -05:00
Andrew Kelley
b3ff28189c
IR: fix crash when duplicate label error
2016-11-26 23:24:43 -05:00
Andrew Kelley
a52ede6494
IR: support goto and labels
2016-11-26 23:16:38 -05:00
Andrew Kelley
a3db60b5d7
IR: fix parsing while loop
2016-11-26 21:16:36 -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
24b65e41ee
IR: add error for non static const on switch case range
2016-11-26 04:37:34 -05:00
Andrew Kelley
697c768730
IR: support switch with range
2016-11-26 04:03:39 -05:00
Andrew Kelley
bbf785bc1d
IR: switch expression works with numbers
2016-11-26 00:25:48 -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
052cd44588
IR: fix codegen for arrays
2016-11-21 15:01:21 -05:00
Andrew Kelley
e80e8a8099
IR: fix detection of invalid codegen
2016-11-21 13:53:08 -05:00
Andrew Kelley
67d565136a
IR: implement ctz and clz builtins
2016-11-21 13:27:44 -05:00
Andrew Kelley
71d95c6597
IR: support unwrap maybe operation
2016-11-21 03:08:24 -05:00
Andrew Kelley
b47e2fa060
IR: support sizeOf builtin
2016-11-20 02:11:36 -05:00
Andrew Kelley
6c8b919d17
IR: implement ir_print for maybe type
2016-11-19 01:56:48 -05:00
Andrew Kelley
2f8dd46174
IR: error for uncasted null lit variable
2016-11-19 01:53:14 -05:00
Andrew Kelley
8a81f8aa13
IR: implement compileVar builtin and more
...
* implicit array to slice cast
* fix if statements at global scope
* implement array type IR
2016-11-19 01:39:51 -05:00
Andrew Kelley
19037014e5
IR: more maybe type support
2016-11-18 23:52:42 -05:00
Andrew Kelley
31565efe9d
IR: fix decl references pointerness
2016-11-18 22:44:59 -05:00
Andrew Kelley
d94cb0566b
IR: correctly codegening memset and memcpy
2016-11-18 22:24:41 -05:00
Andrew Kelley
bf7cde62c5
IR: support setDebugSafety builtin function
2016-11-18 20:57:27 -05:00
Andrew Kelley
ed31ae8867
IR: inline assembly working
2016-11-18 02:07:40 -05:00
Andrew Kelley
c3b603fdf9
remove AST cloning code and add AST render for while loops
2016-11-17 21:17:58 -05:00
Andrew Kelley
7a2a0672b4
IR: pointers to constants use correct addresses
2016-11-17 21:07:29 -05:00
Andrew Kelley
62d0d88b56
IR: pointers to constants don't copy data
2016-11-17 04:00:02 -05:00
Andrew Kelley
a55555c99e
remove superseded eval code
2016-11-17 00:44:14 -05:00
Andrew Kelley
8d1c6138f9
IR: implement pointer dereferencing (even at compile time)
2016-11-15 01:48:36 -05:00
Andrew Kelley
af4d4c882a
IR: implement compile time array access
2016-11-14 21:01:48 -05:00
Andrew Kelley
2edc6c1a3f
IR: add assembly instruction
2016-11-13 21:07:30 -05:00
Andrew Kelley
04c047463b
IR: fix hang for unreachable functions
2016-11-13 16:02:18 -05:00
Andrew Kelley
e2fd3b2b1b
IR: fix prefix op eval setting wrong type
2016-11-13 13:42:04 -05:00
Andrew Kelley
d4f2394dcf
IR handles global variables correctly
2016-11-13 01:56:28 -05:00
Andrew Kelley
a5c9da0de2
IR: gen string literal
2016-11-10 00:41:17 -05:00
Andrew Kelley
9d19b8d66e
IR: move unused codegen code to commented out in bottom of ir.cpp
2016-11-09 23:21:02 -05:00
Andrew Kelley
b8379b4c5b
IR: support pointer types
2016-11-07 19:37:34 -05:00
Andrew Kelley
05de70017d
IR: support slice types
2016-11-07 18:58:01 -05:00
Andrew Kelley
a2e3293930
WIP moving all analysis to IR
2016-11-04 15:36:30 -04:00
Andrew Kelley
bc6c33b1b6
IR: support this literal and bool literal
2016-11-03 14:26:21 -04:00
Andrew Kelley
c8333d0cc9
add concept of inline for, inline while, inline var
2016-11-03 14:13:57 -04:00
Andrew Kelley
1a0111d4c3
*WIP*
2016-10-30 02:46:16 -04:00
Andrew Kelley
56cdaff9e7
ir: support return expression
2016-10-29 19:24:59 -04:00
Andrew Kelley
afc5507b64
ir: ability to modify global vars
2016-10-29 19:14:48 -04:00
Andrew Kelley
8e2804efa1
IR: ability to assign to an array at runtime
2016-10-28 02:32:36 -04:00
Andrew Kelley
114049a220
IR analysis unrolls a complicated loop
2016-10-27 03:28:29 -04:00
Andrew Kelley
78e6314422
IR: phi instruction works at compile time
2016-10-27 01:52:06 -04:00
Andrew Kelley
bfcd6648e7
IR can inline loops
2016-10-27 01:08:06 -04:00
Andrew Kelley
44d6f8ffd8
IR supports variable assignment
2016-10-23 01:33:23 -04:00
Andrew Kelley
d7a2b05a81
IR: introduce concept of lvalues
2016-10-23 00:21:29 -04:00
Andrew Kelley
a9a6f77a1f
add variable declaration initialization IR
2016-10-20 01:13:39 -04:00
Andrew Kelley
682511d1b2
add variable declaration IR
2016-10-18 03:00:48 -04:00
Andrew Kelley
ac6d1674e3
IR working for if statements
2016-10-16 02:19:01 -04:00
Andrew Kelley
ce3c52471d
IR if statements WIP
2016-10-11 23:45:33 -04:00
Andrew Kelley
77ae3442ef
explicit casting works with IR
2016-10-09 02:20:01 -04:00
Andrew Kelley
07fe60ded1
IR in 2 passes
2016-10-06 01:09:01 -04:00
Andrew Kelley
cd1bd78aa9
simple add function works with IR
2016-10-02 23:48:48 -04:00
Andrew Kelley
633781e31d
empty function compiles successfully with IR
2016-09-30 20:12:00 -04:00
Andrew Kelley
4e2fa2d15b
*WIP*
2016-09-30 02:21:21 -04:00
Andrew Kelley
0562111b02
fix regression: debug safety sometimes incorrectly disabled
2016-09-28 11:29:47 -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
183976b242
add this keyword refers to thing in immediate scope
...
See #169
2016-09-26 23:47:30 -04:00
Andrew Kelley
87b7c28c9a
cstr.len and cstr.cmp can run at compile time
...
closes #140
2016-09-26 22:33:33 -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
01e13de7ca
refactor field access code into more generic container code
2016-09-26 00:06:37 -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
4b902b44a2
os: fix file descriptor leak in os_exec
...
See #182
2016-09-22 10:48:42 -04:00
Andrew Kelley
c64f6f9503
fix compile crash when leaving out for loop parameter
2016-09-22 10:40:05 -04:00
Andrew Kelley
7aeca9bfed
fix incorrect linking from previous commit
2016-09-21 17:40:50 -04:00
Andrew Kelley
3f8f0b9bba
exporting an object creates an h file
2016-09-21 11:18:49 -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
158225a203
avoid emitting "no member" errors when use import fails
...
closes #192
2016-09-19 21:23:36 -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
4c0259b107
ability to specify -framework linker args for MacOS
2016-09-18 21:28:06 -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
6abd8b6405
fix crash with []type{} expression
2016-09-13 15:35:56 -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
1fa4d2a5af
rename LLVMZig to ZigLLVM
2016-09-10 20:53:57 -04:00
Andrew Kelley
9e92dbdd08
std: use parameter type inference on min and max functions
2016-09-10 20:53:57 -04:00
Constantine Tarasenkov
1cf75db907
Fix for C pointer generator
2016-09-09 23:44:24 +03:00
Andrew Kelley
d324b1befa
ability to infer parameter types
2016-09-08 00:24:48 -04:00
Andrew Kelley
1a1991371a
build: add missing static in tokenizer
2016-09-06 10:58:42 -04:00
Andrew Kelley
9dc9e5bfb0
build: fix warning on gcc 6.2
2016-09-06 10:45:40 -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
768a9780ca
rename compileErr builtin to compileError
2016-09-05 17:01:54 -04:00
Andrew Kelley
4979e606c3
fix gcc 5.4.0compile errors
2016-09-05 16:18:49 -04:00
Andrew Kelley
20eb749ad6
generate debug info for global constants
...
See #41
2016-09-04 22:32:23 -07:00
Andrew Kelley
4e7effd3d3
port to llvm 3.9
2016-09-04 18:30:40 -07:00
Andrew Kelley
f18e34c2c6
restore shared library functionality
2016-09-01 11:05:36 -07:00
Andrew Kelley
d44ca5baac
tokenizer: add missing return statement on float overflow
...
closes #177
2016-08-29 22:20:12 -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
ed50bd1b65
progress toward stack trace printing
2016-08-17 20:11:04 -07:00
Andrew Kelley
0fbb9e09ea
fix crash when calling method on slice
2016-08-16 23:24:33 -07:00
Andrew Kelley
37d167f6e0
std: conform to style guidelines
2016-08-16 22:42:50 -07:00
Andrew Kelley
0ae9023832
add CBuf to standard library
...
and fix ability to take address of variables
from other namespaces
2016-08-11 22:25:13 -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
425c0ffa01
rename NodeTypeStructDecl to NodeTypeContainerDecl
2016-07-17 16:30:41 -07:00
Andrew Kelley
3971bf3d72
fix not resolving use declarations
...
causing bogus compile errors
2016-07-13 18:22:49 -07:00
Andrew Kelley
f2fc9b8a7b
fix duplicate type defined when imported from parseh
2016-07-09 15:48:25 -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
100e8e15fa
fix tokenizing string symbols with hex characters in them
2016-07-09 07:54:55 -07:00
Andrew Kelley
b08bc84a36
don't add no-frame-pointer-elim for inline functions
...
and make syscall functions inline
this gets the tests all passing on i386
2016-05-18 18:30:03 -07:00
Andrew Kelley
762e686d17
inline assembly: allow empty output list
2016-05-18 18:20:15 -07:00
Andrew Kelley
39016c1d3e
fix offset map for inline assembly error messages
2016-05-18 18:05:03 -07:00
Andrew Kelley
f6b16c99ba
fix raw string literal crash
2016-05-18 17:55:07 -07:00
Andrew Kelley
fbb6d1d7ee
support extern C ABI for return types
2016-05-18 15:32:34 -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
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
6ae6b5f5b5
add compile_err builtin
2016-05-14 18:54:37 -07:00
Andrew Kelley
33e3d56453
add error for wrong return type of main
2016-05-13 13:08:54 -07:00
Andrew Kelley
8e3ab28be9
ability to cast maybe pointer to isize/usize
...
also ability to put noalias on maybe pointer
2016-05-13 09:54:56 -07:00
José Miguel Sánchez
b7b864e5e5
For the sake of correctness: we can always rely on ZIG_STD_DIR
2016-05-12 19:55:50 +02:00
José Miguel Sánchez
a1817f462a
Add --zig-std-dir
2016-05-12 18:41:20 +02:00
Andrew Kelley
1eafc85f1f
add readonly attribute to relevant functions and parameters
2016-05-11 15:58:00 -07:00
Andrew Kelley
26718a619c
recognize ar program and pass --gc-sections to ld
...
See #54
2016-05-11 14:44:10 -07:00
Andrew Kelley
22888ca524
some work in progress networking code
...
also, casting to or from a u8 slice makes a function impure
2016-05-10 15:00:59 -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
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
d5d5fd928c
link: don't put -l in front of .a or .so files
2016-05-07 01:58:18 -07:00
Andrew Kelley
c098a8f522
add frame_address and return_address builtins
2016-05-06 23:10:14 -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
b8d17b11a7
add tests for integer overflow crashing
...
see #46
2016-05-05 18:07:15 -07:00
Andrew Kelley
094336f07c
add integer wrapping
...
see #46
2016-05-05 17:19:01 -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
66ed7a5eb5
beginnings of network standard library code
2016-05-03 20:48:53 -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
a299de2265
better alignment value for stack variables
...
fixes debug info sometimes not being available for parameters
2016-04-28 15:10:27 -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
09042f1b0c
add missing debug entry for breakpoint
2016-04-26 15:35:36 -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
3886fdc19b
rename unknown_size_array to slice
2016-04-24 16:33:52 -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
46ab981787
add skeleton for union support
2016-04-24 11:24:04 -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
Josh Wolfe
4a7911e3eb
fix gcc build errors
2016-04-23 00:26:29 -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
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
5e33175517
add @embed_file builtin function
2016-04-18 15:47:21 -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
83a59c4d07
fix evaluating generic functions in wrong context
2016-04-13 12:28:07 -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
aa89fd3b3e
eval: ability to eval more things
2016-04-12 09:35:33 -07:00
Andrew Kelley
fa605485ea
eval: support more node types
2016-04-12 09:35:33 -07:00
Andrew Kelley
a177e30534
compile-time function evaluation of pure functions
2016-04-12 09:35:33 -07:00
Andrew Kelley
5a479720ec
add error for unable to infer expression type in if statements
...
closes #136
2016-04-12 08:53:00 -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
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
7eb6af1d3e
add @breakpoint()
2016-04-09 16:52:52 -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
Josh Wolfe
d5d6c93da4
fix parsing of hex literal 0xb
2016-04-08 17:33:59 -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
Josh Wolfe
4ce85ea067
fix gcc compile error
2016-04-08 16:24:06 -07:00
Andrew Kelley
5dbc21b511
update cat example, refactor std
...
partial implementation of @err_name
2016-04-08 16:21:30 -07:00
Josh Wolfe
f6edba4a87
fix gcc compile errors
2016-04-07 18:02: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
22ef416d4d
fix generics not using ast clone
2016-04-06 14:02:29 -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
76e1541803
update to llvm 3.8.0
2016-03-08 18:56:14 -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
660a50661b
better hash table performance
2016-03-01 14:47:46 -07:00
Andrew Kelley
1d08ab087e
fix comparison of unsigned integers error
2016-03-01 14:08:04 -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
0a0494feb8
fix build error with signed/unsigned
2016-02-19 14:02:36 -07:00
Andrew Kelley
e5982e4440
link: on windows link test runner and builtin o files
2016-02-17 21:05:46 -07:00
Andrew Kelley
a7b6fa5bee
os: implement windows os layer
2016-02-17 19:53:30 -07:00
Andrew Kelley
06398a22d0
back to normal print specifiers
...
disable warnings for format specifiers on mingw since the
compiler emits bogus warnings
2016-02-16 21:43:38 -07:00
Andrew Kelley
bb806f941c
use PRIuMAX instead of PRIu64 for mingw
2016-02-16 20:24:51 -07:00
Andrew Kelley
6793548868
fix 64 bit integer printing for mingw
...
in order to do this I had to turn off -pedantic
2016-02-16 20:21:37 -07:00
Andrew Kelley
58c13aa949
rename 'environ' to 'env_type'
...
environ appears to clash with another symbol in mingw land
2016-02-16 20:03:41 -07:00
Andrew Kelley
afa5d1ea12
os: fix ability to compile for windows
2016-02-16 19:55:49 -07:00
Andrew Kelley
194e93a582
add windows os code
2016-02-16 19:42:46 -07:00
Andrew Kelley
0e92b44043
prepend underscore to non exported functions
...
to prevent symbol collisions
2016-02-16 17:06:19 -07:00
Andrew Kelley
77ffb5075b
update bootstrap to work for macos too
...
* Directives can have arbitrary expressions as parameters
* Fix switch statement not generating code sometimes
* Rename "main" fn in bootstrap.zig to "zig_user_main" to
avoid name collisions
* codegen: fix badref when unreachable is last thing in an
expression
* support #condition directive on exported functions
2016-02-16 16:41:56 -07:00
Andrew Kelley
91101f08c2
linking on darwin: provide builtins and -arch
2016-02-15 21:59:20 -07:00
Andrew Kelley
4c30216d1c
add missing system library to darwin linker job
2016-02-15 21:23:03 -07:00
Andrew Kelley
984e7d6cc7
first pass at linking on macos
2016-02-15 20:56:52 -07:00
Andrew Kelley
f580c7fa43
handle libc include path and libc lib path differently
2016-02-15 16:52:37 -07:00
Andrew Kelley
c6bf9c6942
MacOS has the same int sizes as Linux
...
Source: https://developer.apple.com/library/mac/documentation/Darwin/Conceptual/64bitPorting/transition/transition.html
2016-02-15 16:26:33 -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
87922bfae0
parseh: ZIG_PARSEH_CFLAGS -> ZIG_NATIVE_PARSEH_CFLAGS
2016-02-13 23:04:12 -07:00
Andrew Kelley
fb8700de6c
parseh: support attributed types
2016-02-13 23:03:59 -07:00
Andrew Kelley
5032854aec
parseh: more specific warning for different calling conventions
2016-02-13 23:03:39 -07:00
Andrew Kelley
5771bd805e
respect link order in source code
2016-02-13 23:03:16 -07:00
Andrew Kelley
1141e4f5b2
if any c imports fail, don't emit undefined identifier errors
2016-02-13 23:02:45 -07:00
Andrew Kelley
fe95a227c8
add windows C int sizes
2016-02-13 16:29:30 -07:00
Andrew Kelley
03b51a753a
a = b % c uses the types of b and c instead of a
2016-02-13 15:03:19 -07:00
Andrew Kelley
8d510c699a
parseh: fix branching on undefined memory
2016-02-13 13:25:55 -07:00
Andrew Kelley
c8376af92d
add @ctz, @clz and compiler_rt implementation
2016-02-13 12:50:13 -07:00
Andrew Kelley
a5aeb7381f
if statement children nodes know if they're compiled out
2016-02-12 16:00:50 -07:00
Andrew Kelley
b8a1cb299e
avoid codegening functions never called from conditional compilation
2016-02-12 15:51:12 -07:00
Andrew Kelley
9bf9be9937
fix build on GCC
2016-02-12 14:07:12 -07:00
Andrew Kelley
4e3f6de027
c integer size takes into account architecture and OS
2016-02-12 12:07:11 -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
0c1ce21f7d
add @compile_var("environ")
2016-02-12 01:23:06 -07:00
Serge Paquet
633b01de23
fix undefined LONG_LONG_MAX compilation error
2016-02-11 22:13:54 -05: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
2bf6c28bc3
ability to cross compile
...
hello_libc.zig can produce a windows build
2016-02-11 01:33:27 -07:00
Andrew Kelley
54a8b6a110
cleanup target data organization
2016-02-10 16:58:15 -07:00
Andrew Kelley
b642604691
targets command shows which ones are native
2016-02-10 16:35:07 -07:00
Andrew Kelley
1ff2edf67e
add "targets" command to list architectures, oses, abis
2016-02-10 15:41:50 -07:00
Andrew Kelley
aa504275f0
don't create debug type for void arrays
2016-02-09 20:38:42 -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
f45c374664
fix -dynamic-linker arg to ld when not overridden
2016-02-09 16:55:23 -07:00
Andrew Kelley
5bdcdd1669
@const_eval returns poison value for type when it fails
...
resulting in fewer redundant error messages
2016-02-09 10:02:31 -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
1d92700d08
fix build with GCC
2016-02-09 08:46:55 -07:00
Andrew Kelley
e18170ee0b
support overriding the dynamic linker argument to ld
2016-02-08 22:11:09 -07:00
Andrew Kelley
430d0dfcb2
support static linking against libc
2016-02-08 00:50:51 -07:00
Andrew Kelley
96e7deadd4
parseh: tiny performance improvement
2016-02-07 19:07:41 -07:00
Andrew Kelley
87cdbb6c25
improve performance for get_fn_type
2016-02-07 18:32:19 -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
049e9e5819
add debug info for loop variables
...
closes #112
2016-02-07 12:58:09 -07:00
Andrew Kelley
94ed9f622a
blocks with one statement pass constant expression eval
2016-02-07 12:38:51 -07:00
Andrew Kelley
694cfff23f
fix a bogus call to bignum_normalize causing assertion failure
2016-02-07 03:49:25 -07:00
Andrew Kelley
7b00ed362c
fix debug type of ptr and len fields of slices
2016-02-07 02:20:36 -07:00
Andrew Kelley
642b38a577
add debug info for slices
...
closes #47
2016-02-07 01:53:38 -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
fc31096519
parseh: fix not properly demoting structs to typedefs
2016-02-07 00:18:24 -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
c4f5a00253
rhs of ?? and %% can be any expression
2016-02-06 19:28:11 -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
4208435f66
add nonnull to functions with pointer return type
2016-02-05 14:58:18 -07:00
Andrew Kelley
2ee80858b4
codegen: use gen_index for nonnull attribute
...
also put nonnull on sret params
closes #82
2016-02-05 14:48:23 -07:00
realazthat
54fbe7560e
Added code for generating nonnull attributes
2016-02-05 16:29:26 -05:00
Andrew Kelley
15fe3c4235
fix explicit casting from integer literal to float
2016-02-05 04:30:04 -07:00
Andrew Kelley
663a1d0cd5
switch trap in debug mode when no prong found
2016-02-04 17:43:57 -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
b87d0abefe
fix debug info for bool type
2016-02-04 14:02:37 -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
3a9009b08e
fix crash when initializing struct if field is invalid
2016-02-04 01:06:31 -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
a6d4335217
fix running tests when linking with libc
2016-02-03 23:07:55 -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
5c310f4343
skip analyzing parameters of invalid function call
2016-02-03 19:10:02 -07:00
Andrew Kelley
c3123158b7
fix handling of implicit casts in binary operators
2016-02-03 19:07:15 -07:00
Andrew Kelley
39223c1847
test runner prints test names
2016-02-03 18:38:09 -07:00
Andrew Kelley
11a0644365
basic support for building a test target
2016-02-03 18:02:01 -07:00
Andrew Kelley
afdb47c32d
fix debug symbols for byval arguments
2016-02-03 03:32:45 -07:00
Andrew Kelley
815d9a7994
fix debug info for arrays being 1 element too short
2016-02-03 02:44:21 -07:00
Andrew Kelley
f2fe231ddf
add @compile_var("is_release")
2016-02-03 02:21:28 -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
7af59c76e4
build: fix libc path finding
2016-02-02 15:04:14 -07:00
Andrew Kelley
5824b15249
codegen: ?? prefix operator causes trap in debug mode
2016-02-02 12:37:19 -07:00
Andrew Kelley
5ad84e4724
unreachable causes a trap in debug mode
2016-02-02 02:43:33 -07:00
Andrew Kelley
6f1a7a0d70
add abort function and "cold" fn attribute
2016-02-02 00:42:06 -07:00
Andrew Kelley
d8d0f65654
codegen: avoid table lookup for field access
...
closes #74
2016-02-01 20:17:33 -07:00
Andrew Kelley
a2035eefba
codegen: avoid table lookup in assembly expression
2016-02-01 20:13:36 -07:00
Andrew Kelley
74eaf43768
codegen: avoid a table lookup
2016-02-01 20:05:50 -07:00
Andrew Kelley
0b94c83deb
remove the constructor of hash map
2016-02-01 17:50:46 -07:00
Andrew Kelley
06f6acb4b1
inline is a keyword instead of a directive
2016-02-01 17:25:38 -07:00
Andrew Kelley
122b7b9966
c_import top level decl supports pub
...
See #88
2016-02-01 17:05:07 -07:00
Andrew Kelley
108af28c1b
optimization: avoid codegening unused functions
2016-02-01 02:34:01 -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
675de74412
codegen: fix negation for floats
2016-01-31 21:32:05 -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
f20d0665bb
typedecl top level decls respect pub
2016-01-31 19:14:25 -07:00
Andrew Kelley
0ac714f0d6
add --library-path cli option
2016-01-31 18:32:07 -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
773cd851fe
parser: fix parsing of type decls
2016-01-31 17:17:00 -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
4c1f0f02d0
fix some parseh crashes
2016-01-31 02:17:08 -07:00
Andrew Kelley
80a4898e44
delete bogus --help text
2016-01-31 02:05:19 -07:00
Andrew Kelley
55c9ae1193
codegen extern global variables correctly
2016-01-31 01:51:33 -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
436e35516a
parseh properly ignores anonymous structs
...
and nodes get valid create_index values
2016-01-29 17:02:51 -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
2e39d9881a
parseh fix crash
2016-01-29 02:38:12 -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
923e78785d
attempt to get preprocessor entities from libclang
...
I'm pretty sure it's impossible, the API does not
expose the macro expansion value
and the source location points to the macro's name,
not its value.
2016-01-28 23:18:39 -07:00
Andrew Kelley
650fdded29
fix incorrect loading of files over 8192 bytes
2016-01-28 22:38:18 -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
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
f1c5d3d3a1
add parseh tests
2016-01-28 11:54:34 -07:00
Andrew Kelley
474340a003
parseh recognizes C enums
2016-01-28 11:03:44 -07:00
Andrew Kelley
137bb51e20
parseh: add --c-import-warnings option
2016-01-28 00:25:10 -07:00
Andrew Kelley
97c61313da
c_import of stdio.h works for some functions
...
See #88
2016-01-27 23:23:02 -07:00
Andrew Kelley
b6354ddd5a
move AST rendering code to separate file
2016-01-27 21:10:38 -07:00
Andrew Kelley
c281533638
build command supports -isystem argument
2016-01-27 19:22:58 -07:00
Andrew Kelley
69d4f55fbf
parseh: still produce output when not all types are known
2016-01-27 19:07:01 -07:00
Andrew Kelley
d1ac1abd34
parseh correctly handles C's void type
2016-01-27 16:30:52 -07:00
Andrew Kelley
75cab48c1e
parseh: recognize typedef types
...
and fix const qualifier on pointers
2016-01-27 16:00:43 -07: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
fa1ea6062b
parseh works for simple functions
2016-01-27 03:12:06 -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
a73453a268
add c_import top level decl
...
see #88
2016-01-26 16:00:39 -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
01428d4a72
analyze: fix crash when return type is invalid
2016-01-25 22:20:52 -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
fb85d3a0a2
codegen: get rid of cur_block_context
2016-01-25 16:37:45 -07:00
Andrew Kelley
deb3586884
implement %% prefix operator
...
See #23
also make undefined constants use llvm undef value
2016-01-25 15:45:05 -07:00
Andrew Kelley
4b9e1dd438
fix tests and add %% operator test
2016-01-25 14:04:29 -07:00
Andrew Kelley
6db6609df8
implement %% operator
...
See #23
2016-01-25 13:53:40 -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
29a83f648b
support the %return
expression
2016-01-24 20:13:08 -07:00
Andrew Kelley
f5cc7f65a3
fix parameter access of sret functions
2016-01-24 19:27:12 -07:00
Andrew Kelley
419652ee8f
ability to return structs byvalue from functions
...
closes #57
2016-01-24 18:34:50 -07:00
Andrew Kelley
ca7b85b32e
fix number literal implicit cast
2016-01-24 14:51:47 -07:00
Andrew Kelley
5c18826240
introduce the error keyword and type
...
See #23
2016-01-24 01:34:57 -07:00
Andrew Kelley
706f72f1b4
fix hang when returning from while loop
...
also fixes duplicate error message for function missing
return type.
also makes guess number game use %void for main return type.
closes #58
2016-01-23 02:46:24 -07:00
Andrew Kelley
c0ea9290c4
main returns %void
2016-01-23 02:14:01 -07:00
Andrew Kelley
91d911007b
codegen: fix field access of arrays
...
also fix error type analyze error
2016-01-23 00:53:43 -07:00
Andrew Kelley
a922d5d42a
implement literal error values
...
See #23
2016-01-23 00:34:59 -07:00
Andrew Kelley
1543043bf5
fix no error emitted for redeclaring global var
...
closes #81
2016-01-23 00:07:08 -07:00
Andrew Kelley
bfceb18631
character literal returns a number literal
2016-01-22 23:24:09 -07:00
Andrew Kelley
e269caae02
implement undefined literal
2016-01-22 23:12:33 -07:00
Andrew Kelley
0e51c16ef5
add undefined literal
2016-01-22 22:42:02 -07:00
Andrew Kelley
523e3b86af
support statically initialized array literal
2016-01-22 22:02:07 -07:00
Andrew Kelley
21fc5a6402
un-special case constant global strings
2016-01-22 20:36:08 -07:00
Andrew Kelley
1158bc3ead
support statically initialized structs
2016-01-22 18:05:22 -07:00
Andrew Kelley
7bd9c82386
add compile error for non constant expr global
2016-01-22 16:40:15 -07:00
Andrew Kelley
72fa03bada
add undefined reserved word
2016-01-22 16:05:29 -07:00
Andrew Kelley
272fe1c54c
implicit casts rewrite the AST
2016-01-22 15:31:35 -07:00
Andrew Kelley
b09a0cd072
allow constants to have number literal values
...
also codegen takes advantage of constant expr eval
2016-01-21 15:23:24 -07:00
Andrew Kelley
32e2196257
number literal rework
2016-01-21 03:02:25 -07:00
Andrew Kelley
5e212db29c
parsing error value decls and error value literals
...
and return with '?' or '%' prefix
2016-01-20 18:18:50 -07:00
Andrew Kelley
961adc0909
Merge branch 'master' of github.com:andrewrk/zig
2016-01-20 02:16:36 -07:00
Andrew Kelley
ad9759bc8e
basic support for switch expression
2016-01-20 02:12:24 -07:00
MovingtoMars
361531891f
rename value_count to member_count
...
rename BuiltinFnIdValueCount to BuiltinFnIdMemberCount
rename value_count to member_count
2016-01-20 22:03:03 +13:00
Andrew Kelley
c17309dbc5
add switch statement support to parser
2016-01-19 20:29:36 -07:00
Andrew Kelley
890714b8ca
Revert "delete parseh"
...
This reverts commit 18374ea8f1
.
2016-01-18 21:28:54 -07:00
Andrew Kelley
ae2151a751
use signed integer for sizes of things
2016-01-18 21:13:14 -07:00
Andrew Kelley
ea21d2beb6
add error for shadowing a type
...
closes #61
2016-01-18 17:04:37 -07:00
Andrew Kelley
32821e7098
add function pointer support
...
See #14
2016-01-18 16:42:45 -07:00
Andrew Kelley
3a326d5005
pave the road for function pointers
...
See #14
2016-01-18 08:50:10 -07:00
Andrew Kelley
4c50606b9d
refactor std to use for loop
2016-01-18 07:16:17 -07:00
Andrew Kelley
fbbef14013
add for loop which can iterate over arrays
...
See #51
2016-01-18 07:00:45 -07:00
Andrew Kelley
f0a43cfda9
fix nested arrays
2016-01-18 04:34:26 -07:00
Andrew Kelley
5f7685336f
better main symbol prototype
...
closes #64
2016-01-16 00:07:34 -07:00
Andrew Kelley
ca8d8f114f
rename "alwaysinline" to "inline"
2016-01-15 20:05:39 -07:00
Andrew Kelley
8205253b2b
support array literals
2016-01-15 20:01:49 -07:00
Andrew Kelley
8bc3fae1cf
fix error message for struct initialization on array
2016-01-15 19:05:51 -07:00
Andrew Kelley
8818c59cbc
parser: fix not setting container init kind
2016-01-15 19:02:04 -07:00
Andrew Kelley
dc162c7f83
rename "use" to "import"
2016-01-15 18:45:52 -07:00
Andrew Kelley
86f55bce53
add void arrays test
2016-01-15 18:41:19 -07:00
Andrew Kelley
0311b35a21
reduce precedence of {} suffix operator
...
this makes []u8 {1, 2, 3, 4} work for array literal
2016-01-15 17:40:12 -07:00
Andrew Kelley
8d60ffe314
solve the mystery of undefined reference error
...
big surprise, C++ is to blame
2016-01-15 17:12:26 -07:00
Andrew Kelley
8409e518ab
fix build with gcc
2016-01-15 14:29:02 -07:00
Andrew Kelley
18374ea8f1
delete parseh
...
we'll have to switch to the clang C++ api anyway
we'll revive this code later
2016-01-15 14:16:07 -07:00
Andrew Kelley
b0f608a6a7
merge constant expression evaluator with analyzer
2016-01-15 04:45:25 -07:00
Andrew Kelley
0c9afede9e
overflow intrinsics take type as first argument
2016-01-14 17:04:35 -07:00
Andrew Kelley
68c4f617ed
fix next_node_index on wrong struct
...
no more nondeterministic error messages
closes #65
2016-01-14 15:27:42 -07:00
Andrew Kelley
1645fa681f
parser: type expressions cannot be assignment
2016-01-14 15:21:41 -07:00
Andrew Kelley
5f9ecb8566
instead of 'as' to cast, call type as function
2016-01-14 02:52:33 -07:00
Andrew Kelley
d121ed961a
fix noalias codegen
...
also make some parsing error messages better
2016-01-13 22:18:10 -07:00
Andrew Kelley
95a7f3553d
Merge branch 'master' of github.com:andrewrk/zig
2016-01-13 18:17:52 -07:00
Andrew Kelley
b28b7f63d1
all types are now expressions
...
See #22
2016-01-13 18:15:51 -07:00
Andrew Kelley
76dc44d2a6
fix build with gcc
...
closes #66
2016-01-12 21:07:45 -07:00
Andrew Kelley
cb46d0b5b0
fix not adding builtin functions code
2016-01-11 20:44:10 -07:00
Andrew Kelley
ccc8e9f4c3
support enums with values attached
2016-01-11 20:33:06 -07:00
Andrew Kelley
aaa62eda72
simple enum support
2016-01-11 01:15:17 -07:00
Andrew Kelley
2061cd50c0
resolve enum types and emit debug info
2016-01-11 00:25:17 -07:00