mu-client-ghc issueshttps://gitlab.anu.edu.au/mu/mu-client-ghc/-/issues2018-09-09T20:41:50+10:00https://gitlab.anu.edu.au/mu/mu-client-ghc/-/issues/3Implement foreign interface2018-09-09T20:41:50+10:00Nathan YongImplement foreign interfaceExecution2016-10-11https://gitlab.anu.edu.au/mu/mu-client-ghc/-/issues/2Implement functional primitive operations2018-09-09T20:41:50+10:00Nathan YongImplement functional primitive operationsExecution2016-10-10https://gitlab.anu.edu.au/mu/mu-client-ghc/-/issues/1Function Call / Execution Model2018-09-09T20:41:50+10:00Nathan YongFunction Call / Execution Model- [x] Augment the block building monad with state to keep current variables in scope
- [x] Bind all arguments for closure RHS as basic block arguments (this keeps them in scope)
- [x] Keep a mapping of _internal_ variable IDs to currentl...- [x] Augment the block building monad with state to keep current variables in scope
- [x] Bind all arguments for closure RHS as basic block arguments (this keeps them in scope)
- [x] Keep a mapping of _internal_ variable IDs to currently bound names, and substitute them in when necessary
- [ ] `StgApp`
- [ ] `StgCase`
- [ ] `StgLet` and `StgLetNoEscape`
For dealing with let and let-no-escape, we still need to make sure everything that was captured in the outer scope is still in scope.
1. Define everything that is needed by the let binding
1. Call into a new basic block with the extra variables in scope
1. For let, proceed as normal. For let-no-escape, generate code, ensuring that the last operation is an unconditional branch back to the start of the block.
ExecutionNathan YongNathan Yong2016-10-09