Andrew Kelley
1c6f415a64
fix compiler crash when indexing types
...
closes #376
2017-05-21 09:50:15 -04:00
Andrew Kelley
565ac3e27a
flip the enum order of FloatMode
2017-05-20 23:26:39 -04:00
Andrew Kelley
29b488245d
add setFloatMode builtin and std.math.floor
...
* skip installing std/rand_test.zig as it's not needed beyond running
the std lib tests
* add std.math.floor function
* add setFloatMode builtin function to choose between
builtin.FloatMode.Optimized (default) and builtin.FloatMode.Strict
(Optimized is equivalent to -ffast-math in gcc)
2017-05-20 23:06:32 -04:00
Andrew Kelley
051ee8e626
change slicing syntax from ... to ..
...
See #359
2017-05-19 10:39:59 -04:00
Andrew Kelley
b483db4868
typeId builtin instead of isInteger, isFloat, etc
...
closes #373
2017-05-17 12:26:35 -04:00
Andrew Kelley
9851a943ed
add compile error for compile-time integer cast truncating bits
...
closes #371
2017-05-16 17:04:35 -04:00
Andrew Kelley
f375063917
fix printf format specifier
2017-05-16 10:19:35 -04:00
Andrew Kelley
a7570186eb
add compile error for comptime division by zero
...
closes #372
2017-05-14 13:07:45 -04:00
Andrew Kelley
63f6676fee
add compile error for casting negative value to...
...
...unsigned integer at compile-time
2017-05-10 00:21:27 -04:00
Andrew Kelley
6237411716
inline function call with builtin function instead...
...
...of special syntax.
partially reverts 41144a8566
closes #306
2017-05-09 22:54:23 -04:00
Andrew Kelley
01f066de37
ability to slice ptr to hard coded integer at comptime
...
closes #369
2017-05-09 22:23:38 -04:00
Andrew Kelley
2f20fe6ecd
delete @generatedCode builtin function
...
good riddance
2017-05-07 23:25:36 -04:00
Andrew Kelley
5774b48ceb
rename c_long_double to c_longdouble
...
to be consistent with other c primitive type names
2017-05-07 19:51:44 -04:00
Andrew Kelley
e485af94d4
fix inability to initialize global pointer to global array element
...
closes #366
2017-05-07 18:09:45 -04:00
Andrew Kelley
7261cd19b7
detect duplicate switch value even when else prong present
...
closes #43
2017-05-07 13:40:35 -04:00
Andrew Kelley
11d8a8cc7b
fix comptime switch on enum with ref payload
...
See #43
2017-05-07 13:21:53 -04:00
Andrew Kelley
818a0a2629
switch expression - add compile errors
...
* for duplicate integer value
* for missing integer values
* for missing else prong
see #43
2017-05-07 12:07:35 -04:00
Andrew Kelley
29beb603b7
allow division and remainder operators sometimes
...
when the values are comptime known and the result would be the same,
allow `/` and `%` for signed integers and floats.
closes #365
2017-05-06 23:59:57 -04:00
Andrew Kelley
157af4332a
builtin functions for division and remainder division
...
* add `@divTrunc` and `@divFloor` functions
* add `@rem` and `@mod` functions
* add compile error for `/` and `%` with signed integers
* add `.bit_count` for float primitive types
closes #217
2017-05-06 23:13:12 -04:00
Andrew Kelley
866c841dd8
add compile error when unable to inline a function
...
See #38
2017-05-04 15:11:24 -04:00
Andrew Kelley
b6a679c0ed
implement else on loops and break can give an expression
...
closes #357
2017-05-04 12:43:11 -04:00
Andrew Kelley
20b1491e6b
implement while for nullables and error unions
...
See #357
2017-05-04 10:28:00 -04:00
Andrew Kelley
698829b772
change while syntax
...
Old:
```
while (condition; expression) {}
```
New:
```
while (condition) : (expression) {}
```
This is in preparation to allow nullable and
error union types as the condition. See #357
2017-05-03 18:12:07 -04:00
Andrew Kelley
644ea2dde9
remove test and try expressions in favor of if expressions
...
See #357
2017-05-03 17:23:11 -04:00
Andrew Kelley
0940d46c01
add compile error for shadowing variable
...
closes #360
2017-05-03 16:13:57 -04:00
Andrew Kelley
6756c27ca4
zig build: cache_root is relative to build_root
2017-05-03 16:13:57 -04:00
Andrew Kelley
f69d28a087
fix debug info for nullable type
2017-05-02 18:21:55 -04:00
Andrew Kelley
24a9a42966
add safe release build mode
...
closes #288
2017-05-02 17:34:21 -04:00
Andrew Kelley
7c236f6dd8
fix compiler crash when referencing a variable...
...
...in an if after an if in the 2nd switch prong
closes #355
2017-05-02 12:59:09 -04:00
Andrew Kelley
9f92042da9
allow undefined to be resolved with other types
...
closes #295
2017-05-01 22:37:34 -04:00
Andrew Kelley
cff5358f60
make debug safety stuff lazy
2017-05-01 19:16:48 -04:00
Andrew Kelley
3cbd0065fa
basic support for specifying packages at the command line
...
See #226
2017-05-01 16:35:10 -04:00
Andrew Kelley
17b935325e
@import("builtin")
instead of @compileVar
...
See #226
Closes #220
2017-05-01 13:12:38 -04:00
Andrew Kelley
363d9038c9
zig build: organize build artifacts
...
closes #328
2017-04-30 18:56:24 -04:00
Andrew Kelley
43e7ac8418
add peer type resolution []T
and [0]T
...
closes #349
also fix slicing const array to be []const T instead of []T
2017-04-30 12:21:24 -04:00
Andrew Kelley
29defd705d
back to AT&T syntax for assembly
...
this reverts 5c04730534
.
sadly the quality of the intel dialect in llvm's assembly
parser has many frustrating bugs, and generally has unfortunate
syntax.
the plan is to use AT&T for now since it at least works,
and eventually zig will have its own assembly parser for
x86 and it will be as close to NASM as possible.
2017-04-30 11:28:11 -04:00
Andrew Kelley
cbfe4b4bae
add implicit cast from [0]T to %[]T
...
closes #347
also add std.os.path.relative
2017-04-29 19:23:33 -04:00
Andrew Kelley
a147f06585
zig puts temporary object files in zig-cache folder
...
See #298
2017-04-28 02:22:12 -04:00
Andrew Kelley
458afb0ef9
phi instruction retains stack ptr hint
2017-04-27 23:40:43 -04:00
Andrew Kelley
2e512a0e6e
add compile error for returning local variable address
...
closes #344
2017-04-27 19:40:35 -04:00
Andrew Kelley
1691074b4b
add no-elim-base-pointer to __zig_fail function
...
fixes missing frame for unwrapping an error
closes #345
2017-04-27 18:40:17 -04:00
Andrew Kelley
7e11ef79d6
zig test no longer requires a separate test_runner.o file
...
See #298
2017-04-27 16:19:20 -04:00
Andrew Kelley
7b0542d08b
build system: consolidate duplicate code and more
...
* add ability to add assembly files when building an exe, obj, or lib
* add implicit cast from `[N]T` to `?[]const T` (closes #343 )
* remove link_exe and link_lib in favor of allowing build_exe and
build_lib support no root zig source file
2017-04-26 19:17:05 -04:00
Andrew Kelley
afa80da857
revert the last 3 compile time improvements
...
they introduced complexity into the compiler and didn't
really help.
This reverts commit efa771af75
.
This reverts commit 8614397110
.
This reverts commit 13c6a58a61
.
2017-04-25 17:14:22 -04:00
Andrew Kelley
13c6a58a61
compile time improvement - move bounds checking to function calls
...
once again this barely had an effect:
Before:
./build size: 1.3 MB
hello.zig size: 301 KB
full test: 1m31.253s
debug test: 19.607s
hello.zig timing:
Name Start End Duration Percent
Initialize 0.0000 0.0000 0.0000 0.0002
Semantic Analysis 0.0000 0.0431 0.0431 0.2262
Code Generation 0.0431 0.0660 0.0229 0.1201
LLVM Emit Object 0.0660 0.1765 0.1105 0.5795
Build Dependencies 0.1765 0.1890 0.0125 0.0655
LLVM Link 0.1890 0.1906 0.0016 0.0086
Generate .h 0.1906 0.1906 0.0000 0.0000
Total 0.0000 0.1906 0.1906 1.0000
After:
./build size: 1.3 MB
hello.zig size: 300 KB
full test: 1m31.882s
debug test: 19.569s
hello.zig timing:
Name Start End Duration Percent
Initialize 0.0000 0.0000 0.0000 0.0002
Semantic Analysis 0.0000 0.0425 0.0424 0.2228
Code Generation 0.0425 0.0661 0.0236 0.1239
LLVM Emit Object 0.0661 0.1762 0.1101 0.5782
Build Dependencies 0.1762 0.1888 0.0126 0.0664
LLVM Link 0.1888 0.1905 0.0016 0.0085
Generate .h 0.1905 0.1905 0.0000 0.0000
Total 0.0000 0.1905 0.1905 1.0000
2017-04-25 16:53:22 -04:00
Andrew Kelley
8614397110
compile time improvement - move overflow math safety to fns
...
move some boilerplate code having to do with overflow math safety
to functions.
Again the timing difference is not much:
Before:
./build size: 1.3 MB
hello.zig size: 308 KB
full test: 1m33.588s
debug test: 20.303s
hello.zig timing:
Name Start End Duration Percent
Initialize 0.0000 0.0000 0.0000 0.0002
Semantic Analysis 0.0000 0.0425 0.0425 0.2202
Code Generation 0.0425 0.0675 0.0250 0.1293
LLVM Emit Object 0.0675 0.1789 0.1114 0.5773
Build Dependencies 0.1789 0.1913 0.0124 0.0640
LLVM Link 0.1913 0.1931 0.0018 0.0091
Generate .h 0.1931 0.1931 0.0000 0.0000
Total 0.0000 0.1931 0.1931 1.0000
After:
./build size: 1.3 MB
hello.zig size: 301 KB
full test: 1m31.253s
debug test: 19.607s
hello.zig timing:
Name Start End Duration Percent
Initialize 0.0000 0.0000 0.0000 0.0002
Semantic Analysis 0.0000 0.0431 0.0431 0.2262
Code Generation 0.0431 0.0660 0.0229 0.1201
LLVM Emit Object 0.0660 0.1765 0.1105 0.5795
Build Dependencies 0.1765 0.1890 0.0125 0.0655
LLVM Link 0.1890 0.1906 0.0016 0.0086
Generate .h 0.1906 0.1906 0.0000 0.0000
Total 0.0000 0.1906 0.1906 1.0000
2017-04-25 15:37:56 -04:00
Andrew Kelley
efa771af75
compile time improvement - add __zig_panic_slice fn
...
move some boilerplate code having to do with panicking
to a function.
Here's the timing difference. It's not much:
Before:
full test: 1m36.511s
debug test: 20.862s
hello.zig
Name Start End Duration Percent
Initialize 0.0000 0.0000 0.0000 0.0001
Semantic Analysis 0.0000 0.0421 0.0420 0.2109
Code Generation 0.0421 0.0620 0.0200 0.1003
LLVM Emit Object 0.0620 0.1852 0.1231 0.6180
Build Dependencies 0.1852 0.1974 0.0122 0.0615
LLVM Link 0.1974 0.1993 0.0018 0.0093
Generate .h 0.1993 0.1993 0.0000 0.0000
Total 0.0000 0.1993 0.1993 1.0000
After:
full test: 1m33.588s
debug test: 20.303s
hello.zig
Name Start End Duration Percent
Initialize 0.0000 0.0000 0.0000 0.0002
Semantic Analysis 0.0000 0.0425 0.0425 0.2202
Code Generation 0.0425 0.0675 0.0250 0.1293
LLVM Emit Object 0.0675 0.1789 0.1114 0.5773
Build Dependencies 0.1789 0.1913 0.0124 0.0640
LLVM Link 0.1913 0.1931 0.0018 0.0091
Generate .h 0.1931 0.1931 0.0000 0.0000
Total 0.0000 0.1931 0.1931 1.0000
2017-04-25 14:20:15 -04:00
Andrew Kelley
e0050af293
add some timing diagnostics
...
pass --enable-timing-info to print a nice table like this:
```
Name Start End Duration Percent
Initialize 0.0000 0.0000 0.0000 0.0001
Semantic Analysis 0.0000 0.0421 0.0420 0.2109
Code Generation 0.0421 0.0620 0.0200 0.1003
LLVM Emit Object 0.0620 0.1852 0.1231 0.6180
Build Dependencies 0.1852 0.1974 0.0122 0.0615
LLVM Link 0.1974 0.1993 0.0018 0.0093
Generate .h 0.1993 0.1993 0.0000 0.0000
Total 0.0000 0.1993 0.1993 1.0000
```
2017-04-25 12:29:25 -04:00
Andrew Kelley
245eed8afe
better stack traces for ELF x86_64
2017-04-24 12:14:45 -04:00
Josh Wolfe
08a871f625
defer requires expr to be void. closes #341
2017-04-23 22:33:06 -07:00
Josh Wolfe
ac7971122d
fix check-statement-is-void. add tests
...
see #291
2017-04-23 21:50:34 -07:00
Josh Wolfe
c6605cba83
blocks check that their statements are void
...
closes #291
This changes the error message "return value ignored" to "expression value is ignored".
This is because this error also applies to {1;}, which has no function calls.
Also fix ignored expression values in std and test.
This caught a bug in debug.readAllocBytes where an early Eof error would have been missed.
See #219 .
2017-04-23 21:15:15 -07:00
Andrew Kelley
6de33ded81
make undefined as a constant value lazy
...
closes #268
2017-04-23 14:34:40 -04:00
Josh Wolfe
2ed47070ef
refactor ir_gen_block to make different return paths more clear
2017-04-23 09:04:15 -07:00
Josh Wolfe
14dfbd6ad3
remove redundant unreachable code error
2017-04-23 08:36:21 -07:00
Andrew Kelley
0f633167c5
fix crash when unwrapping error with no error decls
...
closes #339
2017-04-23 03:14:22 -04:00
Andrew Kelley
ad9040443c
new compile errors for setGlobalAlign and setGlobalSection builtins
...
if you try to use them on an external variable or function
then you get a compile error, since the alignment/section
is set externally in this case.
closes #244
2017-04-22 12:54:00 -04:00
Andrew Kelley
aafb0b9082
slicing now returns correct const-ness
...
also remove the ability to override constness when slicing
closes #334
2017-04-22 12:19:20 -04:00
Andrew Kelley
1a0081b763
add peer type resolution for T and ?T
...
See #334
2017-04-22 11:45:04 -04:00
Andrew Kelley
0cce115476
update syntax for try and nullable unwrapping
...
closes #285
2017-04-21 16:46:33 -04:00
Andrew Kelley
d5346d7a80
remove ?return
and ?defer
...
closes #309
2017-04-21 15:08:03 -04:00
Andrew Kelley
e3c524c1d4
rename @ptrcast
to @ptrCast
to follow convention
2017-04-21 10:39:13 -04:00
Andrew Kelley
fb492d19eb
zig build system supports building a library
...
See #329
Supporting work:
* move std.cstr.Buffer0 to std.buffer.Buffer
* add build.zig to example/shared_library/ and add an automated test
for it
* add std.list.List.resizeDown
* improve std.os.makePath
- no longer recursive
- takes into account . and ..
* add std.os.path.isAbsolute
* add std.os.path.resolve
* reimplement std.os.path.dirname
- no longer requires an allocator
- handles edge cases correctly
2017-04-21 01:56:12 -04:00
Raul Leal
5234016561
Add @offsetOf builtin function
2017-04-20 11:53:00 +00:00
Andrew Kelley
d12f1f5b49
test framework supports name prefix and filter argument
...
rename self hosted tests to behavior tests
2017-04-19 15:38:12 -04:00
Andrew Kelley
d1e01e43d3
convert assemble and link tests to zig build system
2017-04-19 14:00:12 -04:00
Andrew Kelley
666435195f
update zig build help text when no build.zig found
2017-04-19 04:36:48 -04:00
Andrew Kelley
37b9a2e6a4
convert compare-output tests to use zig build system
2017-04-19 01:15:20 -04:00
Andrew Kelley
237dfdbdc6
error when building exe with no entry point
...
closes #30
2017-04-18 14:04:48 -04:00
Andrew Kelley
6f0f8a92ec
bail out of analysis on first error during comptime eval
...
prevents an error during comptime eval from printing a
large number of compile errors
2017-04-18 04:02:36 -04:00
Andrew Kelley
a791417552
add @fieldParentPtr
builtin function
...
closes #320
2017-04-18 02:28:05 -04:00
Andrew Kelley
407916cd2f
rename @intType
to @IntType
to follow convention
...
closes #327
2017-04-18 00:05:09 -04:00
Andrew Kelley
c7852bd596
minor clean ups from previous commit
2017-04-17 20:15:19 -04:00
Raul Leal
3266585606
Implicit cast from T to %?T
...
closes #171
2017-04-17 19:55:56 -04:00
Andrew Kelley
2e0b114fdc
add compile error for intToPtr with a 0-bit ptr
...
See #323
2017-04-17 19:28:33 -04:00
Andrew Kelley
47336abae3
improvements to zig build system and unwrap error safety
...
* zig build system: create standard dynamic library sym links
* unwrapping an error results in a panic message that contains
the error name
* rename error.SysResources to error.SystemResources
* add std.os.symLink
* add std.os.deleteFile
2017-04-17 06:47:20 -04:00
Josh Wolfe
3e93796e24
comptime ({}) should not get an implicit semicolon
...
closes #292 .
2017-04-14 16:09:01 -07:00
Andrew Kelley
5fdefe58e4
zig build system understands the concept of dependencies
...
See #204
2017-04-13 17:21:00 -04:00
Andrew Kelley
dcfa0e50dc
all internal functions get unnamed_addr attribute
2017-04-13 03:34:57 -04:00
Andrew Kelley
f2140efc52
Merge remote-tracking branch 'origin/parser'
2017-04-13 03:09:09 -04:00
Andrew Kelley
bf57d8a7e3
typedefpocalypse
...
closes #314
2017-04-13 03:07:58 -04:00
Josh Wolfe
356424916c
block statement lists never get fake expressions
...
instead blocks have a field that encodes whether the last statement ended with
a semicolon.
2017-04-12 23:22:32 -07:00
Josh Wolfe
919910312d
make it an error to ignore a statement's value
...
this makes {1;} an error.
2017-04-12 22:21:35 -07:00
Andrew Kelley
bf67427c67
fix crash when using zig to link
...
without explicit dynamic linker
2017-04-13 01:15:25 -04:00
Andrew Kelley
41144a8566
ability to inline at function callsite
...
closes #306
2017-04-13 00:13:54 -04:00
Andrew Kelley
2864359950
zig build system writes template build.zig file when none exists
...
see #204
2017-04-11 06:14:46 -04:00
Andrew Kelley
7f47b0c271
run alwaysinline pass in debug mode
...
before this commit, the optimized IR code that is displayed in
--verbose mode is not actually what gets emitted to an object
file.
that is now corrected, and we make sure to run the alwaysinliner
pass even in debug mode, so you can rely on "inline" keyword
inlining a function, guaranteed.
See #306
2017-04-11 03:37:44 -04:00
Andrew Kelley
11a6550324
fix some -Wconversion errors
2017-04-10 20:02:39 -04:00
Andrew Kelley
34eff50326
fix for loops not working at compile-time
...
closes #315
2017-04-10 03:00:19 -04:00
Andrew Kelley
0e77b0ac89
fix mangling exported global variables
...
closes #316
2017-04-10 02:32:11 -04:00
Andrew Kelley
095591f0b0
add enumTagName builtin function
...
closes #299
2017-04-08 17:45:22 -04:00
Andrew Kelley
7611ed3484
allow implicit cast from [N]T
to &const []const T
...
closes #296
2017-04-07 17:56:01 -04:00
Andrew Kelley
f7e9d7aa5d
ability to implicitly cast integer literal to &const Int
...
where Int is an integer type
also introduce `@intToPtr` builtin for converting a usize
to a pointer. users now have to use this instead of `(&T)(int)`.
closes #311
2017-04-07 15:35:38 -04:00
Andrew Kelley
ffb4852012
add compile error for the bug of unable to call var ags at compile time
...
See #313
2017-04-07 00:33:19 -04:00
Andrew Kelley
a3de550d3b
fix var args having wrong index when runtime param before it
...
closes #312
2017-04-06 21:00:49 -04:00
Andrew Kelley
273cebdf4d
peer resolve types [N]T, [M]T as []const T
...
closes #125
2017-04-06 18:07:38 -04:00
Andrew Kelley
47f58d6d02
fix runtime struct initialization of bitfield
...
closes #308
2017-04-06 15:04:18 -04:00
Andrew Kelley
6fbe1632d0
Update zig build system to support user defined options
...
* Fix assertion failure when switching on type.
Closes #310
* Update zig build system to support user defined options.
See #204
* fmt.format supports {sNNN} to set padding for a buffer arg.
* add std.fmt.bufPrint and std.fmt.allocPrint
* std.hash_map.HashMap.put returns the previous value
* add std.mem.startsWith
2017-04-06 05:34:04 -04:00
Andrew Kelley
d65cd73a8b
add support to use zig as a linker driver
...
closes #243
I also added --grep to ./run_tests if you want to single out
some specific tests
2017-04-05 07:49:40 -04:00
Andrew Kelley
8c10b6dcbd
ability to use zig as an assembler
...
see #243
2017-04-05 03:36:55 -04:00
Andrew Kelley
a461ae6c1f
fix crash when referencing invalid member of builtin enum
...
closes #304
2017-04-04 21:36:24 -04:00
Andrew Kelley
e30f713640
more accurate detection of pub main
2017-04-04 21:19:22 -04:00
Andrew Kelley
0edc2b19fe
support module level assembly
...
closes #256
2017-04-04 19:47:22 -04:00
Andrew Kelley
00efbfa054
link: correctly print debug linker invocation
2017-04-04 06:15:23 -04:00
Andrew Kelley
8db9d04e6f
link: fix ignoring first linker arg
...
LLD treats the first argument as arg[0], the exe name
2017-04-04 06:07:09 -04:00
Andrew Kelley
e332cd65c9
zig build system: delete ./build file on success
...
see #204
2017-04-04 02:02:51 -04:00
Andrew Kelley
1c6000d047
zig build system improvements, add some std API
...
* add std.buf_map.BufMap
* add std.buf_set.BufSet
* add std.mem.split
* zig build system improvements (See #204 )
- automatically parses NIX_CFLAGS_COMPILE and NIX_LDFLAGS
- add builder.addCIncludePath
- add builder.addRPath
- add builder.addLibPath
- add exe.linkLibrary
2017-04-04 01:52:20 -04:00
Andrew Kelley
b46344fd01
link: delete code that checks the linker version
...
since we depend on LLD for linking
2017-04-03 23:29:53 -04:00
Andrew Kelley
c9ae30d27e
delete alloca builtin function
...
See #225
introduce os.EnvMap
2017-04-03 18:11:57 -04:00
Andrew Kelley
c400cb429a
zig build system: add setLinkerScript and setTarget
...
* See #204 - zig build system
* allow builtin types Os, Environ, Arch to be used at runtime.
they have zero_bits=false and debug info now.
* Eradicate use of `@alloca` in std for syscalls. See #225
* add `std.io.writeFile`
* `std.debug.panic` adds a newline to format
2017-04-03 05:04:46 -04:00
Andrew Kelley
8fd0fddce5
zig build system progress
...
* In-progress os.ChildProcess.spawn implementation. See #204
* Add explicit cast from integer to error. Closes #294
* fix casting from error to integer
* fix compiler crash when initializing variable to undefined
with no type
2017-04-02 18:19:59 -04:00
Josh Wolfe
0594487a2e
fix else-if parsing
...
implicit semicolon rules apply recursively to the "else" clause of if and try
if (a) {} else {} // implicit semicolon
if (a) {} else if (a) {} // implicit semicolon
if (a) {} else while (a) {} // implicit semicolon
2017-04-02 15:15:48 -07:00
Josh Wolfe
a33be6fc99
defer without a block body requires a following semicolon
2017-04-02 13:47:23 -07:00
Josh Wolfe
8d03d666af
add secret void expression after defer statement if it's the last statement in a block
2017-04-02 13:18:12 -07:00
Josh Wolfe
e3c796258c
allow implicit semicolon after defer {}
2017-04-02 13:01:23 -07:00
Josh Wolfe
136a9a9d6b
variable declarations must be followed by semicolon
2017-04-02 12:46:18 -07:00
Josh Wolfe
4b9e782d37
fix confusion in block expression parsing
...
closes #292
* if, try, while, for, comptime, defer are "greedy" with {} blocks,
meaning if their bodies are blocks, then no suffix operator is allowed
after the block. The {} block gets "built into" the containing statement,
like the body of a switch statement.
* the Expression syntactic element is no longer "greedy" with {} blocks,
meaning it's possible to have suffix operators after {} blocks without
needing the {} block to be an rhs operand first.
2017-04-02 11:50:34 -07:00
Josh Wolfe
9968879261
Require top-level-declaration comptime use {}
...
This forbids `comptime 1 comptime 1` at top-level scope.
2017-04-02 11:02:47 -07:00
Josh Wolfe
36a015741d
clean up analysis of {blocks}
...
* Don't insert void statements all over the place. {} now stays as
{} instead of {{}}, and {;} becomes {} instead of {{};{}}.
* Ensure final statement is always the return value statement, or
the block is empty. This means {label:} becomes {label:{}}.
2017-03-31 08:54:03 -07:00
Andrew Kelley
f8e63c4584
change @bitcast
to @ptrcast
...
See #290
2017-03-31 06:18:20 -04:00
Andrew Kelley
3ca027ca82
first pass at zig build system
...
* `zig build --export [obj|lib|exe]` changed to `zig build_obj`,
`zig build_lib` and `zig build_exe` respectively.
* `--name` parameter is optional when it can be inferred from the
root source filename. closes #207
* `zig build` now looks for `build.zig` which interacts with
`std.build.Builder` to describe the targets, and then the zig
build system prints TODO: build these targets. See #204
* add `@bitcast` which is mainly used for pointer reinterpret
casting and make explicit casting not do pointer reinterpretation.
Closes #290
* fix debug info for byval parameters
* sort command line help options
* `std.debug.panic` supports format string printing
* add `std.mem.IncrementingAllocator`
* fix const ptr to a variable with data changing at runtime.
closes #289
2017-03-31 05:55:41 -04:00
Andrew Kelley
a32b5929cc
add stack protector safety when linking libc
...
* introduce zigrt file. it contains only weak symbols so that
multiple instances can be merged. it contains __zig_panic
so that multiple .o files can call the same panic function.
* remove `@setFnVisible` builtin and add @setGlobalLinkage builtin
which is more powerful
* add `@panic` builtin function.
* fix collision of symbols with extern prototypes and internal
function names
* add stack protector safety when linking against libc. To add
the safety mechanism without libc requires implementing
Thread Local Storage. See #276
2017-03-26 21:07:07 -04:00
Andrew Kelley
8aeea72654
add debug safety checks for remainder division
...
See #217
2017-03-26 15:06:43 -04:00
Andrew Kelley
3103355805
add comptime eval for some uint comparisons with 0
...
closes #55
2017-03-26 14:41:17 -04:00
Andrew Kelley
5bc9feb5cb
organize std and make import relative to current file
...
closes #216
2017-03-26 06:39:28 -04:00
Andrew Kelley
7ce753a16b
replace "&&" and "||" with "and" and "or"
...
closes #272
2017-03-26 05:21:28 -04:00
Andrew Kelley
451ce09067
new unreachable syntax
...
* `noreturn` is the primitive type.
* `unreachable` is a control flow keyword.
* `@unreachable()` builtin function is deleted.
closes #214
2017-03-26 04:58:48 -04:00
Andrew Kelley
22e6bfca96
add comptime top level declaration
...
closes #255
2017-03-26 04:32:13 -04:00
Andrew Kelley
7c53230a61
introduce copyable concept
...
closes #103
2017-03-26 03:39:18 -04:00
Andrew Kelley
5c04730534
use intel dialect for inline assembly
...
closes #242
2017-03-23 18:59:43 -04:00
Andrew Kelley
fd634f3db3
don't mangle symbols with underscores
...
closes #275
2017-03-23 18:28:10 -04:00
Andrew Kelley
d6856859d3
improvements for windows and libc integration
...
* standard library knows if it is linking against libc and will
sometimes call libc functions in that case instead of providing
redundant definitions
* fix infinite loop bug when resolving use declarations
* allow calling the same C function from different C imports.
closes #277
* push more logic from compiler to std/bootstrap.zig
* standard library provides way to access errno
closes #274
* fix compile error in standard library for windows
* add implementation of getRandomBytes for windows
2017-03-23 02:59:58 -04:00
Andrew Kelley
01b2bf4a44
on Darwin/MacOS/iOS, add c to link libs implicitly
2017-03-22 11:55:41 -04:00
Andrew Kelley
87bc97daef
unify main entry point regardless of whether linking libc
...
closes #248
2017-03-22 11:26:30 -04:00
Andrew Kelley
e1c47d6fe8
fix test regression regarding shadowing names
...
closes #271
2017-03-20 15:32:13 -04:00
Andrew Kelley
fa7c64ccd5
lazy analysis of top level declarations
...
previously, we had lazy analysis of top level declarations,
but if a declaration was referenced within a compile-time
if or switch statement, that would still add the top
level declaration to the resolution queue.
now we have a declref ir instruction, which is only resolved
if we analyze the instruction. this takes into account comptime
branching.
closes #270
2017-03-18 11:28:43 -04:00
Andrew Kelley
af536ac343
introduce new test syntax
...
* remove setFnTest builtin
* add test "name" { ... } syntax
* remove --check-unused argument. functions are always lazy now.
2017-03-16 16:02:35 -04:00
Andrew Kelley
329457bb4f
Merge branch 'master' into lld
2017-03-14 21:39:04 -04:00
Andrew Kelley
a76558db26
fix behavior with reinterpreting constant memory
2017-03-14 21:38:27 -04:00
Andrew Kelley
7efa2cd81c
add --each-lib-rpath option and corresponding config option
...
This adds an rpath entry for each used dynamic library directory.
This is necessary on some systems such as NixOS.
2017-03-13 13:11:55 -04:00
Andrew Kelley
d10bbd28e9
use lld instead of system linker
2017-03-13 11:54:56 -04:00
Andrew Kelley
7bc0145b80
types with zero bits do not have a pointer handle
2017-03-10 11:30:30 -05:00
Andrew Kelley
434f017aee
codegen nullable void the same way as bool
...
See #104
2017-03-10 11:21:41 -05:00
Andrew Kelley
c78dc5043b
add default value for macosx version min when compiling natively
...
closes #264
2017-03-10 02:58:23 -05:00
Andrew Kelley
c91dbdb27c
fix not allocating enough memory for passing args
...
fixes a bug introduced in c62db5721c
2017-03-10 02:50:53 -05:00
Andrew Kelley
cd31f875a6
update to llvm 4.0
2017-03-10 02:29:01 -05:00
Andrew Kelley
c62db5721c
support passing var args directly
...
See #77
2017-03-09 16:13:38 -05:00
Andrew Kelley
558ae2f21a
fix a case of invalid ptr const-ness
2017-03-08 17:02:18 -05:00
Andrew Kelley
ddd9624e2d
fix assertion error, trying to dereference to array
...
thanks to hoppetosse on IRC for reporting the issue
2017-03-07 19:08:02 -05:00
Andrew Kelley
6d0afc2bd2
add compile error for assigning number literal to non-comptime var
2017-03-02 18:51:19 -05:00
Andrew Kelley
03b6d9f547
fix assertion failure for some switch errors
2017-02-28 03:32:12 -05:00
Andrew Kelley
1195994880
fix inability to write to global in some cases
...
before, when we initialized a variable by copying the
initialization value, it made the internal const value
references point to a duplicate value, resulting in
a phony duplicate global value being updated instead of
the real on. now the behavior is as expected.
thanks to hoppetosse for pointing out this bug on IRC.
2017-02-27 00:07:11 -05:00
Andrew Kelley
25761570f1
more robust const struct values
2017-02-26 23:50:04 -05:00
Andrew Kelley
889bed13c3
unwrap error payload instruction has side effects only if safety check on
2017-02-24 15:11:33 -05:00
Andrew Kelley
cd992b89d2
fix unwrap error payload not emitting debug safety
2017-02-24 15:07:46 -05:00
Andrew Kelley
a665872e88
add compile error for ignoring return value
...
also introduce the _ identifier which you can assign to
to discard a return value
closes #219
2017-02-24 15:01:19 -05:00
Andrew Kelley
3b40aaa01f
add compile error for control flow using comptime var at runtime
...
closes #266
2017-02-24 13:57:00 -05:00
Andrew Kelley
3075d8aee7
fix use decls not always working
2017-02-23 16:52:13 -05:00
Andrew Kelley
b1ace32f23
fix wrong format specifier
...
closes #263
2017-02-22 15:36:57 -05:00
Andrew Kelley
786677f80c
fix regression with bit fields that align properly
2017-02-22 00:58:31 -05:00
Andrew Kelley
d794549985
bitfields support for array of non-store-aligned packed structs
2017-02-22 00:49:10 -05:00
Andrew Kelley
cf5108f222
correct size of types for packed structs
...
with byte aligned but non-power-of-2 fields such as 24
2017-02-21 14:22:23 -05:00
Andrew Kelley
4709fe1176
more robust detection of types that failed to resolve
2017-02-20 19:56:07 -05:00
Andrew Kelley
c4ee37f506
fix assertion failure when first use of a struct is sizeOf
2017-02-18 18:33:21 -05:00
Andrew Kelley
0148f39df9
pointers with bit offset contain length
...
adds compile error when passing pointer that is byte-aligned
at the beginning but not the end to a function expecting
a fully byte aligned pointer
closes #261
2017-02-16 19:35:42 -05:00
Andrew Kelley
244362fed7
ability to write to bit fields
...
See #261
2017-02-16 18:42:52 -05:00
Andrew Kelley
b6e7a0dadd
support arithmetic for non byte aligned integer types
...
see #261
2017-02-16 17:08:55 -05:00
Andrew Kelley
fc5d47b9b9
reading from a bit field partially works
...
See #261
Still need to do:
* reading a field that has bit offset 0 but still needs to
shift and truncate
* writing a field
2017-02-16 15:45:41 -05:00
Andrew Kelley
4b5cc80f66
move volatile pointers to central type table
2017-02-16 13:58:42 -05:00
Andrew Kelley
4a957b9ea3
move int and array types to central table
2017-02-16 13:45:14 -05:00
Andrew Kelley
1fc2082b4c
ability to declare const bitfields
...
See #261
2017-02-15 18:55:29 -05:00
Andrew Kelley
63d37b7cff
add runtime debug safety for dividing integer min value by -1
...
closes #260
2017-02-14 01:08:30 -05:00
Andrew Kelley
0931b85bd0
fix crash when return value is ??void
...
closes #258
2017-02-12 18:27:34 -05:00
Andrew Kelley
79ec5a0287
fix tokenization assertion failure on some float numbers
...
See #258
2017-02-12 17:56:34 -05:00
Andrew Kelley
6dba1f1c8e
slice and array re-work plus some misc. changes
...
* `@truncate` builtin allows casting to the same size integer.
It also performs two's complement casting between signed and
unsigned integers.
* The idiomatic way to convert between bytes and numbers is now
`mem.readInt` and `mem.writeInt` instead of an unsafe cast.
It works at compile time, is safer, and looks cleaner.
* Implicitly casting an array to a slice is allowed only if the
slice is const.
* Constant pointer values know if their memory is from a compile-
time constant value or a compile-time variable.
* Cast from [N]u8 to []T no longer allowed, but [N]u8 to []const T
still allowed.
* Fix inability to pass a mutable pointer to comptime variable at
compile-time to a function and have the function modify the
memory pointed to by the pointer.
* Add the `comptime T: type` parameter back to mem.eql. Prevents
accidentally creating instantiations for arrays.
2017-02-12 17:35:51 -05:00
Andrew Kelley
ca180d3f02
std.io.parseUnsigned buf parameter is const
...
fixes padding in printf
See #258
2017-02-11 15:06:20 -05:00
Andrew Kelley
f7173f4f08
fix crash on string literal with character code >= 128
...
See #258
2017-02-11 14:01:11 -05:00
Andrew Kelley
39287d7346
rework compile-time known pointer values
...
See #257
2017-02-11 13:13:45 -05:00
Andrew Kelley
92ffcc84a9
remove the depends_on_compile_var code
...
cleanup from the decision in commit 8a859afd58
to remove "unnecessary if statement" error
2017-02-09 12:43:08 -05:00
Andrew Kelley
fc100d7b3b
lots of miscellaneous things all in one big commit
...
* add `@compileLog(...)` builtin function
- Helps debug code running at compile time
- See #240
* fix crash when there is an error on the start value of a slice
* add implicit cast from int and float types to int and float
literals if the value is known at compile time
* make array concatenation work with slices in addition to
arrays and c string literals
* fix compile error message for something not having field access
* fix crash when `@setDebugSafety()` was called from a
function being evaluated at compile-time
* fix compile-time evaluation of overflow math builtins.
* avoid debug safety panic handler in builtin.o and compiler_rt.o
since we use no debug safety in these modules anyway
* add compiler_rt functions for division on ARM
- Closes #254
* move default panic handler to std.debug so users can
call it manually
* std.io.printf supports a width in the format specifier
2017-02-09 03:09:25 -05:00
Andrew Kelley
8a859afd58
std.io supports printing integers as hex values
...
remove "unnecessary if statement" error
this "depends on compile variable" code is too hard to validate,
and has false negatives. not worth it right now.
std.str removed, instead use std.mem.
std.mem.eql and std.mem.sliceEql merged and do not require explicit
type argument.
2017-02-07 17:23:50 -05:00
Andrew Kelley
92793252ad
inline assembly allows clobbers with no input
2017-02-07 01:53:45 -05:00
Andrew Kelley
916a96fb72
variables, memcpy, and memset all get alignment
...
See #37
2017-02-07 01:50:10 -05:00
Andrew Kelley
573f3f8d48
coldcc works better
...
* Only use Cold Calling Convention on x86
* Add the cold attribute to functions marked with coldcc
2017-02-06 13:50:19 -05:00
Andrew Kelley
07a71fc322
improved behavior on debug safety crash
...
* instead of emitting a breakpoint for a debug safety crash,
zig calls a panic function which prints an error message
and a stack trace and then calls abort.
* on freestanding OS, this panic function has a default
implementation of a simple infinite loop.
* users can override the panic implementation by providing
`pub fn panic(message: []const u8) -> unreachable { }`
* workaround for LLVM segfaulting when you try to use cold
calling convention on ARM.
closes #245
2017-02-06 03:10:32 -05:00
Andrew Kelley
28f63b8a4f
fix volatile not respected for storing through a struct pointer
2017-02-05 20:49:14 -05:00
Andrew Kelley
d26bb3ae2e
fix assigning to const ptr through struct or index
2017-02-05 19:55:37 -05:00
Andrew Kelley
7749ffd797
try expression can omit variable assignments
2017-02-05 18:58:58 -05:00
Andrew Kelley
b9c943b066
tell LLVM the target sub arch type
2017-02-05 18:23:54 -05:00
Andrew Kelley
135c021c83
delete unneeded IR code and fix assigning to const ptr
2017-02-05 16:06:06 -05:00
Andrew Kelley
025051885b
fix volatile not respected for loads
2017-02-05 16:00:12 -05:00
Andrew Kelley
d151c58788
all functions are nounwind because zig does not support exceptions
2017-02-05 13:14:42 -05:00
Andrew Kelley
52eec6b9a6
%=
in inline assembly survives optimization
2017-02-05 13:12:06 -05:00
Andrew Kelley
6f316d8ebd
setGlobalSection and setGlobalAlign work for functions
2017-02-05 12:50:19 -05:00
Andrew Kelley
d2f1f57fa4
even external functions which provide definitions get nounwind
2017-02-05 01:57:49 -05:00
Andrew Kelley
74d41ce44b
infer hard float from target environments that imply it
2017-02-05 00:16:49 -05:00
Andrew Kelley
64a0510205
inline assembly supports %=
syntax
...
it outputs a number that is unique to each instance of the asm
statement in the entire compilation.
useful when creating local labels and referring to them multiple
times in a single template that generates multiple
assembler instructions
2017-02-04 22:33:58 -05:00
Andrew Kelley
b840184bb0
memcpy and memset builtins support volatile pointers
...
See #238
2017-02-04 22:12:06 -05:00
Andrew Kelley
419e75eb23
remove volatileStore builtin; add volatile pointers
...
closes #238
2017-02-04 21:49:27 -05:00
Andrew Kelley
0d7abc6368
add compile error when setting non power of 2 alignment
2017-02-04 10:38:38 -05:00
Andrew Kelley
0919ea0afd
ability to set global variable alignment and ...
...
..section in the initialization expression
2017-02-04 10:22:07 -05:00
Andrew Kelley
67b02326f8
preserve names of exported variables
2017-02-03 16:27:24 -05:00
Andrew Kelley
d3f1889951
in freestanding environment, assume gnu binutils
...
for now. soon LLD will free us from depending on
system linkers.
2017-02-03 15:53:23 -05:00
Andrew Kelley
5a86c04996
add volatileStore() builtin function
...
See #238
We can revisit how volatile will work later - for now
here's a builtin function to do it.
2017-02-03 15:14:18 -05:00
Andrew Kelley
8c9016b6d1
add setGlobalAlign and setGlobalSection builtin functions
...
closes #241
2017-02-03 13:56:56 -05:00
Andrew Kelley
3be4b6434c
add ability to set linker script
2017-02-03 12:34:20 -05:00
Andrew Kelley
e00eec1c29
typedefs work for binary math operations
2017-02-03 12:09:13 -05:00
Andrew Kelley
aae168550f
exported global variables get emitted as external in LLVM
2017-02-03 11:59:56 -05:00
Andrew Kelley
71d335e5cc
implement packed structs
...
closes #183
2017-02-03 11:39:24 -05:00
Andrew Kelley
cd7713b178
make --target-os freestanding work
2017-02-02 23:14:08 -05:00
Andrew Kelley
0cf0739b0a
update outdated comment
2017-02-02 17:18:36 -05:00
Andrew Kelley
c0b37e8514
add try expression
...
See #83
2017-02-02 17:09:27 -05:00
Andrew Kelley
8b1c6d8b76
fix ability to call method on variable at compile time
2017-02-02 15:03:21 -05:00
Andrew Kelley
2b88441295
fix behavior when initializing struct with undefined
2017-02-02 14:55:01 -05:00
Andrew Kelley
b78c91951a
remove ability to mark if and switch as inline
...
if and switch are implicitly inline if the condition/target
expression is known at compile time.
instead of:
```
inline if (condition) ...
inline switch (target) ...
```
one can use:
```
if (comptime condition) ...
switch (comptime target) ...
```
2017-02-02 13:23:18 -05:00
Andrew Kelley
cd08c1f3be
prefix op maybe and error are for types only
2017-02-02 12:21:11 -05:00
Andrew Kelley
d13cec6894
fix var args allocating wrong amount of memory in compiler
2017-01-31 16:04:26 -05:00
Andrew Kelley
88a253c64d
fix crash when passing void to var args function
...
closes #235
2017-01-31 15:50:38 -05:00
Andrew Kelley
b258fdb532
add integer literal to pointer explicit cast
...
closes #227
2017-01-31 13:38:04 -05:00
Andrew Kelley
d8da34c64c
fix crash when assigning too large value to integer
...
closes #228
2017-01-31 02:30:10 -05:00
Andrew Kelley
d2b94afaf2
fix compile time initialization of array with undefined
2017-01-29 23:35:34 -05:00
Andrew Kelley
3caf6bacdc
fix sometimes using wrong outer scope for generating defers
2017-01-29 21:57:49 -05:00
Andrew Kelley
c75e58ffe6
fix behavior for comptime and runtime basic block phi
2017-01-29 19:10:56 -05:00
Andrew Kelley
e0a422ae7e
fix runtime branching tricking the comptime evaluation
...
closes #167
2017-01-26 15:34:36 -05:00
Andrew Kelley
4b3f18de3c
printf var args proof of concept
...
See #167
Need to troubleshoot when we send 2 slices to printf. It goes
into an infinite loop.
This commit introduces 4 builtin functions:
* `@isInteger`
* `@isFloat`
* `@canImplictCast`
* `@typeName`
2017-01-24 02:02:48 -05:00
Andrew Kelley
32d8686da8
various fixes
...
* comptime expression is a block expression as it should be
* fix var args when number of args passed is 0
* implement const value equality for structs
* fix indent when rendering container decl AST
* IR: prevent duplicate generation of code when it is partially
compile-time evaluated
* implement compile time struct field pointer evaluation
* fix compile time evaluation of slicing
2017-01-23 23:30:20 -05:00
Andrew Kelley
17cb85dfb8
basic support for functions with variable length arguments
...
See #77
2017-01-23 16:40:17 -05:00
Andrew Kelley
e5b1758010
remove staticEval builtin in favor of comptime expression
2017-01-22 23:21:00 -05:00
Andrew Kelley
201a3c121a
introduce comptime expression
...
closes #221
2017-01-22 22:59:52 -05:00
Andrew Kelley
47cf8520ad
use comptime instead of inline for var and params
...
See #221
2017-01-22 19:51:37 -05:00
Andrew Kelley
6a5e61acd1
get rid of zeroes literal
...
closes #222
2017-01-16 17:24:13 -05:00
Andrew Kelley
0caee421e3
ability to equality compare with null
...
closes #106
2017-01-16 16:39:31 -05:00
Andrew Kelley
867686af42
equality comparison of void types is known at compile time
...
closes #56
2017-01-16 16:07:03 -05:00
Andrew Kelley
fdbc2d8da1
implement error when assigning to field of const struct
...
closes #48
2017-01-16 15:24:03 -05:00
Andrew Kelley
4cbeb87e83
fix handling of const values for 2d arrays
2017-01-16 12:42:46 -05:00
Andrew Kelley
c7591736b4
fix array of enums. also render debug info for const vars
2017-01-16 01:44:47 -05:00
Andrew Kelley
3752e0c290
fix get_maybe_type not ensuring complete child type
2017-01-15 23:36:14 -05:00
Andrew Kelley
d0b59f20ab
fix llvm assertion failure for zero bits structs
2017-01-15 23:27:14 -05:00
Andrew Kelley
0b6cf0aa63
fix handling of invalid enumeration
2017-01-15 22:34:20 -05:00
Andrew Kelley
8106f9846a
fix enum codegen and implement comptime switch var on enums
2017-01-15 22:16:39 -05:00
Andrew Kelley
0c1800a9c9
fix some stuff when llvm has assertions on
2017-01-13 17:33:19 -05:00
Andrew Kelley
83f1a6fae2
fix some bugs with structs
2017-01-13 16:24:13 -05:00
Andrew Kelley
652bfab3d0
fix crash when casting fn call arg
2017-01-12 18:10:18 -05:00
Andrew Kelley
c793c534b8
fix use decl regression
2017-01-12 18:10:05 -05:00
Andrew Kelley
18f248b94d
IR: fix array concatenation
...
all tests passing
2017-01-12 15:10:58 -05:00
Andrew Kelley
d784705353
IR: implement macro for function aliasing function pointer
2017-01-12 03:15:06 -05:00
Andrew Kelley
76b1cbc2ea
pass some parseh tests
2017-01-11 22:25:17 -05:00
Andrew Kelley
25a670d74e
pass more tests
2017-01-11 19:09:17 -05:00
Andrew Kelley
fc53708dc0
better error message for unable to eval const expr
2017-01-11 18:06:21 -05:00
Andrew Kelley
7493af5953
fix a few tests
2017-01-11 00:38:24 -05:00
Andrew Kelley
fde276a3bf
IR: implement error for missing or extra switch prongs
2017-01-10 16:28:49 -05:00
Andrew Kelley
430e33b869
partially fix parseh command
2017-01-10 15:39:52 -05:00
Andrew Kelley
8d27a02705
pass division by zero test
2017-01-08 22:35:31 -05:00
Andrew Kelley
6caf32195a
pass unnecessary if statement test
2017-01-08 22:25:38 -05:00
Andrew Kelley
76d0e49e61
fix unable to eval const expr test case
2017-01-08 10:54:05 -05:00
Andrew Kelley
3ef447fa20
don't try to eval extern functions at compile time
2017-01-08 10:30:05 -05:00
Andrew Kelley
090ff05054
add compile error for initializing struct with non struct type
2017-01-07 14:24:08 -05:00
Andrew Kelley
cf62f02ba9
don't mark call instruction as generated
...
pass cast unreachable test
2017-01-06 02:04:27 -05:00
Andrew Kelley
23feafdef0
pass more tests
...
by removing assertion, fixing error column,
and updating expected message
2017-01-05 19:25:36 -05:00
Andrew Kelley
28403eaad0
pass more tests by updating expected error messages
2017-01-05 19:20:31 -05:00
Andrew Kelley
837cc467f7
pass array access compile error tests
2017-01-05 19:05:48 -05:00
Andrew Kelley
e621ad014e
pass cannot assign to constant test
2017-01-05 18:50:36 -05:00
Andrew Kelley
438feebbcf
pass undeclared identifier test
2017-01-05 04:01:11 -05:00
Andrew Kelley
9d94c2ccd0
fix mul and sub overflow ops being rendered as addition
2017-01-05 03:29:50 -05:00
Andrew Kelley
349cd79fe4
containers created during eval get names for parameters
2017-01-05 03:22:00 -05:00
Andrew Kelley
6ec6589bd8
IR: pass MT19937_64 test
2017-01-05 00:59:37 -05:00
Andrew Kelley
c32a060d4f
IR: add unreachable code compiler error
2017-01-04 23:21:33 -05:00
Andrew Kelley
664b41af65
fix debug information for function pointers in structs
2017-01-04 01:56:21 -05:00
Andrew Kelley
dbb1018ca6
IR: std library passes codegen
2016-12-31 19:48:17 -05:00
Andrew Kelley
ff5120c584
IR: std makes it to codegen
2016-12-31 18:25:10 -05:00
Andrew Kelley
69132bdeda
IR: progress toward compiling standard library
...
* comptime fn call
* is_comptime doesn't count as an instruction dependency
* update more std code to latest zig
2016-12-31 17:10:29 -05:00
Andrew Kelley
5f89393acb
IR: implement binary not instruction
2016-12-31 02:23:39 -05:00
Andrew Kelley
2ccdaee101
IR: add error for goto jumping over variable declaration
2016-12-31 01:58:37 -05:00
Andrew Kelley
76fa6cdce3
eradicate use of zeroes in std
2016-12-31 01:31:23 -05:00
Andrew Kelley
29bb175f4f
IR: handle phi instruction with 0 resulting incoming values
2016-12-30 18:47:54 -05:00
Andrew Kelley
6bbee194b9
IR: better basic block dependency detection
2016-12-30 18:34:05 -05:00
Andrew Kelley
a9acc8cb45
IR: error for returning from defer expression
...
also fix peer type resolution for pure error mixed with error union
2016-12-28 03:47:02 -05:00
Andrew Kelley
94f977a6c1
IR: pass genericFnWithImplicitCast test
2016-12-28 01:35:13 -05:00
Andrew Kelley
f6ac2fa70e
IR: pass pointerToVoidReturnType test
2016-12-28 01:31:46 -05:00
Andrew Kelley
25a5fc32fe
IR: pass passSliceOfEmptyStructToFn test
2016-12-28 01:15:09 -05:00
Andrew Kelley
15f843e70f
IR: pass castSliceToU8Slice test
2016-12-26 17:11:36 -05:00
Andrew Kelley
66a83d8738
IR: pass intToEnum test
2016-12-26 16:34:18 -05:00
Andrew Kelley
c8a7ab7eff
IR: pass cStringConcatenation test
2016-12-26 16:04:14 -05:00
Andrew Kelley
735cdbfdac
IR: pass intToPtrCast test
2016-12-26 15:45:50 -05:00
Andrew Kelley
73a751911e
IR: pass staticEvalListInit test
2016-12-26 03:16:19 -05:00
Andrew Kelley
3ef6663b72
IR: pass genericMallocFree test
2016-12-26 03:02:20 -05:00
Andrew Kelley
110a6f39ca
IR: pass explicitCastMaybePointers test
2016-12-26 02:53:42 -05:00
Andrew Kelley
4664f793dc
IR: pass enumToInt test
2016-12-26 02:36:04 -05:00
Andrew Kelley
f47dea2a2e
IR: support compile time global pointer reinterpret
...
this required moving the place we store types to ConstExprValue
2016-12-25 04:15:23 -05:00
Andrew Kelley
6f91fb4c37
IR: support const ref
2016-12-22 10:39:10 -05:00
Andrew Kelley
ba8af0f1e2
IR: fix missing implicit casts in init expressions
...
and implement runtime struct init instruction
2016-12-22 09:35:07 -05:00
Andrew Kelley
3e25ff65c3
IR: fix switch enum variable for void enum field
2016-12-22 08:05:37 -05:00
Andrew Kelley
5fc95c2a53
IR: port some tests
2016-12-22 00:55:21 -05:00
Andrew Kelley
46033a2128
pass void parameters test
2016-12-22 00:46:17 -05:00
Andrew Kelley
d544672ed4
IR: fix compile time evaluation of else prong in switch
2016-12-21 23:48:02 -05:00
Andrew Kelley
43be6ccb03
IR: fix phi instruction when one of the predecessors is unreachable
2016-12-21 23:04:04 -05:00
Andrew Kelley
b4c2f7e310
get_error_type calls ensure_complete_type on child
2016-12-21 22:42:58 -05:00
Andrew Kelley
9b61682037
IR: implement runtime enum init and switch on enum with variable
2016-12-21 21:49:05 -05:00
Andrew Kelley
1f6dacbb2f
IR: enum init support
2016-12-20 01:50:32 -05:00
Andrew Kelley
c10ae8622b
IR: fix lazy eval of enum field access
2016-12-19 21:06:55 -05:00
Andrew Kelley
3ea4f264ff
IR: update all error messages to be useful if generic instantiation
2016-12-19 19:54:51 -05:00
Andrew Kelley
2419f0c914
IR: support maybe defers
2016-12-19 17:25:09 -05:00
Andrew Kelley
09d50e35a4
IR: support error defers
2016-12-19 16:45:15 -05:00
Andrew Kelley
6b2d06710c
IR: start a new passing self hosted test suite
2016-12-19 00:41:37 -05:00
Andrew Kelley
09c34352f8
IR: if and switch guaranteed compile time if target expr is
2016-12-19 00:04:51 -05:00
Andrew Kelley
956ff8a7f9
better error message generic instantiations
2016-12-18 21:15:40 -05:00
Andrew Kelley
132e2fa5d9
errors from inline fn calls include stack trace
2016-12-18 20:52:40 -05:00
Andrew Kelley
cfc9f7422f
IR: add MaybeOkOr instruction
2016-12-18 20:22:28 -05:00
Andrew Kelley
82101198f1
workaround for Arch being a primitive type
2016-12-18 20:09:34 -05:00
Andrew Kelley
a71fbe49cb
IR: add FnProto instruction
2016-12-18 19:40:26 -05:00
Andrew Kelley
f12fbce0f5
IR: memoize compile-time evaluated fn invocations
2016-12-18 18:23:46 -05:00
Andrew Kelley
4816121e00
remove duplicate definition of container_string
2016-12-18 17:53:12 -05:00
Andrew Kelley
ba008fb9d7
IR: ability to return a container from a function
2016-12-18 17:50:47 -05:00
Andrew Kelley
37b13bf151
hello.zig working with all structs anonymous
2016-12-18 17:24:52 -05:00
Andrew Kelley
e50ced44a2
IR: all structs anonymous
2016-12-18 16:56:50 -05:00
Andrew Kelley
2e6aa6d813
IR: fix codegen of ref instruction
2016-12-18 13:55:34 -05:00
Andrew Kelley
a76b048354
IR: phi instruction handles unreachable values correctly
2016-12-18 13:37:50 -05:00
Andrew Kelley
b59841a80f
IR: fix err variable in ErrOkOr instruction
2016-12-18 13:20:19 -05:00
Andrew Kelley
0cdfd5c141
IR: fix container field access via container pointer
2016-12-18 02:13:07 -05:00
Andrew Kelley
0d2f2b79ea
IR: basic support for implicit casting to const pointer
2016-12-18 01:54:27 -05:00
Andrew Kelley
69cf0ea568
IR: fix type of decls accessed via namespace
2016-12-18 00:53:29 -05:00
Andrew Kelley
3e4194bf9e
IR: add runime negation
2016-12-18 00:36:11 -05:00
Andrew Kelley
83a668b9ca
IR: unreachable has lowest priority when resolving peer types
2016-12-18 00:25:07 -05:00
Andrew Kelley
9f08bfb38d
IR: make generic function type have zero_bits flag
2016-12-18 00:24:39 -05:00
Andrew Kelley
85b6d14637
IR: support var type args and fix phi peer type resolution
2016-12-18 00:09:43 -05:00
Andrew Kelley
e73faf9a9e
IR: allow undefined compile time values sometimes
2016-12-17 22:13:15 -05:00
Andrew Kelley
d245fabb80
IR: consolidate Ref and PrefixOpAddressOf instructions
2016-12-17 22:00:55 -05:00
Andrew Kelley
0f047337ac
IR: fix this
expression
...
Previously it returned a block instead of a function when
a function had any arguments.
2016-12-17 20:47:35 -05:00
Andrew Kelley
a07d7ee53d
IR: fix compile time switch eval for enums
2016-12-17 17:57:26 -05:00
Andrew Kelley
c64f9991d5
IR: fix switching on enum
2016-12-17 17:48:07 -05:00
Andrew Kelley
12fcbecbf8
IR: add more instructions
...
* MaybeWrap
* TestErr
* UnwrapErrCode
* UnwrapErrPayload
* ErrUnionTypeChild
* ErrWrapCode
* ErrWrapPayload
2016-12-17 16:16:17 -05:00
Andrew Kelley
3a3cc7bf76
IR: panic with a TODO instead of generating invalid code
...
for returning from a function without running maybe and error defers
2016-12-14 15:43:24 -05:00
Andrew Kelley
cca49b84b6
fix external function calls
2016-12-14 15:24:00 -05:00
Andrew Kelley
647d13168a
IR: implement maybe return expression
2016-12-13 19:36:56 -05:00
Andrew Kelley
3f3630d7e3
IR: implement the rest of the builtin functions
...
* returnAddress
* frameAddress
* addWithOverflow
* subWithOverflow
* mulWithOverflow
* shlWithOverflow
* alignOf
2016-12-13 04:30:41 -05:00
Andrew Kelley
8bb5f54b29
IR: implement character literal
2016-12-13 01:58:36 -05:00
Andrew Kelley
a6d2bdf605
IR: implement breakpoint builtin
2016-12-13 01:48:40 -05:00
Andrew Kelley
76a849b1f2
IR: implement memberCount builtin
2016-12-12 01:59:55 -05:00
Andrew Kelley
ef63bc9cca
IR: implement memcpy, memset, and slice expression
2016-12-12 00:31:35 -05:00
Andrew Kelley
fb21570630
IR: implement alloca builtin
2016-12-11 19:43:06 -05:00
Andrew Kelley
a963fba246
IR: implement compile time array concatenation
2016-12-11 18:43:52 -05:00
Andrew Kelley
df0cdceff7
IR: implement compile time array multiplication
2016-12-11 17:17:00 -05:00
Andrew Kelley
9b17c0ff7f
IR: implement intType builtin
...
and int type field access
and fix compile time bool not
2016-12-11 16:30:01 -05:00
Andrew Kelley
3429639e84
IR: implement truncate builtin
2016-12-11 15:31:07 -05:00
Andrew Kelley
433c17aeb1
IR: implement divExact builtin
2016-12-11 14:27:37 -05:00
Andrew Kelley
8fcb1a141b
IR: implement fence and cmpxchg builtins
2016-12-11 04:06:07 -05:00
Andrew Kelley
10cea15cc3
IR: implement embedFile builtin
2016-12-11 00:43:23 -05:00
Andrew Kelley
2dd85d52cc
IR: fix implementation of parseh
...
libc hello world works now
2016-12-11 00:13:43 -05:00
Andrew Kelley
3cfbec3eef
IR: don't crash if number literal used with pure error
2016-12-10 18:43:28 -05:00
Andrew Kelley
6feae8a4e9
IR: support error union type
2016-12-10 18:38:53 -05:00
Andrew Kelley
443e14afbd
IR: fix errorName builtin
2016-12-10 17:11:35 -05:00
Andrew Kelley
0ab953acb2
IR: better array len instruction
...
reference the "len" field directly instead of looking it up by
name since we already know exactly where the field metadata is
2016-12-08 02:15:48 -05:00
Andrew Kelley
d4a93dbac5
IR: omit debug safety checks in for loop codegen
2016-12-08 02:09:26 -05:00
Andrew Kelley
7d0fb281fe
IR: a bunch of fixes and some additions
...
* add errorName builtin function
* add assertion for generated memcopy being on correct types
* respect handle_is_ptr for constant values
* fix return codegen to respect sret semantics
* remove ArrayLen IR instruction; we already have StructFieldPtr
with "len" field
* fix gen_const_val for pointers inside aggregates
2016-12-08 01:52:57 -05:00
Andrew Kelley
a148096e6a
IR: add compileError builtin fn
2016-12-07 11:29:44 -05:00
Andrew Kelley
0ad580f001
IR: add minValue, maxValue, and negation
2016-12-07 01:23:38 -05:00
Andrew Kelley
5e4ee659a6
delete unused builtin function stuff
2016-12-07 00:35:39 -05:00
Andrew Kelley
c0b2fe4d6c
IR: add error for assigning runtime value to inline var
2016-12-07 00:22:14 -05:00
Andrew Kelley
7d9fa01ed5
IR: implement compile time eval unwrap maybe
2016-12-06 22:04:55 -05:00
Andrew Kelley
6ed202ab16
IR: implement defer
2016-12-06 21:26:17 -05:00
Andrew Kelley
0c531d447d
remove the boolean argument from setFnTest
2016-12-05 21:39:15 -05:00
Andrew Kelley
bed83bc5a1
IR: implement short circuit bool or, and
2016-12-05 19:12:19 -05:00
Andrew Kelley
24048b2af6
IR: implement break and continue
2016-12-05 18:43:16 -05:00
Andrew Kelley
0541532ed6
IR: implement generic function calls
2016-12-05 05:12:44 -05:00
Andrew Kelley
363606d87b
IR: inline function evaluation works on generic functions
2016-12-05 01:08:17 -05:00
Andrew Kelley
25a89e7a36
IR: compile time function evaluation
2016-12-04 23:52:43 -05:00
Andrew Kelley
9f23475b17
add missing copyright notices
2016-12-04 21:06:13 -05:00
Andrew Kelley
2f259b8176
IR: re-organize where state goes to prepare for generics
...
* Rip out legacy code for generics
* put scope in instruction instead of AST nodes
* separate top level decl stuff from AST nodes
- remove the assumption that there is a 1:1 correspondence
between an output instruction and an AST node
- This way we won't have to clone AST nodes for generics.
2016-12-04 03:40:40 -05:00
Andrew Kelley
f6cbb73c74
rewrite scope implementation
...
* now there are not extra unused hash tables
* each variable declaration opens a new scope inside a function
2016-12-01 21:08:12 -05:00
Andrew Kelley
c6ace9720c
rename BlockContext to Scope
2016-12-01 13:55:56 -05:00
Andrew Kelley
eb5693d91f
IR: function call porting progress
...
also implemented container init
generics is still todo
2016-11-28 02:40:01 -05:00
Andrew Kelley
9e7c475979
IR: silence irrelevant function prototype errors
2016-11-27 01:45:29 -05:00
Andrew Kelley
e5325c7ef3
IR: fix not checking for error in unary bool not
2016-11-27 01:31:09 -05:00
Andrew Kelley
d9329ed389
IR: add ref instruction
2016-11-27 01:22:30 -05:00
Andrew Kelley
bd4d4ee51e
IR: detect error for exceeding branch quota
2016-11-27 00:14:19 -05:00
Andrew Kelley
1fba7f3696
IR: add inline goto
2016-11-26 23:33:07 -05:00
Andrew Kelley
b3ff28189c
IR: fix crash when duplicate label error
2016-11-26 23:24:43 -05:00
Andrew Kelley
a52ede6494
IR: support goto and labels
2016-11-26 23:16:38 -05:00
Andrew Kelley
a3db60b5d7
IR: fix parsing while loop
2016-11-26 21:16:36 -05:00
Andrew Kelley
84f7805029
IR: support import builtin function
2016-11-26 20:52:22 -05:00
Andrew Kelley
4619b5de06
IR: support inline switch
2016-11-26 15:38:07 -05:00
Andrew Kelley
24b65e41ee
IR: add error for non static const on switch case range
2016-11-26 04:37:34 -05:00
Andrew Kelley
697c768730
IR: support switch with range
2016-11-26 04:03:39 -05:00
Andrew Kelley
bbf785bc1d
IR: switch expression works with numbers
2016-11-26 00:25:48 -05:00
Andrew Kelley
0c22358cc1
IR: generating a switch statement
2016-11-24 02:44:03 -05:00
Andrew Kelley
a2257e4b81
IR: implement setFnVisible builtin
2016-11-21 15:36:25 -05:00
Andrew Kelley
052cd44588
IR: fix codegen for arrays
2016-11-21 15:01:21 -05:00
Andrew Kelley
e80e8a8099
IR: fix detection of invalid codegen
2016-11-21 13:53:08 -05:00
Andrew Kelley
67d565136a
IR: implement ctz and clz builtins
2016-11-21 13:27:44 -05:00
Andrew Kelley
71d95c6597
IR: support unwrap maybe operation
2016-11-21 03:08:24 -05:00
Andrew Kelley
b47e2fa060
IR: support sizeOf builtin
2016-11-20 02:11:36 -05:00
Andrew Kelley
6c8b919d17
IR: implement ir_print for maybe type
2016-11-19 01:56:48 -05:00
Andrew Kelley
2f8dd46174
IR: error for uncasted null lit variable
2016-11-19 01:53:14 -05:00
Andrew Kelley
8a81f8aa13
IR: implement compileVar builtin and more
...
* implicit array to slice cast
* fix if statements at global scope
* implement array type IR
2016-11-19 01:39:51 -05:00
Andrew Kelley
19037014e5
IR: more maybe type support
2016-11-18 23:52:42 -05:00
Andrew Kelley
31565efe9d
IR: fix decl references pointerness
2016-11-18 22:44:59 -05:00
Andrew Kelley
d94cb0566b
IR: correctly codegening memset and memcpy
2016-11-18 22:24:41 -05:00
Andrew Kelley
bf7cde62c5
IR: support setDebugSafety builtin function
2016-11-18 20:57:27 -05:00
Andrew Kelley
ed31ae8867
IR: inline assembly working
2016-11-18 02:07:40 -05:00
Andrew Kelley
c3b603fdf9
remove AST cloning code and add AST render for while loops
2016-11-17 21:17:58 -05:00
Andrew Kelley
7a2a0672b4
IR: pointers to constants use correct addresses
2016-11-17 21:07:29 -05:00
Andrew Kelley
62d0d88b56
IR: pointers to constants don't copy data
2016-11-17 04:00:02 -05:00
Andrew Kelley
a55555c99e
remove superseded eval code
2016-11-17 00:44:14 -05:00
Andrew Kelley
8d1c6138f9
IR: implement pointer dereferencing (even at compile time)
2016-11-15 01:48:36 -05:00
Andrew Kelley
af4d4c882a
IR: implement compile time array access
2016-11-14 21:01:48 -05:00
Andrew Kelley
2edc6c1a3f
IR: add assembly instruction
2016-11-13 21:07:30 -05:00
Andrew Kelley
04c047463b
IR: fix hang for unreachable functions
2016-11-13 16:02:18 -05:00
Andrew Kelley
e2fd3b2b1b
IR: fix prefix op eval setting wrong type
2016-11-13 13:42:04 -05:00
Andrew Kelley
d4f2394dcf
IR handles global variables correctly
2016-11-13 01:56:28 -05:00
Andrew Kelley
a5c9da0de2
IR: gen string literal
2016-11-10 00:41:17 -05:00
Andrew Kelley
9d19b8d66e
IR: move unused codegen code to commented out in bottom of ir.cpp
2016-11-09 23:21:02 -05:00
Andrew Kelley
b8379b4c5b
IR: support pointer types
2016-11-07 19:37:34 -05:00
Andrew Kelley
05de70017d
IR: support slice types
2016-11-07 18:58:01 -05:00
Andrew Kelley
a2e3293930
WIP moving all analysis to IR
2016-11-04 15:36:30 -04:00
Andrew Kelley
bc6c33b1b6
IR: support this literal and bool literal
2016-11-03 14:26:21 -04:00
Andrew Kelley
c8333d0cc9
add concept of inline for, inline while, inline var
2016-11-03 14:13:57 -04:00
Andrew Kelley
1a0111d4c3
*WIP*
2016-10-30 02:46:16 -04:00
Andrew Kelley
56cdaff9e7
ir: support return expression
2016-10-29 19:24:59 -04:00
Andrew Kelley
afc5507b64
ir: ability to modify global vars
2016-10-29 19:14:48 -04:00
Andrew Kelley
8e2804efa1
IR: ability to assign to an array at runtime
2016-10-28 02:32:36 -04:00
Andrew Kelley
114049a220
IR analysis unrolls a complicated loop
2016-10-27 03:28:29 -04:00
Andrew Kelley
78e6314422
IR: phi instruction works at compile time
2016-10-27 01:52:06 -04:00
Andrew Kelley
bfcd6648e7
IR can inline loops
2016-10-27 01:08:06 -04:00
Andrew Kelley
44d6f8ffd8
IR supports variable assignment
2016-10-23 01:33:23 -04:00
Andrew Kelley
d7a2b05a81
IR: introduce concept of lvalues
2016-10-23 00:21:29 -04:00
Andrew Kelley
a9a6f77a1f
add variable declaration initialization IR
2016-10-20 01:13:39 -04:00
Andrew Kelley
682511d1b2
add variable declaration IR
2016-10-18 03:00:48 -04:00
Andrew Kelley
ac6d1674e3
IR working for if statements
2016-10-16 02:19:01 -04:00
Andrew Kelley
ce3c52471d
IR if statements WIP
2016-10-11 23:45:33 -04:00
Andrew Kelley
77ae3442ef
explicit casting works with IR
2016-10-09 02:20:01 -04:00
Andrew Kelley
07fe60ded1
IR in 2 passes
2016-10-06 01:09:01 -04:00
Andrew Kelley
cd1bd78aa9
simple add function works with IR
2016-10-02 23:48:48 -04:00
Andrew Kelley
633781e31d
empty function compiles successfully with IR
2016-09-30 20:12:00 -04:00
Andrew Kelley
4e2fa2d15b
*WIP*
2016-09-30 02:21:21 -04:00
Andrew Kelley
0562111b02
fix regression: debug safety sometimes incorrectly disabled
2016-09-28 11:29:47 -04:00
Andrew Kelley
b581da41f8
remove compiler directives
...
* add `setFnTest`, `setFnVisible`, `setFnStaticEval`,
`setFnNoInline` builtin functions to replace previous
directive functionality
* add `coldcc` and `nakedcc` as keywords which can be used as part
of a function prototype.
* `setDebugSafety` builtin can be used to set debug safety features
at a per block scope level.
* closes #169
2016-09-28 02:33:32 -04:00
Andrew Kelley
183976b242
add this keyword refers to thing in immediate scope
...
See #169
2016-09-26 23:47:30 -04:00
Andrew Kelley
87b7c28c9a
cstr.len and cstr.cmp can run at compile time
...
closes #140
2016-09-26 22:33:33 -04:00
Andrew Kelley
7ce7e2c9d1
emit error for extern function
...
with byvalue return value or parameter.
currently we don't codegen byvalue parameters or return values
correctly for C compatibilty functions so instead of generating
incorrect code, we emit a compile error.
eventually we'll support this feature and remove the compile error.
See #180
2016-09-26 20:01:42 -04:00
Andrew Kelley
7f4d4bdb3f
fix crash when doing binary not on integer literal
...
closes #201
2016-09-26 19:42:51 -04:00
Andrew Kelley
4b68224c60
add error message for method call on non method
...
closes #199
2016-09-26 01:01:02 -04:00
Andrew Kelley
01e13de7ca
refactor field access code into more generic container code
2016-09-26 00:06:37 -04:00
Andrew Kelley
683da0e4ec
ability to have struct to have a field which is slice of itself
...
closes #197
2016-09-25 13:39:46 -04:00
Andrew Kelley
e06885d64e
enums support member functions
2016-09-23 15:18:02 -04:00
Andrew Kelley
9ec6a78f12
fix compiler crash for misspelled type with pointer only reference
...
closes #196
2016-09-23 11:53:05 -04:00
Andrew Kelley
46eb77dbb2
stack trace is able to figure out compilation unit
...
each address is contained within
also fix a bug having to do with codegen for enum value
initialization expressions
2016-09-23 02:00:23 -04:00
Andrew Kelley
4b902b44a2
os: fix file descriptor leak in os_exec
...
See #182
2016-09-22 10:48:42 -04:00
Andrew Kelley
c64f6f9503
fix compile crash when leaving out for loop parameter
2016-09-22 10:40:05 -04:00
Andrew Kelley
7aeca9bfed
fix incorrect linking from previous commit
2016-09-21 17:40:50 -04:00
Andrew Kelley
3f8f0b9bba
exporting an object creates an h file
2016-09-21 11:18:49 -04:00