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

tqchen pushed a commit to branch tvmscript-generic-parser-builder
in repository https://gitbox.apache.org/repos/asf/tvm.git

commit 26fc25a7646b6ebcfb2a736be20259f8337d16fb
Author: Tianqi Chen <[email protected]>
AuthorDate: Sun Sep 20 22:35:44 2026 +0000

    [TVMScript] Describe literal shorthand in constructor metadata
---
 python/tvm/script/ir_builder/protocol.py | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/python/tvm/script/ir_builder/protocol.py 
b/python/tvm/script/ir_builder/protocol.py
index 49d44c52b4..fbb0249db1 100644
--- a/python/tvm/script/ir_builder/protocol.py
+++ b/python/tvm/script/ir_builder/protocol.py
@@ -24,7 +24,7 @@ translation consumes construction policies without importing 
their owners.
 from contextlib import nullcontext
 from dataclasses import dataclass
 from inspect import signature
-from typing import Any
+from typing import Any, NamedTuple
 
 from tvm import ir
 
@@ -39,12 +39,23 @@ class _Missing:
 MISSING = _Missing()
 
 
-def expression_args(*fields, introduce=False, dtype=None):
+class ExpressionArguments(NamedTuple):
+    """Syntax policy shared by a constructor and every alias of it."""
+
+    fields: tuple[str, ...]
+    introduce: bool = False
+    dtype: Any = None
+    scalar_strings: bool = True
+
+
+def expression_args(*fields, introduce=False, dtype=None, scalar_strings=True):
     """Mark constructor fields whose nested strings are source expressions.
 
     ``introduce`` permits signature/match scopes to introduce otherwise unknown
     names. ``dtype`` optionally selects the dialect's symbol-construction 
policy;
-    it is metadata, never an evaluator or a replacement constructor.
+    it is metadata, never an evaluator or a replacement constructor. Set
+    ``scalar_strings=False`` when a bare string is literal shorthand while
+    strings nested in tuples/lists remain expressions.
     """
 
     def decorate(constructor):
@@ -52,7 +63,9 @@ def expression_args(*fields, introduce=False, dtype=None):
         unknown = set(fields).difference(parameters)
         if unknown:
             raise ValueError(f"Unknown expression argument fields: 
{sorted(unknown)}")
-        constructor.__tvm_expression_args__ = (tuple(fields), bool(introduce), 
dtype)
+        constructor.__tvm_expression_args__ = ExpressionArguments(
+            tuple(fields), bool(introduce), dtype, bool(scalar_strings)
+        )
         return constructor
 
     return decorate

Reply via email to