Commit Graph

866 Commits

Author SHA1 Message Date
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