selector_override.sol 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. contract selector {
  2. @selector([0xab, 0xcd])
  3. constructor() {}
  4. @selector([x])
  5. modifier m() {_;}
  6. @selector([1])
  7. receive() payable external {}
  8. @selector([0xabc])
  9. fallback() external {}
  10. @selector([0xab, 0xdd])
  11. function i() internal {}
  12. @selector([0xab, 0xdd])
  13. function p() private {}
  14. }
  15. contract TooLarge {
  16. @selector([1, 2, 3, 256])
  17. function get_foo() pure public returns (int) {
  18. return 102;
  19. }
  20. @selector([0x05, 0x06, 0x07, 0xab8])
  21. function get_bar() pure public returns (int) {
  22. return 105;
  23. }
  24. }
  25. // ---- Expect: diagnostics ----
  26. // error: 2:2-25: overriding selector not permitted on constructor
  27. // error: 4:2-16: overriding selector not permitted on modifier
  28. // error: 6:2-16: overriding selector not permitted on receive
  29. // error: 7:2-28: target Solana does not support receive() functions, see https://solang.readthedocs.io/en/latest/language/functions.html#fallback-and-receive-function
  30. // error: 8:2-20: overriding selector not permitted on fallback
  31. // error: 10:2-25: overriding selector only permitted on 'public' or 'external' function, not 'internal'
  32. // error: 12:2-25: overriding selector only permitted on 'public' or 'external' function, not 'private'
  33. // error: 17:25-28: value 256 does not fit into type uint8.
  34. // error: 22:34-39: value 2744 does not fit into type uint8.