diff --git a/README.md b/README.md index 6d113aa..3ab0d9f 100644 --- a/README.md +++ b/README.md @@ -138,8 +138,8 @@ first_fn = parser:load(parser:compile_to_lua("Hello ")) second_fn = parser:load(parser:compile_to_lua("World")) buffer = {} -parser:run(first_fn, nil, buffer) -parser:run(second_fn, nil, buffer) +parser:run(first_fn, nil, buffer, #buffer) +parser:run(second_fn, nil, buffer, #buffer) print(table.concat(buffer)) -- print 'Hello World' ``` diff --git a/etlua.moon b/etlua.moon index d2b8320..3bc54e6 100644 --- a/etlua.moon +++ b/etlua.moon @@ -54,7 +54,7 @@ class Compiler @push ... if ... header: => - @push "local _b, _b_i, _tostring, _concat, _escape = ...\n" + @push "local _tostring, _escape, _b, _b_i = ...\n" footer: => @push "return _b" @@ -220,14 +220,18 @@ class Parser fn -- takes a function from @load and executes it with correct parameters - run: (fn, env={}, buffer={}) => + run: (fn, env={}, buffer, i, ...) => combined_env = setmetatable {}, __index: (name) => val = env[name] val = _G[name] if val == nil val + unless buffer + buffer = {} + i = 0 + setfenv fn, combined_env - fn buffer, #buffer, tostring, concat, html_escape + fn tostring, html_escape, buffer, i, ... compile_to_lua: (str, ...) => success, err = @parse str diff --git a/spec/etlua_spec.moon b/spec/etlua_spec.moon index 7e4e97c..11d8593 100644 --- a/spec/etlua_spec.moon +++ b/spec/etlua_spec.moon @@ -109,7 +109,7 @@ This is my message to <%= [=[oh yeah %>"]=] %>]] it "should use existing buffer", -> fn = compile "hello<%= 'yeah' %>" buff = {"first"} - out = fn {}, buff + out = fn {}, buff, #buff assert.same "firsthelloyeah", out it "should compile readme example", -> @@ -119,8 +119,8 @@ This is my message to <%= [=[oh yeah %>"]=] %>]] second_fn = parser\load parser\compile_to_lua "World" buffer = {} - parser\run first_fn, nil, buffer - parser\run second_fn, nil, buffer + parser\run first_fn, nil, buffer, #buffer + parser\run second_fn, nil, buffer, #buffer assert.same "Hello World", table.concat buffer