@@ -3,6 +3,7 @@ import { LuaEnv, LuaNativeJSFunction, singleResult } from "./runtime.ts";
3
3
import { parse } from "./parse.ts" ;
4
4
import type { LuaBlock , LuaFunctionCallStatement } from "./ast.ts" ;
5
5
import { evalExpression , evalStatement } from "./eval.ts" ;
6
+ import { luaBuildStandardEnv } from "$common/space_lua/stdlib.ts" ;
6
7
7
8
function evalExpr ( s : string , e = new LuaEnv ( ) ) : any {
8
9
return evalExpression (
@@ -39,22 +40,22 @@ Deno.test("Evaluator test", async () => {
39
40
assertEquals ( tbl . get ( 1 ) , 3 ) ;
40
41
assertEquals ( tbl . get ( 2 ) , 1 ) ;
41
42
assertEquals ( tbl . get ( 3 ) , 2 ) ;
42
- assertEquals ( tbl . toArray ( ) , [ 3 , 1 , 2 ] ) ;
43
+ assertEquals ( tbl . toJSArray ( ) , [ 3 , 1 , 2 ] ) ;
43
44
44
- assertEquals ( evalExpr ( `{name=test("Zef"), age=100}` , env ) . toObject ( ) , {
45
+ assertEquals ( evalExpr ( `{name=test("Zef"), age=100}` , env ) . toJSObject ( ) , {
45
46
name : "Zef" ,
46
47
age : 100 ,
47
48
} ) ;
48
49
49
50
assertEquals (
50
- ( await evalExpr ( `{name="Zef", age=asyncTest(100)}` , env ) ) . toObject ( ) ,
51
+ ( await evalExpr ( `{name="Zef", age=asyncTest(100)}` , env ) ) . toJSObject ( ) ,
51
52
{
52
53
name : "Zef" ,
53
54
age : 100 ,
54
55
} ,
55
56
) ;
56
57
57
- assertEquals ( evalExpr ( `{[3+2]=1, ["a".."b"]=2}` ) . toObject ( ) , {
58
+ assertEquals ( evalExpr ( `{[3+2]=1, ["a".."b"]=2}` ) . toJSObject ( ) , {
58
59
5 : 1 ,
59
60
ab : 2 ,
60
61
} ) ;
@@ -68,6 +69,10 @@ Deno.test("Evaluator test", async () => {
68
69
// Function calls
69
70
assertEquals ( singleResult ( evalExpr ( `test(3)` , env ) ) , 3 ) ;
70
71
assertEquals ( singleResult ( await evalExpr ( `asyncTest(3) + 1` , env ) ) , 4 ) ;
72
+
73
+ // Function definitions
74
+ const fn = evalExpr ( `function(a, b) return a + b end` ) ;
75
+ assertEquals ( fn . body . parameters , [ "a" , "b" ] ) ;
71
76
} ) ;
72
77
73
78
Deno . test ( "Statement evaluation" , async ( ) => {
@@ -93,7 +98,7 @@ Deno.test("Statement evaluation", async () => {
93
98
const env3 = new LuaEnv ( ) ;
94
99
await evalBlock ( `tbl = {1, 2, 3}` , env3 ) ;
95
100
await evalBlock ( `tbl[1] = 3` , env3 ) ;
96
- assertEquals ( env3 . get ( "tbl" ) . toArray ( ) , [ 3 , 2 , 3 ] ) ;
101
+ assertEquals ( env3 . get ( "tbl" ) . toJSArray ( ) , [ 3 , 2 , 3 ] ) ;
97
102
await evalBlock ( "tbl.name = 'Zef'" , env3 ) ;
98
103
assertEquals ( env3 . get ( "tbl" ) . get ( "name" ) , "Zef" ) ;
99
104
await evalBlock ( `tbl[2] = {age=10}` , env3 ) ;
@@ -105,7 +110,7 @@ Deno.test("Statement evaluation", async () => {
105
110
env4 . set ( "print" , new LuaNativeJSFunction ( console . log ) ) ;
106
111
await evalBlock (
107
112
`
108
- a = 1
113
+ a = 1
109
114
do
110
115
-- sets global a to 3
111
116
a = 3
@@ -198,4 +203,62 @@ Deno.test("Statement evaluation", async () => {
198
203
` ,
199
204
env8 ,
200
205
) ;
206
+
207
+ // Local fucntion definition
208
+ const env9 = new LuaEnv ( ) ;
209
+ env9 . set ( "print" , new LuaNativeJSFunction ( console . log ) ) ;
210
+ await evalBlock (
211
+ `
212
+ local function test(a)
213
+ return a + 1
214
+ end
215
+ print("3 + 1 = " .. test(3))
216
+ ` ,
217
+ env9 ,
218
+ ) ;
219
+
220
+ // For loop over range
221
+ const env10 = new LuaEnv ( ) ;
222
+ await evalBlock (
223
+ `
224
+ c = 0
225
+ for i = 1, 3 do
226
+ c = c + i
227
+ end
228
+ ` ,
229
+ env10 ,
230
+ ) ;
231
+ assertEquals ( env10 . get ( "c" ) , 6 ) ;
232
+
233
+ // For loop over iterator
234
+ const env11 = new LuaEnv ( luaBuildStandardEnv ( ) ) ;
235
+ await evalBlock (
236
+ `
237
+ function fruits()
238
+ local list = { "apple", "banana", "cherry" }
239
+ -- Track index internally
240
+ local index = 0
241
+
242
+ return function()
243
+ index = index + 1
244
+ if list[index] then
245
+ return list[index]
246
+ end
247
+ end
248
+ end
249
+
250
+ for fruit in fruits() do
251
+ print("Fruit: " .. fruit)
252
+ end
253
+ ` ,
254
+ env11 ,
255
+ ) ;
256
+
257
+ await evalBlock (
258
+ `
259
+ for _, f in ipairs({ "apple", "banana", "cherry" }) do
260
+ print("Fruit: " .. f)
261
+ end` ,
262
+ luaBuildStandardEnv ( ) ,
263
+ ) ;
201
264
} ) ;
0 commit comments