Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 38 additions & 15 deletions python/tvm/script/parser/core/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,26 +145,27 @@ def __call__(self, *args, **kwargs):
local_vars = param_binding.arguments
parser = self._find_parser_def()

if self.hygienic:
saved_var_table = parser.var_table
parser.var_table = VarTable()
with parser.with_diag_source(self.source):
if self.hygienic:
saved_var_table = parser.var_table
parser.var_table = VarTable()

with parser.var_table.with_frame():
for k, v in self.closure_vars.items():
parser.var_table.add(k, v)
for k, v in local_vars.items():
parser.var_table.add(k, v)
with parser.var_table.with_frame():
for k, v in self.closure_vars.items():
parser.var_table.add(k, v)
for k, v in local_vars.items():
parser.var_table.add(k, v)

parse_result = self.parse_macro(parser)
parse_result = self.parse_macro(parser)

parser.var_table = saved_var_table
parser.var_table = saved_var_table

else:
with parser.var_table.with_frame():
for k, v in local_vars.items():
parser.var_table.add(k, v)
else:
with parser.var_table.with_frame():
for k, v in local_vars.items():
parser.var_table.add(k, v)

parse_result = self.parse_macro(parser)
parse_result = self.parse_macro(parser)

return parse_result

Expand Down Expand Up @@ -415,6 +416,28 @@ def pop_token():

return _deferred(pop_token)

def with_diag_source(self, source: Source):
"""Add a new source as with statement.

Parameters
----------
source : Source
The source for diagnostics.

Returns
-------
res : Any
The context with new source.
"""

last_diag = self.diag
self.diag = Diagnostics(source)

def pop_source():
self.diag = last_diag

return _deferred(pop_source)

def eval_expr(
self,
node: Union[doc.Expression, doc.expr],
Expand Down