Skip to content

Commit 6c5a25a

Browse files
committed
Added Scope to Function Data
1 parent bb7892c commit 6c5a25a

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

src/prometheus/visitast.lua

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ function visitAst(ast, previsit, postvisit, data)
1515
ast.isAst = true;
1616
data = data or {};
1717
data.scopeStack = {};
18-
data.functionData = {};
18+
data.functionData = {
19+
scope = ast.body.scope;
20+
};
1921
data.scope = ast.globalScope;
2022
data.globalScope = ast.globalScope;
2123
if(type(previsit) == "function") then
@@ -98,11 +100,15 @@ function visitStatement(statement, previsit, postvisit, data)
98100
for i, expression in ipairs(statement.rhs) do
99101
statement.rhs[i] = visitExpression(expression, previsit, postvisit, data);
100102
end
101-
elseif(statement.kind == AstKind.DoStatement or statement.kind == AstKind.FunctionDeclaration or statement.kind == AstKind.LocalFunctionDeclaration) then
103+
elseif(statement.kind == AstKind.FunctionDeclaration or statement.kind == AstKind.LocalFunctionDeclaration) then
102104
local parentFunctionData = data.functionData;
103-
data.functionData = {};
105+
data.functionData = {
106+
scope = statement.body.scope;
107+
};
104108
statement.body = visitBlock(statement.body, previsit, postvisit, data, true);
105109
data.functionData = parentFunctionData;
110+
elseif(statement.kind == AstKind.DoStatement) then
111+
statement.body = visitBlock(statement.body, previsit, postvisit, data, true);
106112
elseif(statement.kind == AstKind.WhileStatement) then
107113
statement.condition = visitExpression(statement.condition, previsit, postvisit, data);
108114
statement.body = visitBlock(statement.body, previsit, postvisit, data, false);
@@ -190,7 +196,9 @@ function visitExpression(expression, previsit, postvisit, data)
190196

191197
if(expression.kind == AstKind.FunctionLiteralExpression) then
192198
local parentFunctionData = data.functionData;
193-
data.functionData = {};
199+
data.functionData = {
200+
scope = expression.body.scope;
201+
};
194202
expression.body = visitBlock(expression.body, previsit, postvisit, data, true);
195203
data.functionData = parentFunctionData;
196204
end

0 commit comments

Comments
 (0)