Andrew Kelley
63a2f9a8b2
fix casting integer literal to enum
2017-12-05 18:09:22 -05:00
Andrew Kelley
74cea89fce
translate-c: fix not printing clang errors
2017-12-05 12:28:59 -05:00
Andrew Kelley
5ebed1c9ee
fix incorrect LLVM IR for union constant when active field is void
...
found in the llvm6 branch with llvm assertions on
2017-12-04 17:10:46 -05:00
Andrew Kelley
a966275e50
rename builtin.is_big_endian to builtin.endian
...
See #307
2017-12-04 10:36:31 -05:00
MIURA Masahiro
fea016afc0
Fix the color of compiler messages for light-themed terminal.
2017-12-04 19:22:34 +09: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
cf96b6f87b
update to LLVM 5.0.1rc2
2017-12-01 13:44:28 -05:00
Andrew Kelley
b4120423a5
translate-c: only emit enum tag type if not c_int or c_uint
2017-12-01 00:37:15 -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
210d0017c4
fix build broken by previous commit
...
now we report a compile error for unusual failures from translate-c
2017-11-29 23:09:35 -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
Andrew Kelley
1ab84a27d3
translate-c: fix sometimes getting (no file) warnings
...
Thanks to Mason Remaley for testing the fix.
2017-11-28 00:32:32 -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
687e359291
translate-c: avoid global state and introduce var decl scopes
...
in preparation to implement switch and solve variable name collisions
2017-11-25 22:17:24 -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
48ebb65cc7
add an assert to catch corrupted memory
2017-11-25 16:34:08 -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
cd36baf530
fix assertion failed when invalid type encountered
2017-11-24 22:04:24 -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
f12d36641f
union secret field is the tag index instead of distinct type index
...
See #144
2017-11-16 10:06:58 -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
df07361642
Merge branch 'parsec' of https://github.com/dimenus/zig into dimenus-parsec
2017-11-13 22:26:31 -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
dimenus
98e3c7911c
Fixed duplicate decl detection for typedefs/enums
2017-11-13 16:37:46 -06:00
Andrew Kelley
019f18058b
fix test failures
...
put all the codegen for fn prototypes to the same place
2017-11-10 16:32:37 -05:00
Andrew Kelley
029d37d6a7
fix bug when multiple function definitions exist
...
This might be related to #529
2017-11-10 14:58:50 -05: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
4cc9fe90a8
fix build on MacOS
2017-11-04 16:40:55 -04:00
Andrew Kelley
f0d755153d
add compile-time reflection for function arg types
...
See #383
2017-11-04 16:20:02 -04:00
Andrew Kelley
4a6df04f75
slightly more verbose error message when building object file fails
2017-11-03 20:07:32 -04:00
Andrew Kelley
75afe73c66
Merge pull request #581 from Dimenus/line_endings
...
Add support for windows line endings with c macros within a c_import.
2017-11-03 18:40:38 -04:00
dimenus
1890760206
Windows libc & static libc are located in the same dir which is already covered by msvc_lib_dir
2017-11-03 17:09:35 -05:00
dimenus
1ef6cb1b64
Add support for windows line endings with c macros
2017-11-03 16:29:49 -05:00
Marc Tiehuis
795703a39c
Add emit command-line option ( #580 )
...
Add emit command-line option
2017-11-03 09:09:33 -04:00
Andrew Kelley
a31b23c46b
more compile-time type reflection
...
See #383
2017-11-03 00:00:57 -04:00
Andrew Kelley
dc8b011d61
fix incorrect debug info for empty structs
...
closes #579
now all tests pass for llvm master branch
2017-11-02 21:57:55 -04:00
Andrew Kelley
abff1b6884
windows: use the same libc search within a compilation unit
2017-11-01 23:08:34 -04:00
Dimenus
38f05d4ac5
WIN32: Linking with the CRT at runtime. ( #570 )
...
Disclaimer: Forgive me if my format sucks, I've never submitted a PR before!
Fixes : #517
I added a few things to allow zig to link with the CRT properly both statically and dynamically. In Visual Studio 2017, Microsoft changed how the c-runtime is factored again. With this change, they also added a COM interface to allow you to query the respective Visual Studio instance for two of them. This does that and also falls back on a registry query for 2015 support. If you're using a Visual Studio instance older than 2015, you'll have to use the existing options available with the zig compiler. Changes are listed below along with a general description of the changes.
all_types.cpp:
The separate variables for msvc/kern32 have been removed and all win32 libc directory paths have been combined into a ZigList since we're querying more than two directories and differentiating one from another doesn't matter to lld.
analyze.cpp:
The existing functions were extended to support querying libc libs & libc headers at runtime.
codegen.cpp/hpp:
Microsoft uses the new 'Universal C Runtime' name now. Doesn't matter from a functionality standpoint. I left the compiler switches as is to not introduce any breaking changes.
link.cpp:
We're linking 4 libs and generating another in order to support the UCRT.
Dynamic: msvcrt/d, vcruntime/d, ucrt/d, legacy_stdio_definitions.lib
Static: libcmt/d, libvcruntime/d libucrt/d, legacy_stdio_definitions.lib
main.cpp:
Update function call names.
os.cpp/hpp:
COM/Registry interface for querying Windows UCRT/SDK.
Sources:
[Windows CRT](https://docs.microsoft.com/en-us/cpp/c-runtime-library/crt-library-features )
[VS 2015 Breaking Changes](https://msdn.microsoft.com/en-us/library/bb531344.aspx )
2017-11-01 15:33:14 -04:00
Andrew Kelley
540bac0928
Merge branch 'master' into self-hosted
2017-10-27 01:28:08 -04:00
Andrew Kelley
f1072d0d9f
use llvm named structs for const values when possible
...
normally we want to use llvm types for constants. but
union constants (which are found inside enums) when
they are initialized with the non-most-aligned-member
must be unnamed structs.
these bubble up to all aggregate types. if a constant of
an aggregate type contains, recursively, a union constant
with a non-most-aligned-member initialized, the aggregate
typed constant must be unnamed too.
this fixes some of the asserts that were coming in from
llvm master branch.
2017-10-27 00:14:56 -04:00
Marc Tiehuis
6663638195
Improve invalid character error messages ( #566 )
...
See #544
2017-10-26 10:00:23 -04:00
Andrew Kelley
c7053bea20
better output when @cImport generates invalid zig
2017-10-26 00:32:30 -04:00
Andrew Kelley
300c83d893
fix crash on field access of opaque type
2017-10-25 23:18:18 -04:00
Andrew Kelley
5f28a9d238
cleaner verbose flags and zig build prints failed command
2017-10-25 23:10:41 -04:00
Andrew Kelley
1828f8eb8e
fix missing compiler_rt in release modes
...
the optimizer was deleting compiler_rt symbols, so I changed
the linkage type from LinkOnce to Weak
also changed LinkOnce to mean linkonce_odr in llvm and
Weak to mean weak_odr in llvm.
See #563
2017-10-24 21:31:47 -04:00
Andrew Kelley
4f4da3c10c
wip self hosted code
2017-10-24 10:08:20 -04:00
Andrew Kelley
d7e28f991d
remove CXX ABI workaround
...
the actual solution is you must compile zig with the same
compiler that compiled llvm, lld, and clang.
reverts 8d60ffe314
2017-10-23 22:37:59 -04:00
Andrew Kelley
643ab90ace
add maximum value for @setAlignStack
2017-10-23 22:33:00 -04:00
Andrew Kelley
c1642355f0
parse-c: improve performance
...
previously we did linear search to find existing global
declarations; now we index using a hash map.
building tetris went from taking 5.3 sec to 0.76 sec
2017-10-21 16:46:33 -04:00
Andrew Kelley
a1af7cbf00
report compile error instead of crashing for void in var args
...
See #557
2017-10-21 15:46:04 -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
0744c83f51
add uwtable attribute to functions on windows
...
See #516
now we have at least a callstack. we still need updated LLD
to get stack traces.
2017-10-17 01:41:26 -04:00
Andrew Kelley
5866032e76
fix codegen of enum name table having wrong LLVM types
...
See https://bugs.llvm.org/show_bug.cgi?id=34952
2017-10-16 18:10:28 -04:00
Andrew Kelley
cbb6d2239f
look for libc at runtime on windows
...
See #539
before we close the issue we should also detect MSVC 2017
but this gets us started with supporting MSVC 2015
2017-10-16 12:21:46 -04:00
Andrew Kelley
d08c57741a
ability to make a DLL
...
See #302
2017-10-16 01:14:28 -04:00
Andrew Kelley
562f91e875
clean up some resources
2017-10-15 21:06:04 -04:00
Andrew Kelley
e3ad13e054
fix windows argument parsing
2017-10-15 20:19:15 -04:00
Andrew Kelley
c837ae1707
set stdout and stderr to binary mode on windows
2017-10-15 18:25:39 -04:00
Andrew Kelley
1fe1e6eeaf
mingw build: delete unused variable
2017-10-15 14:03:24 -04:00
Andrew Kelley
3c19883493
only SetConsoleTextAttribute to do console colors on windows
2017-10-15 12:15:32 -04:00
Andrew Kelley
9c44dd7db3
disable byval parameters on windows to work around llvm bug
...
See #536
2017-10-15 01:22:17 -04:00
Andrew Kelley
ba405ed59b
try harder to emit console colors
2017-10-14 20:31:47 -04:00
Andrew Kelley
fd7654e4e8
build-exe allows direct export of WinMainCRTStartup
2017-10-14 20:12:15 -04:00
Andrew Kelley
aa78827db2
add module flag to emit CodeView for COFF object files
...
see #516
2017-10-10 18:04:02 -04:00
Andrew Kelley
b4e42042cf
fix compiler crash when invalid value used
...
closes #527
2017-10-06 12:41:14 -04:00
Andrew Kelley
3af35fc1df
fix mingw build
2017-10-03 09:32:38 -04:00
Andrew Kelley
6a0c428997
use __chkstk_ms compiler-rt functions for __chkstk
...
I had to revert the target native features thing because there
is still some incorrect behavior with f128.
Reopens #508
partially reverts b505462509
See #302
2017-10-03 00:57:02 -04:00
Andrew Kelley
b505462509
replace __chkstk function with a stub that does not crash
...
Closes #508
See #302
2017-10-03 00:29:41 -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
0a4283b38b
support terminal colors for cmd.exe and msys pty
...
See #302
2017-10-02 01:37:05 -04:00
Andrew Kelley
5cbae7b671
better compiler-rt linkage logic
...
now the compiler-rt tests are passing on windows. See #302
2017-10-02 00:11:45 -04:00
Andrew Kelley
8156e4f78f
fix parse-c tests
2017-10-01 21:42:33 -04:00
Andrew Kelley
e3ea0b652c
still build compiler-rt when linking msvc CRT
...
because it's missing some things
2017-10-01 21:19:58 -04:00
Andrew Kelley
756d5c545d
remove unused function
2017-10-01 21:07:02 -04:00
Andrew Kelley
4d865e355b
support linking against MSVC libc
2017-10-01 21:05:08 -04:00
Andrew Kelley
271d6f8bb2
fix regression from previous commit
2017-10-01 18:33:57 -04:00
Andrew Kelley
1962c8588f
implement standard library path search
...
closes #463
See #302
2017-10-01 18:30:31 -04:00
Andrew Kelley
0975e37b16
fix implementation of --zig-std-dir
...
see #463
2017-10-01 15:51:55 -04:00
Andrew Kelley
0227becb56
build: escape backslashes in path arguments given to cmake
2017-10-01 14:01:18 -04:00
Andrew Kelley
5e6fc94b7f
fix codegen on windows
2017-10-01 03:05:01 -04:00
Andrew Kelley
c6295fe9ab
remove zigrt
...
adds test case for #394
partially reverts a32b5929cc
2017-09-30 20:21:57 -04:00
Andrew Kelley
6db589fff5
don't try to use cold calling convention on windows
...
it just causes a segfault
2017-09-30 20:20:51 -04:00
Andrew Kelley
08708ea4dc
fix typo in target_can_exec logic
2017-09-30 20:10:09 -04:00
Andrew Kelley
ba3d21ca67
better divTrunc codegen
...
branch and phi instead of select instruction
fixes division test for windows. See #302
2017-09-30 16:59:31 -04:00
Andrew Kelley
588d2862d9
workaround for invalid binary created on windows
...
when target native features are used.
See #508
2017-09-30 15:47:46 -04:00
Andrew Kelley
845f22101b
zig test on 64-bit windows runs 32-bit tests
2017-09-30 14:40:16 -04:00
Andrew Kelley
d43204c950
better output for cross platform zig test on windows
2017-09-30 14:07:26 -04:00
Andrew Kelley
09369b6a43
better implementation of os_spawn_process for windows
...
See #302
2017-09-30 00:43:22 -04:00
Andrew Kelley
fb365e3952
fix build on mingw
2017-09-28 09:43:40 -04:00
Marc Tiehuis
9dfe217be3
Allow 128-bit hex float literals
...
Closes #499 .
2017-09-28 23:33:36 +13:00
Andrew Kelley
6c3a56a7ff
fix i386 windows stdcall
2017-09-24 05:04:44 -04:00
Andrew Kelley
ba41be67f0
windows gui hello world
2017-09-24 03:55:45 -04:00
Andrew Kelley
41b588547c
improvements to windows support
...
See #302
2017-09-23 18:46:03 -04:00
Andrew Kelley
d71d6363ce
macho linking: support full lib paths correctly
2017-09-23 13:03:25 -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
bf6d32f8cb
Merge remote-tracking branch 'origin/c-to-zig' into c-to-zig
2017-09-20 21:17:41 -07:00
Josh Wolfe
46fef543f9
if statement
2017-09-20 21:16:49 -07:00