Commit Graph

636 Commits

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