This compiles, no errors:
mob/verb/test()
var/test = src?ckey :key
world << test
Does not compile, "expected ':'" error:
var/test = src?ckey:key
Compiles:
var/test = src?"[ckey]":"[key]"
Expected ':' error:
var/test = src?src:ckey:key
Compiles fine, outputs src:ckey properly.
var/test = src?src:ckey :key
From what I see, : as a path operator takes precedence before anything else, mostly due to the fact that you HAVE to put a space before or after the ternary operator's colon, where the b and c are variables/identifiers (without parenthesis - parenthesis and no space works fine all the time). otherwise, it spits out a compile-time error.
In a case with the ternary operator, I think it'd work fine if they manage to compile it.
Using the . or : operators, or (), directly after a list or proc operation is not currently supported by the DM syntax. I'm not sure I'd necessarily call it a bug (I'm on the fence) as this is a long-known limitation of the language; to me this is more of an enhancement request. But I'm also not sure that changing it won't interfere with any existing code. Mainly my concern there is that where : overlaps with the ternary operator, you can introduce ambiguous statements. If it were to be classified as a bug, I'm not sure about its fixability. Take this example:
I don't know if any code currently uses the ambiguous case; I would be unsurprised if it turned out to be true of some 4K projects, though I'm not overly worried about preserving their compilation integrity.
Mainly, I'd like to discuss this more before committing to reclassifying it as a bug. Changing this in any event is likely to prove difficult, as the parser is rather blackboxy.