Y-Less
Y-Less
OK, an actual MCVE: ```pawn #pragma option -a native printf(const str[], ...); stock I@ = 0, J@ = 0; main() { #if defined PP_main PP_main(); #endif } #if defined _ALS_main...
Even minimaler CVE: ```pawn stock i, j; main() { #if defined Func Func(); #endif } Func() { i = j; } ```
Just realised, this issue is evil!
Yeah, just leave it. I fixed this in a different way. Basically, just ensure callback hooks are always secretly `public`.
That's interesting... We've got a modified version of format/printf in open.mp, but since it didn't touch `%%` I'll check there. Thanks.
HAHAHA: https://github.com/pawn-lang/YSI-Includes/blob/5.x/YSI_Core/y_utils.inc#L152-L169 Good luck trying to find a general solution that always works!
The problem is backwards compatibility. It's easy to just rip everything out and start again, but then existing code doesn't work. We do try to do progressive enhancements, but even...
I just realised that this is basically https://en.m.wikipedia.org/wiki/Uniform_Function_Call_Syntax
```pawn #pragma rational Float #define this. THIS #define THIS%0(%1) %3_%0(%3:THIS_:this,%1) #define THIS_:this,) this) native Object_SetPos(Object:this, Float:x, Float:y, Float:z) = SetObjectPos; native Object:Object_Create(modelid, Float:x, Float:y, Float:z, Float:rx = 0.0, Float:ry =...
These are some very good ideas, but regardless of the implementation there's still one major issue with this idea - pre-processor function hooking just doesn't work. The defines would be...