From: Tim Vaughan Date: Thu, 10 Aug 2017 20:19:36 +0000 (+0200) Subject: Merge branch 'julia0.6' X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=forth.jl.git;a=commitdiff_plain;h=8723639e0adb6b6a008403937fc3b2fef26c16c1;hp=f2ccca0d0ef6156118d6f3412671013efd9bc6b6 Merge branch 'julia0.6' --- diff --git a/README.md b/README.md index fbb2603..a6e0645 100644 --- 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 diff --git a/src/forth.jl b/src/forth.jl index 01b39a2..4c81dc3 100644 --- a/src/forth.jl +++ b/src/forth.jl @@ -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) diff --git a/src/lib_8_vocab.4th b/src/lib_8_vocab.4th index 22d98b5..8ad875f 100644 --- a/src/lib_8_vocab.4th +++ b/src/lib_8_vocab.4th @@ -47,7 +47,6 @@ 2DROP ( len addr -- ) ; - \ Create new vocabulary : VOCABULARY create 0 ,