Skip to content

Commit 8de3862

Browse files
libretroadminLibretroAdmin
authored andcommitted
tools/settings_migrate_group: reference rows whose label a twin def already owns
The quit visibility pair migrated variant-first, so the plain row found its label string living in the level-variant def; such a row becomes a reference like any other owned token.
1 parent 0124db5 commit 8de3862

1 file changed

Lines changed: 28 additions & 19 deletions

File tree

tools/settings_migrate_group.py

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ def guard_of(text, pat):
198198
usval[T] = re.sub(r'\s*\n\s*', ' ', _tvm.group(2)) if _tvm else '""'
199199
m2 = re.search(r'MSG_HASH\(\s*\n?\s*MENU_ENUM_SUBLABEL_%s,\s*\n?\s*(%s)\s*\n?\s*\)\n?' % (T, CSTR), us)
200200
if m2:
201-
ussub[T] = re.sub(r'\s*\n\s*', ' ', m2.group(1)); usspan.append((m2.start(), m2.end()))
201+
ussub[T] = re.sub(r'\s*\n\s*', ' ', m2.group(1)); usspan.append((m2.start(), m2.end(), T))
202202
continue
203203
m = re.search(r'MSG_HASH\(\s*(/\*.*?\*/)?\s*\n?\s*MENU_ENUM_LABEL_VALUE_%s,\s*\n?\s*(%s)\s*\n?\s*\)\n?' % (T, CSTR), us)
204204
if not m:
@@ -207,34 +207,28 @@ def guard_of(text, pat):
207207
ref_tokens.add(T)
208208
continue
209209
assert m, ('VALUE', T)
210-
usval[T] = re.sub(r'\s*\n\s*', ' ', m.group(2)); usspan.append((m.start(), m.end()))
210+
usval[T] = re.sub(r'\s*\n\s*', ' ', m.group(2)); usspan.append((m.start(), m.end(), T))
211211
if m.group(1):
212212
uscmt[T] = m.group(1)
213213
m = re.search(r'MSG_HASH\(\s*(/\*.*?\*/)?\s*\n?\s*MENU_ENUM_SUBLABEL_%s,\s*\n?\s*(%s)\s*\n?\s*\)\n?' % (T, CSTR), us)
214214
if m:
215-
ussub[T] = re.sub(r'\s*\n\s*', ' ', m.group(2)); usspan.append((m.start(), m.end()))
215+
ussub[T] = re.sub(r'\s*\n\s*', ' ', m.group(2)); usspan.append((m.start(), m.end(), T))
216216
if m.group(1):
217217
uscmt[T] = (uscmt.get(T, '') + ' ' + m.group(1)).strip()
218-
if ref_tokens:
219-
_tail = [r for r in rows if r[2] in ref_tokens]
220-
_ref_literals = {}
221-
for _k3, _f3, _t3, _a3 in _tail:
222-
_head3 = (r'\s*%s,\s*%s,' % (_f3, _t3)) if _f3 else (r'\s*%s,' % _t3)
223-
_rm3 = re.search(r'[ \t]*SDESC_\w+_ROW(?:_P|_DS|_EX|_LV)?\(%s(?:[^()]|\((?:[^()]|\([^()]*\))*\))*\),?' % _head3, body)
224-
assert _rm3, _t3
225-
_rl3 = _rm3.group(0).strip()
226-
for _g3 in reversed(guards.get(_f3 or _t3, ())):
227-
_rl3 = _g3 + '\n ' + _rl3 + '\n#endif'
228-
_ref_literals[_t3] = _rl3
229-
print(' note: %d reference row(s) carried literal inside the def' % len(_ref_literals))
230-
else:
231-
_ref_literals = {}
218+
232219
lblstr = open('msg_hash_lbl_str.h').read()
233220
names, lblstr_span = {}, []
234221
for k, f, T, a in rows:
235222
if T in ref_tokens:
236223
continue
237224
m = re.search(r'#define MENU_ENUM_LABEL_%s_STR (%s)\n' % (T, CSTR), lblstr)
225+
if not m and run("grep -lE 'S_\\w*\\((\\w+, *)?%s,' settings/*.h" % T).stdout.strip():
226+
# the label already lives in a migrated def (a level-variant twin
227+
# took it); this row becomes a reference
228+
ref_tokens.add(T)
229+
usval.pop(T, None); ussub.pop(T, None)
230+
usspan = [sp for sp in usspan if sp[2] != T]
231+
continue
238232
assert m, T
239233
names[T] = m.group(1); lblstr_span.append((m.start(), m.end()))
240234
ext = run('grep -rl "MENU_ENUM_LABEL_%s_STR\\b" --include=*.h --include=*.c . | grep -v msg_hash_lbl' % T).stdout.strip()
@@ -343,6 +337,21 @@ def guard_of(text, pat):
343337
_mh_text = open('msg_hash.h').read()
344338
_h_used = set()
345339
enum_rows = []
340+
if ref_tokens:
341+
_tail = [r for r in rows if r[2] in ref_tokens]
342+
_ref_literals = {}
343+
for _k3, _f3, _t3, _a3 in _tail:
344+
_head3 = (r'\s*%s,\s*%s,' % (_f3, _t3)) if _f3 else (r'\s*%s,' % _t3)
345+
_rm3 = re.search(r'[ \t]*SDESC_\w+_ROW(?:_P|_DS|_EX|_LV)?\(%s(?:[^()]|\((?:[^()]|\([^()]*\))*\))*\),?' % _head3, body)
346+
assert _rm3, _t3
347+
_rl3 = _rm3.group(0).strip()
348+
for _g3 in reversed(guards.get(_f3 or _t3, ())):
349+
_rl3 = _g3 + '\n ' + _rl3 + '\n#endif'
350+
_ref_literals[_t3] = _rl3
351+
print(' note: %d reference row(s) carried literal inside the def' % len(_ref_literals))
352+
else:
353+
_ref_literals = {}
354+
346355
for k, f, T, a in rows:
347356
if T in ref_tokens:
348357
out.append('/* Row referencing %s; strings owned by another def file. */\n'
@@ -456,8 +465,8 @@ def _cond(g):
456465
open(os.path.join('settings', DEF), 'w').write('\n'.join(out) + '\n')
457466

458467
if usspan:
459-
first = min(s for s, e in usspan)
460-
for s, e in sorted(usspan, reverse=True): us = us[:s] + us[e:]
468+
first = min(s for s, e, _sT in usspan)
469+
for s, e, _sT in sorted(usspan, reverse=True): us = us[:s] + us[e:]
461470
else:
462471
# nothing consumed from the base language (a pure-reference
463472
# level-variant row without a sublabel): anchor the region at the

0 commit comments

Comments
 (0)