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
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
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
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
ffc593b808
add test for while loop
2015-12-24 14:41:00 -07:00
Andrew Kelley
2e74889c3c
add test for invalid field in struct value expression
2015-12-24 13:49:23 -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
e21369a153
codegen: support byvalue struct assignment
2015-12-23 03:19:22 -07:00
Andrew Kelley
ebd7aeb541
add test for invalid struct field access
2015-12-22 13:45:13 -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
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
43099932d5
add number literal tests for integers
2015-12-15 14:12:33 -07:00
Josh Wolfe
1e09de0ff4
some tests for number literals
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
Andrew Kelley
4dc2b82506
constant initializers allow simple expressions
2015-12-14 23:49:56 -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
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
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
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
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
dfda85e870
ability to call external variadic functions
2015-12-09 01:03:04 -07:00
Andrew Kelley
358d699fa9
add test for arrays
2015-12-08 15:46:36 -07:00
Andrew Kelley
e8550814c5
support assigning to arrays
2015-12-08 15:31:43 -07:00
Andrew Kelley
75efc31329
add array access syntax
2015-12-08 14:15:34 -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
f49e857b9b
run_tests supports --reverse arg
2015-12-04 23:04:49 -07:00
Andrew Kelley
c7615c1a80
error for extern function with void parameter
2015-12-04 14:33:57 -07:00
Josh Wolfe
174e58a05f
test for void parameters
2015-12-03 14:33:13 -07:00
Josh Wolfe
137fe99258
test for separate scopes not colliding
2015-12-03 13:26:49 -07:00
Josh Wolfe
09a78d6235
can't declare unreachable variables
2015-12-03 12:38:28 -07:00
Josh Wolfe
90565a5109
correkt spelling error
2015-12-03 12:25:27 -07:00
Josh Wolfe
22fccdbb0d
tests for bool stuff
2015-12-03 12:19:28 -07:00
Josh Wolfe
0c2cc9d2cf
tests for local variables
2015-12-03 11:06:05 -07:00
Andrew Kelley
f8ca6c70c7
add labels and goto
2015-12-03 00:47:35 -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
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
55b8472374
refactor code to prepare for multiple files
...
verbose compiler output is now behind --verbose flag
2015-11-30 20:00:39 -07:00
Andrew Kelley
020f854f6f
add bad version string test case
2015-11-30 02:14:54 -07:00
Andrew Kelley
cb4773ce29
add root export declaration which is overridable by command line options
2015-11-27 21:24:47 -07:00
Andrew Kelley
4cc95174a7
add tests for compile errors
2015-11-27 18:55:06 -07:00
Andrew Kelley
4068897b6b
rename standalone.cpp to run_tests.cpp
2015-11-27 17:11:03 -07:00
Andrew Kelley
024052b448
add pub and export visibility modifiers and optimization
2015-11-27 15:46:06 -07:00
Andrew Kelley
9ca9a2c554
allow empty function and return with no expression
2015-11-27 10:52:31 -07:00
Andrew Kelley
821907317e
support C-style comments, plus nesting
2015-11-27 00:40:26 -07:00
Andrew Kelley
4060ae93fb
call ld with correct -dynamic-linker argument
...
It looks like Debian/Ubuntu are doing it correctly.
See https://sourceware.org/glibc/wiki/ABIList
NixOS has a clang patch which disables adding the -dynamic-linker
argument to ld in order to ensure "purity" - that is - that all paths
are in /nix/store/*.
See 6b1651928e/pkgs/development/compilers/llvm/3.7/clang/purity.patch
So, I changed the environment variable to ZIG_NATIVE_DYNAMIC_LINKER and allow
it to be set to blank. And it only matters when building for the native target,
since you might want to build for other targets without modifying your
environment.
closes #1
2015-11-26 23:43:29 -07:00
Andrew Kelley
763ce1c485
add tests
2015-11-26 01:29:52 -07:00
Andrew Kelley
09f68c7c33
support linker directives
...
now you can depend on libc in zig language instead of it being
hardcoded in the compiler.
2015-11-24 23:44:41 -07:00
Andrew Kelley
fefbee166d
hello world example working
2015-11-24 13:51:36 -07:00
Andrew Kelley
925c805d4b
add unreachable expression
...
now creating .o file from hello.zig correctly
2015-11-24 13:37:14 -07:00
Andrew Kelley
c2e5d50027
write object file and fix void return type
2015-11-24 13:00:38 -07:00
Andrew Kelley
4bbc074dd7
hello world IR code looks good
2015-11-24 02:43:45 -07:00
Andrew Kelley
7d22a89eec
partial hello world codegen
2015-11-24 00:35:28 -07:00
Andrew Kelley
174baa49bd
progress toward more complex parser gen
2015-11-04 17:15:46 -07:00
Andrew Kelley
303823b6b8
building part of the hello world AST
2015-11-02 03:39:36 -07:00
Andrew Kelley
34f8d80eac
tokenizing hello.zig
2015-11-01 22:21:33 -07:00
Andrew Kelley
1d554f3161
input output
2015-08-05 15:46:40 -07:00