scopes.cvc 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. * Different shadowing concepts illustrated
  3. */
  4. extern void printInt( int val);
  5. extern void printSpaces( int num);
  6. extern void printNewlines( int num);
  7. export int main()
  8. {
  9. // this variable is going will be escaping below
  10. int a = 123;
  11. // The bir variable is an example of a local (ie non-escaped) variable
  12. int bir = a;
  13. /* A variable shadowed by an argument */
  14. void bar (int a)
  15. {
  16. a = 11111;
  17. printInt(a);
  18. printNewlines(1);
  19. }
  20. /* A variable initalized by a variable of the same name */
  21. void boz ()
  22. {
  23. int a = a;
  24. a = a + 11111;
  25. printInt(a);
  26. printNewlines(1);
  27. }
  28. /* using a in the inner function makes it an escaped variable */
  29. void biz ()
  30. {
  31. a = 55555;
  32. }
  33. bar(a);
  34. printNewlines(1);
  35. printInt(a);
  36. printNewlines(2);
  37. baz(a);
  38. printNewlines(1);
  39. printInt(a);
  40. printNewlines(2);
  41. bor(a);
  42. printNewlines(1);
  43. printInt(a);
  44. printNewlines(2);
  45. //boz(); FIXME
  46. printNewlines(1);
  47. printInt(a);
  48. printNewlines(2);
  49. printInt(bir);
  50. printNewlines(2);
  51. biz();
  52. printInt(a);
  53. printNewlines(2);
  54. printInt(bir);
  55. printNewlines(2);
  56. return 0;
  57. }
  58. /* An argument shadowed by a variable */
  59. void baz(int b){
  60. // The variable b cannot be defined in the same scope hence it is in an inner function
  61. void baz_inner(){
  62. int b = 22222;
  63. printInt(b);
  64. }
  65. baz_inner();
  66. }
  67. /* An argument shadowed by a variable */
  68. void bor(int b){
  69. void baz_inner(){
  70. void b() {
  71. printInt(33333);
  72. }
  73. b();
  74. }
  75. baz_inner();
  76. }