diff --git a/examples/test.lua b/examples/test.lua index d5b3a79..93b401a 100644 --- a/examples/test.lua +++ b/examples/test.lua @@ -100,7 +100,12 @@ print("hello " .. "there") SETMETATABLE(table, { __add = function () return 1 + end, + __call = function (table, ...) + print(...) + return 1, 2, 3 end }) -print(table + 5) \ No newline at end of file +print(table + 5) +print(table("hello", "there")) \ No newline at end of file diff --git a/src/vm/mod.rs b/src/vm/mod.rs index 0f52d57..4d9754c 100644 --- a/src/vm/mod.rs +++ b/src/vm/mod.rs @@ -566,10 +566,10 @@ impl ClosureRunner { .unwrap_or(Value::Nil); } Instruction::SetTable(tablereg, indexreg, valuereg) => { - let table_value = self.stack.get(tablereg); - match table_value { - Some(value) => { - let mut table = value.borrow_mut(); + let table_stack_value = self.stack.get(tablereg); + match table_stack_value { + Some(table_value) => { + let mut table = table_value.borrow_mut(); if let Value::Table { contents, metatable, @@ -605,7 +605,10 @@ impl ClosureRunner { match self.call_metamethod( metatable, "__newindex", - vec![table_value.unwrap().borrow().clone()], + vec![Value::Table { + contents: contents.clone(), + metatable: metatable.clone(), + }], ) { Ok(_) => {} Err(_) => match value {