This is an automated email from the ASF dual-hosted git repository.

tqchen pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git


The following commit(s) were added to refs/heads/main by this push:
     new 9cfebca136 [TVMScript] Fix error reporting inside Macro func (#16967)
9cfebca136 is described below

commit 9cfebca136a6dd58e59deeb19690d37cc6e9426a
Author: Siyuan Feng <[email protected]>
AuthorDate: Sun May 5 21:51:53 2024 +0800

    [TVMScript] Fix error reporting inside Macro func (#16967)
---
 python/tvm/script/parser/core/parser.py | 53 +++++++++++++++++++++++----------
 1 file changed, 38 insertions(+), 15 deletions(-)

diff --git a/python/tvm/script/parser/core/parser.py 
b/python/tvm/script/parser/core/parser.py
index b41a05689d..0ecf669566 100644
--- a/python/tvm/script/parser/core/parser.py
+++ b/python/tvm/script/parser/core/parser.py
@@ -145,26 +145,27 @@ class ScriptMacro(abc.ABC):
         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
 
@@ -415,6 +416,28 @@ class Parser(doc.NodeVisitor):
 
         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],

Reply via email to