base_contract_function_call.sol 872 B

1234567891011121314151617181920212223242526272829
  1. abstract contract a {
  2. function foo() internal virtual returns (uint64) {
  3. return 1;
  4. }
  5. function bar() internal returns (uint64) {
  6. // since foo() is virtual, is a virtual dispatch call
  7. // when foo is called and a is a base contract of b, then foo in contract b will
  8. // be called; foo will return 2.
  9. return foo();
  10. }
  11. function bar2() internal returns (uint64) {
  12. // this explicitly says "call foo of base contract a", and dispatch is not virtual
  13. // however, if the call is written as a.foo{program_id: id_var}(), this represents
  14. // an external call to contract 'a' on Solana.
  15. return a.foo();
  16. }
  17. }
  18. contract b is a {
  19. function baz() public pure returns (uint64) {
  20. return foo();
  21. }
  22. function foo() internal pure override returns (uint64) {
  23. return 2;
  24. }
  25. }