home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / sa104os2.zip / SATHR104.ZIP / SATHER / COMPILER / AM_OUT.SA next >
Text File  |  1994-10-25  |  21KB  |  525 lines

  1. -- Copyright (C) International Computer Science Institute, 1994.  COPYRIGHT  --
  2. -- NOTICE: This code is provided "AS IS" WITHOUT ANY WARRANTY and is subject --
  3. -- to the terms of the SATHER LIBRARY GENERAL PUBLIC LICENSE contained in    --
  4. -- the file "Doc/License" of the Sather distribution.  The license is also   --
  5. -- available from ICSI, 1947 Center St., Suite 600, Berkeley CA 94704, USA.  --
  6. --------> Please email comments to "sather-bugs@icsi.berkeley.edu". <----------
  7.  
  8. -- am_out.sa: Print out AM representation for debugging.
  9. -------------------------------------------------------------------
  10. class AM_OUT is
  11.    -- Output AM code for debugging purposes.
  12.  
  13.    AM_out(a:$AM) is
  14.       if void(a) then #OUT + "(void($AM)) "; return end;
  15.       typecase a
  16.       when AM_OB_DEF then AM_OB_DEF_out(a)
  17.       when AM_ROUT_DEF then AM_ROUT_DEF_out(a)
  18.       when AM_ASSIGN_STMT then AM_ASSIGN_STMT_out(a)
  19.       when AM_IF_STMT then AM_IF_STMT_out(a)
  20.       when AM_LOOP_STMT then AM_LOOP_STMT_out(a)
  21.       when AM_BREAK_STMT then AM_BREAK_STMT_out(a)
  22.       when AM_RETURN_STMT then AM_RETURN_STMT_out(a)
  23.       when AM_YIELD_STMT then AM_YIELD_STMT_out(a)
  24.       when AM_CASE_STMT then AM_CASE_STMT_out(a)
  25.       when AM_TYPECASE_STMT then AM_TYPECASE_STMT_out(a)
  26.       when AM_PRE_STMT then AM_PRE_STMT_out(a)
  27.       when AM_POST_STMT then AM_POST_STMT_out(a)
  28.       when AM_INITIAL_STMT then AM_INITIAL_STMT_out(a)
  29.       when AM_ASSERT_STMT then AM_ASSERT_STMT_out(a)
  30.       when AM_INVARIANT_STMT then AM_INVARIANT_STMT_out(a)
  31.       when AM_PROTECT_STMT then AM_PROTECT_STMT_out(a)
  32.       when AM_RAISE_STMT then AM_RAISE_STMT_out(a)     
  33.       when AM_EXPR_STMT then AM_EXPR_STMT_out(a)
  34.       when AM_LOCAL_EXPR then AM_LOCAL_EXPR_out(a)
  35.       when AM_ARRAY_EXPR then AM_ARRAY_EXPR_out(a)
  36.       when AM_BND_CREATE_EXPR then AM_BND_CREATE_EXPR_out(a)
  37.       when AM_IF_EXPR then AM_IF_EXPR_out(a)
  38.       when AM_NEW_EXPR then AM_NEW_EXPR_out(a)
  39.       when AM_IS_VOID_EXPR then AM_IS_VOID_EXPR_out(a)          
  40.       when AM_GLOBAL_EXPR then AM_GLOBAL_EXPR_out(a)
  41.       when AM_ATTR_EXPR then AM_ATTR_EXPR_out(a)
  42.       when AM_ARR_EXPR then AM_ARR_EXPR_out(a)
  43.       when AM_VATTR_ASSIGN_EXPR then AM_VATTR_ASSIGN_EXPR_out(a)
  44.       when AM_VARR_ASSIGN_EXPR then AM_VARR_ASSIGN_EXPR_out(a)          
  45.       when AM_EXCEPT_EXPR then AM_EXCEPT_EXPR_out(a)          
  46.       when AM_STMT_EXPR then AM_STMT_EXPR_out(a)          
  47.       when AM_ROUT_CALL_EXPR then AM_ROUT_CALL_EXPR_out(a)
  48.       when AM_ITER_CALL_EXPR then AM_ITER_CALL_EXPR_out(a)
  49.       when AM_BND_ROUT_CALL_EXPR then AM_BND_ROUT_CALL_EXPR_out(a)
  50.       when AM_BND_ITER_CALL_EXPR then AM_BND_ITER_CALL_EXPR_out(a)
  51.       when AM_EXT_CALL_EXPR then AM_EXT_CALL_EXPR_out(a)
  52.       when AM_VOID_CONST then AM_VOID_CONST_out(a)
  53.       when AM_ARR_CONST then AM_ARR_CONST_out(a)
  54.       when AM_BOOL_CONST then AM_BOOL_CONST_out(a)
  55.       when AM_CHAR_CONST then AM_CHAR_CONST_out(a)
  56.       when AM_STR_CONST then AM_STR_CONST_out(a)
  57.       when AM_INT_CONST then AM_INT_CONST_out(a)
  58.       when AM_INTI_CONST then AM_INTI_CONST_out(a)
  59.       when AM_FLT_CONST then AM_FLT_CONST_out(a)
  60.       when AM_FLTD_CONST then AM_FLTD_CONST_out(a)
  61.       when AM_FLTX_CONST then AM_FLTX_CONST_out(a)
  62.       when AM_FLTDX_CONST then AM_FLTDX_CONST_out(a)
  63.       when AM_FLTI_CONST then AM_FLTI_CONST_out(a)
  64.       end end;
  65.    
  66.    AM_STMT_out(a:$AM_STMT) is
  67.       if void(a) then #OUT + "(void($AM_STMT)) "; return end;
  68.       #OUT + "(";
  69.       typecase a
  70.       when AM_ASSIGN_STMT then AM_ASSIGN_STMT_out(a)
  71.       when AM_IF_STMT then AM_IF_STMT_out(a)
  72.       when AM_LOOP_STMT then AM_LOOP_STMT_out(a)
  73.       when AM_BREAK_STMT then AM_BREAK_STMT_out(a)
  74.       when AM_RETURN_STMT then AM_RETURN_STMT_out(a)
  75.       when AM_YIELD_STMT then AM_YIELD_STMT_out(a)
  76.       when AM_CASE_STMT then AM_CASE_STMT_out(a)
  77.       when AM_TYPECASE_STMT then AM_TYPECASE_STMT_out(a)
  78.       when AM_PRE_STMT then AM_PRE_STMT_out(a)
  79.       when AM_POST_STMT then AM_POST_STMT_out(a)
  80.       when AM_INITIAL_STMT then AM_INITIAL_STMT_out(a)
  81.       when AM_ASSERT_STMT then AM_ASSERT_STMT_out(a)
  82.       when AM_INVARIANT_STMT then AM_INVARIANT_STMT_out(a)
  83.       when AM_PROTECT_STMT then AM_PROTECT_STMT_out(a)
  84.       when AM_RAISE_STMT then AM_RAISE_STMT_out(a)          
  85.       when AM_EXPR_STMT then AM_EXPR_STMT_out(a)
  86.       end;
  87.       #OUT + ") ";
  88.       if ~void(a.next) then AM_STMT_out(a.next) end;
  89.    end;
  90.    
  91.    AM_EXPR_out(a:$AM_EXPR) is
  92.       if void(a) then #OUT + "(void($AM_EXPR)) "; return end;
  93.       #OUT + "(";
  94.       typecase a
  95.       when AM_LOCAL_EXPR then AM_LOCAL_EXPR_out(a)
  96.       when AM_ARRAY_EXPR then AM_ARRAY_EXPR_out(a)
  97.       when AM_BND_CREATE_EXPR then AM_BND_CREATE_EXPR_out(a)
  98.       when AM_IF_EXPR then AM_IF_EXPR_out(a)
  99.       when AM_NEW_EXPR then AM_NEW_EXPR_out(a)
  100.       when AM_IS_VOID_EXPR then AM_IS_VOID_EXPR_out(a)
  101.       when AM_GLOBAL_EXPR then AM_GLOBAL_EXPR_out(a)
  102.       when AM_ATTR_EXPR then AM_ATTR_EXPR_out(a)
  103.       when AM_ARR_EXPR then AM_ARR_EXPR_out(a)
  104.       when AM_VATTR_ASSIGN_EXPR then AM_VATTR_ASSIGN_EXPR_out(a)
  105.       when AM_VARR_ASSIGN_EXPR then AM_VARR_ASSIGN_EXPR_out(a)     
  106.       when AM_EXCEPT_EXPR then AM_EXCEPT_EXPR_out(a)          
  107.       when AM_STMT_EXPR then AM_STMT_EXPR_out(a)          
  108.       when AM_ROUT_CALL_EXPR then AM_ROUT_CALL_EXPR_out(a)
  109.       when AM_ITER_CALL_EXPR then AM_ITER_CALL_EXPR_out(a)
  110.       when AM_BND_ROUT_CALL_EXPR then AM_BND_ROUT_CALL_EXPR_out(a)
  111.       when AM_BND_ITER_CALL_EXPR then AM_BND_ITER_CALL_EXPR_out(a)
  112.       when AM_EXT_CALL_EXPR then AM_EXT_CALL_EXPR_out(a)
  113.       when AM_VOID_CONST then AM_VOID_CONST_out(a)
  114.       when AM_ARR_CONST then AM_ARR_CONST_out(a)
  115.       when AM_BOOL_CONST then AM_BOOL_CONST_out(a)
  116.       when AM_CHAR_CONST then AM_CHAR_CONST_out(a)
  117.       when AM_STR_CONST then AM_STR_CONST_out(a)
  118.       when AM_INT_CONST then AM_INT_CONST_out(a)
  119.       when AM_INTI_CONST then AM_INTI_CONST_out(a)
  120.       when AM_FLT_CONST then AM_FLT_CONST_out(a)
  121.       when AM_FLTD_CONST then AM_FLTD_CONST_out(a)
  122.       when AM_FLTX_CONST then AM_FLTX_CONST_out(a)
  123.       when AM_FLTDX_CONST then AM_FLTDX_CONST_out(a)
  124.       when AM_FLTI_CONST then AM_FLTI_CONST_out(a) end;
  125.       #OUT + ") " end;
  126.  
  127.    AM_CALL_EXPR_out(a:$AM_CALL_EXPR) is
  128.       if void(a) then #OUT + "(void($AM_CALL_EXPR)) "; return end;
  129.       #OUT + "(";      
  130.       typecase a
  131.       when AM_ROUT_CALL_EXPR then AM_ROUT_CALL_EXPR_out(a)
  132.       when AM_ITER_CALL_EXPR then AM_ITER_CALL_EXPR_out(a)
  133.       when AM_BND_ROUT_CALL_EXPR then AM_BND_ROUT_CALL_EXPR_out(a)
  134.       when AM_BND_ITER_CALL_EXPR then AM_BND_ITER_CALL_EXPR_out(a)
  135.       when AM_EXT_CALL_EXPR then AM_EXT_CALL_EXPR_out(a) end;
  136.       #OUT + ") " end;
  137.    
  138.    AM_CONST_out(a:$AM_CONST) is
  139.       if void(a) then #OUT + "(void($AM_CONST)) "; return end;
  140.       #OUT + "(";      
  141.       typecase a
  142.       when AM_VOID_CONST then AM_VOID_CONST_out(a)
  143.       when AM_ARR_CONST then AM_ARR_CONST_out(a)
  144.       when AM_BOOL_CONST then AM_BOOL_CONST_out(a)
  145.       when AM_CHAR_CONST then AM_CHAR_CONST_out(a)
  146.       when AM_STR_CONST then AM_STR_CONST_out(a)
  147.       when AM_INT_CONST then AM_INT_CONST_out(a)
  148.       when AM_INTI_CONST then AM_INTI_CONST_out(a)
  149.       when AM_FLT_CONST then AM_FLT_CONST_out(a)
  150.       when AM_FLTD_CONST then AM_FLTD_CONST_out(a)
  151.       when AM_FLTX_CONST then AM_FLTX_CONST_out(a)
  152.       when AM_FLTDX_CONST then AM_FLTDX_CONST_out(a)
  153.       when AM_FLTI_CONST then AM_FLTI_CONST_out(a) end;
  154.       #OUT + ") " end;
  155.    
  156.    AM_OB_DEF_out(a:AM_OB_DEF) is
  157.       if void(a) then #OUT + "(void(AM_OB_DEF)) "; return end;
  158.       #OUT + "(AM_OB_DEF ";
  159.       if void(a.tp) then #OUT + "void(tp) " 
  160.       else #OUT + "tp=" + a.tp.str + " " end; #OUT + "\n";
  161.       if void(a.at) then #OUT + "void(attributes)" 
  162.       else
  163.      #OUT + "attributes= ";
  164.      loop p::=a.at.pairs!;
  165.         #OUT + "(" + p.t1.str + "->" + p.t2.str + ") " end end;
  166.       #OUT + "(array type=";
  167.       if void(a.arr) then #OUT + "void" else #OUT + a.arr.str end;
  168.       #OUT + " asize=" + a.asize + ")) \n" end;
  169.    
  170.    AM_ROUT_DEF_out(a:AM_ROUT_DEF) is
  171.       if void(a) then #OUT + "(void(AM_ROUT_DEF)) "; return end;
  172.       #OUT + "(AM_ROUT_DEF= ";
  173.       if void(a.sig) then #OUT + "(void(sig))";
  174.       else #OUT + "(sig=" + a.sig.str + ") " end;
  175.       if a.is_abstract then #OUT + " is abstract)"; return end;
  176.       if a.size>1 then
  177.      #OUT + "(args=";
  178.      i:INT:=1;
  179.      loop while!(i<a.asize);
  180.         AM_LOCAL_EXPR_out(a[i]); #OUT + " ";
  181.         i:=i+1 end; 
  182.      #OUT + ") " end;
  183.       if void(a.locals) then #OUT + "(void(locals)) ";
  184.       else #OUT + "(locals=";
  185.      i:INT:=0; 
  186.      loop while!(i<a.locals.size);
  187.         AM_LOCAL_EXPR_out(a.locals[i]); #OUT + " ";
  188.         i:=i+1 end;
  189.      #OUT + ") " end;
  190.       if void(a.code) then #OUT + "(void(code)) ";
  191.       else #OUT + "(code="; AM_STMT_out(a.code) end;
  192.       #OUT + ")\n";
  193.    end;
  194.    
  195.    AM_ASSIGN_STMT_out(a:AM_ASSIGN_STMT) is
  196.       if void(a) then #OUT + "void(AM_ASSIGN_STMT)"; return end;
  197.       #OUT + "AM_ASSIGN_STMT";
  198.       #OUT + " dest="; AM_EXPR_out(a.dest); 
  199.       #OUT + " src="; AM_EXPR_out(a.src);
  200.       end;
  201.    
  202.    AM_IF_STMT_out(a:AM_IF_STMT) is
  203.       if void(a) then #OUT + "void(AM_IF_STMT)"; return end;
  204.       #OUT + "AM_IF_STMT";
  205.       #OUT + " test="; AM_EXPR_out(a.test); 
  206.       #OUT + " if_true="; AM_STMT_out(a.if_true);
  207.       #OUT + " if_false="; AM_STMT_out(a.if_false) end;
  208.    
  209.    AM_LOOP_STMT_out(a:AM_LOOP_STMT) is
  210.       if void(a) then #OUT + "void(AM_LOOP_STMT)"; return end;
  211.       #OUT + "AM_LOOP_STMT";
  212.       if a.has_yield then #OUT + " has_yield=true"
  213.       else #OUT + " has_yield=false" end;
  214.       #OUT + " body="; AM_STMT_out(a.body) end;
  215.    
  216.    AM_BREAK_STMT_out(a:AM_BREAK_STMT) is
  217.       if void(a) then #OUT + "void(AM_BREAK_STMT)"; return end;
  218.       #OUT + "AM_BREAK_STMT" end;
  219.    
  220.    AM_RETURN_STMT_out(a:AM_RETURN_STMT) is
  221.       if void(a) then #OUT + "void(AM_RETURN_STMT)"; return end;
  222.       #OUT + "AM_RETURN_STMT";
  223.       #OUT + " val="; AM_EXPR_out(a.val) end;
  224.    
  225.    AM_YIELD_STMT_out(a:AM_YIELD_STMT) is
  226.       if void(a) then #OUT + "void(AM_YIELD_STMT)"; return end;
  227.       #OUT + "AM_YIELD_STMT";
  228.       #OUT + " ret=" + a.ret; 
  229.       #OUT + " val="; AM_EXPR_out(a.val) end;
  230.    
  231.    AM_CASE_STMT_out(a:AM_CASE_STMT) is
  232.       if void(a) then #OUT + "void(AM_CASE_STMT)"; return end;
  233.       #OUT + "AM_CASE_STMT";
  234.       #OUT + " test="; AM_EXPR_out(a.test); 
  235.       #OUT + " branches=";
  236.       i:INT:=0;
  237.       loop while!(i<a.tgts.size);
  238.      #OUT + "(";
  239.      j:INT:=0;
  240.      loop while!(j<a.tgts[i].size);
  241.         AM_CONST_out(a.tgts[i][j]); #OUT + " ";
  242.         j:=j+1 end;
  243.      AM_STMT_out(a.stmts[i]);
  244.      #OUT + ")";
  245.      i:=i+1 end;
  246.       #OUT + " else_stmts="; AM_STMT_out(a.else_stmts) end;
  247.    
  248.    AM_TYPECASE_STMT_out(a:AM_TYPECASE_STMT) is
  249.       if void(a) then #OUT + "void(AM_TYPECASE_STMT)"; return end;
  250.       #OUT + "AM_TYPECASE_STMT";
  251.       #OUT + " test="; AM_LOCAL_EXPR_out(a.test); 
  252.       #OUT + " branches=";
  253.       i:INT:=0;
  254.       loop while!(i<a.tgts.size);
  255.      #OUT + "(";
  256.      #OUT + a.tgts[i].str + " ";
  257.      AM_STMT_out(a.stmts[i]);
  258.      #OUT + ")";
  259.      i:=i+1 end;
  260.       #OUT + " else_stmts="; AM_STMT_out(a.else_stmts) end;
  261.    
  262.    AM_PRE_STMT_out(a:AM_PRE_STMT) is
  263.       if void(a) then #OUT + "void(AM_PRE_STMT)"; return end;
  264.       #OUT + "AM_PRE_STMT";
  265.       #OUT + " test="; AM_EXPR_out(a.test) end;
  266.    
  267.    AM_POST_STMT_out(a:AM_POST_STMT) is
  268.       if void(a) then #OUT + "void(AM_POST_STMT)"; return end;
  269.       #OUT + "AM_POST_STMT";
  270.       #OUT + " test="; AM_EXPR_out(a.test) end;
  271.    
  272.    AM_INITIAL_STMT_out(a:AM_INITIAL_STMT) is
  273.       if void(a) then #OUT + "void(AM_INITIAL_STMT)"; return end;
  274.       #OUT + "AM_INITIAL_STMT";
  275.       #OUT + " stmts="; AM_STMT_out(a.stmts) end;
  276.    
  277.    AM_ASSERT_STMT_out(a:AM_ASSERT_STMT) is
  278.       if void(a) then #OUT + "void(AM_ASSERT_STMT)"; return end;
  279.       #OUT + "AM_ASSERT_STMT";
  280.       #OUT + " test="; AM_EXPR_out(a.test) end;
  281.    
  282.    AM_INVARIANT_STMT_out(a:AM_INVARIANT_STMT) is
  283.       if void(a) then #OUT + "void(AM_INVARIANT_STMT)"; return end;
  284.       #OUT + "AM_INVARIANT_STMT" end;
  285.    
  286.    AM_PROTECT_STMT_out(a:AM_PROTECT_STMT) is
  287.       if void(a) then #OUT + "void(AM_PROTECT_STMT)"; return end;
  288.       #OUT + "AM_PROTECT_STMT";
  289.       #OUT + " body="; AM_STMT_out(a.body); 
  290.       #OUT + " branches=";
  291.       i:INT:=0;
  292.       loop while!(i<a.tgts.size);
  293.      #OUT + "(";
  294.      #OUT + a.tgts[i].str + " ";
  295.      AM_STMT_out(a.stmts[i]);
  296.      #OUT + ")";
  297.      i:=i+1 end;
  298.       #OUT + " else_stmts="; AM_STMT_out(a.else_stmts) end;
  299.  
  300.    AM_RAISE_STMT_out(a:AM_RAISE_STMT) is
  301.       if void(a) then #OUT + "void(AM_RAISE_STMT)"; return end;
  302.       #OUT + "AM_RAISE_STMT";
  303.       #OUT + " val="; AM_EXPR_out(a.val) end;
  304.    
  305.    AM_EXPR_STMT_out(a:AM_EXPR_STMT) is
  306.       if void(a) then #OUT + "void(AM_EXPR_STMT)"; return end;
  307.       #OUT + "AM_EXPR_STMT";
  308.       #OUT + " expr="; AM_EXPR_out(a.expr) end;
  309.    
  310.    AM_LOCAL_EXPR_out(a:AM_LOCAL_EXPR) is
  311.       if void(a) then #OUT + "void((AM_LOCAL_EXPR))"; return end;
  312.       if void(a.name) and void(a.tp_at) then
  313.      #OUT + "noname:notype"
  314.       elsif void(a.name) then
  315.      #OUT + "noname:" + a.tp_at.str 
  316.       elsif void(a.tp_at) then 
  317.      #OUT + a.name.str + ":notype"
  318.       else #OUT + a.name.str + ":" + a.tp_at.str end end;     
  319.    
  320.    AM_ARRAY_EXPR_out(a:AM_ARRAY_EXPR) is
  321.       if void(a) then #OUT + "void"; return end;
  322.       #OUT + "AM_ARRAY_EXPR";
  323.       #OUT + " tp=" + a.tp_at.str; 
  324.       loop #OUT + " "; AM_EXPR_out(a.elt!) end end;
  325.    
  326.    AM_BND_CREATE_EXPR_out(a:AM_BND_CREATE_EXPR) is
  327.       if void(a) then #OUT + "void(AM_BMD_CREATE_EXPR)"; return end;      
  328.       #OUT + "AM_BMD_CREATE_EXPR";
  329.       #OUT + " args=(";
  330.       loop i::=a.ind!; 
  331.      if i/=0 then #OUT + " " end; 
  332.      AM_EXPR_out(a[i]) end;
  333.       #OUT + ")";
  334.       #OUT + " fun=" + a.fun.str; 
  335.       #OUT + " (bnd_args=";
  336.       loop j::=a.bnd_args.ind!;
  337.      if j/=0 then #OUT + " " end;      
  338.      #OUT + a.bnd_args[j] end;
  339.       #OUT + ")(unbnd_args=";
  340.       loop j::=a.unbnd_args.ind!;
  341.      if j/=0 then #OUT + " " end;      
  342.      #OUT + a.unbnd_args[j] end;
  343.       #OUT + ")";
  344.       #OUT + "tp_at=" + a.tp_at.str end;
  345.    
  346.    AM_IF_EXPR_out(a:AM_IF_EXPR) is
  347.       if void(a) then #OUT + "void(AM_IF_EXPR)"; return end;
  348.       #OUT + "AM_IF_EXPR";
  349.       #OUT + " test="; AM_EXPR_out(a.test);                   
  350.       #OUT + " if_true="; AM_EXPR_out(a.if_true);
  351.       #OUT + " if_false="; AM_EXPR_out(a.if_false) end;
  352.    
  353.    AM_NEW_EXPR_out(a:AM_NEW_EXPR) is
  354.       if void(a) then #OUT + "void(AM_NEW_EXPR)"; return end;
  355.       #OUT + "AM_NEW_EXPR";
  356.       #OUT + " asz="; AM_EXPR_out(a.asz) end;
  357.    
  358.    AM_IS_VOID_EXPR_out(a:AM_IS_VOID_EXPR) is
  359.       if void(a) then #OUT + "void(AM_IS_VOID_EXPR)"; return end;
  360.       #OUT + "AM_IS_VOID_EXPR";
  361.       #OUT + " arg="; AM_EXPR_out(a.arg) end;
  362.    
  363.    AM_GLOBAL_EXPR_out(a:AM_GLOBAL_EXPR) is
  364.       if void(a) then #OUT + "void(AM_GLOBAL_EXPR)"; return end;
  365.       #OUT + "AM_GLOBAL_EXPR";
  366.       #OUT + " name=";
  367.       if void(a.name) then #OUT + "void" else #OUT + a.name.str end;
  368.       #OUT + " tp=";
  369.       if void(a.tp_at) then #OUT + "void" else #OUT + a.tp_at.str end;
  370.       #OUT + " class_tp=";
  371.       if void(a.class_tp) then #OUT + "void" else 
  372.      #OUT + a.class_tp.str end;
  373.       #OUT + " init="; AM_EXPR_out(a.init) end;
  374.    
  375.    AM_ATTR_EXPR_out(a:AM_ATTR_EXPR) is
  376.       if void(a) then #OUT + "void(AM_ATTR_EXPR)"; return end;
  377.       #OUT + "AM_ATTR_EXPR";
  378.       #OUT + " ob="; AM_EXPR_out(a.ob);                         
  379.       #OUT + " at=" + a.at.str;
  380.       #OUT + " tp=" + a.tp_at.str end;
  381.    
  382.    AM_ARR_EXPR_out(a:AM_ARR_EXPR) is
  383.       if void(a) then #OUT + "void(AM_ARR_EXPR)"; return end;
  384.       #OUT + "AM_ARR_EXPR";
  385.       #OUT + " ob="; AM_EXPR_out(a.ob);                         
  386.       #OUT + " ind="; AM_EXPR_out(a.ind);                         
  387.       #OUT + " tp=" + a.tp_at.str end;
  388.  
  389.    AM_VATTR_ASSIGN_EXPR_out(a:AM_VATTR_ASSIGN_EXPR) is
  390.       if void(a) then #OUT + "void(AM_VATTR_EXPR)"; return end;
  391.       #OUT + "AM_VATTR_EXPR";
  392.       if void(a.ob) then #OUT + " void(ob)";            
  393.       else #OUT + " ob="; AM_EXPR_out(a.ob) end;                         
  394.       if void(a.at) then #OUT + " void(at)";
  395.       else #OUT + " at=" + a.at.str end;
  396.       if void(a.val) then #OUT + " void(val)";
  397.       else #OUT + " val="; AM_EXPR_out(a.val) end end;      
  398.  
  399.    AM_VARR_ASSIGN_EXPR_out(a:AM_VARR_ASSIGN_EXPR) is
  400.       if void(a) then #OUT + "void(AM_VARR_EXPR)"; return end;
  401.       #OUT + "AM_VARR_EXPR";
  402.       if void(a.ob) then #OUT + " void(ob)";      
  403.       else #OUT + " ob="; AM_EXPR_out(a.ob) end;                         
  404.       if void(a.ind) then #OUT + " void(ind)";
  405.       else #OUT + " ind="; AM_EXPR_out(a.ind) end;
  406.       if void(a.val) then #OUT + " void(val)";
  407.       else #OUT + " val="; AM_EXPR_out(a.val) end end;
  408.  
  409.    AM_EXCEPT_EXPR_out(a:AM_EXCEPT_EXPR) is
  410.       if void(a) then #OUT + "void(AM_EXCEPT_EXPR)"; return end;
  411.       #OUT + "AM_EXCEPT_EXPR" end;
  412.  
  413.    AM_STMT_EXPR_out(a:AM_STMT_EXPR) is
  414.       if void(a) then #OUT + "void(AM_STMT_EXPR)"; return end;
  415.       #OUT + "AM_STMT_EXPR";
  416.       if void(a.stmts) then #OUT + " void(stmts)";      
  417.       else #OUT + " stmts="; AM_STMT_out(a.stmts) end;
  418.       if void(a.expr) then #OUT + " void(expr)";
  419.       else #OUT + " expr="; AM_EXPR_out(a.expr) end end;
  420.    
  421.    AM_ROUT_CALL_EXPR_out(a:AM_ROUT_CALL_EXPR) is
  422.       if void(a) then #OUT + "void(AM_ROUT_CALL_EXPR)"; return end;
  423.       #OUT + "AM_ROUT_CALL_EXPR";
  424.       #OUT + " fun=" + a.fun.str;
  425.       #OUT + " args=";
  426.       loop AM_EXPR_out(a.elt!) end end;
  427.    
  428.    AM_ITER_CALL_EXPR_out(a:AM_ITER_CALL_EXPR) is
  429.       if void(a) then #OUT + "void(AM_ITER_CALL_EXPR)"; return end;
  430.       #OUT + "AM_ITER_CALL_EXPR";
  431.       #OUT + " fun=" + a.fun.str;
  432.       #OUT + " init="; AM_STMT_out(a.init);
  433.       #OUT + " args=";
  434.       loop AM_EXPR_out(a.elt!) end end;
  435.    
  436.    AM_BND_ROUT_CALL_EXPR_out(a:AM_BND_ROUT_CALL_EXPR) is
  437.       if void(a) then #OUT + "void(AM_BND_ROUT_CALL_EXPR)"; return end;
  438.       #OUT + "AM_BND_ROUT_CALL_EXPR";
  439.       #OUT + " br="; AM_EXPR_out(a.br);
  440.       #OUT + " args=";
  441.       loop AM_EXPR_out(a.elt!) end end;      
  442.    
  443.    AM_BND_ITER_CALL_EXPR_out(a:AM_BND_ITER_CALL_EXPR) is
  444.       if void(a) then #OUT + "void(AM_BND_ITER_CALL_EXPR)"; return end;
  445.       #OUT + "AM_BND_ITER_CALL_EXPR";
  446.       #OUT + " bi="; AM_EXPR_out(a.bi);
  447.       #OUT + " init="; AM_STMT_out(a.init);   
  448.       #OUT + " args=";
  449.       loop AM_EXPR_out(a.elt!) end end;            
  450.    
  451.    AM_EXT_CALL_EXPR_out(a:AM_EXT_CALL_EXPR) is
  452.       if void(a) then #OUT + "void(AM_EXT_CALL_EXPR)"; return end;
  453.       #OUT + "AM_EXT_CALL_EXPR";
  454.       #OUT + " fun=" + a.fun.str;
  455.       #OUT + " args=";
  456.       loop AM_EXPR_out(a.elt!) end end;            
  457.    
  458.    AM_VOID_CONST_out(a:AM_VOID_CONST) is
  459.       if void(a) then #OUT + "void(void(AM_VOID_CONST)"; return end;
  460.       #OUT + "(AM_VOID_CONST:";
  461.       if void(a.tp_at) then #OUT + "void)" else 
  462.      #OUT + a.tp_at.str + ") " end end;
  463.    
  464.    AM_ARR_CONST_out(a:AM_ARR_CONST) is
  465.       if void(a) then #OUT + "void(AM_ARR_CONST)"; return end;
  466.       #OUT + "AM_ARR_CONST";
  467.       #OUT + " elt_tp=" + a.elt_tp.str;
  468.       #OUT + " elts=";
  469.       loop AM_EXPR_out(a.elts.elt!) end end;                  
  470.    
  471.    AM_BOOL_CONST_out(a:AM_BOOL_CONST) is
  472.       if void(a) then #OUT + "void(AM_BOOL_CONST)"; return end;
  473.       #OUT + "AM_BOOL_CONST";
  474.       if a.val then #OUT + " val=true" 
  475.       else #OUT + " val=false" end end;
  476.    
  477.    AM_CHAR_CONST_out(a:AM_CHAR_CONST) is
  478.       if void(a) then #OUT + "void(AM_CHAR_CONST)"; return end;
  479.       #OUT + "AM_CHAR_CONST";
  480.       #OUT + " bval='" + a.bval + "'" end;
  481.    
  482.    AM_STR_CONST_out(a:AM_STR_CONST) is
  483.       if void(a) then #OUT + "void(AM_STR_CONST)"; return end;
  484.       #OUT + "AM_STR_CONST";
  485.       #OUT + " bval=" + a.bval end;
  486.    
  487.    AM_INT_CONST_out(a:AM_INT_CONST) is
  488.       if void(a) then #OUT + "void(AM_INT_CONST)"; return end;
  489.       #OUT + "AM_INT_CONST";
  490.       #OUT + " val=" + a.val end;
  491.    
  492.    AM_INTI_CONST_out(a:AM_INTI_CONST) is
  493.       if void(a) then #OUT + "void(AM_INTI_CONST)"; return end;
  494.       #OUT + "AM_INTI_CONST";
  495.       #OUT + " val=" +  a.val.str end;
  496.    
  497.    AM_FLT_CONST_out(a:AM_FLT_CONST) is
  498.       if void(a) then #OUT + "void(AM_FLT_CONST)"; return end;
  499.       #OUT + "AM_FLT_CONST";
  500.       #OUT + " val=" + a.val.str end;
  501.    
  502.    AM_FLTD_CONST_out(a:AM_FLTD_CONST) is
  503.       if void(a) then #OUT + "void(AM_FLTD_CONST)"; return end;
  504.       #OUT + "AM_FLTD_CONST";
  505.       #OUT + " val=" + a.val.str end;
  506.    
  507.    AM_FLTX_CONST_out(a:AM_FLTX_CONST) is
  508.       if void(a) then #OUT + "void(AM_FLTX_CONST)"; return end;
  509.       #OUT + "AM_FLTX_CONST";
  510.       #OUT + " val=" + a.val.str end;      
  511.    
  512.    AM_FLTDX_CONST_out(a:AM_FLTDX_CONST) is
  513.       if void(a) then #OUT + "void(AM_FLTDX_CONST)"; return end;
  514.       #OUT + "AM_FLTDX_CONST";
  515.       #OUT + " val=" + a.val.str end;      
  516.    
  517.    AM_FLTI_CONST_out(a:AM_FLTI_CONST) is
  518.       if void(a) then #OUT + "void(AM_FLTI_CONST)"; return end;
  519.       #OUT + "AM_FLTI_CONST";
  520.       #OUT + " val=" + a.val.str end;      
  521.    
  522. end; -- class AM_OUT
  523.  
  524. -------------------------------------------------------------------
  525.