Commit Graph

8099 Commits

Author SHA1 Message Date
Andrew Kelley 244362fed7 ability to write to bit fields
See #261
2017-02-16 18:42:52 -05:00
Andrew Kelley b6e7a0dadd support arithmetic for non byte aligned integer types
see #261
2017-02-16 17:08:55 -05:00
Andrew Kelley fc5d47b9b9 reading from a bit field partially works
See #261

Still need to do:
 * reading a field that has bit offset 0 but still needs to
   shift and truncate
 * writing a field
2017-02-16 15:45:41 -05:00
Andrew Kelley 1fc2082b4c ability to declare const bitfields
See #261
2017-02-15 18:55:29 -05:00
Andrew Kelley 63d37b7cff add runtime debug safety for dividing integer min value by -1
closes #260
2017-02-14 01:08:30 -05:00
Andrew Kelley 0931b85bd0 fix crash when return value is ??void
closes #258
2017-02-12 18:27:34 -05:00
Andrew Kelley 6dba1f1c8e slice and array re-work plus some misc. changes
* `@truncate` builtin allows casting to the same size integer.
   It also performs two's complement casting between signed and
   unsigned integers.
 * The idiomatic way to convert between bytes and numbers is now
   `mem.readInt` and `mem.writeInt` instead of an unsafe cast.
   It works at compile time, is safer, and looks cleaner.
 * Implicitly casting an array to a slice is allowed only if the
   slice is const.
 * Constant pointer values know if their memory is from a compile-
   time constant value or a compile-time variable.
 * Cast from [N]u8 to []T no longer allowed, but [N]u8 to []const T
   still allowed.
 * Fix inability to pass a mutable pointer to comptime variable at
   compile-time to a function and have the function modify the
   memory pointed to by the pointer.
 * Add the `comptime T: type` parameter back to mem.eql. Prevents
   accidentally creating instantiations for arrays.
2017-02-12 17:35:51 -05:00
Andrew Kelley ca180d3f02 std.io.parseUnsigned buf parameter is const
fixes padding in printf

See #258
2017-02-11 15:06:20 -05:00
Andrew Kelley 39287d7346 rework compile-time known pointer values
See #257
2017-02-11 13:13:45 -05:00
Andrew Kelley fc100d7b3b lots of miscellaneous things all in one big commit
* add `@compileLog(...)` builtin function
   - Helps debug code running at compile time
   - See #240
 * fix crash when there is an error on the start value of a slice
 * add implicit cast from int and float types to int and float
   literals if the value is known at compile time
 * make array concatenation work with slices in addition to
   arrays and c string literals
 * fix compile error message for something not having field access
 * fix crash when `@setDebugSafety()` was called from a
   function being evaluated at compile-time
 * fix compile-time evaluation of overflow math builtins.
 * avoid debug safety panic handler in builtin.o and compiler_rt.o
   since we use no debug safety in these modules anyway
 * add compiler_rt functions for division on ARM
   - Closes #254
 * move default panic handler to std.debug so users can
   call it manually
 * std.io.printf supports a width in the format specifier
2017-02-09 03:09:25 -05:00
Andrew Kelley 8a859afd58 std.io supports printing integers as hex values
remove "unnecessary if statement" error
this "depends on compile variable" code is too hard to validate,
and has false negatives. not worth it right now.

std.str removed, instead use std.mem.

std.mem.eql and std.mem.sliceEql merged and do not require explicit
type argument.
2017-02-07 17:23:50 -05:00
Andrew Kelley 07a71fc322 improved behavior on debug safety crash
* instead of emitting a breakpoint for a debug safety crash,
   zig calls a panic function which prints an error message
   and a stack trace and then calls abort.
 * on freestanding OS, this panic function has a default
   implementation of a simple infinite loop.
 * users can override the panic implementation by providing
   `pub fn panic(message: []const u8) -> unreachable { }`
 * workaround for LLVM segfaulting when you try to use cold
   calling convention on ARM.

closes #245
2017-02-06 03:10:32 -05:00
Andrew Kelley 7749ffd797 try expression can omit variable assignments 2017-02-05 18:58:58 -05:00
Andrew Kelley 419e75eb23 remove volatileStore builtin; add volatile pointers
closes #238
2017-02-04 21:49:27 -05:00
Andrew Kelley 0d7abc6368 add compile error when setting non power of 2 alignment 2017-02-04 10:38:38 -05:00
Andrew Kelley e00eec1c29 typedefs work for binary math operations 2017-02-03 12:09:13 -05:00
Andrew Kelley 71d335e5cc implement packed structs
closes #183
2017-02-03 11:39:24 -05:00
Andrew Kelley c0b37e8514 add try expression
See #83
2017-02-02 17:09:27 -05:00
Andrew Kelley 8b1c6d8b76 fix ability to call method on variable at compile time 2017-02-02 15:03:21 -05:00
Andrew Kelley 2b88441295 fix behavior when initializing struct with undefined 2017-02-02 14:55:01 -05:00
Andrew Kelley b78c91951a remove ability to mark if and switch as inline
if and switch are implicitly inline if the condition/target
expression is known at compile time.

instead of:

```
inline if (condition) ...
inline switch (target) ...
```

one can use:

```
if (comptime condition) ...
switch (comptime target) ...
```
2017-02-02 13:23:18 -05:00
Andrew Kelley 88a253c64d fix crash when passing void to var args function
closes #235
2017-01-31 15:50:38 -05:00
Andrew Kelley b258fdb532 add integer literal to pointer explicit cast
closes #227
2017-01-31 13:38:04 -05:00
Andrew Kelley d8da34c64c fix crash when assigning too large value to integer
closes #228
2017-01-31 02:30:10 -05:00
Andrew Kelley d2b94afaf2 fix compile time initialization of array with undefined 2017-01-29 23:35:34 -05:00
Andrew Kelley 3caf6bacdc fix sometimes using wrong outer scope for generating defers 2017-01-29 21:57:49 -05:00
Andrew Kelley c75e58ffe6 fix behavior for comptime and runtime basic block phi 2017-01-29 19:10:56 -05:00
Andrew Kelley e0a422ae7e fix runtime branching tricking the comptime evaluation
closes #167
2017-01-26 15:34:36 -05:00
Andrew Kelley 4b3f18de3c printf var args proof of concept
See #167

Need to troubleshoot when we send 2 slices to printf. It goes
into an infinite loop.

This commit introduces 4 builtin functions:

 * `@isInteger`
 * `@isFloat`
 * `@canImplictCast`
 * `@typeName`
2017-01-24 02:02:48 -05:00
Andrew Kelley 32d8686da8 various fixes
* comptime expression is a block expression as it should be
 * fix var args when number of args passed is 0
 * implement const value equality for structs
 * fix indent when rendering container decl AST
 * IR: prevent duplicate generation of code when it is partially
   compile-time evaluated
 * implement compile time struct field pointer evaluation
 * fix compile time evaluation of slicing
2017-01-23 23:30:20 -05:00
Andrew Kelley 17cb85dfb8 basic support for functions with variable length arguments
See #77
2017-01-23 16:40:17 -05:00
Andrew Kelley e5b1758010 remove staticEval builtin in favor of comptime expression 2017-01-22 23:21:00 -05:00
Andrew Kelley 47cf8520ad use comptime instead of inline for var and params
See #221
2017-01-22 19:51:37 -05:00
Andrew Kelley ab8b14aa9f add test for compile error returning from defer expression
closes #218
2017-01-16 17:18:25 -05:00
Andrew Kelley cf3b9f4f5b add test for compile time bool not operator
closes #205
2017-01-16 17:15:42 -05:00
Andrew Kelley 0caee421e3 ability to equality compare with null
closes #106
2017-01-16 16:39:31 -05:00
Andrew Kelley 867686af42 equality comparison of void types is known at compile time
closes #56
2017-01-16 16:07:03 -05:00
Andrew Kelley fdbc2d8da1 implement error when assigning to field of const struct
closes #48
2017-01-16 15:24:03 -05:00
Andrew Kelley 98faf4f749 add test for short-circuit AND and OR assignment
closes #31
2017-01-16 14:58:22 -05:00
Andrew Kelley c715309bc5 Merge branch 'master' into ir-merge 2017-01-16 14:23:32 -05:00
Andrew Kelley 4cbeb87e83 fix handling of const values for 2d arrays 2017-01-16 12:42:46 -05:00
Andrew Kelley 0b6cf0aa63 fix handling of invalid enumeration 2017-01-15 22:34:20 -05:00
Andrew Kelley 8106f9846a fix enum codegen and implement comptime switch var on enums 2017-01-15 22:16:39 -05:00
Andrew Kelley 18f248b94d IR: fix array concatenation
all tests passing
2017-01-12 15:10:58 -05:00
Andrew Kelley d784705353 IR: implement macro for function aliasing function pointer 2017-01-12 03:15:06 -05:00
Andrew Kelley 76b1cbc2ea pass some parseh tests 2017-01-11 22:25:17 -05:00
Andrew Kelley 25a670d74e pass more tests 2017-01-11 19:09:17 -05:00
Andrew Kelley de9ecaf964 fix some tests 2017-01-11 18:23:19 -05:00
Andrew Kelley fc53708dc0 better error message for unable to eval const expr 2017-01-11 18:06:21 -05:00
Andrew Kelley 7493af5953 fix a few tests 2017-01-11 00:38:24 -05:00