52 lines
1.4 KiB
Plaintext
52 lines
1.4 KiB
Plaintext
resolution overview
|
|
loop {
|
|
resolve idents
|
|
resolve + type check / match instructions
|
|
URes.resolve(errs) can return: failed, ok(id), waiting
|
|
each instruction keeps track of progress
|
|
eg. fns: match each arg
|
|
updates to whether it's waiting or finished: ok or err
|
|
only finish if no sub tasks are waiting
|
|
finished = "macro ready"
|
|
run macros / code modification on "macro ready" (fns, structs)
|
|
eg. insert instructions
|
|
hygienic; only take in from scope
|
|
add inserted instructions to unresolved list
|
|
finished = "analysis ready"
|
|
analysis on "analysis ready" fns
|
|
eg. does this return in all code paths
|
|
finished + all correct = "ready to lower"
|
|
lower "ready to lower" fns
|
|
run lowered const fns / var expressions
|
|
}
|
|
|
|
|
|
move names into separate vec with origins?
|
|
make struct fields a vec, resolve to index?
|
|
|
|
inner values that auto generate map function:
|
|
enum Thing<inner T> {
|
|
A(T),
|
|
B(T, T),
|
|
C
|
|
}
|
|
or
|
|
#[derive(Map(T))]
|
|
enum Thing<T> { ... }
|
|
// scoping here is bad :woozy:
|
|
|
|
|
|
{([<
|
|
std::Option:(u32)::Some(3)
|
|
func:(u32)("hello", test, 3);
|
|
std::Option:[u32]::Some(3)
|
|
func:[T]("hello", test, 3);
|
|
std::Option::<u32>::Some(3)
|
|
func::<u32>(3)
|
|
std.Option.[u32].Some(3)
|
|
func.[T]("hello", test, 3);
|
|
std::Option:<u32>::Some(3)
|
|
func:<u32>(3)
|
|
|
|
|