compiler icon indicating copy to clipboard operation
compiler copied to clipboard

native operators overload can return arrays

Open YashasSamaga opened this issue 2 years ago • 2 comments

Issue description:

Native operator overloads can specify an array return type. They should have the same semantics as non-native operator overloads. The compiler fails to diagnose it.

Minimal complete verifiable example (MCVE):

This compiles:

native Float:[10]operator+(Float:a, Float:b) = 0;
main () { }

This doesn't:

Float:[10]operator-(Float:a, Float:b) { }
main () { }

Workspace Information:

  • Compiler version: 3.10.10
  • Command line arguments provided (or sampctl version): pawncc main.pwn
  • Operating System: Ubuntu 20.04

YashasSamaga avatar Oct 08 '21 08:10 YashasSamaga

This doesn't:

Float:[10]operator-(Float:a, Float:b) { }
main () { }

This is because return array sizes are only valid in new-style function declarations that start either from keyword forward, or native. For example, this code

forward Float:[10]operator-(Float:a, Float:b);
main(){ }

would compile as well.

I think the real problem here is that operators aren't actually supposed to return arrays at all, and the compiler doesn't diagnose this. Fixing this shouldn't be hard.

Daniel-Cortez avatar Oct 08 '21 15:10 Daniel-Cortez

This issue has been automatically marked as stale because it has not had recent activity.

stale[bot] avatar Jan 09 '22 03:01 stale[bot]