From e4398a4bcfe3757ee9898b51fab702c5bc6a0e55 Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" <mlp@thesmartpolitenerd.com> Date: Wed, 18 Mar 2015 20:59:15 +0100 Subject: [PATCH] added HBytes __call metamethod; starting the same for HParsedToken --- src/bindings/lua/hammer.lua | 20 +++++++++++++++++++- src/bindings/lua/test.lua | 4 ++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/bindings/lua/hammer.lua b/src/bindings/lua/hammer.lua index d1c36900..b3d975b9 100644 --- a/src/bindings/lua/hammer.lua +++ b/src/bindings/lua/hammer.lua @@ -171,7 +171,25 @@ local arr_mt = { return ret end } -counted_array = ffi.metatype("HCountedArray", arr_mt) +counted_array = ffi.metatype("HCountedArray", arr_mt) + +local bytes_mt = { + __call = function(self) + local ret = "" + print(self.len) + for i = 0, tonumber(self.len)-1 + do ret = ret .. string.char(self.token[i]) + end + return ret + end +} +local byte_string = ffi.metatype("HBytes", bytes_mt) +-- local parsed_token +-- local tok_mt = { +-- __call = function(self) +-- end +-- } +-- parsed_token = ffi.metatype("HParsedToken", tok_mt) function hammer.token(str) return h.h_token(str, #str) diff --git a/src/bindings/lua/test.lua b/src/bindings/lua/test.lua index c1181738..6fd108c1 100644 --- a/src/bindings/lua/test.lua +++ b/src/bindings/lua/test.lua @@ -13,7 +13,7 @@ describe("Combinator tests", function() local parser = hammer.token("95" .. string.char(0xa2)) it("parses a token", function() local ret = parser:parse("95" .. string.char(0xa2)) - assert.are.same("95" .. string.char(0xa2), ret.ast.bytes) + assert.are.same("95" .. string.char(0xa2), ret.ast.bytes()) end) it("does not parse an incomplete token", function() local ret = parser:parse("95") @@ -393,7 +393,7 @@ describe("Combinator tests", function() local parser = hammer.difference(hammer.token("ab"), hammer.ch("a")) it("succeeds when 'ab' matches and its result is longer than the result for 'a'", function() local ret = parser:parse("ab") - assert.are.same("ab", ret.ast.bytes) + assert.are.same("ab", ret.ast.bytes()) end) it("fails if 'ab' doesn't match", function() local ret = parser:parse("a") -- GitLab