The Lambda Lab
/
projects
/
forth.jl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed 2swap bug, added ?do, fixed +loop.
[forth.jl.git]
/
src
/
forth.jl
diff --git
a/src/forth.jl
b/src/forth.jl
index
0b4871f
..
e7faf97
100644
(file)
--- a/
src/forth.jl
+++ b/
src/forth.jl
@@
-241,7
+241,7
@@
OVER = defPrimWord("OVER", () -> begin
return NEXT
end)
return NEXT
end)
-
NROT = defPrimWord("-
ROT", () -> begin
+
ROT = defPrimWord("
ROT", () -> begin
a = popPS()
b = popPS()
c = popPS()
a = popPS()
b = popPS()
c = popPS()
@@
-251,7
+251,7
@@
NROT = defPrimWord("-ROT", () -> begin
return NEXT
end)
return NEXT
end)
-
ROT = defPrimWord("
ROT", () -> begin
+
NROT = defPrimWord("-
ROT", () -> begin
a = popPS()
b = popPS()
c = popPS()
a = popPS()
b = popPS()
c = popPS()
@@
-284,8
+284,17
@@
TWOSWAP = defPrimWord("2SWAP", () -> begin
d = popPS()
pushPS(b)
pushPS(a)
d = popPS()
pushPS(b)
pushPS(a)
- pushPS(c)
pushPS(d)
pushPS(d)
+ pushPS(c)
+ return NEXT
+end)
+
+TWOOVER = defPrimWord("2OVER", () -> begin
+ ensurePSDepth(4)
+ a = mem[reg.PSP-3]
+ b = mem[reg.PSP-2]
+ pushPS(a)
+ pushPS(b)
return NEXT
end)
return NEXT
end)
@@
-872,7
+881,7
@@
INTERPRET = defPrimWord("INTERPRET", () -> begin
isImmediate = (mem[wordAddr+1] & F_IMMED) != 0
callPrim(mem[TOCFA])
isImmediate = (mem[wordAddr+1] & F_IMMED) != 0
callPrim(mem[TOCFA])
- callPrim(mem[ROT]) # get rid of extra copy of word string details
+ callPrim(mem[
N
ROT]) # get rid of extra copy of word string details
popPS()
popPS()
popPS()
popPS()
@@
-1020,6
+1029,8
@@
function run(;initialize=true)
mem[STATE] = 0
mem[NUMTIB] = 0
mem[STATE] = 0
mem[NUMTIB] = 0
+ reg.PSP = mem[PSP0]
+ reg.RSP = mem[RSP0]
reg.IP = QUIT + 1
jmp = NEXT
end
reg.IP = QUIT + 1
jmp = NEXT
end