Comments (6)
Another option might be to use some sort of cond
construct that would take boolean predicates. This would allow use to avoid having to implement pattern matching:
const TRIANGLE : u32 = 0u32;
const RECTANGLE : u32 = 1u32;
const CIRCLE : u32 = 2u32;
Point = {
x: f32be,
y: f32be,
};
Data = struct {
shape_type : u32,
length: u32be,
data : [cond {
shape_type == TRIANGLE => [Point; 3],
shape_type == RECTANGLE => [Point; 4],
shape_type == CIRCLE => struct { center: Point, radius: f32be },
else => error,
}; length],
};
from fathom.
Looks like a better place to start, and it's still possible to check for exclusive/exhaustiveness.
from fathom.
One tricky thing is figuring out to implement this under the hood. At the moment I'm using a reader as an argument to my parser for flexibility purposes, but I can't keep a hold of the current buffer position using that, unlike if I was using a slice or a Cursor
.
from fathom.
I could do some crazy internal caching, but not sure how that would turn out
from fathom.
Oh wait, for cond
this shouldn't actually matter!
from fathom.
We might also want to support giving names to the variants:
cond {
triangle : shape_type == TRIANGLE => Triangle,
rectangle : shape_type == RECTANGLE => Rectangle,
circle : shape_type == CIRCLE => Circle,
}
This would then allow use to generate an enum:
enum DataDataElem {
Triangle(Triangle),
Rectangle(Rectangle),
Circle(Circle),
}
from fathom.
Related Issues (20)
- Sequences of unspecified length
- Constrained representation types HOT 3
- Cover more unification codepaths in the testsuite
- Let formats HOT 2
- Sugar for guarded fields in record formats
- Challenges arising from the OpenType `glyf` table HOT 2
- Inconsistency between synthesised function literals and checked function literals HOT 1
- Sum types? HOT 4
- Semantic Interpretation Revisited
- Inconsistency between tuple types and record types
- Compile time benchmarks in CI? HOT 1
- Add documentation for implicit arguments HOT 1
- Lazy evaluation HOT 6
- OpenType data description
- Distillation crashes in some cases HOT 1
- Implementation annoyances HOT 1
- Multiple modules HOT 1
- Global string interner HOT 8
- Separate name resolution from elaboration HOT 5
- Question: Comparison with Kaitai? HOT 4
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 fathom.