In release R15, the yuqk fork introduced read only or constant identifiers. These are indicated, not with a keyword like 'const' as is used in C++, but by using a leading '_' character in the identifier name. Using leading '_' parameter names in macros marks those effective identifiers as constant / read only too. Examples -------- #declare _V99 = 22; #declare _V00 = _V99 + 1; // OK //#local _V99 = _V00 - 1; // Parse Error //#declare _V99 = _V00 - 1; // Parse Error Parse Error: Attempt to set a constant identifier already locally or globally defined. Or one which persist more globally. The identifier is: '_V99' Due the leading '_' the existing identifier can only be read. Macro Examples -------------- #macro DoWork(_Aa) //#local _Aa = _Aa + 7; // Parse Error #local _L = _Aa + 7; // OK //#declare _XYZ = 3; // Parse Error on second DoWork() call. #local _M = _L + 1; // First definition OK //#local _M = 4 + 1; // Redefine is Parse Error. #declare local._V22 = 2; // OK //#declare global._V22 = local._V22 + 20; // Parse Error. Second call. (_Aa + 7) // If just 'returning' a value, this style more // efficient and safer than creating a local variable. #end #for (I, 1, 20) #debug concat("#for (I,1,20) I = ",str(I,5,0), " Calling DoWork",str(DoWork(I),5,0),"\n") #end Parse Error: Attempt to set a constant identifier within a macro already locally defined or one which persists more globally. The identifier (or macro parameter) is: '_Aa' Due the leading '_' the existing identifier can only be read. #undef ------ #declare _V99 = 22; //#undef _V99 // Parse Error #macro DoWork(_Aa,Bb) #undef Bb // OK. undefs local parameter Bb and not calling I //#undef _Aa // Parse Error 0 #end #for (I, 1, 20) #debug concat("#for (I,1,20) I = ",str(I,5,0), " Calling DoWork",str(DoWork(I,I),5,0),"\n") #end Parse Error: Attempt to #undef a constant identifier. The identifier is: '_V99' Due the leading '_' the existing identifier can only be read. Fatal error in parser: Cannot parse input. Concerns -------- The feature, being new and experimental, may have bugs or unseen issues. Some performance impact is expected.