home *** CD-ROM | disk | FTP | other *** search
/ ftp.ee.pdx.edu / 2014.02.ftp.ee.pdx.edu.tar / ftp.ee.pdx.edu / pub / users / Harry / compilers / p10 / tst / nested.pcat < prev    next >
Text File  |  2006-02-17  |  2KB  |  75 lines

  1. (* This program tests code generation for nested functions. *)
  2.  
  3. program is
  4.     var i: integer := 0;
  5.  
  6.     procedure foo1 (a, b, c: integer) is
  7.         var x: integer := 100;
  8.         procedure foo2 (a, b, c: integer) is
  9.             var x: integer := 200;
  10.             begin
  11.                 i := 222;
  12.                 foo1 (1, 2, 3);
  13.                 foo2 (1, 2, 3);
  14.                 foo3 (1, 2, 3);
  15.                 return;
  16.             end;
  17.         procedure foo5 (a, b, c: integer) is
  18.             var x: integer := 500;
  19.             procedure foo6 (a, b, c: integer) is
  20.                 var x: integer := 600;
  21.                 begin
  22.                     i := 666;
  23.                     foo1 (1, 2, 3);
  24.                     foo5 (1, 2, 3);
  25.                     foo6 (1, 2, 3);
  26.                     return;
  27.                 end;
  28.             procedure foo7 (a, b, c: integer) is
  29.                 var x: integer := 700;
  30.                 begin
  31.                     i := 777;
  32.                     foo1 (1, 2, 3);
  33.                     foo5 (1, 2, 3);
  34.                     foo7 (1, 2, 3);
  35.                     return;
  36.                 end;
  37.             begin
  38.                 i := 555;
  39.                 foo1 (1, 2, 3);
  40.                 foo5 (1, 2, 3);
  41.                 foo3 (1, 2, 3);
  42.                 return;
  43.             end;
  44.         begin
  45.             i := 111;
  46.             return;
  47.         end;
  48.  
  49.     procedure foo3 (a, b, c: integer) is
  50.         var x: integer := 300;
  51.         procedure foo8 (a, b, c: integer) is
  52.             var x: integer := 800;
  53.             begin
  54.                 i := 888;
  55.                 foo1 (1, 2, 3);
  56.                 foo8 (1, 2, 3);
  57.                 foo3 (1, 2, 3);
  58.                 return;
  59.             end;
  60.         begin
  61.             i := 333;
  62.             return;
  63.         end;
  64.  
  65.     procedure foo4 (a, b, c: integer) is
  66.         var x: integer := 400;
  67.         begin
  68.             i := 444;
  69.             return;
  70.         end;
  71.  
  72.     begin
  73.         foo1 (1, 2, 3);
  74.     end;
  75.