Commit Graph

715 Commits

Author SHA1 Message Date
Andrew Kelley
dd3437d5ba fix build on windows 2017-12-04 02:08:26 -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
Josh Wolfe
54a0db0daf todo: fix #639 2017-12-01 19:54:01 -07:00
Josh Wolfe
67b8b00c44 implement insertion sort. something's broken 2017-12-01 16:11:39 -07:00
Josh Wolfe
5786df933d add mem.readIntLE and readIntBE 2017-11-30 11:20:50 -07:00
Andrew Kelley
ccea8dcbf6 better error code for File.getEndPos failure 2017-11-29 21:34:17 -05:00
Josh Wolfe
88a7f203f9 add Buffer.appendFormat() 2017-11-29 19:31:09 -07:00
Josh Wolfe
418b0967fc fix os.Dir compile errors 2017-11-29 17:52:58 -07:00
Andrew Kelley
91ef68f9b1 Merge remote-tracking branch 'origin/master' into llvm6 2017-11-29 16:34:50 -05:00
Josh Wolfe
afbbdb2c67 move base64 functions into structs 2017-11-20 23:26:45 -07:00
Josh Wolfe
a44283b0b2 rework std.base64 api
* rename decode to decodeExactUnsafe.
* add decodeExact, which checks for invalid chars and padding.
* add decodeWithIgnore, which also allows ignoring chars.
* alphabets are supplied to the decoders with their
  char-to-index mapping already built, which enables it to be
  done at comptime.
* all decode/encode apis except decodeWithIgnore require dest
  to be the exactly correct length. This is calculated by a
  calc function corresponding to each api. These apis no longer
  return the dest parameter.
* for decodeWithIgnore, an exact size cannot be known a priori.
  Instead, a calc function gives an upperbound, and a runtime
  error is returned in case of overflow. decodeWithIgnore
  returns the number of bytes written to dest.

closes #611
2017-11-20 23:26:45 -07:00
dimenus
a7d07d412c Added DLL loading capability in windows to the std lib. 2017-11-16 21:49:05 -06:00
Andrew Kelley
9a4da6c8d8 Merge branch 'master' into llvm6 2017-11-15 22:24:42 -05:00
Andrew Kelley
7a74dbadd7 add docs for std.base64 2017-11-14 17:58:58 -05:00
Ryan Saunderson
371e578151 Merge remote-tracking branch 'upstream/master' into llvm6 2017-11-14 07:00:27 -06:00
Andrew Kelley
a890380b6a fix windows trying to run linux-only tests 2017-11-10 18:29:49 -05:00
Andrew Kelley
5ae53dacfb rename test 2017-11-10 18:24:52 -05:00
Andrew Kelley
5895204c99 Merge branch 'linux_timer' of https://github.com/bscheinman/zig into bscheinman-linux_timer 2017-11-10 18:18:03 -05:00
Brendon Scheinman
87407b54b6 add epoll and timerfd support on linux 2017-11-10 15:12:46 -08:00
Andrew Kelley
1403748fd8 disable broken 32 bit windows test
See #537
2017-11-10 17:08:11 -05:00
Andrew Kelley
df89291d1c Merge remote-tracking branch 'origin/master' into llvm6 2017-11-10 16:45:01 -05:00
Andrew Kelley
403a46abcc fix test failure on 32 bit windows 2017-11-10 16:03:14 -05:00
Andrew Kelley
20c2dbdbd3 add windows implementation of io.File.getEndPos 2017-11-10 14:36:03 -05:00
Andrew Kelley
1ac46fac15 add a std lib test for reading and writing files
* fix fstat wrong on darwin
 * move std.debug.global_allocator to std.debug.global_allocator_state and make it private
 * add std.debug.global_allocator as a pointer (to upgrade your zig code remove
   the '&')
2017-11-10 14:17:23 -05:00
dimenus
e9d7623e1f Merge remote-tracking branch 'origin/master' into llvm6 2017-11-10 09:49:45 -06:00
Jeff Fowler
336d81894d Fix Stat include in darwin land (#605) 2017-11-09 13:46:53 -05:00
Jeff Fowler
52521d5f67 fix typo on darwin lseek (#602) 2017-11-09 11:35:35 -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
3a600297ca Merge remote-tracking branch 'origin/master' into llvm6 2017-11-06 22:41:12 -05:00
scurest
f0dafd3f20 fix typos in std.io (#589)
Fixes a bug that prevented InStream.realAllAlloc from compiling.
2017-11-06 11:40:58 -05:00
scurest
48c8181886 fix redeclaration of mem (#585) 2017-11-05 15:46:54 -06:00
scurest
bd6f8d99c5 add test for c_allocator 2017-11-05 15:46:10 -06:00
Andrew Kelley
94ec2190f8 update to llvm master 2017-11-02 21:54:24 -04:00
Andrew Kelley
f7837f445e bump build_runner allocator to use 30 MB 2017-11-01 16:46:10 -04:00
Andrew Kelley
25972be45c fix windows build from previous commit 2017-10-31 22:24:02 -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
5f28a9d238 cleaner verbose flags and zig build prints failed command 2017-10-25 23:10:41 -04:00
Andrew Kelley
73fe5f63c6 add some sanity tests for float printing 2017-10-24 21:57:58 -04:00
Andrew Kelley
1e784839f1 Merge branch 'float-printing' of https://github.com/scurest/zig into better-float-printing 2017-10-24 21:44:49 -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
scurest
262b7428cf More corrections to float printing
Testing suggests all f32s are now printed accurately.
2017-10-24 14:18:50 -05:00
scurest
03a0dfbeca Print better floats 2017-10-23 15:40:49 -05:00
Andrew Kelley
9b91c76088 std.fmt.format supports ints smaller than u8
closes #546

thanks to @Dimenus for the fix
2017-10-21 13:03:08 -04:00
Andrew Kelley
b3d12d2c9e zig build: fix system libraries not respected for C artifacts
closes #550
2017-10-21 12:58:47 -04:00
Marc Tiehuis
09c0cf2dcf Add c allocator (#542) 2017-10-17 08:13:04 -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
4e2a5e6b13 fix regression on posix from previous commit 2017-10-16 01:16:51 -04:00
Andrew Kelley
d08c57741a ability to make a DLL
See #302
2017-10-16 01:14:28 -04:00
Andrew Kelley
e3ad13e054 fix windows argument parsing 2017-10-15 20:19:15 -04:00
Andrew Kelley
fca1d53625 std.io: fix bug when writing large buffer 2017-10-15 17:10:06 -04:00
Andrew Kelley
faf64b5d0f fix posix from previous commit 2017-10-15 16:47:29 -04:00
Andrew Kelley
fcef7c4bb2 fix std.io.InStream for windows
now we handle PIPE_BROKEN as an EOF

also set up framework for debugging unexpected posix/windows errors
2017-10-15 16:45:43 -04:00
Andrew Kelley
bb169a7b36 fix child process stdio piping behavior on windows 2017-10-15 16:03:32 -04:00
Andrew Kelley
a98373f144 use correct integer type for windows BOOL 2017-10-15 14:01:55 -04:00
Andrew Kelley
6fe1c3186f disable some of the failing tests
See #537
2017-10-15 02:04:21 -04:00
Andrew Kelley
3b0fe534bc fix regression on posix from previous commit 2017-10-15 01:24:58 -04:00
Andrew Kelley
8ab5313043 implement environment variables for windows 2017-10-15 01:23:10 -04:00
Andrew Kelley
55e8bbd167 std.mem.IncrementingAllocator: check for errors 2017-10-15 01:22:36 -04:00
Andrew Kelley
f54aff4672 implement io.OutStream.openMode for windows 2017-10-14 18:23:16 -04:00
Andrew Kelley
46352f6bfe std.io: remove unused constants 2017-10-14 18:12:14 -04:00
Andrew Kelley
531f3344dc implement std.os.rename for windows 2017-10-14 17:56:18 -04:00
Andrew Kelley
61d715d784 implement std.os.symLink for windows 2017-10-14 17:39:44 -04:00
Andrew Kelley
ad6eec9480 fix regressions from previous commit on windows 2017-10-14 17:10:53 -04:00
Andrew Kelley
0307dc0b77 organize windows utility functions 2017-10-14 16:59:43 -04:00
Andrew Kelley
a68dc65327 fix os.makeDir for posix 2017-10-14 15:39:31 -04:00
Andrew Kelley
0bc80411f6 implement os.makeDir for windows 2017-10-14 15:32:29 -04:00
Andrew Kelley
8d3eaab871 implement std.os.ChildProcess for windows 2017-10-14 15:32:18 -04:00
Andrew Kelley
7f9dc4ebc1 fix std.os.getRandomBytes for windows 2017-10-11 23:14:48 -04:00
Andrew Kelley
b61a6ec8a6 implement command line argument parsing for windows
See #302
2017-10-11 22:50:16 -04:00
Andrew Kelley
717e791db2 better abort() implementation for windows
in debug mode, it spawns the debugger
2017-10-10 20:34:12 -04:00
Andrew Kelley
1f28d641c0 fix std.io.OutStream.close for windows 2017-10-10 19:36:35 -04:00
Andrew Kelley
1c28631738 use allocator.shrink instead of realloc in os.path.real 2017-10-10 11:31:53 -04:00
Andrew Kelley
e6334fe46d implement std.io.InStream for windows
See #302
2017-10-09 15:59:10 -04:00
Andrew Kelley
055b856f13 fix build on non-windows
broken by previous commit
2017-10-09 14:27:14 -04:00
Andrew Kelley
c4262da8de implement os.path.real for windows and update allocator interface 2017-10-09 14:21:35 -04:00
Andrew Kelley
a4310cf8b4 implement std.os.deleteFile for windows 2017-10-08 23:06:56 -04:00
Andrew Kelley
7f56744320 fix os.path.resolveWindows on non-windows 2017-10-08 21:52:26 -04:00
Andrew Kelley
9d5f15fe3d implement os.getCwd for windows 2017-10-08 21:44:24 -04:00
Andrew Kelley
7cfab2fb5f implement std.os.relative for windows 2017-10-08 21:44:24 -04:00
Andrew Kelley
e15e1e09f0 os.path.basename implementation for windows 2017-10-08 21:44:17 -04:00
Andrew Kelley
dcf5c9074e more std.os.path work for windows 2017-10-08 21:43:58 -04:00
Andrew Kelley
08ee69dac3 implement os.path.dirname for windows 2017-10-08 21:43:43 -04:00
Snorre
522b431057 fix isatty for macOS and libc (#523) 2017-10-03 09:33:30 -04:00
Andrew Kelley
f86684f410 fix duplicated symbols in compiler-rt tests 2017-10-03 01:26:07 -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
b3f3db46be compiler-rt: strong linkage for __chkstk
otherwise we get undefined symbol errors
2017-10-02 00:22:24 -04:00
Andrew Kelley
25ea8f7dbb fix typo in compiler-rt 2017-10-02 00:13:56 -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
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
6ae631d1a7 add windows 32 bit to test matrix
See #302
2017-10-01 11:11:38 -04:00
Andrew Kelley
844e05f619 improve bit shift API in std.math
* `shl` moved to `shlExact`
 * added `shl` and `shr` which are truncating like `<<` and `>>`.

closes #403
2017-09-30 21:09:58 -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
9c6e12ac29 compiler-rt: add _aulldiv and _aullrem for i386 windows 2017-09-30 13:58:05 -04:00
Andrew Kelley
b7a4f16cc4 fix previous commit 2017-09-30 13:40:55 -04:00
Andrew Kelley
53aa72b58a add ___chkstk_ms compiler-rt function 2017-09-30 13:39:37 -04:00
Marc Tiehuis
9dfe217be3 Allow 128-bit hex float literals
Closes #499.
2017-09-28 23:33:36 +13:00
Andrew Kelley
fd5a5db400 implement IncrementingAllocator for Windows 2017-09-27 22:59:58 -04:00
Andrew Kelley
9ae66b4c67 add test for std.mem.IncrementingAllocator
See #501
2017-09-27 22:04:38 -04:00
Josh Wolfe
583ca36e62 add reset() method to IncrementingAllocator (#501) 2017-09-27 21:54:43 -04:00
Andrew Kelley
224cd8a01e add fmt.parseInt 2017-09-26 19:40:51 -04:00
Andrew Kelley
768af66977 implement setreuid, setregid for darwin 2017-09-26 03:35:33 -04:00
Andrew Kelley
4f0f3a7d45 std.os.ChildProcess: setgid before setuid
otherwise we thwart our permissions to setuid
2017-09-26 03:17:58 -04:00
Andrew Kelley
5c2db5a942 add std.fmt.trim 2017-09-26 03:03:12 -04:00
Andrew Kelley
fd2d502e41 std.os.ChildProcess: ability to set both uid and gid 2017-09-26 02:42:06 -04: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
Andrew Kelley
8f0dfcbcfb Revert "windows API functions are not stdcalls"
This reverts commit 59410a2f13.

yes they are
2017-09-24 04:18:13 -04:00
Andrew Kelley
59410a2f13 windows API functions are not stdcalls 2017-09-24 04:09:13 -04:00
Andrew Kelley
ba41be67f0 windows gui hello world 2017-09-24 03:55:45 -04:00
Andrew Kelley
7fd164f196 zig build: add linkFramework API 2017-09-23 17:59:30 -04:00
Andrew Kelley
2f98676bbe std.build: fix -install_name for darwin dynamic C linking 2017-09-23 13:32:17 -04:00
Andrew Kelley
eb0867d3f0 std.build: fix building C dynamic libraries on darwin 2017-09-23 13:27:36 -04:00
Andrea Orru
e7a01c24a3 LinkedList helper functions (#493)
* Restore LinkedList helper functions

* mem.Allocator
2017-09-21 10:28:44 -04:00
Marc Tiehuis
c4a54377e3 Stop debug allocator ever panicking (#492) 2017-09-19 09:47:41 -04:00
Andrew Kelley
751ab72a82 std: fix os.sleep on darwin and windows 2017-09-19 09:46:41 -04:00
Andrew Kelley
10ad3253de std.build: catch mistake of setting output path to build dir
closes #464
2017-09-18 18:01:58 -04:00
Andrew Kelley
24b6dcc507 std.build: explicitly disable stack protector when nostdlib 2017-09-18 15:30:07 -04:00
Andrew Kelley
385da95eb4 std.build: simpler API
merge LibExeObj and CLibExeObj

also make it so that you can disable libc when compiling C
2017-09-18 02:51:09 -04:00
Andrew Kelley
c5ca8b51f9 zig build: use stack protector for C code in debug mode 2017-09-17 19:20:48 -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
a9ecb26c34 std.os.ChildProcess: fix fd leak 2017-09-16 21:07:02 -04:00
Marc Tiehuis
71342f8249 Add dash arguments for cli 2017-09-17 12:26:13 +12:00
Andrew Kelley
766547dbfe bump incrementing allocator memory in build system to 20MB
See #467
2017-09-14 20:28:38 -04: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
Jonathan Marler
3f8b26c06a Allow INVALID_HANDLE_VALUE for windows to work on 32-bit and 64-bit. (#457) 2017-09-10 11:16:27 -04:00
jean-dao
0f7544cfca std.io.InStream: add readLine function (#458) 2017-09-10 11:10:55 -04:00
Andrew Kelley
5fdf3fa195 std.fmt knows how to format &[N]u8 2017-09-09 19:42:31 -04:00
Marc Tiehuis
f725b20de6 Add appendSlice function (#448) 2017-09-09 13:49:40 -04:00
Marc Tiehuis
67a31befa6 Add exit function (#450) 2017-09-09 13:48:44 -04:00
Andrew Kelley
d244deb59e fix std.Buffer.endsWith
thanks for the report by jean-dao

closes #443
2017-09-08 09:19:02 -04:00
Andrew Kelley
2c8ff1d47b std.ChildProcess.spawn: handle 0 from waitpid correctly 2017-09-08 01:23:48 -04:00
Andrew Kelley
838d52a8be std.os.ChildProcess: don't expect all SIGCHLD to come from spawn 2017-09-08 00:45:45 -04:00
Andrew Kelley
a81e516174 fix ChildProcess.spawn on darwin 2017-09-08 00:04:43 -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
9f7e62b95b std: add ChildProcess.kill 2017-09-06 18:30:45 -04:00
Andrew Kelley
7e59f4ff69 std: add os.sleep 2017-09-06 16:59:22 -04:00
Andrew Kelley
1f2548ec5f better build.zig template 2017-09-06 14:18:14 -04:00
Andrew Kelley
ee9d1d0414 c-to-zig: return statement 2017-09-01 03:16:35 -04:00
Josh Wolfe
848504117f Revert "fix return types of min amd max"
This reverts commit 180fe8d506.
2017-08-31 17:56:06 -07:00
Josh Wolfe
180fe8d506 fix return types of min amd max 2017-08-31 17:45:34 -07:00
Andrew Kelley
06b64d82bf only export __chkstk for windows
it's a windows only function anyway
2017-08-31 20:10:24 -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
156a84e80f compiler-rt: add __aeabi_uldivmod 2017-08-31 01:39:20 -04:00
Andrew Kelley
021155db5b successfully cross-building behavior tests for windows 2017-08-30 17:01: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
3f5dd08ca8 codegen: all stores specify align value
See #37
2017-08-30 04:23:52 -04:00
Andrew Kelley
898d65baa9 more alignment improvements
* add alignment capability for fn protos
 * add @alignCast
 * fix some ast rendering code
 * fix some ir rendering code
 * add error for pointer cast increasing alignment
 * update allocators in std to correctly align

See #37
2017-08-29 23:33:25 -04:00
Andrew Kelley
816689a3b1 ptrCast gives compile error for increasing alignment
See #37
2017-08-29 16:52:31 -04:00
Andrew Kelley
c5c9d98065 introduce align keyword
* remove `@setGlobalAlign`
 * add align keyword for setting alignment on functions and
   variables.
 * loads and stores use alignment from pointer
 * memcpy, memset use alignment from pointer
 * add syntax for pointer alignment
 * slices can have volatile
 * add u2, i2 primitives
 * ignore preferred align and use abi align everywhere
 * back to only having alignOf builtin.
   preferredAlignOf is too tricky to be useful.
   See #432. Partial revert of
   e726925e80.

See #37
2017-08-29 07:51:34 -04:00
Andrew Kelley
b8ed0cb374 remove workaround for LLVM not respecting "nobuiltin"
now that we depend on LLVM 5.0.0 we can remove the
workaround.

closes #393
2017-08-28 04:28:42 -04:00
Andrew Kelley
ebdc6b594d all tests passing in MacOS
depends on LLD 5.0.0 with 3 patches

See #273
2017-08-27 17:16:42 -04:00
Andrew Kelley
5fd579a51c macos passing all tests except for building a shared library
see #273
2017-08-27 05:44:03 -04:00
Andrew Kelley
ff2c794612 all behavior tests passing for macos
See #273
2017-08-27 05:15:24 -04:00
Andrew Kelley
91536813ec macos updates
* try some macos travis stuff
 * put c in the link libs for macos since we always link with libSystem
 * for non-native targets on macos, allow runtime symbol resolution
   - it's causing an infinite loop in LLD.
 * for macos, always build compiler_rt and turn on LinkOnce because
   compiler_rt on darwin is missing some stuff.
2017-08-27 02:51:25 -04:00
Andrew Kelley
b59aa7b906 fixups to linux build 2017-08-27 00:28:17 -04:00
Andrew Kelley
29a418c9d5 progress toward tests passing on MacOS 2017-08-27 00:11:09 -04:00
Andrew Kelley
2bd6c60752 update for llvm 5.0.0rc1 2017-08-26 00:34:40 -04:00
Andrew Kelley
629aa10c56 unreachable still codegens to unreachable in ReleaseFast test mode
closes #430
2017-08-25 10:20:06 -04:00
Andrew Kelley
be16034275 std.math: remove constants that can be derived
from others at compile time
2017-08-20 05:43:40 -04:00
Andrew Kelley
d9dd50d74c fix not propagating parseh aliases through pub use decls 2017-08-20 04:03:36 -04:00
Andrew Kelley
09bd4a9a86 compile-time f32, f64 operations are now correctly lossy
previously we used the bigfloat abstraction to do all
compile-time float math. but runtime code and comptime code
are supposed to get the same result. so now if you add a
f32 to a f32 at compile time it does it with f32 math
instead of the bigfloat. float literals still get the
bigfloat math.

closes #424
2017-08-20 01:04:51 -04:00
Andrew Kelley
c73a0c92d0 fix floating point printing 2017-08-19 19:11:43 -04:00
Andrew Kelley
eb26aeb1e5 std: better int log2 implementation for number literals 2017-08-19 02:29:18 -04:00
Andrew Kelley
987768778a bit shifting safety
* add u3, u4, u5, u6, u7 and i3, i4, i5, i6, i7
 * shift operations shift amount parameter type is
   integer with log2 bit width of other param
   - This enforces not violating undefined behavior on
     shift amount >= bit width with the type system
 * clean up math.log, math.ln, math.log2, math.log10

closes #403
2017-08-19 01:43:43 -04:00
Andrew Kelley
558ece8f6f slightly nicer floating point printing 2017-08-18 18:05:28 -04:00
Andrew Kelley
33c592e981 make udivmod generic and add tests 2017-08-18 17:20:03 -04:00
Andrew Kelley
51bde26842 add compiler-rt fns: udivmodti4, udivti3, umodti3 2017-08-18 16:26:09 -04:00
Andrew Kelley
ea9e1639ca include compiler-rt tests in main testing suite 2017-08-18 13:51:16 -04:00
Andrew Kelley
1b5d61bee9 fix bitCast for big integers
and make bigfloat use __float128
2017-08-17 22:52:12 -04:00
Andrew Kelley
2173e1f457 fix big integer shifting by large number 2017-08-17 22:01:19 -04:00
Andrew Kelley
e63d864c1e add compiler_rt functions for f128
* __letf2
 * __cmptf2
 * __getf2
 * __unordtf2
 * __eqtf2
 * __lttf2
 * __netf2
 * __gttf2
2017-08-17 19:10:15 -04:00
Andrew Kelley
0d117bb0a9 fix wrong value for clz, ctz at compile time
closes #418

also make clz, ctz return smaller integer bit widths
and use smaller integer bit widths for enum tag types
2017-08-17 17:14:35 -04:00
Andrew Kelley
6a98bf3dba compiler_rt implementations for __fixuns* functions
* add u128 and i128 integer types
 * add f128 floating point type
 * implement big integer multiplication (See #405)
2017-08-16 19:07:35 -04:00
Andrew Kelley
cf46cd5f2b organize file path of compiler_rt 2017-08-15 07:16:22 -04:00
Andrew Kelley
35d3444e27 more intuitive left shift and right shift operators
Before:
 * << is left shift, not allowed to shift 1 bits out
 * <<% is left shift, allowed to shift 1 bits out
 * >> is right shift, allowed to shift 1 bits out

After:
 * << is left shift, allowed to shift 1 bits out
 * >> is right shift, allowed to shift 1 bits out
 * @shlExact is left shift, not allowed to shift 1 bits out
 * @shrExact is right shift, not allowed to shift 1 bits out

Closes #413
2017-08-09 10:09:38 -04:00
Andrew Kelley
54675b060a add ptrToInt builtin, remove usize(ptr) cast
closes #415
2017-08-08 17:38:25 -04:00
Andrew Kelley
f78ee53484 fix printing floating point compile errors
now we just need compiler_rt implementations for:

 undefined symbol '__fixunsdfti'
 undefined symbol '__umodti3'
 undefined symbol '__udivti3'
2017-08-07 18:11:24 -04:00
Andrew Kelley
2234788fa8 add ability to explicitly cast float to integer
closes #414
2017-08-07 15:57:41 -04:00
Andrew Kelley
57fb8efde2 add missing stdcallcc to ExitProcess decl 2017-08-06 16:13:52 -04:00
Andrew Kelley
d1e68c3ca8 better bigint/bigfloat implementation 2017-07-08 17:59:10 -04:00
Andrew Kelley
3e8af78895 Merge branch 'math'
This merges the standard library math functions that
Marc Tiehuis (@tiehuis) has been working on. Marc has
joined the Zig organization and now has commit access.
Thank you for this huge contribution to Zig.

Closes #374.
2017-06-27 17:15:41 -04:00
Marc Tiehuis
e81bf1c38c Return undefined in frexp instead of 0 on nan input
This is more in line what usual C implementations do.
2017-06-22 19:29:57 +12:00
Marc Tiehuis
5aff641f4b Fix pow tests
See #393.
2017-06-21 23:24:00 +12:00
Marc Tiehuis
994f4da8d4 Fix scalbn constant multiplier 2017-06-21 18:53:33 +12:00
Marc Tiehuis
14a324a0fa Fixes for release mode tests 2017-06-21 18:21:11 +12:00
Marc Tiehuis
5bbec42a4e Add math special case tests and general fixes
- Should cover special case inputs for most functions
 - Fixed a number of runtime panicking behaviour reliant on shift
   overflow/division by zero etc.
2017-06-20 23:10:22 +12:00
Andrew Kelley
221286433a don't call c.getrandom because older libcs don't have it
See #397
2017-06-19 21:39:44 -04:00
Andrew Kelley
c9fc8bd802 workaround for llvm bug
See #393 for details
2017-06-19 14:36:33 -04:00
Marc Tiehuis
4efb9ae2e5 Get tests passing under release mode
This does not fix the underlying issue in pow at this stage, but we may
be able to narrow down the cause after adding tests for specific edge
cases in functions.
2017-06-18 14:16:04 +12:00
Andrew Kelley
62323eeb75 std: refactor pow to be generic 2017-06-17 20:39:45 -04:00
Marc Tiehuis
4c16f9a3c3 Add math library
This covers the majority of the functions as covered by the C99
specification for a math library.

Code is adapted primarily from musl libc, with the pow and standard
trigonometric functions adapted from the Go stdlib.

Changes:

 - Remove assert expose in index and import as needed.
 - Add float log function and merge with existing base 2 integer
   implementation.

See https://github.com/tiehuis/zig-fmath.
See #374.
2017-06-16 20:32:31 +12:00
Andrew Kelley
7f0620a20f partial implementation of printing floating point numbers with errol3
also add bitCast builtin function. closes #387
2017-06-14 00:24:25 -04:00
Andrew Kelley
6a93dda3e1 progress toward windows hello world working 2017-06-14 00:04:34 -04:00
Andrew Kelley
199bbb6292 progress toward hello world without libc in windows 2017-06-04 10:08:55 -04:00
Andrew Kelley
e5b90651ba compileError builtin includes "referenced by" notes
to help track down the cause

closes #278
2017-06-03 15:09:40 -04:00
Andrew Kelley
1e301b03a9 change std.rand.Rand.rangeUnsigned to std.rand.Rand.range
and make it support signed integers
2017-05-31 18:23:56 -04:00
Andrea Orru
8d6ecfeffe Updated comment. 2017-05-28 15:56:35 +02:00
Andrea Orru
6a87aa4d2e Generalize join. 2017-05-28 15:54:53 +02:00
Andrew Kelley
0065eb7c80 std.fmt can print nullables, errors, and error unions 2017-05-23 18:38:41 -04:00
Andrew Kelley
d8d45908fa building with mingw for windows 2017-05-23 00:26:12 -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
99f077baf9 zig build: allow calling b.standardReleaseOptions...
...multiple times. See #368
2017-05-09 21:20:09 -04:00
Andrew Kelley
8abcd94ece std.fmt.format prints bool values 2017-05-07 23:25:02 -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
5c094d7390 std: rename List to ArrayList and re-organize...
...the exports of std.

closes #356
2017-05-04 14:05:06 -04:00
Andrew Kelley
0454e610bf std: take advantage of new while syntax 2017-05-04 10:37:19 -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
6756c27ca4 zig build: cache_root is relative to build_root 2017-05-03 16:13:57 -04:00
Andrea Orru
6f66691214 Generic doubly linked list. (#361)
Standard linked list
2017-05-03 14:28:06 -04:00
Andrew Kelley
cceaa73ff2 zig build: inherit stdin for running commands 2017-05-03 11:27:42 -04:00
Andrew Kelley
3b921afc69 slightly better memset/memcpy implementation 2017-05-02 19:20:23 -04:00
Andrew Kelley
f87be94f6a zig build: copy args for addCommand
avoids making it easy to accidentally use a dangling pointer
2017-05-02 18:22:08 -04:00
Andrew Kelley
24a9a42966 add safe release build mode
closes #288
2017-05-02 17:34:21 -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
c5dd536845 zig build: support install for zig artifacts
also make os.copyFile atomic

closes #332
2017-04-30 22:09:44 -04:00
Andrew Kelley
943dbe5b50 zig build: improved API for installing C build artifacts
see #332
2017-04-30 21:03:23 -04:00
Andrew Kelley
97f6b6093c zig build can build and install static C libraries
See #332
2017-04-30 20:29:33 -04:00
Andrew Kelley
2c6827064c fix regression from previous commit 2017-04-30 20:11:35 -04:00
Andrew Kelley
1ec89b0286 zig build: refactor CLibrary and CExecutable into same struct 2017-04-30 19:48:45 -04:00
Andrew Kelley
363d9038c9 zig build: organize build artifacts
closes #328
2017-04-30 18:56:24 -04:00
Andrew Kelley
38a04a267c zig build: when compiling C files put .o files in cache dir
See #328
2017-04-30 13:01:35 -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
d04d3ec775 build system: remove setLinkerScriptContents 2017-04-28 10:46:01 -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
2e512a0e6e add compile error for returning local variable address
closes #344
2017-04-27 19:40:35 -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
09bc4d6ba3 build system: addAssembly and addObject functions
for building executables
2017-04-26 12:56:10 -04:00
Andrew Kelley
d72fb2abad update README 2017-04-24 16:17:28 -04:00
Andrew Kelley
6cd725c24b stack traces support compile units with no pc range 2017-04-24 13:03:32 -04:00
Andrew Kelley
245eed8afe better stack traces for ELF x86_64 2017-04-24 12:14:45 -04: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
f9fa768dca zig build system: installFile and installClibrary
See #332
2017-04-23 11:09:26 -04:00
Andrew Kelley
e0b635e825 std.os.ChildProcess: fix closing wrong file descriptors 2017-04-22 11:36:42 -04:00
Andrew Kelley
0cce115476 update syntax for try and nullable unwrapping
closes #285
2017-04-21 16:46:33 -04:00
Andrew Kelley
bee1ae68ef std: fix PATH resolution when spawning child 2017-04-21 13:27:11 -04:00
Andrew Kelley
e3c524c1d4 rename @ptrcast to @ptrCast to follow convention 2017-04-21 10:39:13 -04:00