Merge branch 'julia0.6'
authorTim Vaughan <tgvaughan@gmail.com>
Thu, 10 Aug 2017 20:19:36 +0000 (22:19 +0200)
committerTim Vaughan <tgvaughan@gmail.com>
Thu, 10 Aug 2017 20:19:36 +0000 (22:19 +0200)
README.md
src/forth.jl
src/lib_8_vocab.4th

index fbb2603..a6e0645 100644 (file)
--- a/README.md
+++ b/README.md
@@ -26,8 +26,8 @@ install it, you will therefore need to use the following command:
 
     julia> Pkg.clone("https://github.com/tgvaughan/forth.jl")
 
-Currently, forth.jl **requires** Julia 0.5. (Incompatabilities between 0.4 and 0.5
-mean that I cannot support both versions.)
+Currently, forth.jl **requires** Julia 0.6. (Incompatabilities exist between
+0.6 and previous versions of julia, particularly the handling of [world age](https://github.com/JuliaLang/julia/pull/17057).)
 
 ## Usage
 
index 01b39a2..4c81dc3 100644 (file)
@@ -1,6 +1,6 @@
 module forth
 
-import Base.REPLCompletions
+import Base.REPLCompletions, Base.invokelatest
 
 # VM mem size
 size_mem = 1000000 # 1 mega-int
@@ -123,7 +123,7 @@ function callPrim(addr::Int64)
     if addr >=0 || -addr>length(primitives)
         error("Attempted to execute non-existent primitive at address $addr.")
     else
-        primitives[-addr]()
+               invokelatest(primitives[-addr])
     end
 end
 getPrimName(addr::Int64) = primNames[-addr]
@@ -501,7 +501,7 @@ end)
 XOR_CFA = defPrimWord("XOR", () -> begin
     b = popPS()
     a = popPS()
-    pushPS(a $ b)
+    pushPS(xor(a, b))
     return NEXT
 end)
 
@@ -678,7 +678,7 @@ READ_LINE_CFA = defPrimWord("READ-LINE", () -> begin
     addr = popPS()
 
     fh = openFiles[fid]
-    line = readline(fh)
+    line = readline(fh, chomp=false)
 
     eofFlag = endswith(line, '\n') ? 0 : -1
     line = chomp(line)
@@ -1127,7 +1127,7 @@ end, flags=F_IMMED)
 
 HIDDEN_CFA = defPrimWord("HIDDEN", () -> begin
     lenAndFlagsAddr = mem[mem[CURRENT]+1] + 1
-    mem[lenAndFlagsAddr] = mem[lenAndFlagsAddr] $ F_HIDDEN
+    mem[lenAndFlagsAddr] = xor(mem[lenAndFlagsAddr], F_HIDDEN)
     return NEXT
 end)
 
@@ -1147,7 +1147,7 @@ SEMICOLON_CFA = defWord(";",
 
 IMMEDIATE_CFA = defPrimWord("IMMEDIATE", () -> begin
     lenAndFlagsAddr = mem[mem[CURRENT]+1] + 1
-    mem[lenAndFlagsAddr] = mem[lenAndFlagsAddr] $ F_IMMED
+    mem[lenAndFlagsAddr] = xor(mem[lenAndFlagsAddr],  F_IMMED)
     return NEXT
 end, flags=F_IMMED)
 
index 22d98b5..8ad875f 100644 (file)
@@ -47,7 +47,6 @@
         2DROP           ( len addr -- )
 ;
 
-
 \ Create new vocabulary
 : VOCABULARY
         create 0 ,