member_name_alias.carbon 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // Part of the Carbon Language project, under the Apache License v2.0 with LLVM
  2. // Exceptions. See /LICENSE for license information.
  3. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. //
  5. // AUTOUPDATE
  6. // RUN: %{explorer-run}
  7. // RUN: %{explorer-run-trace}
  8. // CHECK:STDOUT: result: 0
  9. package ExplorerTest api;
  10. interface I {
  11. fn F() -> i32;
  12. fn M[self: Self]() -> i32;
  13. }
  14. class A {
  15. var n: i32;
  16. impl as I {
  17. fn F() -> i32 { return 1; }
  18. fn M[self: Self]() -> i32 { return 2; }
  19. }
  20. fn G[self: Self]() -> i32 { return 3; }
  21. }
  22. impl i32 as I {
  23. fn F() -> i32 { return 4; }
  24. fn M[self: Self]() -> i32 { return 5; }
  25. }
  26. alias IF = I.F;
  27. alias IM = I.M;
  28. alias AIF = A.(IF);
  29. alias AIM = A.(IM);
  30. alias AG = A.G;
  31. alias i32IF = i32.(IF);
  32. alias i32IM = i32.(IM);
  33. fn Main() -> i32 {
  34. var a: A = {.n = 0};
  35. if (A.(IF)() != 1) {
  36. return 1;
  37. }
  38. if (a.(IF)() != 1) {
  39. return 2;
  40. }
  41. if (a.(IM)() != 2) {
  42. return 3;
  43. }
  44. if (a.(A.(IM))() != 2) {
  45. return 4;
  46. }
  47. if (AIF() != 1) {
  48. return 5;
  49. }
  50. if (a.(AIM)() != 2) {
  51. return 6;
  52. }
  53. if (a.(AG)() != 3) {
  54. return 7;
  55. }
  56. if (i32.(IF)() != 4) {
  57. return 8;
  58. }
  59. if (0.(IF)() != 4) {
  60. return 9;
  61. }
  62. if (0.(IM)() != 5) {
  63. return 10;
  64. }
  65. if (0.(i32.(IM))() != 5) {
  66. return 11;
  67. }
  68. if (i32IF() != 4) {
  69. return 12;
  70. }
  71. if (0.(i32IM)() != 5) {
  72. return 13;
  73. }
  74. return 0;
  75. }