Commit Graph

428 Commits

Author SHA1 Message Date
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
Andrew Kelley
b147ff5b60 fix codegen for void struct fields 2016-01-10 18:56:50 -07:00
Andrew Kelley
4d7835e21a delete unused enumfield and enumdecl node types 2016-01-10 17:27:58 -07:00
Andrew Kelley
fc748e2ccd update enum parsing to new plan 2016-01-10 16:58:21 -07:00
Andrew Kelley
3ef2f7058b refactor out the horrible beast that was codegen_node 2016-01-10 15:13:39 -07:00
Andrew Kelley
d4b8852d78 parsing enum declarations 2016-01-10 11:48:54 -07:00
Andrew Kelley
35b74d4013 order-independent declarations even from imports
closes #42
2016-01-10 01:25:20 -07:00
Andrew Kelley
49d0971cd4 detect and report top level decl dependency loop 2016-01-10 00:03:31 -07:00
Andrew Kelley
1fe1235e14 order-independent declarations
code constructs and traverses a dependency graph in a deterministic
order.
2016-01-09 23:49:22 -07:00
Andrew Kelley
6d9119fcd9 add memcpy and memset intrinsics 2016-01-09 02:16:54 -07:00
Andrew Kelley
bdca82ea66 implement pub const 2016-01-09 00:37:48 -07:00
Andrew Kelley
0c24ed8a81 rename restrict to noalias 2016-01-08 23:48:24 -07:00
Andrew Kelley
b7dd88ad68 suport checked arithmetic operations via intrinsics
closes #32
2016-01-08 23:41:40 -07:00
Andrew Kelley
14b9cbd43c add restrict qualifier on pointer arguments 2016-01-08 20:59:47 -07:00
Andrew Kelley
d14a31100f implement unknown size array indexing and slicing 2016-01-08 17:52:45 -07:00
Andrew Kelley
0c84ecd19d codegen: fix else if expression and maybe unwrap expr 2016-01-08 03:59:37 -07:00
Andrew Kelley
e1f498212c fix codegen for implicit maybe wrap 2016-01-08 02:52:27 -07:00
Andrew Kelley
9aea99a999 implement array slicing syntax
closes #52
2016-01-07 05:29:11 -07:00
Andrew Kelley
ea69d6ecda tokenize: detect "..." after a number literal 2016-01-07 04:00:05 -07:00
Andrew Kelley
a3c97081ca add ?? maybe unwrapping binary operator
add null literal
fix number literal / maybe interactions
2016-01-07 03:23:38 -07:00
Andrew Kelley
c75d40680f while detects simple constant condition 2016-01-06 18:02:42 -07:00
Andrew Kelley
5f0bfcac24 fix undefined reference to memcpy in release mode
when not depending on libc, we generate memcpy and memset
implementations.
2016-01-06 06:40:25 -07:00
Andrew Kelley
5e64c4d92f support pub structs. move rand to std lib.
guess number example prints the answer now
2016-01-06 04:41:11 -07:00
Andrew Kelley
3fbde00eee codegen: fix lshr/ashr not looking at int sign 2016-01-06 03:52:49 -07:00
Andrew Kelley
f751a85d55 codegen: arithmetic is all wrapping for now
we'll add optimizations back in when we solve #46
2016-01-06 02:44:46 -07:00
Andrew Kelley
8b48e242b8 codegen: fix array access of struct field 2016-01-06 02:43:29 -07:00
Andrew Kelley
9c775d2111 codegen: fix member function invocation 2016-01-06 02:05:45 -07:00
Andrew Kelley
3c43bc9208 support unknown size arrays 2016-01-06 01:28:58 -07:00
Andrew Kelley
4ef062b9c8 array syntax is [10]i32 instead of [i32; 10] 2016-01-05 22:47:47 -07:00
Andrew Kelley
bfb3e7fcb1 #sizeof allowed in constant expression 2016-01-05 16:46:20 -07:00
Andrew Kelley
d006ea98dd analyze: ability to call a method on a struct pointer 2016-01-05 16:34:51 -07:00
Andrew Kelley
3327b0488d add #min_value() and #max_value() 2016-01-05 06:30:49 -07:00
Andrew Kelley
a11d0aaf62 progress toward compile time constant expression evaluation 2016-01-04 23:37:17 -07:00
Andrew Kelley
3c55162826 fix += not allowed for pointers 2016-01-04 22:19:57 -07:00
Andrew Kelley
b268e3de04 fix binary operators incorrectly assuming i32 2016-01-04 22:09:59 -07:00
Andrew Kelley
e1ff201d60 fix crash when struct field is invalid 2016-01-04 21:42:35 -07:00
Andrew Kelley
e0aa0736be add pointer dereferencing operator 2016-01-04 19:11:36 -07:00
Andrew Kelley
22c52f1eb6 member functions get a namespaced symbol 2016-01-04 17:14:53 -07:00
Andrew Kelley
4514661cfe add member functions 2016-01-04 16:57:22 -07:00
Andrew Kelley
2c8958f454 import segregation for types
See #3
2016-01-04 03:52:37 -07:00
Andrew Kelley
44d5d008d0 partial import segregation
See #3
2016-01-04 03:31:57 -07:00
Andrew Kelley
e64c0941f9 implement #sizeof()
closes #8
2016-01-03 19:38:36 -07:00
Andrew Kelley
fa6e3eec46 add #typeof() compiler function 2016-01-03 18:17:50 -07:00
Andrew Kelley
1abb4e59be fix various bugs related to guess number example 2016-01-02 21:56:33 -07:00
Andrew Kelley
fb1e3a5be9 codegen: emit debug metadata for parameters 2016-01-02 20:42:32 -07:00
Andrew Kelley
258bc73eee fix implicit cast after unreachable bad code gen 2016-01-02 20:13:10 -07:00
Andrew Kelley
187d00ca83 ability to access pointers with array indexing syntax
closes #40
2016-01-02 19:47:36 -07:00
Andrew Kelley
968b85ad77 closer to guess number example working 2016-01-02 03:38:45 -07:00
Andrew Kelley
724dcdd384 error for if var expression not maybe type 2016-01-02 00:09:49 -07:00
Andrew Kelley
9a8851515b basic maybe type working 2016-01-02 00:06:06 -07:00
Andrew Kelley
b3ac5c16ec block expressions require parens
closes #39
2015-12-31 16:04:13 -07:00
Andrew Kelley
7ba99e9715 analyze if maybe var expressions 2015-12-26 15:43:40 -07:00
Andrew Kelley
1f8e3871ee parse if maybe expression 2015-12-26 15:05:27 -07:00
Andrew Kelley
5943f99510 implement continue expression
closes #6
2015-12-24 15:36:49 -07:00
Andrew Kelley
44ca5e19dc add error for break outside loop
also fix break in nested loops
2015-12-24 15:30:55 -07:00
Andrew Kelley
5ceaae288c add break expression 2015-12-24 15:09:47 -07:00
Andrew Kelley
a030b60aeb add while loop 2015-12-24 14:37:43 -07:00
Andrew Kelley
08a7ce7dd5 add error for missing or duplicate field in struct value expr 2015-12-24 13:47:07 -07:00
Andrew Kelley
8915883cf6 add error for byvalue struct param on exported fn 2015-12-24 13:25:54 -07:00
Andrew Kelley
4e52281142 add test for error for redefinition of struct 2015-12-24 13:19:31 -07:00
Andrew Kelley
50357dad45 add struct value expression 2015-12-24 00:00:23 -07:00
Andrew Kelley
9ce36ba0cc inline assembly uses -> instead of return 2015-12-23 15:49:34 -07:00
Andrew Kelley
e21369a153 codegen: support byvalue struct assignment 2015-12-23 03:19:22 -07:00
Andrew Kelley
fe3ad27d5f analyze: error for infinite size struct 2015-12-22 13:41:33 -07:00
Andrew Kelley
431170d981 codegen: fix struct pointer field access 2015-12-22 13:22:40 -07:00
Andrew Kelley
e4cb28dbf2 structs have debug information 2015-12-16 17:11:35 -07:00
Andrew Kelley
4d45d14b55 use realpath to avoid duplicate imports 2015-12-15 21:48:41 -07:00
Andrew Kelley
aa56f016f7 support addressof operator and struct pointer field access 2015-12-15 20:08:53 -07:00
Andrew Kelley
5a8822c714 fix assignment operators for struct fields 2015-12-15 19:17:39 -07:00
Andrew Kelley
28c5a8f2ca analyze: clean up type checking 2015-12-15 18:21:59 -07:00
Andrew Kelley
431d8f946f implicit casting from constant size array to string
closes #36
2015-12-15 17:29:44 -07:00
Andrew Kelley
423ee0689b add implicit casting support 2015-12-15 17:11:57 -07:00
Josh Wolfe
8a570c458b base 10 decimals work now. closes #15 2015-12-15 14:54:16 -07:00
Josh Wolfe
2f15babbd3 better radix handling in float parsing. base 10 still doesn't work. 2015-12-15 13:15:24 -07:00
Andrew Kelley
f5a3281877 when linking with libc use the C runtime library 2015-12-15 12:44:42 -07:00
Josh Wolfe
f2a9b40231 more number literal syntax is supported. floats still need work 2015-12-15 04:05:53 -07:00
Josh Wolfe
cf88fcb2ad tokenizer parses all number literal types 2015-12-15 04:05:53 -07:00
Andrew Kelley
de7c5ea102 codegen: add support for shortening cast 2015-12-15 02:58:01 -07:00
Andrew Kelley
1f48b626a1 std: even more efficient inline assembly 2015-12-15 02:47:39 -07:00
Andrew Kelley
673d638070 std: more efficient inline assembly 2015-12-15 01:55:52 -07:00
Andrew Kelley
a292eb8d64 support inline assembly expressions with return type 2015-12-15 00:46:56 -07:00
Andrew Kelley
4dc2b82506 constant initializers allow simple expressions 2015-12-14 23:49:56 -07:00
Andrew Kelley
83b68c9f13 add global variable support
closes #12
2015-12-14 23:10:18 -07:00
Andrew Kelley
52e19b4a9b analyze: BlockContext has concept of module scope 2015-12-14 22:06:25 -07:00
Andrew Kelley
3049410260 const and var instead of let and let mut
closes #34
2015-12-14 18:51:07 -07:00
Andrew Kelley
f17e20d5fe instead of *mut and *const, & and &const
closes #33
2015-12-14 18:10:25 -07:00
Josh Wolfe
7dd2929185 prefer int *token_index over new_token_index 2015-12-14 12:58:06 -07:00
Josh Wolfe
9dbedb02cc fix compile -Werrors 2015-12-14 10:31:32 -07:00
Andrew Kelley
e411467e1d add number literal type
it gets implicitly casted to whatever is needed.

closes #24
2015-12-14 02:46:37 -07:00
Andrew Kelley
3d8eb10897 fix incorrect debug info path to imports 2015-12-13 14:34:07 -07:00
Josh Wolfe
9ec892539e prefer checking a type's id over comparing it to a builtin_types entry 2015-12-13 11:59:34 -07:00
Andrew Kelley
bd77bc749a structs are working 2015-12-12 22:55:29 -07:00
Josh Wolfe
0f02e29a2b codegen and tests for modify operators. closes #16 2015-12-12 19:47:37 -07:00
Josh Wolfe
5cb5f5dbf6 parsing assignment operators 2015-12-12 19:07:29 -07:00
Josh Wolfe
eb1542c102 tokenizing assignment operators 2015-12-12 18:17:27 -07:00
Josh Wolfe
2082588201 fix short circuit expressions 2015-12-12 17:33:45 -07:00
Josh Wolfe
64dd0b8d95 fix a + b + c and similar
fix || and &&

closes #17
2015-12-12 17:07:43 -07:00
Andrew Kelley
38f12adbda progress on struct support 2015-12-12 02:34:09 -07:00
Andrew Kelley
ac630d354d std: print_str no longer requires length argument
add explicit casting support from array to string
2015-12-12 02:05:08 -07:00
Andrew Kelley
a10277bd94 prepare codebase for struct and string support
parsing code for structs, strings, and c string literals
partial semantic analyzing code for structs, strings, and c string literals
2015-12-12 00:10:37 -07:00
Andrew Kelley
d697404f64 hello world working without libc 2015-12-11 03:55:26 -07:00
Andrew Kelley
15ba5bc54e provide std.zig and add it to import paths 2015-12-10 17:42:47 -07:00
Andrew Kelley
0dbee2300e add inline assembly support 2015-12-10 15:34:38 -07:00
Andrew Kelley
7b181b51ad parseh: cleanup types 2015-12-09 01:23:58 -07:00
Josh Wolfe
6a48c007a6 fix typo 2015-12-09 01:08:18 -07:00
Andrew Kelley
dfda85e870 ability to call external variadic functions 2015-12-09 01:03:04 -07:00
Andrew Kelley
4eff5f114b parseh: better results for stdio.h 2015-12-08 23:22:25 -07:00
Andrew Kelley
face8d65a8 parseh: add c header files 2015-12-08 17:51:59 -07:00
Andrew Kelley
e8550814c5 support assigning to arrays 2015-12-08 15:31:43 -07:00
Andrew Kelley
6e0c3dc173 array access support 2015-12-08 14:47:17 -07:00
Andrew Kelley
75efc31329 add array access syntax 2015-12-08 14:15:34 -07:00
Andrew Kelley
2f0e4e9cb2 codegen does signed, unsigned, and floating point math 2015-12-08 12:25:30 -07:00
Andrew Kelley
3e06ed0e8c codegen: set target triple and data layout 2015-12-08 00:27:50 -07:00
Andrew Kelley
5dfe4d6387 codegen: do all the allocas at beginning of function
fixes debugging
2015-12-07 23:40:58 -07:00
Andrew Kelley
113f0c9450 add local variables to debug info 2015-12-07 23:09:48 -07:00
Andrew Kelley
9c9ea93519 integrate debug scopes with block context 2015-12-07 22:11:04 -07:00
Andrew Kelley
1279fe0caa all variables have memory addresses 2015-12-07 20:57:45 -07:00
Andrew Kelley
b66fb607bf add debugging info for array type 2015-12-07 20:07:46 -07:00
Josh Wolfe
f6eecfe5f4 getting started on array types 2015-12-07 08:29:19 -07:00
Josh Wolfe
94e61287e7 let is now a statement, not an expression 2015-12-06 23:49:20 -07:00
Josh Wolfe
66e3aa0910 initialize mutable variables to zero 2015-12-06 23:33:10 -07:00
Andrew Kelley
3c3be10a60 add mutable local variables 2015-12-06 23:09:46 -07:00
Andrew Kelley
daa3b6bfa3 add unused label error 2015-12-05 21:08:20 -07:00
Andrew Kelley
c7615c1a80 error for extern function with void parameter 2015-12-04 14:33:57 -07:00
Andrew Kelley
139e5ca08f fix reading source from stdin 2015-12-04 14:33:40 -07:00
Andrew Kelley
cd6283e8c4 parseh: fix wrong fn parameters in some cases 2015-12-04 11:45:11 -07:00
Andrew Kelley
5144c4fa37 exporting .h file supports void 2015-12-03 17:30:44 -07:00
Andrew Kelley
a398afa7cc more C header interoperability 2015-12-03 17:06:33 -07:00
Andrew Kelley
96d4d0d674 parseh: detect fixed size integer types 2015-12-03 16:12:10 -07:00
Andrew Kelley
ad3f98c615 parseh command, parses a C .h file and produces extern decls 2015-12-03 16:00:14 -07:00
Josh Wolfe
f4b9b03f54 fix codegen for void parameters 2015-12-03 14:29:19 -07:00
Josh Wolfe
09a78d6235 can't declare unreachable variables 2015-12-03 12:38:28 -07:00
Josh Wolfe
f1aaf1353e add bool literals 2015-12-03 12:15:07 -07:00
Josh Wolfe
6494cf208e fix if-else type mismatch crash 2015-12-03 11:56:59 -07:00
Josh Wolfe
5af4ef88ac local variables work 2015-12-03 10:56:17 -07:00
Josh Wolfe
708cae3786 fix analysis for variable reference 2015-12-03 10:19:00 -07:00
Josh Wolfe
cb69cb0f26 analysis for variable declaration, but not variable reference 2015-12-03 10:10:33 -07:00
Andrew Kelley
f8ca6c70c7 add labels and goto 2015-12-03 00:47:35 -07:00
Josh Wolfe
c89f77dd8e parsing variable declaration 2015-12-02 16:33:06 -07:00
Andrew Kelley
ffc2c9225f fix execution reaches end of non-void 2015-12-02 12:36:09 -07:00
Andrew Kelley
e94681b961 add test for undeclared identifier error 2015-12-02 00:59:58 -07:00
Andrew Kelley
370de7386c fix parameter access and thus shared library example 2015-12-02 00:53:57 -07:00
Andrew Kelley
08a2311efd support if conditionals 2015-12-01 21:19:38 -07:00
Josh Wolfe
1ed926c321 implicit void statements and all tests pass with type checking 2015-12-01 15:54:46 -07:00
Josh Wolfe
c6a9ab107b string literals have type *const u8 2015-12-01 14:41:03 -07:00
Josh Wolfe
ab327344b6 merge conflicts 2015-12-01 10:44:30 -07:00
Andrew Kelley
dfb6682089 add test for bad import 2015-12-01 02:29:21 -07:00
Andrew Kelley
58e375d0a1 support multiple files 2015-12-01 02:08:58 -07:00
Andrew Kelley
29f24e3c50 add --color cli arg to override tty detection 2015-12-01 01:06:10 -07:00
Andrew Kelley
257cf09472 colored error messages that tell the source file 2015-12-01 00:50:11 -07:00
Andrew Kelley
31cf43de54 analyze looks for root export decl only in the root source file 2015-11-30 23:06:29 -07:00
Josh Wolfe
9278dbedd5 Merge remote-tracking branch 'origin/master' into type-checking 2015-11-30 22:54:00 -07:00
Andrew Kelley
cd68969115 closer to multiple files working 2015-11-30 22:53:37 -07:00
Josh Wolfe
18cfcfe44f fix ast printer names 2015-11-30 22:40:52 -07:00
Josh Wolfe
00f4c05784 merge conflicts 2015-11-30 22:12:21 -07:00
Andrew Kelley
55b8472374 refactor code to prepare for multiple files
verbose compiler output is now behind --verbose flag
2015-11-30 20:00:39 -07:00