Commit Graph

164 Commits

Author SHA1 Message Date
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
Josh Wolfe
e579011a6e inline AstNodeStatement 2015-11-25 15:45:10 -07:00