scopes.cvc 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. // The function b cannot be defined in the same scope hence it is in an inner function
  70. void baz_inner(){
  71. void b() {
  72. printInt(33333);
  73. }
  74. b();
  75. }
  76. baz_inner();
  77. }
  78. /* This function is going to be shadowed by a variable in main */
  79. void bir(){
  80. printInt(3333);
  81. }