pass buffer from outer scope, export some locals from _G

This commit is contained in:
leaf corcoran
2014-02-01 11:44:12 -08:00
parent a122f54d0e
commit 8b67327708
2 changed files with 18 additions and 9 deletions

View File

@@ -1,10 +1,15 @@
local VERSION = "1.0.1"
local VERSION = "1.0.2"
local insert, concat
do
local _obj_0 = table
insert, concat = _obj_0.insert, _obj_0.concat
end
local setfenv = setfenv or function(fn, env)
local load, setfenv, assert, type, error, tostring, tonumber, setmetatable
do
local _obj_0 = _G
load, setfenv, assert, type, error, tostring, tonumber, setmetatable = _obj_0.load, _obj_0.setfenv, _obj_0.assert, _obj_0.type, _obj_0.error, _obj_0.tostring, _obj_0.tonumber, _obj_0.setmetatable
end
setfenv = setfenv or function(fn, env)
local name
local i = 1
while true do
@@ -225,10 +230,13 @@ do
end
return nil, err
end
return function(env)
return function(env, buffer)
if env == nil then
env = { }
end
if buffer == nil then
buffer = { }
end
local combined_env = setmetatable({ }, {
__index = function(self, name)
local val = env[name]
@@ -239,12 +247,12 @@ do
end
})
setfenv(fn, combined_env)
return fn(tostring, concat, html_escape)
return fn(buffer, #buffer, tostring, concat, html_escape)
end
end,
chunks_to_lua = function(self)
local buffer = {
"local _b, _b_i, _tostring, _concat, _escape = {}, 0, ..."
"local _b, _b_i, _tostring, _concat, _escape = ..."
}
local buffer_i = #buffer
local push

View File

@@ -1,6 +1,7 @@
VERSION = "1.0.2"
import insert, concat from table
import load, setfenv, assert, type, error, tostring, tonumber, setmetatable from _G
setfenv = setfenv or (fn, env) ->
local name
@@ -178,20 +179,20 @@ class Parser
return nil, err
(env={}) ->
(env={}, buffer={}) ->
combined_env = setmetatable {}, __index: (name) =>
val = env[name]
val = _G[name] if val == nil
val
setfenv fn, combined_env
fn tostring, concat, html_escape
fn buffer, #buffer, tostring, concat, html_escape
-- generates the code of the template
chunks_to_lua: =>
-- todo: find a no-conflict name for buffer
-- todo: find a no-conflict name for locals
buffer = {
"local _b, _b_i, _tostring, _concat, _escape = {}, 0, ..."
"local _b, _b_i, _tostring, _concat, _escape = ..."
}
buffer_i = #buffer