You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

FactorialCflow.java 1.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. public class FactorialCflow {
  2. static int fact(int i) {
  3. return (i == 0 ? 1 : i * fact(i-1));
  4. }
  5. public static void main(String args[]) {
  6. System.err.println(expect);
  7. System.err.println("---------- actual ");
  8. System.err.println(720 == fact(6) ? "pass" : "fail");
  9. }
  10. static final String expect = "---------- expect "
  11. // most-recent
  12. + "\n5-6"
  13. + "\n4-5"
  14. + "\n3-4"
  15. + "\n2-3"
  16. + "\n1-2"
  17. + "\n0-1"
  18. // top
  19. + "\n5@6"
  20. + "\n4@6"
  21. + "\n3@6"
  22. + "\n2@6"
  23. + "\n1@6"
  24. + "\n0@6"
  25. ;
  26. }
  27. aspect A {
  28. pointcut f(int i) : call(int fact(int)) && args(i);
  29. // most-recent
  30. int around(int i, final int j) : f(i) && cflowbelow(f(j)) {
  31. System.err.println(i + "-" + j);
  32. int r = proceed(i, j);
  33. return r;
  34. }
  35. // top
  36. int around(int i, final int j) : f(i)
  37. && cflowbelow(cflow(f(j)) && !cflowbelow(f(int))) {
  38. System.err.println(i + "@" + j);
  39. int r = proceed(i, j);
  40. return r;
  41. }
  42. }