aboutsummaryrefslogtreecommitdiff
path: root/src/ir.cpp
AgeCommit message (Collapse)Author
2019-08-08fix segfault with var argsAndrew Kelley
2019-08-08better compile errors when frame depends on itselfAndrew Kelley
2019-08-08cancel, defer, errdefer all working as intended nowAndrew Kelley
2019-08-07Don't emit clang error if source or filename pointer is nullSam Tebbs
2019-08-07cancel works on non-pointersAndrew Kelley
2019-08-07implement cancelAndrew Kelley
all behavior tests passing in this branch
2019-08-06passing the error return trace async function testAndrew Kelley
2019-08-06improve async function semanticsAndrew Kelley
* add safety panic for resuming a function which is returning, pending an await * remove IrInstructionResultPtr * add IrInstructionReturnBegin. This does the early return in async functions; does nothing in normal functions. * `await` gets a result location * `analyze_fn_async` will call `analyze_fn_body` if necessary. * async function frames have a result pointer field for themselves to access and one for the awaiter to supply before the atomic rmw. when returning, async functions copy the result to the awaiter result pointer, if it is non-null. * async function frames have a stack trace pointer which is supplied by the awaiter before the atomicrmw. Later in the frame is a stack trace struct and addresses, which is used for its own calls and awaits. * when awaiting an async function, if an early return occurred, the awaiter tail resumes the frame. * when an async function returns, early return does a suspend (in IrInstructionReturnBegin) before copying the error return trace data, result, and running the defers. After the last defer runs, the frame will no longer be accessed. * proper acquire/release atomic ordering attributes in async functions.
2019-08-05async functions have error return traces where appropriateAndrew Kelley
however the traces are not merged on `await` or async function calls yet. When an async function has an error set or error union as its return type, it has a `StackTrace` before the args in the frame, so that it is accessible from `anyframe->T` awaiters. However when it does not have an errorable return type, but it does call or await an errorable, it has a stack trace just before the locals. This way when doing an `@asyncCall` on an async function pointer, it can populate the args (which are after the `StackTrace`) because it knows the offset of the args based only on the return type. This sort of matches normal functions, where a stack trace pointer could be supplied by a parameter, or it could be supplied by the stack of the function, depending on whether the function itself is errorable.
2019-08-05delete IrInstructionMarkErrRetTracePtrAndrew Kelley
this IR instruction is no longer needed
2019-08-05support async functions with inferred error setsAndrew Kelley
2019-08-04simpler, less memory intensive suspend/resume implementationAndrew Kelley
2019-08-04suspension points inside branching control flowAndrew Kelley
2019-08-03implement `@asyncCall` which supports async function pointersAndrew Kelley
2019-08-03add compile error for async call of function pointerAndrew Kelley
2019-08-02Merge remote-tracking branch 'origin/master' into rewrite-coroutinesAndrew Kelley
2019-08-02fix regressions regarding writing through const pointersAndrew Kelley
2019-08-02fix discarding function call resultsAndrew Kelley
2019-08-02assignment participates in result locationAndrew Kelley
fix one regression with optionals but there are more
2019-08-02implement async await and returnAndrew Kelley
2019-08-01more passing coroutine testsAndrew Kelley
2019-08-01reimplement async with function splitting instead of switchAndrew Kelley
2019-08-01allow 128 bit cmpxchg on x86_64Andrew Kelley
2019-07-29improve support for anyframe and anyframe->TAndrew Kelley
* add implicit cast from `*@Frame(func)` to `anyframe->T` or `anyframe`. * add implicit cast from `anyframe->T` to `anyframe`. * `resume` works on `anyframe->T` and `anyframe` types.
2019-07-26add the `anyframe` and `anyframe->T` typesAndrew Kelley
2019-07-25`@frameSize` works via PrefixDataAndrew Kelley
2019-07-25implement `@frameSize`Andrew Kelley
2019-07-25implement `@frame` and `@Frame`Andrew Kelley
2019-07-25calling an inferred async functionAndrew Kelley
2019-07-23inferring async from async callsAndrew Kelley
2019-07-22fix suspend at end of functionAndrew Kelley
2019-07-21implement coroutine resumeAndrew Kelley
2019-07-21fix not jumping to entryAndrew Kelley
2019-07-21remove errors for async calling conventionAndrew Kelley
2019-07-21simple async function call workingAndrew Kelley
2019-07-19remove coroutines implementation and promise typeAndrew Kelley
2019-07-19fix usingnamespaceAndrew Kelley
It used to be that usingnamespace was only allowed at top level. This made it OK to put the state inside the AST node data structure. However, now usingnamespace can occur inside any aggregate data structure, and therefore the state must be in the TopLevelDeclaration rather than in the AST node. There were two other problems with the usingnamespace implementation: * It was passing the wrong destination ScopeDecl, so it could cause an incorrect error such as "import of file outside package path". * When doing `usingnamespace` on a file that already had `pub usingnamespace` in it would "steal" the usingnamespace, causing incorrect "use of undeclared identifier" errors in the target file. closes #2632 closes #2580
2019-07-18closes #2916Michael Dusan
2019-07-13ir: add an assertion in phi analysisAndrew Kelley
2019-07-10mingw: building and linking msvcrt-os.libAndrew Kelley
2019-07-08std.os.getrandom does a libc version checkAndrew Kelley
closes #397
2019-07-06Add implicit cast for *[N]T to [*c]TSamTebbs33
2019-07-04improve the error message and test coverageAndrew Kelley
2019-07-03Merge branch 'impl-1107' of https://github.com/emekoi/zig into emekoi-impl-1107Andrew Kelley
2019-07-03added tests for #1107 and a note in the referenceemekoi
2019-07-03update `@unionInit` to integrate with result location semanticsAndrew Kelley
2019-07-03Merge branch 'comptime-union-init' of https://github.com/rbscott/zig into ↵Andrew Kelley
rbscott-comptime-union-init
2019-07-02add missing compile error for comptime continue inside runtime catchAndrew Kelley
See #2604
2019-07-02fixupsAndrew Kelley
2019-07-02Merge branch 'has-field' of https://github.com/shawnl/zig into shawnl-has-fieldAndrew Kelley