module forth RS = Array{Int, 1}() DS = Array{Int, 1}() IP = 0 W = 0 X = 0 jmp = nothing primitives = Array{Expr,1}() memory = Array{Int64,1}() headers = Array{Tuple{AbstractString, Int64},1}() function addPrim(name::AbstractString, expr::Expr) push!(primitives, expr) push!(memory, -length(primitives)) push!(headers, (name, length(memory))) return expr end NEXT = addPrim("next", :(begin W = memory[IP] IP += 1 X = memory[W] jmp = primitives[-X] end)) DOCOL = addPrim("docol", :(begin push!(RS, IP) IP = W + 1 jmp = NEXT end)) EXIT = addPrim("exit", :(begin IP = pop!(RS) jmp = NEXT end)) # VM loop #jmp = NEXT #while true # eval(jmp) #end end