Skip to content

Commit

Permalink
table
Browse files Browse the repository at this point in the history
  • Loading branch information
zeroflag committed Dec 27, 2024
1 parent d98cb67 commit a7f6f59
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 7 deletions.
1 change: 0 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ all: test

test:
@for luaver in $(LUA_VERSIONS); do \
echo ""; \
echo "* $$luaver"; \
if ! command -v $$luaver > /dev/null 2>&1; then \
echo "$$luaver is not installed skippping"; \
Expand Down
5 changes: 5 additions & 0 deletions dict.lua
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ dict.defword("..", "ops.concat", false)
dict.defword(">a", "ops.to_aux", false)
dict.defword("a>", "ops.from_aux", false)
dict.defword("assert", "ops.assert", false)
dict.defword("<table>", "ops.new_table", false)
dict.defword("size", "ops.table_size", false)
dict.defword("at", "ops.table_at", false)
dict.defword("prepend", "ops.table_prepend", false)
dict.defword("append", "ops.table_append", false)
dict.defword("if", "macros._if", true)
dict.defword("then", "macros._then", true)
dict.defword("else", "macros._else", true)
Expand Down
12 changes: 11 additions & 1 deletion lib.eqx
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
\ stack juggling
: assert-true assert/1 drop ;
: assert-false not assert-true ;
: =assert = assert-true ;

\ TODO make them macros
: nip ( a b -- b ) swap drop ;
: 2dup ( a b -- a b a b ) over over ;
: -rot ( a b c -- c a b ) rot rot ;
: tuck ( a b -- b a b ) swap over ;

: [ depth >a ;
: ] <table>
depth a> - 1 - 0
do
tuck prepend
loop ;
28 changes: 27 additions & 1 deletion ops.lua
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ function ops.concat()
end

function ops.dot()
io.write(stack:pop())
io.write(tostring(stack:pop()))
io.write(" ")
end

Expand All @@ -121,4 +121,30 @@ function ops.from_aux()
stack:push(aux:pop())
end

function ops.new_table()
stack:push({})
end

function ops.table_size()
stack:push(#stack:pop())
end

function ops.table_at()
local n = stack:pop()
local t = stack:pop()
stack:push(t[n])
end

function ops:table_prepend()
local tbl = stack:pop()
local item = stack:pop()
table.insert(tbl, 1, item)
end

function ops:table_append()
local tbl = stack:pop()
local item = stack:pop()
table.insert(tbl, item)
end

return ops
4 changes: 0 additions & 4 deletions test_core.eqx
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
: assert-true assert/1 drop ;
: assert-false not assert-true ;
: =assert = assert-true ;

0 1 - -1 =assert
-10 1 + -9 =assert
-10 4 < assert-true
Expand Down
16 changes: 16 additions & 0 deletions test_table.eqx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[ ] size 0 =assert
[ 1 ] size 1 =assert

[ 3 5 7 "apple" [ 4 5 ] "banana" ] size 6 =assert

: make-table [ 99 7 [ 9 6 ] "orange" "grapes" ] ;

make-table size 5 =assert
make-table 1 at 99 =assert
make-table 2 at 7 =assert
make-table 3 at 1 at 9 =assert
make-table 3 at 2 at 6 =assert
make-table 4 at "orange" =assert
make-table 5 at "grapes" =assert

depth 0 =assert

0 comments on commit a7f6f59

Please sign in to comment.