mirror of
https://gitlab.cs.washington.edu/fidelp/frustration.git
synced 2025-02-05 20:45:59 +01:00
BETRAYED by the unified primitive/dict table, see TODOs
This commit is contained in:
parent
d40b9d17d5
commit
30cca5288e
1 changed files with 16 additions and 3 deletions
|
@ -173,6 +173,7 @@ fn step(c: &mut Core) {
|
||||||
fn inner(c: &mut Core) {
|
fn inner(c: &mut Core) {
|
||||||
loop {
|
loop {
|
||||||
step(c);
|
step(c);
|
||||||
|
println!("ip={} trs={}", c.ip, c.trs);
|
||||||
if c.trs == 0 {
|
if c.trs == 0 {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -185,7 +186,10 @@ fn ret(c: &mut Core) {
|
||||||
}
|
}
|
||||||
c.ip = from_r(c);
|
c.ip = from_r(c);
|
||||||
}
|
}
|
||||||
|
// TODO: i dont think this actually fixed anything, 'cos it affected both the primitive
|
||||||
|
// and the dictionary entry.
|
||||||
|
// having separate tables would probably make more sense
|
||||||
|
// lit shouldn't be a primitive anyway! just a dictionary entry.
|
||||||
fn ret_(c: &mut Core) {
|
fn ret_(c: &mut Core) {
|
||||||
ret(c);
|
ret(c);
|
||||||
ret(c);
|
ret(c);
|
||||||
|
@ -217,10 +221,11 @@ fn load(c: &mut Core) {
|
||||||
push(c, u16::from_le_bytes(c.ram[addr..=addr+1].try_into().unwrap()));
|
push(c, u16::from_le_bytes(c.ram[addr..=addr+1].try_into().unwrap()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: again the nesting of primitive inside dictionary entry is acting fucky
|
||||||
fn lit(c: &mut Core) {
|
fn lit(c: &mut Core) {
|
||||||
let retaddr = from_r(c) as usize;
|
let retaddr = from_r(c) as usize;
|
||||||
push(c, u16::from_le_bytes(c.ram[retaddr..=retaddr+1].try_into().unwrap()));
|
push(c, u16::from_le_bytes(c.ram[retaddr..=retaddr+1].try_into().unwrap()));
|
||||||
to_r(c, retaddr as u16 + 2);
|
to_r(c, (retaddr as u16) + 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn add(c: &mut Core) {
|
fn add(c: &mut Core) {
|
||||||
|
@ -275,7 +280,15 @@ fn outer(c: &mut Core, s: &str) {
|
||||||
None => {
|
None => {
|
||||||
let val = t.parse::<u16>();
|
let val = t.parse::<u16>();
|
||||||
match val {
|
match val {
|
||||||
Ok(n) => { push(c, n) }
|
Ok(n) => {
|
||||||
|
match(c.state) {
|
||||||
|
State::Interpreting => { push(c, n) }
|
||||||
|
State::Compiling => {
|
||||||
|
comma(c, 65530); // lit. TODO make robust
|
||||||
|
comma(c, n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Err(_) => { if t != "" { println!("{}?", t) }}
|
Err(_) => { if t != "" { println!("{}?", t) }}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue