mirror of
https://github.com/TangentFoxy/etlua.git
synced 2025-07-28 02:52:17 +00:00
pass buffer from outer scope, export some locals from _G
This commit is contained in:
18
etlua.lua
18
etlua.lua
@@ -1,10 +1,15 @@
|
|||||||
local VERSION = "1.0.1"
|
local VERSION = "1.0.2"
|
||||||
local insert, concat
|
local insert, concat
|
||||||
do
|
do
|
||||||
local _obj_0 = table
|
local _obj_0 = table
|
||||||
insert, concat = _obj_0.insert, _obj_0.concat
|
insert, concat = _obj_0.insert, _obj_0.concat
|
||||||
end
|
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 name
|
||||||
local i = 1
|
local i = 1
|
||||||
while true do
|
while true do
|
||||||
@@ -225,10 +230,13 @@ do
|
|||||||
end
|
end
|
||||||
return nil, err
|
return nil, err
|
||||||
end
|
end
|
||||||
return function(env)
|
return function(env, buffer)
|
||||||
if env == nil then
|
if env == nil then
|
||||||
env = { }
|
env = { }
|
||||||
end
|
end
|
||||||
|
if buffer == nil then
|
||||||
|
buffer = { }
|
||||||
|
end
|
||||||
local combined_env = setmetatable({ }, {
|
local combined_env = setmetatable({ }, {
|
||||||
__index = function(self, name)
|
__index = function(self, name)
|
||||||
local val = env[name]
|
local val = env[name]
|
||||||
@@ -239,12 +247,12 @@ do
|
|||||||
end
|
end
|
||||||
})
|
})
|
||||||
setfenv(fn, combined_env)
|
setfenv(fn, combined_env)
|
||||||
return fn(tostring, concat, html_escape)
|
return fn(buffer, #buffer, tostring, concat, html_escape)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
chunks_to_lua = function(self)
|
chunks_to_lua = function(self)
|
||||||
local buffer = {
|
local buffer = {
|
||||||
"local _b, _b_i, _tostring, _concat, _escape = {}, 0, ..."
|
"local _b, _b_i, _tostring, _concat, _escape = ..."
|
||||||
}
|
}
|
||||||
local buffer_i = #buffer
|
local buffer_i = #buffer
|
||||||
local push
|
local push
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
VERSION = "1.0.2"
|
VERSION = "1.0.2"
|
||||||
|
|
||||||
import insert, concat from table
|
import insert, concat from table
|
||||||
|
import load, setfenv, assert, type, error, tostring, tonumber, setmetatable from _G
|
||||||
|
|
||||||
setfenv = setfenv or (fn, env) ->
|
setfenv = setfenv or (fn, env) ->
|
||||||
local name
|
local name
|
||||||
@@ -178,20 +179,20 @@ class Parser
|
|||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
||||||
(env={}) ->
|
(env={}, buffer={}) ->
|
||||||
combined_env = setmetatable {}, __index: (name) =>
|
combined_env = setmetatable {}, __index: (name) =>
|
||||||
val = env[name]
|
val = env[name]
|
||||||
val = _G[name] if val == nil
|
val = _G[name] if val == nil
|
||||||
val
|
val
|
||||||
|
|
||||||
setfenv fn, combined_env
|
setfenv fn, combined_env
|
||||||
fn tostring, concat, html_escape
|
fn buffer, #buffer, tostring, concat, html_escape
|
||||||
|
|
||||||
-- generates the code of the template
|
-- generates the code of the template
|
||||||
chunks_to_lua: =>
|
chunks_to_lua: =>
|
||||||
-- todo: find a no-conflict name for buffer
|
-- todo: find a no-conflict name for locals
|
||||||
buffer = {
|
buffer = {
|
||||||
"local _b, _b_i, _tostring, _concat, _escape = {}, 0, ..."
|
"local _b, _b_i, _tostring, _concat, _escape = ..."
|
||||||
}
|
}
|
||||||
buffer_i = #buffer
|
buffer_i = #buffer
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user