Comments (4)
Writing a name canonicalization pass could be another good starter issue
from scoria.
Since we are generating names it makes a lot of sense to generate unique names from the beginning. The SSM
monad has an Int
-state for generating fresh names. It is a data type that is mutually recursive with SSMStm
, so e.g If :: SSMExp -> SSM () -> Maybe (SSM ()) -> SSMStm
contains further SSM ()
computations. When we run these recursive computations in order to get the [Stm]
out of them, we must pass in the current name generating state. Right now I think I just reset it, which is obviously wrong.
An alpha-renaming phase makes more sense if you are parsing programs written by a user I think, but since we are generating our programs from a user EDSL specification, we shouldn't need such a pass.
from scoria.
Minimal program to duplicate bug:
test :: SSM ()
test = boxNullary "test" $ do
x <- var true'
ifThen false' $ do
y <- var false'
return ()
Generated (and pretty-printed) program:
entrypoint:
test()
global variables:
test() {
bool *fresh0 = var True
if(False) {
bool *fresh0 = var False
} else {
}
}
The name fresh0
is generated twice.
from scoria.
Fixed by #73
from scoria.
Related Issues (20)
- Implement unit type as SSMType HOT 4
- Even better shrinker! HOT 2
- Can't use references in operators HOT 6
- SSM time types for frontend HOT 9
- Lower deref from statement level to expression level HOT 1
- Profile interpreter to see if it's the culprit that makes the tests take longer than previously HOT 3
- Ask Zephyr people about 64bit timers
- Refactor interpreter
- Connect standard streams to global references HOT 1
- Make expressions compile to ordinary types in C, not scheduled variables HOT 1
- Remove arguments to the entry point HOT 1
- Inefficient distribution of priorities HOT 1
- Propagate parse errors from trace parsers to testing framework
- Make core syntax more fine grained
- Examples wishlist HOT 2
- Don't assume long == 64-bit
- Add "escape hatch" in EDSL HOT 2
- Integer overflow in interpreter might be UB HOT 1
- [RFC] Output handlers HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from scoria.