inc_dec.carbon 960 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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: 6
  9. // CHECK:STDOUT: 5
  10. // CHECK:STDOUT: 6
  11. // CHECK:STDOUT: 5
  12. // CHECK:STDOUT: 6
  13. // CHECK:STDOUT: 5
  14. // CHECK:STDOUT: 6
  15. // CHECK:STDOUT: 5
  16. // CHECK:STDOUT: result: 0
  17. package ExplorerTest api;
  18. class A { var n: i32; }
  19. external impl A as Inc {
  20. fn Op[addr self: Self*]() { ++self->n; }
  21. }
  22. external impl A as Dec {
  23. fn Op[addr self: Self*]() { --self->n; }
  24. }
  25. fn Main() -> i32 {
  26. var a: A = {.n = 5};
  27. ++a.n;
  28. Print("{0}", a.n);
  29. --a.n;
  30. Print("{0}", a.n);
  31. ++a;
  32. Print("{0}", a.n);
  33. --a;
  34. Print("{0}", a.n);
  35. a.n.(Inc.Op)();
  36. Print("{0}", a.n);
  37. a.n.(Dec.Op)();
  38. Print("{0}", a.n);
  39. a.(Inc.Op)();
  40. Print("{0}", a.n);
  41. a.(Dec.Op)();
  42. Print("{0}", a.n);
  43. return 0;
  44. }