Jimmi HC
9b29c872ce
Added Slice as it's own type info in userland
2018-05-09 09:34:04 +02:00
Andrew Kelley
77a1a216d2
tagged union field access prioritizes members over enum tags
...
closes #959
2018-05-07 16:43:20 -04:00
Marc Tiehuis
d7b029995c
Fix bigint multi-limb shift and masks
2018-05-05 22:40:29 +12:00
Andrew Kelley
b9e320dd52
Merge pull request #951 from alexnask/reflect_reify
...
Metaprogramming - @typeInfo [DONE]
2018-05-03 23:02:33 -04:00
Jimmi Holst Christensen
aa2586de18
Fixed extern enums having the wrong size ( #970 )
...
Fixed extern enums having the wrong size
See #977
2018-05-03 22:27:04 -04:00
Andrew Kelley
adbb691f46
fix behavior tests for ReleaseSmall
2018-05-02 22:48:04 -04:00
Andrew Kelley
6fd14f23b5
add ReleaseSmall mode in zig tests
...
closes #969
2018-05-02 22:41:02 -04:00
Alexandros Naskos
131c133bb7
Fixed inlining determination test ( #972 )
...
When deciding wether we should inline a scope, look up the parents until we get to a function definition scope
2018-05-02 21:43:07 -04:00
Jimmi Holst Christensen
1a9403f38a
Added better support for none pure enums in tranlate C
2018-05-02 21:50:41 +02:00
Alexandros Naskos
7d239414f7
Fixed type info test, added documentation.
2018-05-01 13:42:20 +03:00
Alexandros Naskos
1b6e97355d
Added type info tests to behavior test listing
2018-05-01 13:31:14 +03:00
Alexandros Naskos
255c0ef406
Resolved merge conflict.
2018-05-01 13:09:34 +03:00
Alexandros Naskos
e1535ee0a9
Added typeInfo tests
2018-05-01 13:01:54 +03:00
Alexandros Naskos
ff1c4e1f13
Added tests.
2018-05-01 13:00:39 +03:00
Andrew Kelley
ac4d55dec1
behavior tests passing with new pointer deref syntax
2018-05-01 01:53:04 -04:00
Andrew Kelley
a35b366eb6
[breaking] delete ptr deref prefix op
...
start using zig-fmt-pointer-reform branch build of zig fmt
to fix code to use the new syntax
all of test/cases/* are processed, but there are more left
to be done - all the std lib used by the behavior tests
2018-04-30 20:35:54 -04:00
Andrew Kelley
76ab1d2b6c
support foo.* for ptr deref
...
See #770
2018-04-30 14:20:56 -04:00
Andrew Kelley
0bb054e5e7
Merge pull request #930 from zig-lang/float-printing
...
Finish and fix float printing
2018-04-28 22:43:52 -04:00
Andrew Kelley
ec2a81a081
fix compiler-rt ABI for x86_64 windows
2018-04-28 22:03:07 -04:00
Jimmi Holst Christensen
fba0347ec4
.ReturnType and @ArgType now emits errors on unresolved types
...
related: #846
2018-04-28 17:17:48 +02:00
Jimmi Holst Christensen
2fc34eaa58
Functions with infered error set can now return literals
...
fixes #852
2018-04-28 16:27:31 +02:00
Jimmi Holst Christensen
3178528335
Removed zero sized error set optimization
...
fixes #762
fixes #818
2018-04-28 14:05:08 +02:00
Andrew Kelley
15bf0c1541
fix interaction between defer and labeled break
...
closes #830
2018-04-23 18:06:33 -04:00
Andrew Kelley
89a4c373d3
fix bigint twos complement implementation
...
closes #948
2018-04-23 12:06:18 -04:00
Andrew Kelley
8503eff8c1
add compile error for invalid deref on switch target
...
closes #945
2018-04-22 23:46:55 -04:00
Andrew Kelley
21767144fc
linux: support VDSO for clock_gettime
...
also fix a compiler crash when using cmpxchg with nullable pointer
2018-04-22 18:11:50 -04:00
Andrew Kelley
c4840d78fb
add test case for #936
2018-04-21 02:10:22 -04:00
Jimmi Holst Christensen
1b91478bff
Optimized field ptr ir for hot path and fix assignment bug
2018-04-19 21:34:18 +02:00
Jimmi Holst Christensen
6b4f6ebd89
Added field builtin function
2018-04-19 20:11:16 +02:00
Andrew Kelley
06909ceaab
support break in suspend blocks
...
* you can label suspend blocks
* labeled break supports suspend blocks
See #803
2018-04-18 22:21:54 -04:00
Andrew Kelley
f1f998e071
improve cmpxchg
...
* remove @cmpxchg, add @cmpxchgWeak and @cmpxchgStrong
- See explanations in the langref.
* add operand type as first parameter
* return type is ?T where T is the operand type
closes #461
2018-04-18 12:16:42 -04:00
Alexandros Naskos
6492763bef
Fixed test build code
2018-04-16 04:06:00 +03:00
Andrew Kelley
b9360640ce
add @atomicLoad builtin
...
See #174
2018-04-15 18:12:00 -04:00
Andrew Kelley
859b10d8bf
std.math.ln and std.math.exp use float strict mode
...
closes #920
2018-04-15 15:22:27 -04:00
Andrew Kelley
b5459eb987
add @sqrt built-in function
...
See #767
2018-04-15 13:26:58 -04:00
Andrew Kelley
373b3586a1
inline functions must be stored in const or comptime var
...
closes #913
2018-04-12 16:26:23 -04:00
Andrew Kelley
e48e707c32
allow integer and float literals to be passed to var params
...
closes #623
2018-04-11 14:47:37 -04:00
Andrew Kelley
ee1a4f4c1d
error return traces work with async return case
2018-04-08 17:44:29 -04:00
Andrew Kelley
9e98ea552d
fix calling convention at callsite of zig-generated fns
2018-04-08 16:40:59 -04:00
Andrew Kelley
032fccf615
fix compile time array concatenation for slices
...
closes #866
2018-03-28 23:25:12 -04:00
Andrew Kelley
6cb99fdac3
fix crash when compile error in analyzing @panic call
2018-03-27 15:07:45 -04:00
Andrew Kelley
aa2995ee39
fix invalid codegen for error return traces across suspend points
...
See #821
Now the code works correctly, but error return traces are missing
the frames from coroutines.
2018-03-24 22:07:12 -04:00
Andrew Kelley
a43c7af3d1
add comptime test for the type of suspend promise
2018-03-24 19:31:00 -04:00
Andrew Kelley
897e783763
add promise->T syntax parsing
...
closes #857
2018-03-24 19:25:53 -04:00
Andrew Kelley
18af2f9a27
fix async fns with inferred error sets
...
closes #856
2018-03-24 18:28:32 -04:00
Marc Tiehuis
3d1732ef6c
Fix OpqaueType usage in exported c functions
...
We prefer `struct typename`. If a typedef is required, this must be done
manually after generation.
2018-03-23 20:27:11 +13:00
Andrew Kelley
7a99d63c76
ability to use async function pointers
...
closes #817
2018-03-22 16:56:03 -04:00
Andrew Kelley
f885a1ab61
change async function call syntax
...
* instead of `async(allocator) call()`, now it is
`async<allocator> call()`.
* Fixes syntax ambiguity when leaving off the allocator
* Fixes parse failure when call is a field access
This sets a precedent for using `<` to pass arguments
to a keyword. This will affect `enum`, `union`, and
`fn` (see #661 )
2018-03-21 19:56:41 -04:00
Andrew Kelley
d959faa4c7
add test for addIncludeDir for test step
2018-03-17 18:19:23 -04:00
Andrew Kelley
efebb6d341
fix tests broken by previous commit
2018-03-14 03:37:54 -04:00
Andrea Orru
c828c23f71
Tests for zero-bit field compiler error
2018-03-13 22:07:40 -07:00
Andrew Kelley
7f7823e23c
fix casting a function to a pointer causing compiler crash
...
closes #777
2018-03-13 19:15:20 -04:00
Andrew Kelley
bcce77700f
some return types disqualify comptime fn call caching
...
closes #828
2018-03-12 12:56:25 -04:00
Andrew Kelley
5834ff0cc5
don't memoize comptime fn calls that access comptime mutable state
...
closes #827
2018-03-12 08:35:41 -04:00
Andrew Kelley
1bf2810f33
fix comptime slicing not preserving comptime mutability
...
* fix comptime slice of slice not preserving mutatibility
of the comptime data
* fix comptime slice of pointer not preserving mutability
of the comptime data
closes #826
2018-03-12 01:21:10 -04:00
Andrew Kelley
49c3922037
fix incorrect setEvalBranchQuota compile error
...
closes #688
2018-03-12 00:08:52 -04:00
Andrew Kelley
20011a7a1c
add behavior test for coroutine frame allocation failure
2018-03-10 01:38:40 -05:00
Andrew Kelley
6db9be8900
don't memoize comptime functions if they can mutate state via parameters
...
closes #639
2018-03-09 14:20:44 -05:00
Andrew Kelley
aaf2230ae8
fix partial inlining of binary math operator using old value
...
the code was abusing the internal IR API. fixed now.
closes #699
2018-03-08 17:15:55 -05:00
Andrew Kelley
028ec0f2c3
enums with 1 field and explicit tag type still get the tag type
...
closes #820
2018-03-08 15:22:42 -05:00
Jimmi Holst Christensen
2e010c60ae
Translate C now correctly converts ints, floats, ptrs and enums to bools
...
* Boolean "and" and "or" should also work with these types.
* This new method also simplifies to output code.
2018-03-08 15:34:00 +01:00
Jimmi Holst Christensen
b2887620f3
Translate C will now handle ignored return values
2018-03-08 13:15:30 +01:00
Jimmi Holst Christensen
689e241ff8
Merge branch 'master' of github.com:zig-lang/zig
2018-03-08 10:29:43 +01:00
Jimmi Holst Christensen
51b2f1b80b
Translate C can now translate switch statements again
2018-03-08 10:29:29 +01:00
Andrew Kelley
790aaeacae
add compile error for using @tagName on extern union
...
closes #742
2018-03-07 14:35:48 -05:00
Jimmi Holst Christensen
bb80daf509
Ast Render no longer outputs erroneous semicolon
...
closes #813
2018-03-07 10:39:32 +01:00
Andrew Kelley
d96dd5bc32
fix missing compile error for returning error from void async function
...
closes #799
2018-03-06 21:44:27 -05:00
Andrew Kelley
eff3530dfa
var is no longer a pseudo-type, it is syntax
...
closes #779
2018-03-06 18:31:31 -05:00
Andrew Kelley
44ae891bd7
fix assertion when taking slice of zero-length array
...
closes #788
2018-03-06 17:19:45 -05:00
Andrew Kelley
5d5820029d
fix broken tests from previous commit
2018-03-06 16:46:45 -05:00
Andrew Kelley
07e47c058c
ptrCast builtin now gives an error for removing const qualifier
...
closes #384
2018-03-06 16:37:03 -05:00
Jimmi Holst Christensen
5ab25798e3
We now also use trans_to_bool_expr on bool not
2018-03-06 12:04:14 +01:00
Jimmi Holst Christensen
bf47cf418a
expr to bool is now it's own function.
...
* Now while and for loops work on ints and floats, like if statements
* This fixes the loop problem in #813
2018-03-06 11:57:51 +01:00
Andrew Kelley
101b7745c4
add optnone noinline to async functions
...
this works around LLVM optimization assertion failures.
https://bugs.llvm.org/show_bug.cgi?id=36578
closes #800
2018-03-02 13:40:03 -05:00
Andrew Kelley
de5c0c9f40
Merge remote-tracking branch 'origin/master' into async
2018-03-01 20:47:35 -05:00
Andrew Kelley
6bade0b825
coroutines: add await early test case
2018-03-01 16:17:38 -05:00
Andrew Kelley
8a0e1d4c02
await keyword works
2018-03-01 15:46:35 -05:00
Andrew Kelley
253d988e7c
implementation of await
...
but it has bugs
2018-03-01 03:28:13 -05:00
Andrew Kelley
834e992a7c
add test for coroutine suspend with block
2018-02-28 22:26:26 -05:00
Andrew Kelley
8429d4ceac
implement coroutine resume
2018-02-28 22:18:48 -05:00
Andrew Kelley
807a5e94e9
add atomicrmw builtin function
2018-02-28 21:19:51 -05:00
Andrew Kelley
36eadb569a
run coroutine tests only in Debug mode
...
LLVM 5.0.1, 6.0.0, and trunk crash when attempting to optimize coroutine code.
So, Zig does not support ReleaseFast or ReleaseSafe for coroutines yet.
Luckily, Clang users are running into the same crashes, so folks from the LLVM
community are working on fixes. If we're really lucky they'll be fixed in 6.0.1.
Otherwise we can hope for 7.0.0.
2018-02-28 18:56:26 -05:00
Andrew Kelley
58dc2b719c
better coroutine codegen, now passing first coro test
...
we have to use the Suspend block with llvm.coro.end to
return from the coro
2018-02-28 18:22:43 -05:00
Andrew Kelley
1b8a241f6f
Merge branch 'fix795' of https://github.com/bnoordhuis/zig into bnoordhuis-fix795
2018-02-28 00:22:53 -05:00
Ben Noordhuis
90598b4631
fix assert on self-referencing function ptr field
...
The construct `struct S { f: fn(S) void }` is not legal because structs
are not copyable but it should not result in an ICE.
Fixes #795 .
2018-02-28 00:56:00 +01:00
Ben Noordhuis
9aa65c0e8e
allow implicit cast from &const to ?&const &const
...
Allow implicit casts from n-th degree const pointers to nullable const
pointers of degree n+1. That is:
fn f() void {
const s = S {};
const p = &s;
g(p); // Works.
g(&p); // So does this.
}
fn g(_: ?&const &const S) void { // Nullable 2nd degree const ptr.
}
Fixes #731 some more.
2018-02-26 19:56:26 +01:00
Ben Noordhuis
f11b948019
allow implicit cast from `S` to `?&const S`
...
Allow implicit casts from container types to nullable const pointers to
said container type. That is:
fn f() void {
const s = S {};
g(s); // Works.
g(&s); // So does this.
}
fn g(_: ?&const S) void { // Nullable const pointer.
}
Fixes #731 .
2018-02-23 15:55:57 +01:00
Ben Noordhuis
0845cbe277
name types inside functions after variable
...
Before this commit:
fn f() []const u8 {
const S = struct {};
return @typeName(S); // "f()", unexpected.
}
And now:
fn f() []const u8 {
const S = struct {};
return @typeName(S); // "S", expected.
}
Fixes #675 .
2018-02-22 19:54:02 +01:00
Andrew Kelley
72ca2b214d
ability to slice an undefined pointer at compile time if the len is 0
2018-02-16 15:22:29 -05:00
Andrew Kelley
cc26148ba7
fix compiler crash when struct contains...
...
ptr to another struct which contains original struct
2018-02-15 12:14:20 -05:00
Andrew Kelley
1c1c0691cc
fix crash when doing comptime float rem comptime int
...
closes #776
2018-02-14 23:12:51 -05:00
Andrew Kelley
9fa35adbd4
fix sometimes not type checking function parameters
...
closes #774
regression introduced in cfb2c67692
2018-02-14 16:24:43 -05:00
Andrew Kelley
445b03384a
introduce std.heap.ArenaAllocator and std.heap.DirectAllocator
...
* DirectAllocator does the underlying syscall for every allocation.
* ArenaAllocator takes another allocator as an argument and
allocates bytes up front, falling back to DirectAllocator with
increasingly large allocation sizes, to avoid calling it too often.
Then the entire arena can be freed at once.
The self hosted parser is updated to take advantage of ArenaAllocator
for the AST that it returns. This significantly reduces the complexity
of cleanup code.
docgen and build runner are updated to use the combination of
ArenaAllocator and DirectAllocator instead of IncrementingAllocator,
which is now deprecated in favor of FixedBufferAllocator combined
with DirectAllocator.
The C allocator calls aligned_alloc instead of malloc, in order to
respect the alignment parameter.
Added asserts in Allocator to ensure that implementors of the
interface return slices of the correct size.
Fixed a bug in Allocator when you call realloc to grow the allocation.
2018-02-12 02:14:44 -05:00
Andrew Kelley
46aa416c48
std.os and std.io API update
...
* move std.io.File to std.os.File
* add `zig fmt` to self hosted compiler
* introduce std.io.BufferedAtomicFile API
* introduce std.os.AtomicFile API
* add `std.os.default_file_mode`
* change FileMode on posix from being a usize to a u32
* add std.os.File.mode to return mode of an open file
* std.os.copyFile copies the mode from the source file instead of
using the default file mode for the dest file
* move `std.os.line_sep` to `std.cstr.line_sep`
2018-02-10 21:02:24 -05:00
Andrew Kelley
a2bd9f8912
std lib: modify allocator idiom
...
Before we accepted a nullable allocator for some stuff like
opening files. Now we require an allocator.
Use the mem.FixedBufferAllocator pattern if a bound on the amount
to allocate is known.
This also establishes the pattern that usually an allocator is the
first argument to a function (possibly after "self").
fix docs for std.cstr.addNullByte
self hosted compiler:
* only build docs when explicitly asked to
* clean up main
* stub out zig fmt
2018-02-09 18:27:50 -05:00
Andrew Kelley
e7bf8f3f04
fix compiler crash switching on global error with no else
2018-02-09 13:49:58 -05:00
Andrew Kelley
3919afcad2
fix crash with error peer type resolution
...
closes #765
2018-02-09 11:16:04 -05:00
Andrew Kelley
916d24cd21
add compile error tests for error sets
2018-02-08 23:44:21 -05:00
Andrew Kelley
4b16874f04
add test for comptime err to int with only 1 member of set
2018-02-08 22:44:15 -05:00
Andrew Kelley
ee982ae162
syntax: parse `?error!i32` as `?(error!i32)`
2018-02-08 22:30:08 -05:00
Andrew Kelley
0efe441dfd
if statements support comptime known test error, runtime payload
2018-02-08 22:18:13 -05:00
Andrew Kelley
54c06bf715
error sets: runtime safety for int-to-err and err set cast
2018-02-08 21:54:44 -05:00
Andrew Kelley
f9be970375
Merge remote-tracking branch 'origin/master' into error-sets
2018-02-08 20:45:26 -05:00
Andrew Kelley
57edd4dcb3
error sets - fix bad value for constant error literal
2018-02-08 18:13:07 -05:00
Andrew Kelley
76239f2089
error sets - update langref. all tests passing
2018-02-08 03:02:41 -05:00
Andrew Kelley
0d5ff6f462
error sets - most tests passing
2018-02-08 02:08:45 -05:00
Andrew Kelley
44d8d654a0
fix test failure, organize code, add new compile error
2018-02-05 09:26:39 -05:00
Andrew Kelley
39d5f44863
*WI* error sets - basic support working
2018-02-02 14:26:14 -05:00
Andrew Kelley
5f518dbeb9
*WIP* error sets converting std lib
2018-01-31 22:48:40 -05:00
Andrew Kelley
44f38b04b0
fix assertion fail when using global var number literal
...
closes #697
2018-01-31 11:13:39 -05:00
Andrew Kelley
40ca39d3d5
fix error message mentioning unreachable instead of noreturn
2018-01-31 01:44:52 -05:00
Andrew Kelley
3ef6a00bb8
add compile error for duplicate struct, enum, union fields
...
closes #730
2018-01-30 11:52:03 -05:00
Andrew Kelley
1c60f31450
add compile error for calling naked function
2018-01-29 14:01:12 -05:00
Andrew Kelley
abe6c2d585
allow packed containers in extern functions
2018-01-29 10:57:09 -05:00
Andrew Kelley
f66ac9a5e7
fix crash when align 1 field before self referential...
...
...align 8 field as slice return type
closes #723
2018-01-27 18:30:36 -05:00
Andrew Kelley
ad3e2a5da0
fix compiler crash on function with invalid return type
...
closes #722
2018-01-26 10:37:18 -05:00
Andrew Kelley
3671582c15
syntax: functions require return type. remove `->`
...
The purpose of this is:
* Only one way to do things
* Changing a function with void return type to return a possible
error becomes a 1 character change, subtly encouraging
people to use errors.
See #632
Here are some imperfect sed commands for performing this update:
remove arrow:
```
sed -i 's/\(\bfn\b.*\)-> /\1/g' $(find . -name "*.zig")
```
add void:
```
sed -i 's/\(\bfn\b.*\))\s*{/\1) void {/g' $(find ../ -name "*.zig")
```
Some cleanup may be necessary, but this should do the bulk of the work.
2018-01-25 04:10:11 -05:00
Andrew Kelley
e5bc5873d7
rename "debug safety" to "runtime safety"
...
closes #437
2018-01-25 01:46:12 -05:00
Andrew Kelley
b3a6faf13e
replace %defer with errdefer
...
See #632
now we have 1 less sigil
2018-01-23 23:08:09 -05:00
Marc Tiehuis
470ec91164
Add array type handling for gen_h
2018-01-23 23:38:20 +13:00
Andrew Kelley
cf39819478
add new kind of test: generating .h files. and more
...
* docgen supports obj_err code kind for demonstrating
errors without explicit test cases
* add documentation for `extern enum`. See #367
* remove coldcc keyword and add @setIsCold. See #661
* add compile errors for non-extern struct, enum, unions
in function signatures
* add .h file generation for extern struct, enum, unions
2018-01-22 22:24:07 -05:00
Andrew Kelley
cacba6f435
fix crash on union-enums with only 1 field
...
closes #713
2018-01-22 17:23:23 -05:00
Andrew Kelley
5b7ae86af4
fix crash when switching on enum with 1 field and no switch prongs
...
closes #712
2018-01-21 14:44:24 -05:00
Andrew Kelley
ea623f2d39
all doc code examples are now tested
...
improve color scheme of docs
make docs depend on no external files
fix broken example code in docs
closes #465
2018-01-19 03:21:47 -05:00
Andrew Kelley
4b64c777ee
add compile error for shifting by negative comptime integer
...
closes #698
2018-01-18 17:47:21 -05:00
Andrew Kelley
0fc645ab70
emit a compile error for @panic called at compile time
...
closes #706
2018-01-18 17:15:36 -05:00
Andrew Kelley
0b8f19fcba
fix null debug info for 0-length array type
...
closes #702
2018-01-18 15:08:20 -05:00
Andrew Kelley
0aae96b5f0
test: fix brace expansion test not checking invalid inputs
2018-01-18 11:41:20 -05:00
Jimmi Holst Christensen
1d6f54cc7d
A few more none negative cases, just to be sure we've covered everything
2018-01-17 14:35:13 +01:00
Jimmi Holst Christensen
fa2c3be341
More tests, and fixed none negative bigint xor
2018-01-17 14:31:47 +01:00
Jimmi Holst Christensen
db0fc32ab2
fixed xor with zero
2018-01-17 14:00:27 +01:00
Andrew Kelley
ee9ab15679
Merge pull request #695 from Hejsil/tranlate-c-fixes
...
Tranlate c fixes - undefined variable initialization and non-bool if statements
2018-01-16 10:32:37 -05:00
Jimmi Holst Christensen
3974b7d31d
translate_c can now translate if statements on integers and floats
2018-01-16 15:48:28 +01:00
Jimmi Holst Christensen
f59dcc5546
Fixed tests for undefined variables
2018-01-16 15:21:48 +01:00
Andrew Kelley
6a95b88d1b
fix bigint remainder division
...
See #405
2018-01-16 03:09:44 -05:00
Andrew Kelley
84d8584c5b
implement bigint div and rem
...
See #405
2018-01-16 02:22:19 -05:00
Andrew Kelley
92fc5947fc
fix compiler crash related to @alignOf
2018-01-15 20:44:21 -05:00
Andrew Kelley
5a4968484b
Merge branch 'wip-err-ret-trace'
2018-01-15 16:28:30 -05:00
Andrew Kelley
7b57454cc1
clean up error return tracing
...
* error return tracing is disabled in release-fast mode
* add @errorReturnTrace
* zig build API changes build return type from `void` to `%void`
* allow `void`, `noreturn`, and `u8` from main. closes #535
2018-01-15 00:01:02 -05:00
Andrew Kelley
793f031c4c
remove 32-bit windows from supported targets list
...
we still want to support it, but there are too many bugs
to claim that we support it right now.
See #537
2018-01-14 15:17:07 -05:00
Andrew Kelley
3268276b58
the same string literal codegens to the same constant
...
this makes it so that you can send the same string literal
as a comptime slice and get the same type
2018-01-11 21:02:30 -05:00
Andrew Kelley
3c094116aa
remove %% prefix operator
...
See #632
closes #545
closes #510
this makes #651 higher priority
2018-01-09 00:51:51 -05:00
Andrew Kelley
598170756c
`a catch unreachable` generates unwrap-error code
...
See #545
See #510
See #632
2018-01-07 18:13:54 -05:00
Andrew Kelley
632d143bff
replace `a %% b` with `a catch b`
...
See #632
better fits the convention of using keywords for control flow
2018-01-07 17:28:20 -05:00
Andrew Kelley
66717db735
replace `%return` with `try`
...
See #632
better fits the convention of using keywords for control flow
2018-01-07 16:53:13 -05:00
Andrew Kelley
e7c04b6df2
add a test for returning a type that closes over a local const
...
closes #552
2018-01-07 00:50:43 -05:00
Andrew Kelley
bb39e503c0
fix struct inside function referencing local const
...
closes #672
the crash and compile errors are fixed but structs
inside functions still get named after the functions
they're in. this will be fixed later.
2018-01-07 00:28:37 -05:00
Andrea Orru
e932919e68
Darwin -> MacOSX, added Zen. See #438
2018-01-06 23:10:53 -05:00
Andrew Kelley
5b156031e9
enum tag values are expressions so no parentheses needed
2018-01-03 16:05:37 -05:00
Andrew Kelley
c741d3f4b2
add test for while respecting implicit comptime
2018-01-03 03:15:06 -05:00
Andrew Kelley
0ea50b3157
ir: new pass iteration strategy
...
Before:
* IR basic blocks are in arbitrary order
* when doing an IR pass, when a block is encountered, code
must look at all the instructions in the old basic block,
determine what blocks are referenced, and queue up those
old basic blocks first.
* This had a bug (See #667 )
Now:
* IR basic blocks are required to be in an order that guarantees
they will be referenced by a branch, before any instructions
within are referenced.
ir pass1 is updated to meet this constraint.
* When doing an IR pass, we iterate over old basic blocks
in the order they appear. Blocks which have not been
referenced are discarded.
* After the pass is complete, we must iterate again to look
for old basic blocks which now point to incomplete new
basic blocks, due to comptime code generation.
* This last part can probably be optimized - most of the time
we don't need to iterate over the basic block again.
closes #667
2018-01-02 21:08:12 -05:00
Andrew Kelley
2a25398c86
fix segfault when passing union enum with sub byte...
...
...field to const slice parameter
we use a packed struct internally to represent a const array
of disparate union values, and needed to update the internal
getelementptr instruction to recognize that.
closes #664
2017-12-24 04:11:58 -05:00
Andrew Kelley
760b307e8a
fix endianness of sub-byte integer fields in packed structs
...
closes #307
2017-12-22 18:27:33 -05:00
Andrew Kelley
d917815d81
explicitly return from blocks
...
instead of last statement being expression value
closes #629
2017-12-22 00:50:30 -05:00
Andrew Kelley
8bc523219c
add labeled loops, labeled break, labeled continue. remove goto
...
closes #346
closes #630
regression: translate-c can no longer translate switch statements.
after #629 we can ressurect and modify the code to utilize arbitrarily
returning from blocks.
2017-12-20 23:00:19 -05:00
Andrew Kelley
d686113bd2
fix crash when implicitly casting array of len 0 to slice
...
closes #660
2017-12-19 22:38:02 -05:00
Andrew Kelley
1cc450e6e7
fix assert when wrapping zero bit type in nullable
...
closes #659
2017-12-19 18:21:42 -05:00
Andrew Kelley
9d9201c3b4
bring back code that uses export and fix tests
...
partial revert of 1fdebc1dc4
2017-12-19 02:39:43 -05:00
Andrew Kelley
1fdebc1dc4
wip export rewrite
2017-12-18 09:59:57 -05:00
Andrew Kelley
c9e01412a4
fix compiler crash in a nullable if after an if in...
...
...a switch prong of a switch with 2 prongs in an else
closes #656
2017-12-14 01:07:23 -05:00
Andrew Kelley
f55fdc00fc
fix const and volatile qualifiers being dropped sometimes
...
in the expression `&const a.b`, the const (and/or volatile)
qualifiers would be incorrectly dropped.
closes #655
2017-12-13 21:53:52 -05:00
Andrew Kelley
84619abe9f
add test for allowing slice[slice.len..slice.len]
2017-12-12 21:56:13 -05:00
Andrew Kelley
756a218e27
add implicit cast from enum tag type of union to const ptr to the union
...
closes #654
2017-12-08 17:49:14 -05:00
Andrew Kelley
3577a80bb6
translate-c: more complex logic for translating a C cast in a macro
2017-12-08 12:28:21 -05:00
Andrew Kelley
182cf5b8de
translate-c: support macros with pointer casting
2017-12-07 12:27:29 -05:00
Andrew Kelley
62c25af802
add higher level arg-parsing API + misc. changes
...
* add @noInlineCall - see #640
This fixes a crash in --release-safe and --release-fast modes
where the optimizer inlines everything into _start and
clobbers the command line argument data.
If we were able to verify that the user's code never reads
command line args, we could leave off this "no inline"
attribute.
* add i29 and u29 primitive types. u29 is the type of alignment,
so it makes sense to be a primitive.
probably in the future we'll make any `i` or `u` followed by
digits into a primitive.
* add `aligned` functions to Allocator interface
* add `os.argsAlloc` and `os.argsFree` so that you can get
a `[]const []u8`, do whatever arg parsing you want, and then free
it. For now this uses the other API under the hood, but it could
be reimplemented to do a single allocation.
* add tests to make sure command line argument parsing works.
2017-12-06 18:12:05 -05:00
Andrew Kelley
f464fe14f4
switch on enum which only has 1 field is comptime known
...
closes #593
2017-12-05 22:26:17 -05:00
Andrew Kelley
bb6b4f8db2
fix enum with 1 member causing segfault
...
closes #647
2017-12-05 22:15:33 -05:00
Andrew Kelley
c49ee9f632
allow union and its tag type to peer resolve to the tag type
2017-12-05 21:33:24 -05:00
Andrew Kelley
2715f6fdb8
allow implicit cast from union to its enum tag type
...
closes #642
2017-12-05 21:10:47 -05:00
Andrew Kelley
960914a073
add implicit cast from enum to union
...
when the enum is the tag type of the union and is comptime known
to be of a void field of the union
See #642
2017-12-05 20:46:58 -05:00
Andrew Kelley
63a2f9a8b2
fix casting integer literal to enum
2017-12-05 18:09:22 -05:00
Andrew Kelley
76f3bdfff8
add test for casting union to tag type of union
2017-12-04 02:12:13 -05:00
Andrew Kelley
54138d9e82
add test for union with 1 void field being 0 bits
2017-12-04 02:05:33 -05:00
Andrew Kelley
084911d9b3
add test for @sizeOf on extern and packed unions
2017-12-04 02:04:08 -05:00
Andrew Kelley
05d9f07541
more tests for unions
...
See #618
2017-12-04 00:56:27 -05:00
Andrew Kelley
fce435db26
fix abi alignment of union-enums not counting tag type
...
add more tests for unions
See #618
2017-12-04 00:32:12 -05:00
Andrew Kelley
5a8367e892
rename @EnumTagType to @TagType. add tests for union-enums
...
See #618
2017-12-03 22:36:01 -05:00
Andrew Kelley
0ad1239522
rework enums and unions and their relationship to each other
...
* @enumTagName renamed to @tagName and it works on enums and
union-enums
* Remove the EnumTag type. Now there is only enum and union,
and the tag type of a union is always an enum.
* unions support specifying the tag enum type, and they support
inferring an enum tag type.
* Enums no longer support field types but they do support
setting the tag values. Likewise union-enums when inferring
an enum tag type support setting the tag values.
* It is now an error for enums and unions to have 0 fields.
* switch statements support union-enums
closes #618
2017-12-03 20:43:56 -05:00
Andrew Kelley
137c8f5e8a
ability to set tag values of enums
...
also remove support for enums with 0 values
closes #305
2017-12-02 22:32:39 -05:00
Andrew Kelley
98237f7c0b
casting between integer and enum only works via tag type
...
See #305
2017-12-02 17:12:37 -05:00
Andrew Kelley
264c86853b
packed structs can have enums with explicit tag types
...
See #305
2017-12-01 00:34:29 -05:00
Andrew Kelley
b62e2fd870
ability to specify tag type of enums
...
see #305
2017-11-30 22:08:11 -05:00
Andrew Kelley
7729f6cf4e
translate-c: support static incomplete array inside function
2017-11-29 21:50:38 -05:00
Andrew Kelley
716b0b8655
fix capturing value of switch with all unreachable prongs
...
closes #635
2017-11-29 21:34:17 -05:00
Andrew Kelley
7066283004
translate-c: support const ptr initializer
2017-11-28 23:44:45 -05:00
Andrew Kelley
26096e79d1
translate-c: fix clobbering primitive types
2017-11-28 03:17:28 -05:00
Andrew Kelley
e745544dac
translate-c: detect macros referencing field lookup
...
as fn calls which assert the fn ptr is non-null
2017-11-28 02:58:51 -05:00
Andrew Kelley
f537c51f25
Merge branch 'c-field-expr' of https://github.com/dimenus/zig into dimenus-c-field-expr
2017-11-28 00:44:16 -05:00
Mason Remaley
3e8fd24547
Implements translation for the prefix not operator ( #628 )
2017-11-27 21:00:05 -05:00
Ryan Saunderson
57049b95b3
Resolving merge w/ upstream master
2017-11-27 11:42:48 -06:00
dimenus
04472f57be
Added support for exporting of C field expressions
2017-11-27 11:23:14 -06:00
Andrew Kelley
671183fa9a
translate-c: support pointer casting
...
also avoid some unnecessary casts
2017-11-26 20:05:55 -05:00
Andrew Kelley
93fac5f257
translate-c: support variable name shadowing
2017-11-26 17:30:43 -05:00
Andrew Kelley
9a8545d590
translate-c: fix translation when no default switch case
2017-11-26 16:03:56 -05:00
Andrew Kelley
aa2ca3f02c
translate-c: better way to translate switch
...
previously `continue` would be handled incorrectly
2017-11-26 15:58:49 -05:00
Andrew Kelley
1b0e90f70b
translate-c supports switch statements
2017-11-26 00:58:11 -05:00
Andrew Kelley
df0e875856
translate-c: introduce the concept of scopes
...
in preparation to implement switch and solve variable name collisions
2017-11-25 20:34:05 -05:00
Andrew Kelley
a2afcae9ff
fix crash when constant inside comptime function has compile error
...
closes #625
2017-11-25 18:16:33 -05:00
Andrew Kelley
b390929826
translate-c supports break and continue
2017-11-25 11:56:17 -05:00
Andrew Kelley
bf20b260ce
translate-c supports for loops
2017-11-25 00:57:48 -05:00
Andrew Kelley
18eb3c5f90
translate-c supports returning void
2017-11-25 00:25:47 -05:00
Andrew Kelley
40480c7cdc
translate-c supports string literals
2017-11-24 19:26:05 -05:00
Andrew Kelley
68312afcdf
translate-c: support pre increment and decrement operators
2017-11-24 16:36:39 -05:00
Andrew Kelley
5a25505668
rename "parsec" to "translate-c"
2017-11-24 14:56:05 -05:00
Andrew Kelley
339d48ac15
parse-c: support address of operator
2017-11-17 12:11:03 -05:00
Andrew Kelley
b50c676f76
add parse-c support for unions
2017-11-16 23:54:33 -05:00
Andrew Kelley
5d2ba056c8
fix codegen for union init with runtime value
...
see #144
2017-11-16 22:06:08 -05:00
Andrew Kelley
e26ccd5166
debug safety for unions
2017-11-16 21:15:15 -05:00
Andrew Kelley
018cbff438
unions have a secret field for the type
...
See #144
2017-11-15 22:52:47 -05:00
Andrew Kelley
f276fd0f37
basic union support
...
See #144
2017-11-15 13:04:18 -05:00
Andrew Kelley
5029322aa1
c-to-zig: handle UO_Deref
2017-11-14 02:10:13 -05:00
Josh Wolfe
6ffaf4c2e2
parsec supports do loop
2017-11-13 22:56:20 -07:00
Josh Wolfe
012ce1481e
parsec supports post increment/decrement with used result
2017-11-13 22:19:51 -07:00
Josh Wolfe
4c2cdf6f4d
parsec supports more compound assign operators
2017-11-13 21:37:30 -07:00
Josh Wolfe
c1fde0e8c4
parsec supports bitshift operators
2017-11-13 20:49:53 -07:00
Andrew Kelley
03732860be
add test case for previous commit
2017-11-13 22:33:41 -05:00
Josh Wolfe
57cd074959
parsec supports C comma operator
2017-11-13 19:59:32 -07:00
Josh Wolfe
1f28fcdec5
parsec supports C NULL to pointer implicit cast
2017-11-13 19:39:46 -07:00
Andrew Kelley
7ea669e04c
fix parameter of extern var args not type checked
...
closes #601
2017-11-09 11:30:39 -05:00
Andrew Kelley
4f8c26d2c6
fix enum sizes too large
...
closes #598
2017-11-08 21:44:10 -05:00
Andrew Kelley
4543413491
std.io: introduce buffered I/O and change API
...
I started working on #465 and made some corresponding std.io
API changes.
New structs:
* std.io.FileInStream
* std.io.FileOutStream
* std.io.BufferedOutStream
* std.io.BufferedInStream
Removed:
* std.io.File.in_stream
* std.io.File.out_stream
Now instead of &file.out_stream or &file.in_stream to get access to
the stream API for a file, you get it like this:
var file_in_stream = io.FileInStream.init(&file);
const in_stream = &file_in_stream.stream;
var file_out_stream = io.FileOutStream.init(&file);
const out_stream = &file_out_stream.stream;
This is evidence that we might not need any OOP features -
See #130 .
2017-11-07 03:22:27 -05:00
Andrew Kelley
634e8713c3
add @memberType and @memberName builtin functions
...
see #383
there is a plan to unify most of the reflection into 2
builtin functions, as outlined in the above issue,
but this gives us needed features for now, and we can
iterate on the design in future commits
2017-11-06 22:07:19 -05:00
Andrew Kelley
f0d755153d
add compile-time reflection for function arg types
...
See #383
2017-11-04 16:20:02 -04:00
Andrew Kelley
a31b23c46b
more compile-time type reflection
...
See #383
2017-11-03 00:00:57 -04:00
Andrew Kelley
9e234d4208
breaking change to std.io API
...
* Merge io.InStream and io.OutStream into io.File
* Introduce io.OutStream and io.InStream interfaces
- io.File implements both of these
* Move mem.IncrementingAllocator to heap.IncrementingAllocator
Instead of:
```
%return std.io.stderr.printf("hello\n");
```
now do:
```
std.debug.warn("hello\n");
```
To print to stdout, see `io.getStdOut()`.
* Rename std.ArrayList.resizeDown to std.ArrayList.shrink.
2017-10-31 04:47:55 -04:00
Andrew Kelley
4c306af4eb
add test case for previous commit
2017-10-27 01:22:48 -04:00
Marc Tiehuis
6663638195
Improve invalid character error messages ( #566 )
...
See #544
2017-10-26 10:00:23 -04:00
Andrew Kelley
300c83d893
fix crash on field access of opaque type
2017-10-25 23:18:18 -04:00
Andrew Kelley
643ab90ace
add maximum value for @setAlignStack
2017-10-23 22:33:00 -04:00
Andrew Kelley
175893913d
fix compiler crash regarding type name of undefined
...
See #547
2017-10-21 13:14:10 -04:00
Andrew Kelley
8cfb0cfbce
std.os.ChildProcess: on windows cwd affects exe search path
...
to match posix semantics
disabling non-passing build-examples tests. See #538
2017-10-16 02:30:03 -04:00
Andrew Kelley
78b753af9d
fix debug safety tests on windows
...
See #302
2017-10-16 00:20:51 -04:00
Andrew Kelley
d6bfa3f639
fix compare-output tests on windows
...
the %a format specifier had different behavior so I
used %.013a instead to make it the same on all platforms
2017-10-15 23:52:13 -04:00
Andrew Kelley
e3ad13e054
fix windows argument parsing
2017-10-15 20:19:15 -04:00
Andrew Kelley
bb169a7b36
fix child process stdio piping behavior on windows
2017-10-15 16:03:32 -04:00
Andrew Kelley
b61a6ec8a6
implement command line argument parsing for windows
...
See #302
2017-10-11 22:50:16 -04:00
Andrew Kelley
b4e42042cf
fix compiler crash when invalid value used
...
closes #527
2017-10-06 12:41:14 -04:00
Andrew Kelley
8d4668231a
compiler-rt tests pass with and without libc
2017-10-03 01:15:07 -04:00
Andrew Kelley
3c6eff465d
fix tests on linux and macos
2017-10-03 01:14:29 -04:00
Andrew Kelley
f1bd02e6f4
add @setAlignStack builtin
2017-10-03 00:29:27 -04:00
Andrew Kelley
ec40542c44
windows: alignstack=16 on every function
...
See #302
2017-10-02 09:55:49 -04:00
Andrew Kelley
8156e4f78f
fix parse-c tests
2017-10-01 21:42:33 -04:00
Andrew Kelley
6ae631d1a7
add windows 32 bit to test matrix
...
See #302
2017-10-01 11:11:38 -04:00
Andrew Kelley
6f250f568a
workaround llvm bug for windows alignment
...
See #302
2017-09-30 23:42:44 -04:00
Andrew Kelley
c6295fe9ab
remove zigrt
...
adds test case for #394
partially reverts a32b5929cc
2017-09-30 20:21:57 -04:00
Marc Tiehuis
9dfe217be3
Allow 128-bit hex float literals
...
Closes #499 .
2017-09-28 23:33:36 +13:00
Andrew Kelley
cba4a9ad4a
update std.os.ChildProcess API
...
* add std.os.ChildProcess.setUserName
* add std.os.getUserId
2017-09-26 01:01:49 -04:00
Josh Wolfe
ee42caee0e
fix chain assignment semicolon
2017-09-20 23:49:46 -07:00
Josh Wolfe
d7775e3dca
chain assignment
2017-09-20 23:45:53 -07:00
Andrew Kelley
be37b03f4c
parse-c: support sizeof
2017-09-21 02:37:42 -04:00
Andrew Kelley
c01ae69cdb
parse-c: support implicit cast to void *
2017-09-21 02:31:52 -04:00
Andrew Kelley
2655cf1bf7
parse-c: support c style cast
2017-09-21 01:55:15 -04:00
Josh Wolfe
5ac2cf9c28
fix assignment needing an lvalue
2017-09-20 22:41:16 -07:00
Andrew Kelley
1360af847e
parse-c: array access expression
2017-09-21 01:38:29 -04:00
Josh Wolfe
67a5a3f3d7
add sub mul div rem
2017-09-20 22:36:43 -07:00
Andrew Kelley
0d1f64b08c
parse-c: fix undefined array literals
2017-09-21 01:22:50 -04:00
Josh Wolfe
33784871ec
assign
2017-09-20 22:14:39 -07:00
Josh Wolfe
f7cb77a02c
Merge remote-tracking branch 'origin/c-to-zig' into c-to-zig
2017-09-20 22:05:14 -07:00
Josh Wolfe
2ae789d27c
bitwise binary operators
2017-09-20 22:04:51 -07:00
Andrew Kelley
0d91747502
parse-c: null statements
2017-09-21 01:04:43 -04:00
Andrew Kelley
eba45b0013
parse-c: field access expressions
2017-09-21 00:54:08 -04:00
Josh Wolfe
0827a8f36b
==, !=
2017-09-20 21:47:43 -07:00
Josh Wolfe
4c8443d96d
logical and, logical or
2017-09-20 21:37:56 -07:00
Josh Wolfe
05c1a8b3cc
add some tests
2017-09-20 21:27:13 -07:00
Andrew Kelley
f68d724647
parse-c: support function calls
2017-09-21 00:02:18 -04:00
Andrew Kelley
38059e6f97
parse-c: fix anonymous enums
2017-09-20 23:16:44 -04:00
Andrew Kelley
9cdb5dec7a
parsec: cleaner shifting code for fixed size types
2017-09-20 22:44:24 -04:00
Josh Wolfe
a5e4e205c8
fix tests
2017-09-20 19:12:57 -07:00
Andrew Kelley
0228f8c9fd
all parsec tests passing
2017-09-20 21:16:26 -04:00
Andrew Kelley
3c41c2d84b
Merge branch 'master' into c-to-zig
2017-09-20 12:52:54 -04:00
Andrew Kelley
dbc202cc6a
add test for struct with invalid field
...
see #468
2017-09-17 23:21:22 -04:00
Andrew Kelley
7ee00730ac
add option to run tests in LLDB and turn it on for macos travis
2017-09-17 14:43:51 -04:00
Andrew Kelley
21a55d89b6
add release-safe to the test matrix
...
See #449
the llvm assertion that is being triggered appears to be an llvm
bug that is harmless with assertions off.
2017-09-16 20:30:39 -04:00
Marc Tiehuis
71342f8249
Add dash arguments for cli
2017-09-17 12:26:13 +12:00
Andrew Kelley
14cda27b64
depend on embedded SoftFloat-3d instead of __float128
...
See #302
See #467
2017-09-14 01:46:47 -04:00
Andrew Kelley
d9eabde319
add Child property of slice type
...
also rename child field to Child for pointer and array
2017-09-13 14:30:57 -04:00
Andrew Kelley
4bd23aefe7
local var
2017-09-11 22:58:06 -04:00
jean-dao
373785ae8d
c macros: support hex chars ( #459 )
...
* c macros: remove add_char redundancies
* c macros: support hex chars
* c macros: add test for hex chars
2017-09-10 16:35:56 -04:00
Andrew Kelley
011df61f8a
fix not verifying GlobalLinkage and AtomicOrder types
...
thanks to aep4Ayai on IRC
2017-09-10 14:04:19 -04:00
Andrew Kelley
b00b7bd290
variables are allowed to be pointers to opaque
2017-09-10 00:34:44 -04:00
Andrew Kelley
b5d9584e6f
support parens in C macros
...
closes #454
2017-09-10 00:20:09 -04:00
Andrew Kelley
9dfbdeace6
add import test
2017-09-09 22:54:50 -04:00
Andrew Kelley
4c78142af1
rename some behavior tests
2017-09-09 22:53:32 -04:00
Andrew Kelley
bc0a60c7a6
more compile errors for non-const variables of things
...
closes #456
2017-09-09 22:46:08 -04:00
Andrew Kelley
9fb4d1fd6c
std: os.ChildProcess knows when its child died
...
using signal handlers
2017-09-07 23:10:51 -04:00
Andrew Kelley
2c9bdad346
rename parseh to parsec
2017-09-05 22:55:03 -04:00
Andrew Kelley
3ff465e288
add OpaqueType builtin
...
closes #326
2017-09-05 18:51:07 -04:00
Andrew Kelley
5c386f9911
parseh: remove unneeded hash tables
2017-09-05 01:22:26 -04:00
Andrew Kelley
f6c271f8eb
parseh tests passing
2017-09-05 00:52:05 -04:00
Andrew Kelley
b64843bf70
parseh: fix generating functions from macros
2017-09-05 00:45:09 -04:00
Andrew Kelley
cc621cdee3
fix parseh bugs
2017-09-05 00:21:02 -04:00
Andrew Kelley
e1d5da20a5
rewrite parseh to use AST instead of direct types
...
some tests still failing
2017-09-02 04:11:23 -04:00
Andrew Kelley
c42e809f13
setEvalBranchQuota must be called from top of comptime stack
2017-08-31 16:54:20 -04:00
Andrew Kelley
67b6dd28ec
allow array literals to have size and fix comptime bug
2017-08-31 16:30:46 -04:00
Andrew Kelley
eb0979189b
add windows to test targets
...
cross-compiling hello world with no libc for windows is working
2017-08-31 11:41:58 -04:00
Andrew Kelley
97013951dd
tests use darwin, not macosx since that's what macbook reports as
2017-08-30 15:15:14 -04:00
Andrew Kelley
0e9bdb44a6
test suite cross-compile builds tests for other targets
2017-08-30 14:55:26 -04:00
Andrew Kelley
052b4ae941
align syntax: align(4) instead of align 4
...
closes #37
2017-08-30 04:54:33 -04:00
Andrew Kelley
e9280c86a1
compile error for not-aligned-enough pointer to cmpxchg
...
See #37
2017-08-30 02:56:42 -04:00