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