Re: [Csnd-dev] switch statement verification

Scott Sitar <[email protected]> Tue, 21 Oct 2025 07:23:05 -0700
Newsgroups gmane.comp.audio.csound.devel
Message-ID <CA+TA3_rdHj3_DELziV=FBRyA44sxP3y3Kkrb73zZfgu4RADXqA@mail.gmail.com>
Sounds good, thanks!

Scott

On Tue, Oct 21, 2025 at 12:48 AM Hlöðver Sigurðsson <[email protected]>
wrote:

> that's a good idea to improve the semantics checker. I could look into it,
> made a ticket https://github.com/csound/csound/issues/2316
>
> On Tue, 21 Oct 2025 at 08:56, Scott Sitar <[email protected]> wrote:
>
>> Hello,
>>
>> Based on the discussion around the switch statement and whether there
>> should be an implicit break or not, I've been learning about how it's
>> expanded out during compilation to see how hard it would be to implement
>> something like a golang "fallthrough" opcode.  I ran into the following
>> interesting example, where it seems like we don't insist that the default
>> case comes last, and we allow multiple default cases (only the first will
>> match).  Should we be more strict, and implement some of these rules inside
>> a verify_switch_statement(), similar to the looping opcode verifications?
>> We could also put the rule in there to enforce the fallthrough opcode being
>> the last opcode of the block, and disallowing it in the default block.
>>
>> I've pasted the example I was playing with at the bottom.  I'd be happy
>> to work on the verification and/or the new opcode if folks think it's
>> worthwhile.
>>
>> Best,
>> Scott
>>
>> =========
>>
>> <CsoundSynthesizer>
>>
>> <CsOptions>
>> -o dac
>> </CsOptions>
>>
>> <CsInstruments>
>>
>> instr 1
>>     switch p4
>>         case 2
>>             prints "got 2\n"
>>         default
>>             prints "got default\n"
>>         default
>>             prints "got the second default\n"
>>         case 3
>>             prints "got 3\n"
>>     endsw
>> endin
>>
>> </CsInstruments>
>>
>> <CsScore>
>> i1 0 1 3
>> </CsScore>
>>
>> </CsoundSynthesizer>
>>
>