Andrew Kelley
5df091fea9
c_void is provided outside of C imports
2016-03-01 15:26:41 -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
04cc59be65
update run_tests to work on windows
2016-02-17 20:44:07 -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
c8376af92d
add @ctz, @clz and compiler_rt implementation
2016-02-13 12:50:13 -07:00
Andrew Kelley
b8a1cb299e
avoid codegening functions never called from conditional compilation
2016-02-12 15:51:12 -07:00
Andrew Kelley
7828456b30
std: delete malloc and free
...
later we'll add a full featured allocator instead of this
2016-02-12 02:23:22 -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
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
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
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
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
94ed9f622a
blocks with one statement pass constant expression eval
2016-02-07 12:38:51 -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
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
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
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
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
1f9734d1ee
allow defining errors with the same name
...
they get the same value, too.
2016-02-04 00:58:45 -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
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
0216293430
add test for var local eval const expr
...
closes #53
2016-02-01 20:54:48 -07:00
Andrew Kelley
06f6acb4b1
inline is a keyword instead of a directive
2016-02-01 17:25:38 -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
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
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
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
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
e4b0435946
parseh understands variable declarations
...
and some initializers such as integers
2016-01-29 16:06:17 -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
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
ff028525e5
add test for calling the result of if-else expr
...
See #14
2016-01-28 17:49:40 -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
347866f3a7
add parseh test for multiple fn prototypes
2016-01-28 11:59:21 -07:00
Andrew Kelley
6f85b956de
add restrict -> noalias parseh test
2016-01-28 11:57:11 -07:00
Andrew Kelley
f1c5d3d3a1
add parseh tests
2016-01-28 11:54:34 -07:00
Andrew Kelley
97c61313da
c_import of stdio.h works for some functions
...
See #88
2016-01-27 23:23:02 -07:00
MovingtoMars
1a913f6bf2
simple malloc and free using mmap
2016-01-28 12:39:02 +13: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
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
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
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
4b9e1dd438
fix tests and add %% operator test
2016-01-25 14:04:29 -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
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
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
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
523e3b86af
support statically initialized array literal
2016-01-22 22:02:07 -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
b61406b607
add test for const number literal
2016-01-22 16:02:08 -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
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
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
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
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
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
0c9afede9e
overflow intrinsics take type as first argument
2016-01-14 17:04:35 -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
b28b7f63d1
all types are now expressions
...
See #22
2016-01-13 18:15:51 -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
b147ff5b60
fix codegen for void struct fields
2016-01-10 18:56:50 -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
b7dd88ad68
suport checked arithmetic operations via intrinsics
...
closes #32
2016-01-08 23:41:40 -07:00
Andrew Kelley
0c84ecd19d
codegen: fix else if expression and maybe unwrap expr
2016-01-08 03:59:37 -07:00
Andrew Kelley
9aea99a999
implement array slicing syntax
...
closes #52
2016-01-07 05:29:11 -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
66eee5a06b
add unknown size array test
2016-01-06 01:30:11 -07:00
Andrew Kelley
4ef062b9c8
array syntax is [10]i32 instead of [i32; 10]
2016-01-05 22:47:47 -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
e0aa0736be
add pointer dereferencing operator
2016-01-04 19:11:36 -07:00
Andrew Kelley
4514661cfe
add member functions
2016-01-04 16:57:22 -07:00
Andrew Kelley
44d5d008d0
partial import segregation
...
See #3
2016-01-04 03:31:57 -07:00
Andrew Kelley
333a322127
multiple files example no longer use libc
2016-01-04 01:52:32 -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