Re: [Csnd-dev] instr0 non-globals affecting variable assignment in instruments
Hlöðver Sigurðsson <[email protected]> Mon, 8 Dec 2025 08:51:14 +0200
| Newsgroups | gmane.comp.audio.csound.devel |
|---|---|
| Message-ID | <CAB8vR8JnsTWjN+dZauw+JdSb_m0bb5UUXnWjAL=2YU9GTzZShg@mail.gmail.com> |
It would sound complicated to me to maintain a behaviour where one variable name maps to two different slots of memory. I feel the way globalVarPool and instrVarPool in csound7 is designed nicely but perhaps how it was designed in csound6 it allowed this edge case to go unnoticed. I leave to the voice of the people of csound what we want to happen here. But my view would be that redeclaring a variable name of different type should be an error. It's not only difficult to maintain ambiguity in memory but it also makes the code difficult to read and understand. On Mon, 8 Dec 2025 at 01:54, Richard Knight <[email protected]> wrote: > I'm moving to Csound 7 and some of my collection of UDOs don't work - > there are some patterns such as the one below in some files, which > caused compilation to fail with the following error: > > error: Array variable name 'Sresult' used before as a different type at > line 14 > SEMERR: Array variable name 'Sresult' used before as a different type at > line 14 > > I can see why this is happening (conflicting types of Sresult) and how > to work around, but is this expected behaviour? > Notably this seems to only occur only in opcodes and if arrays are > involved - if I move the contents of the opcode into an instr then it > works OK, and numeric/string primitives work OK in this pattern. > > > Sresult = "anything" > > opcode test1, S[], 0 > Sresult[] fillarray "t1", "t2" > xout Sresult > endop > > instr 1 > Sresult[] test1 > endin >