From: Tim Vaughan Date: Tue, 31 May 2016 19:34:46 +0000 (+1200) Subject: Working on vocabularies. X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=commitdiff_plain;h=a8d323108d89b2438677598d1b1b592191e72a0b;p=forth.jl.git Working on vocabularies. --- diff --git a/src/forth.jl b/src/forth.jl index 1a65ff6..89c4c0d 100644 --- a/src/forth.jl +++ b/src/forth.jl @@ -16,13 +16,13 @@ primNames = Array{ASCIIString,1}() # Built-in variables nextVarAddr = 1 -H = nextVarAddr; nextVarAddr += 1 -LATEST = nextVarAddr; nextVarAddr += 1 +H = nextVarAddr; nextVarAddr += 1 # Next free memory address +LATEST = nextVarAddr; nextVarAddr += 1 # LFA of latest word in systetm dict RSP0 = nextVarAddr # bottom of RS PSP0 = RSP0 + size_RS # bottom of PS TIB = PSP0 + size_PS # address of terminal input buffer -mem[H] = TIB + size_TIB # location of bottom of dictionary +mem[H] = TIB + size_TIB # location of bottom of dictionary mem[LATEST] = 0 # no previous definition DICT = mem[H] # Save bottom of dictionary as constant @@ -151,18 +151,21 @@ function defExistingVar(name::AbstractString, varAddr::Int64; flags::Int64=0) end))) end -function defNewVar(name::AbstractString, initial::Int64; flags::Int64=0) +function defNewVar(name::AbstractString, initial::Array{Int64,1}; flags::Int64=0) createHeader(name, flags) codeWordAddr = mem[H] varAddr = mem[H] + 1 mem[mem[H]] = DOVAR; mem[H] += 1 - mem[mem[H]] = initial; mem[H] += 1 + mem[mem[H]:(mem[H]+length(initial)-1)] = initial; mem[H] += length(initial) return varAddr, codeWordAddr end +defNewVar(name::AbstractString, initial::Int64; flags::Int64=0) = + defNewVar(name, [initial]; flags=flags) + function defConst(name::AbstractString, val::Int64; flags::Int64=0) createHeader(name, flags) diff --git a/src/lib.4th b/src/lib.4th index e6d5fa1..62b826f 100644 --- a/src/lib.4th +++ b/src/lib.4th @@ -2,6 +2,9 @@ #TIB @ >IN ! ; \ We can now comment! +\ Compile core definitions +\ (These files must be compiled in order!) + include lib_1_basic.4th include lib_2_control.4th include lib_3_comments.4th