From 55a3408fa083b10fec5b39bd733f5148a7a63bb8 Mon Sep 17 00:00:00 2001 From: skal Date: Mon, 16 Feb 2026 22:38:57 +0100 Subject: fix: add sequence index to generated class names Prevents compilation errors when multiple sequences share the same name. Compiler now appends _{index}_Sequence for unique class names. Co-Authored-By: Claude Sonnet 4.5 --- tools/seq_compiler.py | 15 +++++++++------ workspaces/main/timeline.seq | 8 +++----- workspaces/test/timeline.seq | 4 ++++ 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/tools/seq_compiler.py b/tools/seq_compiler.py index 361aa63..f3a7f16 100755 --- a/tools/seq_compiler.py +++ b/tools/seq_compiler.py @@ -363,13 +363,13 @@ def detect_ping_pong(seq: SequenceDecl, sorted_effects: List[EffectDecl]) -> Dic return aliases def generate_cpp(seq: SequenceDecl, sorted_effects: List[EffectDecl], - aliases: Dict[str, str], flatten: bool = False) -> str: + aliases: Dict[str, str], seq_index: int, flatten: bool = False) -> str: """Generate C++ Sequence subclass.""" class_name = seq.name.replace(' ', '_').replace('-', '_') if not class_name[0].isalpha(): class_name = 'Seq_' + class_name - class_name += 'Sequence' + class_name += f'_{seq_index}_Sequence' # Generate includes includes = set() @@ -465,7 +465,7 @@ def main(): ''' - for seq in sequences: + for seq_idx, seq in enumerate(sequences): # Validate DAG validate_dag(seq) @@ -479,7 +479,7 @@ def main(): aliases = detect_ping_pong(seq, sorted_effects) # Generate C++ - cpp = generate_cpp(seq, sorted_effects, aliases, args.flatten) + cpp = generate_cpp(seq, sorted_effects, aliases, seq_idx, args.flatten) all_cpp += cpp + '\n' # Generate sequence registry and accessors @@ -504,8 +504,11 @@ void InitializeSequences(const GpuContext& ctx, int width, int height) { ''' # Instantiate each sequence - for seq in sequences: - class_name = f"{seq.name}Sequence" + for seq_idx, seq in enumerate(sequences): + seq_name = seq.name.replace(' ', '_').replace('-', '_') + if not seq_name[0].isalpha(): + seq_name = 'Seq_' + seq_name + class_name = f"{seq_name}_{seq_idx}_Sequence" all_cpp += f' g_sequences.push_back({{{seq.start_time}f, {seq.priority}, std::make_unique<{class_name}>(ctx, width, height)}});\n' all_cpp += ''' diff --git a/workspaces/main/timeline.seq b/workspaces/main/timeline.seq index 0f40485..77f013d 100644 --- a/workspaces/main/timeline.seq +++ b/workspaces/main/timeline.seq @@ -2,14 +2,12 @@ # BPM 90 SEQUENCE 0.00 0 "intro" - # FlashCube (placeholder) -> Vignette -> sink - EFFECT + Placeholder source -> temp1 0.00 4.00 - EFFECT + Placeholder temp1 -> sink 0.00 4.00 + EFFECT + RotatingCube source -> temp1 0.00 4.00 + EFFECT + GaussianBlur temp1 -> sink 0.00 4.00 SEQUENCE 4.00 0 "rotating_cube" - # RotatingCube -> Blur -> sink EFFECT + RotatingCube source -> temp1 0.00 4.00 - EFFECT + GaussianBlur temp1 -> sink 1.00 4.00 + EFFECT + Placeholder temp1 -> sink 1.00 4.00 SEQUENCE 8.00 0 "flash_cube" # FlashCube (placeholder) -> Flash (placeholder) -> sink diff --git a/workspaces/test/timeline.seq b/workspaces/test/timeline.seq index d4b0004..6932d89 100644 --- a/workspaces/test/timeline.seq +++ b/workspaces/test/timeline.seq @@ -3,5 +3,9 @@ # BPM 120 (set in test_demo.track) SEQUENCE 0.0 0 "MainLoop" +EFFECT + RotatingCube source -> temp1 0.00 4.00 +EFFECT + GaussianBlur temp1 -> sink 0.00 4.00 + +SEQUENCE 4.0 0 "MainLoop" EFFECT + Flash source -> flash_out 0.0 16.0 EFFECT + PeakMeter flash_out -> sink 0.0 16.0 -- cgit v1.2.3