Commit Graph

428 Commits

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