Skip to content

Commit 0e3e906

Browse files
committed
Update uses of enabled_compat to use breaking_changes instead
1 parent 2c0f959 commit 0e3e906

File tree

13 files changed

+102
-97
lines changed

13 files changed

+102
-97
lines changed

dmlast.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ def create_dmlasts(dmlc_path, dmlast_path, dml_path, depfile):
99
from dml.toplevel import produce_dmlast
1010
from dml.logging import ignore_warning
1111
import dml.globals
12-
from dml import breaking_changes as compat
12+
from dml import breaking_changes
1313

1414
ignore_warning('WEXPERIMENTAL')
15-
dml.globals.enabled_compat.add(compat.warning_statement)
15+
# disable breaking change dml_forbid_warning_statement
16+
breaking_changes.BreakingChange.enabled_breaking_changes = set()
1617
dml_files_abs = list(dml_path.rglob('*.dml'))
1718
dml_files = [p.relative_to(dml_path) for p in dml_files_abs]
1819
assert dml_files

lib/1.4/dml-builtins.dml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -705,7 +705,7 @@ template device {
705705
param be_bitorder default _be_bitorder;
706706
param log_group = undefined;
707707

708-
param use_io_memory default _compat_io_memory;
708+
param use_io_memory default !_breaking_change_dml_transaction_by_default;
709709
// this was available in DML 1.2; defensively reserved in 1.4
710710
param banks = undefined;
711711
// this carried semantics in DML 1.2; deprecated in 1.4
@@ -1596,7 +1596,8 @@ template port is object {
15961596
param _is_simics_object = true;
15971597
// limitations for ports are not recognized
15981598
param limitations = undefined;
1599-
param obj = dev._compat_port_obj_param #? dev.obj #: _port_obj();
1599+
param obj = dev._breaking_change_dml_remove_port_obj_param
1600+
#? _port_obj() #: dev.obj;
16001601

16011602
#if (parent.objtype == "group"
16021603
#? parent._simics_namespace_clash #: false) {
@@ -1945,7 +1946,8 @@ template bank is (object, shown_desc) {
19451946
// compatibility: referencing 'obj' in a bank method must evaluate to
19461947
// dev.obj in code that can compile on both 5 and 6
19471948
// TODO: we should probably make obj an immutable session variable
1948-
param obj = dev._compat_port_obj_param #? dev.obj #: _bank_obj();
1949+
param obj = dev._breaking_change_dml_remove_port_obj_param
1950+
#? _bank_obj() #: dev.obj;
19491951
param partial : bool;
19501952
param overlapping : bool;
19511953
param _le_byte_order : bool;

py/dml/c_backend.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
from . import objects, logging, crep, output, ctree, serialize, structure
1616
from . import traits
17-
from . import breaking_changes as compat
17+
from . import breaking_changes
1818
import dml.globals
1919
from .structure import get_attr_name, port_class_ident, need_port_proxy_attrs
2020
from .logging import *
@@ -261,7 +261,7 @@ def generate_hfile(device, headers, filename):
261261
out("/* Generated by dmlc, do not edit! */\n\n")
262262
emit_guard_start(filename)
263263
out('#define DML_PREFIX(x) '+crep.cname(device)+'_##x\n\n')
264-
legacy_attrs = int(compat.legacy_attributes in dml.globals.enabled_compat)
264+
legacy_attrs = int(not breaking_changes.dml_remove_legacy_attributes.enabled)
265265
out(f'#define DML_LEGACY_ATTRS {legacy_attrs}\n')
266266

267267
with allow_linemarks():
@@ -893,7 +893,7 @@ def generate_implement(code, device, impl):
893893
# descendants of the device object
894894
if (port.parent is dml.globals.device
895895
and port.objtype in {'port', 'bank'}
896-
and compat.port_proxy_ifaces in dml.globals.enabled_compat):
896+
and not breaking_changes.dml_remove_port_proxy_ifaces.enabled):
897897
if port.local_dimensions() == 0:
898898
code.out("static const %s = %s;\n" % (
899899
ifacetype.declaration('port_iface'),
@@ -1684,7 +1684,7 @@ def generate_pre_delete(device):
16841684
+ 'NULL);\n')
16851685
out('}\n', preindent=-1)
16861686

1687-
if dml.globals.api_version < compat.api_7:
1687+
if dml.globals.api_version < breaking_changes.api_7:
16881688
out(f'{crep.cname(device)}_deinit(_obj);\n')
16891689
out('}\n\n', preindent = -1)
16901690

@@ -1938,7 +1938,7 @@ def generate_init_data_objs(device):
19381938
for (start, end) in [('A', 'Z'), ('a', 'z'), ('0', '9'), ('_', '_')]
19391939
for i in range(ord(start), ord(end) + 1))
19401940
def init_function_name(device, outprefix):
1941-
if dml.globals.api_version <= compat.api_4_8:
1941+
if dml.globals.api_version <= breaking_changes.api_4_8:
19421942
return 'initialize_' + crep.cname(device)
19431943
return '_initialize_' + ''.join(
19441944
(ch if ch in ident_chars else '_') for ch in outprefix)
@@ -1966,7 +1966,7 @@ def generate_init(device, initcode, outprefix):
19661966
out('.init = '+crep.cname(device)+'_init,\n')
19671967
out('.finalize = '+crep.cname(device)+'_finalize,\n')
19681968
out('.objects_finalized = '+crep.cname(device)+'_objects_finalized,\n')
1969-
if dml.globals.api_version >= compat.api_7:
1969+
if dml.globals.api_version >= breaking_changes.api_7:
19701970
out('.deinit = '+crep.cname(device)+'_deinit,\n')
19711971
out('.dealloc = '+crep.cname(device)+'_dealloc,\n')
19721972
out('.description = '+doc.read()+',\n')
@@ -2166,7 +2166,7 @@ def generate_port_object_assocs_array():
21662166
else node.object_parent)
21672167
if (object_node is not dml.globals.device
21682168
# Anonymous banks
2169-
and (compat.dml12_misc not in dml.globals.enabled_compat
2169+
and (breaking_changes.dml12_remove_misc_quirks.enabled
21702170
or object_node.ident is not None)):
21712171
port_obj_offset = (
21722172
f'offsetof({crep.structtype(dml.globals.device)}, '
@@ -3276,8 +3276,9 @@ def generate_cfile(device, footers,
32763276
full_module):
32773277
global c_file
32783278

3279-
sym = 'SIMICS_%s_API' % ('4_8' if dml.globals.api_version == compat.api_4_8
3280-
else dml.globals.api_version.str)
3279+
sym = 'SIMICS_%s_API' % (
3280+
'4_8' if dml.globals.api_version == breaking_changes.api_4_8
3281+
else dml.globals.api_version.str)
32813282
api_define = '#ifndef %s\n#define %s\n#endif\n' % (
32823283
sym, sym)
32833284

@@ -3336,8 +3337,8 @@ def generate_cfile_body(device, footers, full_module, filename_prefix):
33363337
generate_events(device)
33373338
generate_identity_data_decls()
33383339
generate_object_vtables_array()
3339-
if not (dml.globals.dml_version == (1, 2)
3340-
and compat.shared_logs_on_device in dml.globals.enabled_compat):
3340+
if (dml.globals.dml_version != (1, 2)
3341+
or breaking_changes.dml_shared_logs_locally.enabled):
33413342
generate_port_object_assocs_array()
33423343
generate_class_var_decl()
33433344
generate_startup_calls_entry_function(device)
@@ -3470,7 +3471,7 @@ def generate_cfile_body(device, footers, full_module, filename_prefix):
34703471

34713472
if full_module:
34723473
# caught as error earlier on
3473-
assert dml.globals.api_version == compat.api_4_8
3474+
assert dml.globals.api_version == breaking_changes.api_4_8
34743475
out('\n')
34753476
out('EXPORTED void\n')
34763477
out('init_local(void)\n')

py/dml/codegen.py

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
from . import objects, crep, ctree, ast, int_register, logging, serialize
1515
from . import dmlparse, output
16-
from . import breaking_changes as compat
16+
from . import breaking_changes
1717
from .logging import *
1818
from .expr import *
1919
from .ctree import *
@@ -1101,7 +1101,7 @@ def subast_has_dollar(expr_ast):
11011101
@expression_dispatcher
11021102
def expr_unop(tree, location, scope):
11031103
[op, rh_ast] = tree.args
1104-
if (compat.dml12_misc in dml.globals.enabled_compat
1104+
if (not breaking_changes.dml12_remove_misc_quirks.enabled
11051105
and op == 'sizeof' and rh_ast.kind == 'variable_dml12'):
11061106
var = rh_ast.args[0]
11071107
if var in typedefs and scope.lookup(var) is None:
@@ -1142,7 +1142,7 @@ def expr_unop(tree, location, scope):
11421142
return ctree.AddressOfMethod(tree.site, func)
11431143
raise rh.exc()
11441144
if op == '!':
1145-
if compat.dml12_not in dml.globals.enabled_compat:
1145+
if not breaking_changes.dml12_not_typecheck.enabled:
11461146
t = rh.ctype()
11471147
if isinstance(safe_realtype(t), TInt) and subast_has_dollar(rh_ast):
11481148
# A previous bug caused DMLC to permit expressions on
@@ -1164,7 +1164,7 @@ def expr_unop(tree, location, scope):
11641164
elif op == 'post++': return mkPostInc(tree.site, rh)
11651165
elif op == 'post--': return mkPostDec(tree.site, rh)
11661166
elif op == 'sizeof':
1167-
if (compat.dml12_misc not in dml.globals.enabled_compat
1167+
if (breaking_changes.dml12_remove_misc_quirks.enabled
11681168
and not rh.addressable):
11691169
raise ERVAL(rh.site, 'sizeof')
11701170
return codegen_sizeof(tree.site, rh)
@@ -1464,8 +1464,8 @@ def eval_type(asttype, site, location, scope, extern=False, typename=None,
14641464
(member_struct_defs, member_type) = eval_type(
14651465
type_ast, msite, location, scope, extern)
14661466
if isinstance(member_type, TFunction):
1467-
if (compat.function_in_extern_struct
1468-
in dml.globals.enabled_compat
1467+
if (not (breaking_changes
1468+
.dml_forbid_function_in_extern_struct.enabled)
14691469
and extern):
14701470
member_type = TPtr(member_type)
14711471
else:
@@ -1535,7 +1535,7 @@ def eval_type(asttype, site, location, scope, extern=False, typename=None,
15351535
else:
15361536
raise expr.exc()
15371537
elif (not expr.addressable
1538-
and compat.dml12_misc not in dml.globals.enabled_compat):
1538+
and breaking_changes.dml12_remove_misc_quirks.enabled):
15391539
raise ERVAL(expr.site, 'typeof')
15401540
else:
15411541
etype = expr.ctype().clone()
@@ -1662,7 +1662,7 @@ def declaration(self):
16621662

16631663
def with_expr(self, expr):
16641664
assert (self.typ is None
1665-
or compat.dml12_inline in dml.globals.enabled_compat)
1665+
or not breaking_changes.dml12_disable_inline_constants.enabled)
16661666
return MethodInParam(self.site, self.ident, self.typ, expr)
16671667

16681668
def with_type(self, typ):
@@ -2049,7 +2049,7 @@ def convert_decl(decl_ast):
20492049
name = ident_ast.args[0] if ident_ast.kind == 'variable' else None
20502050
if (name is not None
20512051
and dml.globals.dml_version == (1, 2)
2052-
and compat.dml12_misc not in dml.globals.enabled_compat):
2052+
and breaking_changes.dml12_remove_misc_quirks.enabled):
20532053
check_varname(stmt.site, name)
20542054
(struct_decls, etype) = eval_type(asttype, stmt.site, location, scope)
20552055
stmts.extend(mkStructDefinition(site, t) for (site, t) in struct_decls)
@@ -2679,7 +2679,7 @@ def stmt_assert(stmt, location, scope):
26792679
@statement_dispatcher
26802680
def stmt_goto(stmt, location, scope):
26812681
[label] = stmt.args
2682-
if compat.dml12_goto not in dml.globals.enabled_compat:
2682+
if breaking_changes.dml12_remove_goto.enabled:
26832683
report(ESYNTAX(stmt.site, 'goto', 'goto statement not allowed'))
26842684
return [mkGoto(stmt.site, label)]
26852685

@@ -2773,11 +2773,11 @@ def stmt_log(stmt, location, scope):
27732773
and (not level.constant or level.value != 1))
27742774

27752775
# This correction must be done independently of
2776-
# compat.meaningless_log_levels, otherwise existing usages of
2776+
# breaking_changes.dml_meaningless_log_levels, otherwise existing usages of
27772777
# e.g. log error, 2: "..." will become noops
27782778
if bad_error_level:
27792779
adjusted_level = mkIntegerLiteral(site, 1)
2780-
if compat.meaningless_log_levels not in dml.globals.enabled_compat:
2780+
if breaking_changes.dml_restrict_log_levels.enabled:
27812781
if bad_error_level:
27822782
report(ELLEV(level.site, "1"))
27832783
elif level.constant and not (1 <= level.value <= 4):
@@ -2793,9 +2793,9 @@ def stmt_log(stmt, location, scope):
27932793
logobj = log_object(site, location.node, location.indices)
27942794
else:
27952795
identity = TraitObjIdentity(site, lookup_var(site, scope, "this"))
2796-
logobj = (log_object(site, dml.globals.device, ())
2797-
if compat.shared_logs_on_device in dml.globals.enabled_compat
2798-
else PortObjectFromObjIdentity(site, identity))
2796+
logobj = (PortObjectFromObjIdentity(site, identity)
2797+
if breaking_changes.dml_shared_logs_locally.enabled
2798+
else log_object(site, dml.globals.device, ()))
27992799

28002800
log_wrapper = lambda stmt: stmt
28012801

@@ -2806,8 +2806,7 @@ def stmt_log(stmt, location, scope):
28062806
later_level.value == level.value):
28072807
report(WREDUNDANTLEVEL(site))
28082808
if (error_logkind
2809-
and (compat.meaningless_log_levels
2810-
not in dml.globals.enabled_compat)):
2809+
and breaking_changes.dml_restrict_log_levels.enabled):
28112810
if not later_level.constant or later_level.value not in {1, 5}:
28122811
report(ELLEV(later_level.site, "a 1 or 5 constant"))
28132812
adjusted_later_level = mkIntegerLiteral(site, 1)
@@ -3225,7 +3224,7 @@ def stmt_select(stmt, location, scope):
32253224
if_chain = mkIf(cond.site, cond, stmt, if_chain)
32263225
return [if_chain]
32273226
raise lst.exc()
3228-
elif (compat.dml12_misc in dml.globals.enabled_compat
3227+
elif (not breaking_changes.dml12_remove_misc_quirks.enabled
32293228
and isinstance(lst.ctype(), TVector)
32303229
and itername is not None):
32313230
itervar = lookup_var(stmt.site, scope, itername)
@@ -3501,17 +3500,20 @@ def common_inline(site, method, indices, inargs, outargs):
35013500

35023501
if dml.globals.debuggable:
35033502
if method.fully_typed and (
3504-
compat.dml12_inline not in dml.globals.enabled_compat
3503+
breaking_changes.dml12_disable_inline_constants.enabled
35053504
or all(not arg.constant for arg in inargs)):
35063505
# call method instead of inlining it
35073506
func = method_instance(method)
35083507
else:
35093508
# create a specialized method instance based on parameter
35103509
# types, and call that
35113510
intypes = tuple(
3512-
arg if ((p.typ is None
3513-
or compat.dml12_inline in dml.globals.enabled_compat)
3514-
and (arg.constant or undefined(arg)))
3511+
arg if (
3512+
(p.typ is None
3513+
or not (
3514+
breaking_changes
3515+
.dml12_disable_inline_constants.enabled))
3516+
and (arg.constant or undefined(arg)))
35153517
else methfunc_param(p.typ, arg)
35163518
for (p, arg) in zip(method.inp, inargs))
35173519
outtypes = tuple(methfunc_param(ptype, arg)
@@ -3763,7 +3765,8 @@ def codegen_inline(site, meth_node, indices, inargs, outargs,
37633765
param_scope.add(ExpressionSymbol(p.ident, arg, arg.site))
37643766
elif arg.constant and (
37653767
p.inlined
3766-
or compat.dml12_inline in dml.globals.enabled_compat):
3768+
or not (breaking_changes
3769+
.dml12_disable_inline_constants.enabled)):
37673770
# Constants must be passed directly to
37683771
# provide constant folding. Other values are stored in a
37693772
# local variable to improve type checking and variable
@@ -3979,7 +3982,7 @@ def codegen_method_func(func):
39793982
e = p.expr
39803983
if (p.ident is not None
39813984
and dml.globals.dml_version == (1, 2)
3982-
and compat.dml12_misc not in dml.globals.enabled_compat):
3985+
and breaking_changes.dml12_remove_misc_quirks.enabled):
39833986
check_varname(p.site, p.ident)
39843987
if e and p.ident is not None:
39853988
inlined_arg = (
@@ -4104,8 +4107,7 @@ def prelude():
41044107
with fail_handler, exit_handler:
41054108
body = ([mkIndicesAssert(site, location.node,
41064109
location.indices)]
4107-
if ((compat.no_method_index_asserts
4108-
not in dml.globals.enabled_compat)
4110+
if (breaking_changes.dml_range_check_method_indices.enabled
41094111
and location.method() and location.node.dimsizes)
41104112
else [])
41114113
body.extend(prelude())
@@ -4201,7 +4203,7 @@ def codegen_call(site, meth_node, indices, inargs, outargs):
42014203
if (site.dml_version() == (1, 2) and logging.show_porting):
42024204
report_pevent_data_arg(meth_node, site, inargs)
42034205

4204-
if compat.dml12_misc in dml.globals.enabled_compat:
4206+
if not breaking_changes.dml12_remove_misc_quirks.enabled:
42054207
# For backward compatibility. See bug 21367.
42064208
inargs = [mkCast(site, arg, TPtr(TNamed('char')))
42074209
if isinstance(arg, StringConstant) else arg

py/dml/crep.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from .logging import *
1111
from .expr_util import *
1212
from .messages import *
13-
from . import breaking_changes as compat
13+
from . import breaking_changes
1414

1515
__all__ = (
1616
'cname',
@@ -74,8 +74,7 @@ def cname(node):
7474
elif node.objtype == 'interface':
7575
# this is weird... kept for compatibility
7676
name = param_str(node, 'c_name').replace('-', '_')
77-
if name != node.name and (
78-
compat.dml12_misc not in dml.globals.enabled_compat):
77+
if name != node.name and breaking_changes.dml12_remove_misc_quirks.enabled:
7978
report(WDEPRECATED(param_expr_site(node, 'c_name'),
8079
'parameter c_name'))
8180
return name
@@ -178,7 +177,7 @@ def node_storage_type_dml12(node, site):
178177
else:
179178
return None
180179
elif node.objtype == 'implement':
181-
if compat.dml12_misc in dml.globals.enabled_compat:
180+
if not breaking_changes.dml12_remove_misc_quirks.enabled:
182181
typename = param_str(node, 'c_type')
183182
t = TNamed(typename)
184183
t.declaration_site = node.site
@@ -228,7 +227,7 @@ def conf_object(site, node, indices):
228227
cref_portobj(node, indices[:node.dimensions]))
229228

230229
def cloggroup(name):
231-
if compat.dml12_misc in dml.globals.enabled_compat:
230+
if not breaking_changes.dml12_remove_misc_quirks.enabled:
232231
return name
233232
else:
234233
return '_dml_loggroup_' + name

0 commit comments

Comments
 (0)