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
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
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
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
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
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
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
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
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
9a8851515b
basic maybe type working
2016-01-02 00:06:06 -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
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
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
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
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
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
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
dfda85e870
ability to call external variadic functions
2015-12-09 01:03:04 -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
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
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
Josh Wolfe
f4b9b03f54
fix codegen for void parameters
2015-12-03 14:29:19 -07:00
Josh Wolfe
f1aaf1353e
add bool literals
2015-12-03 12:15:07 -07:00
Josh Wolfe
5af4ef88ac
local variables work
2015-12-03 10:56:17 -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
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
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
Josh Wolfe
ef482ece7c
no more TypeId. use g->builtin_types.
2015-11-30 15:36:58 -07:00
Andrew Kelley
b77c423f77
all LLVM C++ API contained to one file
2015-11-30 14:43:23 -07:00
Andrew Kelley
4ccb98bdce
analyze no longer depends on llvm C++ API
2015-11-30 14:10:07 -07:00
Josh Wolfe
9e0ff6faa2
factor analysis code out of codegen
2015-11-30 09:14:58 -07:00
Andrew Kelley
8f0f318c39
add directive to specify root export version
2015-11-30 02:12:20 -07:00
Andrew Kelley
9b477230e0
ability to generate shared library and h file
2015-11-29 18:02:20 -07:00
Josh Wolfe
f4721857ed
inline PrimaryExpr ast node
2015-11-29 17:16:32 -07:00
Andrew Kelley
63d4e3ce1e
add missing panic for shared library output
2015-11-29 15:10:06 -07:00
Josh Wolfe
ceb2d44bfc
merge arithmetic binary operator gen functions
2015-11-29 15:08:42 -07:00
Andrew Kelley
a008a81eef
codegen: fix wrong node type
2015-11-29 14:59:41 -07:00
Josh Wolfe
30442ed893
merge conflicts
2015-11-29 14:52:49 -07:00
Josh Wolfe
9a014b52cc
flatten expression ast to hide operator precedence
2015-11-29 14:46:05 -07:00
Andrew Kelley
c1d77f2a23
function call names are expressions
2015-11-29 14:39:11 -07:00
Andrew Kelley
918e7641fc
rename unary expression to prefix op expression
2015-11-29 14:00:34 -07:00
Andrew Kelley
a7555c58d9
add unary expression
2015-11-29 13:37:55 -07:00
Andrew Kelley
855d51840d
remove LLVMZigTargetMachineEmitToFile
...
The llvm C API provided function is adequate.
2015-11-29 11:12:40 -07:00
Andrew Kelley
e5d1f0eea5
parse and codegen for math expressions
2015-11-29 02:43:05 -07:00
Andrew Kelley
f6529341a2
ability to export .o file
2015-11-27 22:13:39 -07:00
Andrew Kelley
03f9922734
remove unnecessary codegen llvm initialization
2015-11-27 21:49:04 -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
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
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
Josh Wolfe
bd5cb3e50e
add hook for environment variable ZIG_DEBIAN_HACK. see #1 .
2015-11-26 14:42:46 -07:00
Andrew Kelley
893e152dab
no errors during codegen
...
also, fix function calling and allow forward declarations
2015-11-25 18:17:35 -07:00
Josh Wolfe
311fd67083
inline AstNodeStatementExpression
2015-11-25 16:43:16 -07:00
Andrew Kelley
86a0ae8699
assert(false) -> zig_unreachable()
2015-11-25 15:48:57 -07:00