98 Commits

Author SHA1 Message Date
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
   e726925e802eddab53cbfd9aacbc5eefe95c356f.

See #37
2017-08-29 07:51:34 -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
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
d1e68c3ca8 better bigint/bigfloat implementation 2017-07-08 17:59:10 -04:00
Andrew Kelley
6a93dda3e1 progress toward windows hello world working 2017-06-14 00:04:34 -04:00
Andrew Kelley
d8d45908fa building with mingw for windows 2017-05-23 00:26:12 -04:00
Andrew Kelley
6237411716 inline function call with builtin function instead...
...of special syntax.

partially reverts 41144a8566a6fbd779403f6b69424bb640c94a7f

closes #306
2017-05-09 22:54:23 -04:00
Andrew Kelley
b6a679c0ed implement else on loops and break can give an expression
closes #357
2017-05-04 12:43:11 -04:00
Andrew Kelley
20b1491e6b implement while for nullables and error unions
See #357
2017-05-04 10:28:00 -04:00
Andrew Kelley
644ea2dde9 remove test and try expressions in favor of if expressions
See #357
2017-05-03 17:23:11 -04:00
Andrew Kelley
6de33ded81 make undefined as a constant value lazy
closes #268
2017-04-23 14:34:40 -04:00
Andrew Kelley
aafb0b9082 slicing now returns correct const-ness
also remove the ability to override constness when slicing

closes #334
2017-04-22 12:19:20 -04:00
Andrew Kelley
0cce115476 update syntax for try and nullable unwrapping
closes #285
2017-04-21 16:46:33 -04:00
Andrew Kelley
d5346d7a80 remove ?return and ?defer
closes #309
2017-04-21 15:08:03 -04:00
Josh Wolfe
3e93796e24 comptime ({}) should not get an implicit semicolon
closes #292.
2017-04-14 16:09:01 -07:00
Andrew Kelley
f2140efc52 Merge remote-tracking branch 'origin/parser' 2017-04-13 03:09:09 -04:00
Andrew Kelley
bf57d8a7e3 typedefpocalypse
closes #314
2017-04-13 03:07:58 -04:00
Josh Wolfe
356424916c block statement lists never get fake expressions
instead blocks have a field that encodes whether the last statement ended with
a semicolon.
2017-04-12 23:22:32 -07:00
Andrew Kelley
41144a8566 ability to inline at function callsite
closes #306
2017-04-13 00:13:54 -04:00
Andrew Kelley
11a6550324 fix some -Wconversion errors 2017-04-10 20:02:39 -04:00
Andrew Kelley
451ce09067 new unreachable syntax
* `noreturn` is the primitive type.
 * `unreachable` is a control flow keyword.
 * `@unreachable()` builtin function is deleted.

closes #214
2017-03-26 04:58:48 -04:00
Andrew Kelley
22e6bfca96 add comptime top level declaration
closes #255
2017-03-26 04:32:13 -04:00
Andrew Kelley
af536ac343 introduce new test syntax
* remove setFnTest builtin
 * add test "name" { ... } syntax
 * remove --check-unused argument. functions are always lazy now.
2017-03-16 16:02:35 -04:00
Andrew Kelley
1195994880 fix inability to write to global in some cases
before, when we initialized a variable by copying the
initialization value, it made the internal const value
references point to a duplicate value, resulting in
a phony duplicate global value being updated instead of
the real on. now the behavior is as expected.

thanks to hoppetosse for pointing out this bug on IRC.
2017-02-27 00:07:11 -05:00
Andrew Kelley
d26bb3ae2e fix assigning to const ptr through struct or index 2017-02-05 19:55:37 -05:00
Andrew Kelley
419e75eb23 remove volatileStore builtin; add volatile pointers
closes #238
2017-02-04 21:49:27 -05:00
Andrew Kelley
0919ea0afd ability to set global variable alignment and ...
..section in the initialization expression
2017-02-04 10:22:07 -05:00
Andrew Kelley
aae168550f exported global variables get emitted as external in LLVM 2017-02-03 11:59:56 -05:00
Andrew Kelley
71d335e5cc implement packed structs
closes #183
2017-02-03 11:39:24 -05:00
Andrew Kelley
c0b37e8514 add try expression
See #83
2017-02-02 17:09:27 -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
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
201a3c121a introduce comptime expression
closes #221
2017-01-22 22:59:52 -05:00
Andrew Kelley
6a5e61acd1 get rid of zeroes literal
closes #222
2017-01-16 17:24:13 -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
430e33b869 partially fix parseh command 2017-01-10 15:39:52 -05:00
Andrew Kelley
4816121e00 remove duplicate definition of container_string 2016-12-18 17:53:12 -05:00
Andrew Kelley
e50ced44a2 IR: all structs anonymous 2016-12-18 16:56:50 -05:00
Andrew Kelley
12fcbecbf8 IR: add more instructions
* MaybeWrap
 * TestErr
 * UnwrapErrCode
 * UnwrapErrPayload
 * ErrUnionTypeChild
 * ErrWrapCode
 * ErrWrapPayload
2016-12-17 16:16:17 -05:00
Andrew Kelley
647d13168a IR: implement maybe return expression 2016-12-13 19:36:56 -05:00
Andrew Kelley
ef63bc9cca IR: implement memcpy, memset, and slice expression 2016-12-12 00:31:35 -05:00
Andrew Kelley
2dd85d52cc IR: fix implementation of parseh
libc hello world works now
2016-12-11 00:13:43 -05:00
Andrew Kelley
6ed202ab16 IR: implement defer 2016-12-06 21:26:17 -05:00
Andrew Kelley
24048b2af6 IR: implement break and continue 2016-12-05 18:43:16 -05:00
Andrew Kelley
0541532ed6 IR: implement generic function calls 2016-12-05 05:12:44 -05:00
Andrew Kelley
9f23475b17 add missing copyright notices 2016-12-04 21:06:13 -05:00
Andrew Kelley
2f259b8176 IR: re-organize where state goes to prepare for generics
* Rip out legacy code for generics
 * put scope in instruction instead of AST nodes
 * separate top level decl stuff from AST nodes
   - remove the assumption that there is a 1:1 correspondence
     between an output instruction and an AST node
   - This way we won't have to clone AST nodes for generics.
2016-12-04 03:40:40 -05:00