From 5078dcf2835665e6a5c557c98abe9af347c37063 Mon Sep 17 00:00:00 2001 From: Erik Carstensen Date: Wed, 4 Mar 2026 16:09:59 +0100 Subject: [PATCH 1/3] Fix goof 'parameter' was forbidden by mistake as identifier in DML 1.2 --- py/dml/dmllex12.py | 3 ++- test/1.2/syntax/T_ident.dml | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/py/dml/dmllex12.py b/py/dml/dmllex12.py index b3c9857d6..c216273a2 100644 --- a/py/dml/dmllex12.py +++ b/py/dml/dmllex12.py @@ -9,10 +9,11 @@ t_HASH = r'\#' keywords_dml12 = dict(keywords_common) +reserved_idents = reserved_idents_common for kw in ['parameter', 'trait']: keywords_dml12[kw] = kw.upper() tokens += (kw.upper(),) - reserved_idents = reserved_idents_common + (kw.upper(),) + reserved_idents = reserved_idents + (kw.upper(),) def t_ID(t): r'[A-Za-z_][\w_]*' diff --git a/test/1.2/syntax/T_ident.dml b/test/1.2/syntax/T_ident.dml index 8dbdfb4b9..c77e728df 100644 --- a/test/1.2/syntax/T_ident.dml +++ b/test/1.2/syntax/T_ident.dml @@ -30,4 +30,5 @@ method init() { local int port; local int size; local int throws; + local int parameter; } From 1a9555b754281376c2f29093793e257c49741ae0 Mon Sep 17 00:00:00 2001 From: Erik Carstensen Date: Wed, 4 Mar 2026 16:10:21 +0100 Subject: [PATCH 2/3] Remove `nothrow` and `data` from the 1.4 grammar --- py/dml/dmllex.py | 4 ++-- py/dml/dmllex12.py | 2 +- py/port_dml.py | 6 +++--- test/1.2/misc/porting.dml | 2 +- test/1.4/misc/porting.dml | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/py/dml/dmllex.py b/py/dml/dmllex.py index bef7edb79..1103e477d 100644 --- a/py/dml/dmllex.py +++ b/py/dml/dmllex.py @@ -10,10 +10,10 @@ # Reserved words allowed as identifiers reserved_idents_common = ( - 'ATTRIBUTE', 'BANK', 'BITORDER', 'CONNECT', 'CONSTANT', 'DATA', + 'ATTRIBUTE', 'BANK', 'BITORDER', 'CONNECT', 'CONSTANT', 'DEVICE', 'EVENT', 'FIELD', 'FOOTER', 'GROUP', 'HEADER', 'IMPLEMENT', 'IMPORT', 'INTERFACE', 'LOGGROUP', 'METHOD', 'PORT', 'SIZE', - 'SUBDEVICE', 'NOTHROW', 'THEN', 'THROWS', '_HEADER', 'PROVISIONAL', + 'SUBDEVICE', 'THEN', 'THROWS', '_HEADER', 'PROVISIONAL', ) reserved = reserved_idents_common + ( diff --git a/py/dml/dmllex12.py b/py/dml/dmllex12.py index c216273a2..b628c480b 100644 --- a/py/dml/dmllex12.py +++ b/py/dml/dmllex12.py @@ -10,7 +10,7 @@ keywords_dml12 = dict(keywords_common) reserved_idents = reserved_idents_common -for kw in ['parameter', 'trait']: +for kw in ['parameter', 'trait', 'nothrow', 'data']: keywords_dml12[kw] = kw.upper() tokens += (kw.upper(),) reserved_idents = reserved_idents + (kw.upper(),) diff --git a/py/port_dml.py b/py/port_dml.py index 889a81e44..9c55edc6b 100644 --- a/py/port_dml.py +++ b/py/port_dml.py @@ -480,9 +480,9 @@ def apply(self, f): # this.val`, which should not trigger a declaration. if len(outargs) == 1: [(_, name)] = outargs - # e.g., an outarg named `data` is lexed as a 'DATA' token - from dml import dmllex12 - kind = (name.upper() if name.upper() in dmllex12.reserved_idents + # e.g., an outarg named 'group' is lexed as a 'group' token + from dml import dmllex14 + kind = (name.upper() if name.upper() in dmllex14.reserved_idents else 'ID') tokens = list(f.read_tokens(self.offset(f, body_start), self.offset(f, body_end))) diff --git a/test/1.2/misc/porting.dml b/test/1.2/misc/porting.dml index dbc2afa58..0f496077f 100644 --- a/test/1.2/misc/porting.dml +++ b/test/1.2/misc/porting.dml @@ -416,7 +416,7 @@ template evt { method get_event_info(void *data) -> (attr_value_t attr) { attr = SIM_make_attr_nil(); } - method set_event_info(attr_value_t attr) -> (void *data) { + method set_event_info(attr_value_t attr) -> (void *param) { } method destroy(void *data) {} method event(void *data) {} diff --git a/test/1.4/misc/porting.dml b/test/1.4/misc/porting.dml index d86cd81b1..e08d798d6 100644 --- a/test/1.4/misc/porting.dml +++ b/test/1.4/misc/porting.dml @@ -431,8 +431,8 @@ template evt is event { return SIM_make_attr_nil(); } method set_event_info(attr_value_t attr) -> (void *) { - local void *data; - return data; + local void *param; + return param; } method destroy(void *data) {} method event(void *data) {} From 0651354e7e012f63c89fcdabd0cdb61f1ec6841a Mon Sep 17 00:00:00 2001 From: Erik Carstensen Date: Thu, 5 Mar 2026 22:35:12 +0100 Subject: [PATCH 3/3] Repair porting rule --- py/port_dml.py | 2 +- test/1.4/misc/porting.dml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/py/port_dml.py b/py/port_dml.py index 9c55edc6b..2312efa15 100644 --- a/py/port_dml.py +++ b/py/port_dml.py @@ -487,7 +487,7 @@ def apply(self, f): tokens = list(f.read_tokens(self.offset(f, body_start), self.offset(f, body_end))) add_locals = any( - (kind2, tok2) == (kind, name) and kind1 != 'DOT' + (kind2, tok2) == (kind, name) and kind1 != 'PERIOD' for ((_, _, kind1), (_, tok2, kind2)) in zip(tokens, tokens[1:])) else: diff --git a/test/1.4/misc/porting.dml b/test/1.4/misc/porting.dml index e08d798d6..63593d7a8 100644 --- a/test/1.4/misc/porting.dml +++ b/test/1.4/misc/porting.dml @@ -40,7 +40,6 @@ bank b { param soft_reset_val = 4; is read; method read() -> (uint64) { - local uint64 val; local int r2; return this.val + r6.val; }