as_out.sa


Generated by gen_html_sa_files from ICSI. Contact gomes@icsi.berkeley.edu for details
 
---------------------------> Sather 1.1 source file <--------------------------
-- Copyright (C) International Computer Science Institute, 1995.  COPYRIGHT  --
-- NOTICE: This code is provided "AS IS" WITHOUT ANY WARRANTY and is subject --
-- to the terms of the SATHER LIBRARY GENERAL PUBLIC LICENSE contained in    --
-- the file "Doc/License" of the Sather distribution.  The license is also   --
-- available from ICSI, 1947 Center St., Suite 600, Berkeley CA 94704, USA.  --
--------> Please email comments to sather-bugs@icsi.berkeley.edu. <----------

-- as_out.sa: Pretty Printing of the Abstract Syntax tree representation


class AS_OUT

class AS_OUT is shared prog:PROG; private shared indent : INT; private iinc is indent := indent + 3;-- AS_OUT::indent AS_OUT::indent INT::plus end; private idec is indent := indent - 3;-- AS_OUT::indent AS_OUT::indent INT::minus end; private ind is loop indent.times!;-- AS_OUT::indent INT::times! #OUT+" ";-- OUT::create OUT::plus end; end; -- Output an AS tree for debugging purposes. AS_NODE_out(t:$AS_NODE) is if void(t) then #OUT + "$AS_NODE=void "; return end;-- OUT::create OUT::plus typecase t when AS_CLASS_DEF then AS_CLASS_DEF_out(t)-- AS_OUT::AS_CLASS_DEF_out when AS_CONST_DEF then AS_CONST_DEF_out(t)-- AS_OUT::AS_CONST_DEF_out when AS_SHARED_DEF then AS_SHARED_DEF_out(t)-- AS_OUT::AS_SHARED_DEF_out when AS_ATTR_DEF then AS_ATTR_DEF_out(t)-- AS_OUT::AS_ATTR_DEF_out when AS_ROUT_DEF then AS_ROUT_DEF_out(t)-- AS_OUT::AS_ROUT_DEF_out when AS_INCLUDE_CLAUSE then AS_INCLUDE_CLAUSE_out(t)-- AS_OUT::AS_INCLUDE_CLAUSE_out when AS_STMT_LIST then AS_STMT_LIST_out(t)-- AS_OUT::AS_STMT_LIST_out when AS_DEC_STMT then AS_DEC_STMT_out(t)-- AS_OUT::AS_DEC_STMT_out when AS_ASSIGN_STMT then AS_ASSIGN_STMT_out(t)-- AS_OUT::AS_ASSIGN_STMT_out when AS_IF_STMT then AS_IF_STMT_out(t)-- AS_OUT::AS_IF_STMT_out when AS_LOOP_STMT then AS_LOOP_STMT_out(t)-- AS_OUT::AS_LOOP_STMT_out when AS_RETURN_STMT then AS_RETURN_STMT_out(t)-- AS_OUT::AS_RETURN_STMT_out when AS_YIELD_STMT then AS_YIELD_STMT_out(t)-- AS_OUT::AS_YIELD_STMT_out when AS_QUIT_STMT then AS_QUIT_STMT_out(t)-- AS_OUT::AS_QUIT_STMT_out when AS_CASE_STMT then AS_CASE_STMT_out(t)-- AS_OUT::AS_CASE_STMT_out when AS_TYPECASE_STMT then AS_TYPECASE_STMT_out(t)-- AS_OUT::AS_TYPECASE_STMT_out when AS_ASSERT_STMT then AS_ASSERT_STMT_out(t)-- AS_OUT::AS_ASSERT_STMT_out when AS_PROTECT_STMT then AS_PROTECT_STMT_out(t)-- AS_OUT::AS_PROTECT_STMT_out when AS_RAISE_STMT then AS_RAISE_STMT_out(t)-- AS_OUT::AS_RAISE_STMT_out when AS_EXPR_STMT then AS_EXPR_STMT_out(t)-- AS_OUT::AS_EXPR_STMT_out when AS_SELF_EXPR then AS_SELF_EXPR_out(t)-- AS_OUT::AS_SELF_EXPR_out when AS_CALL_EXPR then AS_CALL_EXPR_out(t)-- AS_OUT::AS_CALL_EXPR_out when AS_VOID_EXPR then AS_VOID_EXPR_out(t)-- AS_OUT::AS_VOID_EXPR_out when AS_IS_VOID_EXPR then AS_IS_VOID_EXPR_out(t)-- AS_OUT::AS_IS_VOID_EXPR_out when AS_ARRAY_EXPR then AS_ARRAY_EXPR_out(t)-- AS_OUT::AS_ARRAY_EXPR_out when AS_CREATE_EXPR then AS_CREATE_EXPR_out(t)-- AS_OUT::AS_CREATE_EXPR_out when AS_BOUND_CREATE_EXPR then AS_BOUND_CREATE_EXPR_out(t)-- AS_OUT::AS_BOUND_CREATE_EXPR_out when AS_UNDERSCORE_ARG then AS_UNDERSCORE_ARG_out(t)-- AS_OUT::AS_UNDERSCORE_ARG_out when AS_AND_EXPR then AS_AND_EXPR_out(t)-- AS_OUT::AS_AND_EXPR_out when AS_OR_EXPR then AS_OR_EXPR_out(t)-- AS_OUT::AS_OR_EXPR_out when AS_EXCEPT_EXPR then AS_EXCEPT_EXPR_out(t)-- AS_OUT::AS_EXCEPT_EXPR_out when AS_NEW_EXPR then AS_NEW_EXPR_out(t)-- AS_OUT::AS_NEW_EXPR_out when AS_INITIAL_EXPR then AS_INITIAL_EXPR_out(t)-- AS_OUT::AS_INITIAL_EXPR_out when AS_BREAK_EXPR then AS_BREAK_EXPR_out(t)-- AS_OUT::AS_BREAK_EXPR_out when AS_RESULT_EXPR then AS_RESULT_EXPR_out(t)-- AS_OUT::AS_RESULT_EXPR_out when AS_BOOL_LIT_EXPR then AS_BOOL_LIT_EXPR_out(t)-- AS_OUT::AS_BOOL_LIT_EXPR_out when AS_CHAR_LIT_EXPR then AS_CHAR_LIT_EXPR_out(t)-- AS_OUT::AS_CHAR_LIT_EXPR_out when AS_STR_LIT_EXPR then AS_STR_LIT_EXPR_out(t)-- AS_OUT::AS_STR_LIT_EXPR_out when AS_INT_LIT_EXPR then AS_INT_LIT_EXPR_out(t)-- AS_OUT::AS_INT_LIT_EXPR_out when AS_FLT_LIT_EXPR then AS_FLT_LIT_EXPR_out(t)-- AS_OUT::AS_FLT_LIT_EXPR_out when AS_PARAM_DEC then AS_PARAM_DEC_out(t)-- AS_OUT::AS_PARAM_DEC_out when AS_TYPE_SPEC then AS_TYPE_SPEC_out(t)-- AS_OUT::AS_TYPE_SPEC_out when AS_ARG_DEC then AS_ARG_DEC_out(t)-- AS_OUT::AS_ARG_DEC_out when AS_FEAT_MOD then AS_FEAT_MOD_out(t)-- AS_OUT::AS_FEAT_MOD_out when AS_CASE_WHEN then AS_CASE_WHEN_out(t)-- AS_OUT::AS_CASE_WHEN_out when AS_TYPECASE_WHEN then AS_TYPECASE_WHEN_out(t)-- AS_OUT::AS_TYPECASE_WHEN_out when AS_PROTECT_WHEN then AS_PROTECT_WHEN_out(t)-- AS_OUT::AS_PROTECT_WHEN_out when AS_LOCK_IF_WHEN then AS_LOCK_IF_WHEN_out(t)-- AS_OUT::AS_LOCK_IF_WHEN_out when AS_PAR_STMT then AS_PAR_STMT_out(t)-- AS_OUT::AS_PAR_STMT_out when AS_INTERF_ATTACH_STMT then AS_INTERF_ATTACH_STMT_out(t)-- AS_OUT::AS_INTERF_ATTACH_STMT_out when AS_LOCK_STMT then AS_LOCK_STMT_out(t)-- AS_OUT::AS_LOCK_STMT_out when AS_UNLOCK_STMT then AS_UNLOCK_STMT_out(t)-- AS_OUT::AS_UNLOCK_STMT_out when AS_WITH_NEAR_STMT then AS_WITH_NEAR_STMT_out(t)-- AS_OUT::AS_WITH_NEAR_STMT_out when AS_ATTACH_STMT then AS_ATTACH_STMT_out(t)-- AS_OUT::AS_ATTACH_STMT_out when AS_FORK_STMT then AS_FORK_STMT_out(t)-- AS_OUT::AS_FORK_STMT_out when AS_SYNC_STMT then AS_SYNC_STMT_out(t)-- AS_OUT::AS_SYNC_STMT_out end end; AS_CLASS_ELT_out(t:$AS_CLASS_ELT) is if void(t) then return end; typecase t when AS_CONST_DEF then AS_CONST_DEF_out(t)-- AS_OUT::AS_CONST_DEF_out when AS_SHARED_DEF then AS_SHARED_DEF_out(t)-- AS_OUT::AS_SHARED_DEF_out when AS_ATTR_DEF then AS_ATTR_DEF_out(t)-- AS_OUT::AS_ATTR_DEF_out when AS_ROUT_DEF then AS_ROUT_DEF_out(t)-- AS_OUT::AS_ROUT_DEF_out when AS_INCLUDE_CLAUSE then AS_INCLUDE_CLAUSE_out(t) -- AS_OUT::AS_INCLUDE_CLAUSE_out end end; AS_STMT_LIST_out(t:AS_STMT_LIST) is if void(t) then return end; AS_STMT_out(t.stmts);-- AS_OUT::AS_STMT_out AS_STMT_LIST::stmts end; AS_STMT_out(t:$AS_STMT) is if void(t) then return end; if void(t.surr_stmt_list) then #OUT+"void surr_ptr" end;-- OUT::create OUT::plus typecase t when AS_DEC_STMT then AS_DEC_STMT_out(t)-- AS_OUT::AS_DEC_STMT_out when AS_ASSIGN_STMT then AS_ASSIGN_STMT_out(t)-- AS_OUT::AS_ASSIGN_STMT_out when AS_IF_STMT then AS_IF_STMT_out(t)-- AS_OUT::AS_IF_STMT_out when AS_LOOP_STMT then AS_LOOP_STMT_out(t)-- AS_OUT::AS_LOOP_STMT_out when AS_RETURN_STMT then AS_RETURN_STMT_out(t)-- AS_OUT::AS_RETURN_STMT_out when AS_YIELD_STMT then AS_YIELD_STMT_out(t)-- AS_OUT::AS_YIELD_STMT_out when AS_QUIT_STMT then AS_QUIT_STMT_out(t)-- AS_OUT::AS_QUIT_STMT_out when AS_CASE_STMT then AS_CASE_STMT_out(t)-- AS_OUT::AS_CASE_STMT_out when AS_TYPECASE_STMT then AS_TYPECASE_STMT_out(t)-- AS_OUT::AS_TYPECASE_STMT_out when AS_ASSERT_STMT then AS_ASSERT_STMT_out(t)-- AS_OUT::AS_ASSERT_STMT_out when AS_PROTECT_STMT then AS_PROTECT_STMT_out(t)-- AS_OUT::AS_PROTECT_STMT_out when AS_RAISE_STMT then AS_RAISE_STMT_out(t)-- AS_OUT::AS_RAISE_STMT_out when AS_EXPR_STMT then AS_EXPR_STMT_out(t) -- AS_OUT::AS_EXPR_STMT_out --pSather when AS_PAR_STMT then AS_PAR_STMT_out(t)-- AS_OUT::AS_PAR_STMT_out when AS_INTERF_ATTACH_STMT then AS_INTERF_ATTACH_STMT_out(t)-- AS_OUT::AS_INTERF_ATTACH_STMT_out when AS_LOCK_STMT then AS_LOCK_STMT_out(t)-- AS_OUT::AS_LOCK_STMT_out when AS_UNLOCK_STMT then AS_UNLOCK_STMT_out(t)-- AS_OUT::AS_UNLOCK_STMT_out when AS_WITH_NEAR_STMT then AS_WITH_NEAR_STMT_out(t)-- AS_OUT::AS_WITH_NEAR_STMT_out when AS_ATTACH_STMT then AS_ATTACH_STMT_out(t)-- AS_OUT::AS_ATTACH_STMT_out when AS_FORK_STMT then AS_FORK_STMT_out(t)-- AS_OUT::AS_FORK_STMT_out when AS_SYNC_STMT then AS_SYNC_STMT_out(t)-- AS_OUT::AS_SYNC_STMT_out end; if ~void(t.next) then-- BOOL::not AS_STMT_out(t.next);-- AS_OUT::AS_STMT_out end; end; AS_EXPR_out(t:$AS_EXPR) is if void(t) then #OUT + "$AS_EXPR=void"; return end;-- OUT::create OUT::plus typecase t when AS_SELF_EXPR then AS_SELF_EXPR_out(t)-- AS_OUT::AS_SELF_EXPR_out when AS_CALL_EXPR then AS_CALL_EXPR_out(t)-- AS_OUT::AS_CALL_EXPR_out when AS_VOID_EXPR then AS_VOID_EXPR_out(t)-- AS_OUT::AS_VOID_EXPR_out when AS_IS_VOID_EXPR then AS_IS_VOID_EXPR_out(t)-- AS_OUT::AS_IS_VOID_EXPR_out when AS_ARRAY_EXPR then AS_ARRAY_EXPR_out(t)-- AS_OUT::AS_ARRAY_EXPR_out when AS_CREATE_EXPR then AS_CREATE_EXPR_out(t)-- AS_OUT::AS_CREATE_EXPR_out when AS_BOUND_CREATE_EXPR then AS_BOUND_CREATE_EXPR_out(t)-- AS_OUT::AS_BOUND_CREATE_EXPR_out when AS_UNDERSCORE_ARG then AS_UNDERSCORE_ARG_out(t)-- AS_OUT::AS_UNDERSCORE_ARG_out when AS_AND_EXPR then AS_AND_EXPR_out(t)-- AS_OUT::AS_AND_EXPR_out when AS_OR_EXPR then AS_OR_EXPR_out(t)-- AS_OUT::AS_OR_EXPR_out when AS_EXCEPT_EXPR then AS_EXCEPT_EXPR_out(t)-- AS_OUT::AS_EXCEPT_EXPR_out when AS_NEW_EXPR then AS_NEW_EXPR_out(t)-- AS_OUT::AS_NEW_EXPR_out when AS_INITIAL_EXPR then AS_INITIAL_EXPR_out(t)-- AS_OUT::AS_INITIAL_EXPR_out when AS_BREAK_EXPR then AS_BREAK_EXPR_out(t)-- AS_OUT::AS_BREAK_EXPR_out when AS_RESULT_EXPR then AS_RESULT_EXPR_out(t)-- AS_OUT::AS_RESULT_EXPR_out when AS_BOOL_LIT_EXPR then AS_BOOL_LIT_EXPR_out(t)-- AS_OUT::AS_BOOL_LIT_EXPR_out when AS_CHAR_LIT_EXPR then AS_CHAR_LIT_EXPR_out(t)-- AS_OUT::AS_CHAR_LIT_EXPR_out when AS_STR_LIT_EXPR then AS_STR_LIT_EXPR_out(t)-- AS_OUT::AS_STR_LIT_EXPR_out when AS_INT_LIT_EXPR then AS_INT_LIT_EXPR_out(t)-- AS_OUT::AS_INT_LIT_EXPR_out when AS_FLT_LIT_EXPR then AS_FLT_LIT_EXPR_out(t) -- AS_OUT::AS_FLT_LIT_EXPR_out -- pSather when AS_HERE_EXPR then AS_HERE_EXPR_out(t)-- AS_OUT::AS_HERE_EXPR_out when AS_ANY_EXPR then AS_ANY_EXPR_out(t)-- AS_OUT::AS_ANY_EXPR_out when AS_WHERE_EXPR then AS_WHERE_EXPR_out(t)-- AS_OUT::AS_WHERE_EXPR_out when AS_NEAR_EXPR then AS_NEAR_EXPR_out(t)-- AS_OUT::AS_NEAR_EXPR_out when AS_FAR_EXPR then AS_FAR_EXPR_out(t)-- AS_OUT::AS_FAR_EXPR_out when AS_AT_EXPR then AS_AT_EXPR_out(t)-- AS_OUT::AS_AT_EXPR_out when AS_CLUSTER_EXPR then AS_CLUSTER_EXPR_out(t)-- AS_OUT::AS_CLUSTER_EXPR_out when AS_CLUSTER_SIZE_EXPR then AS_CLUSTER_SIZE_EXPR_out(t) -- AS_OUT::AS_CLUSTER_SIZE_EXPR_out when AS_COHORT_EXPR then AS_COHORT_EXPR_out(t)-- AS_OUT::AS_COHORT_EXPR_out end; if ~void(t.next) then-- BOOL::not #OUT+", ";-- OUT::create OUT::plus AS_EXPR_out(t.next);-- AS_OUT::AS_EXPR_out end; end; AS_MODE_EXPR_out(m: AS_ARG_MODE, t:$AS_EXPR) is if void(t) then #OUT + "$AS_EXPR=void"; return end;-- OUT::create OUT::plus AS_MODE_out(m);-- AS_OUT::AS_MODE_out typecase t when AS_SELF_EXPR then AS_SELF_EXPR_out(t)-- AS_OUT::AS_SELF_EXPR_out when AS_CALL_EXPR then AS_CALL_EXPR_out(t)-- AS_OUT::AS_CALL_EXPR_out when AS_VOID_EXPR then AS_VOID_EXPR_out(t)-- AS_OUT::AS_VOID_EXPR_out when AS_IS_VOID_EXPR then AS_IS_VOID_EXPR_out(t)-- AS_OUT::AS_IS_VOID_EXPR_out when AS_ARRAY_EXPR then AS_ARRAY_EXPR_out(t)-- AS_OUT::AS_ARRAY_EXPR_out when AS_CREATE_EXPR then AS_CREATE_EXPR_out(t)-- AS_OUT::AS_CREATE_EXPR_out when AS_BOUND_CREATE_EXPR then AS_BOUND_CREATE_EXPR_out(t)-- AS_OUT::AS_BOUND_CREATE_EXPR_out when AS_UNDERSCORE_ARG then AS_UNDERSCORE_ARG_out(t)-- AS_OUT::AS_UNDERSCORE_ARG_out when AS_AND_EXPR then AS_AND_EXPR_out(t)-- AS_OUT::AS_AND_EXPR_out when AS_OR_EXPR then AS_OR_EXPR_out(t)-- AS_OUT::AS_OR_EXPR_out when AS_EXCEPT_EXPR then AS_EXCEPT_EXPR_out(t)-- AS_OUT::AS_EXCEPT_EXPR_out when AS_NEW_EXPR then AS_NEW_EXPR_out(t)-- AS_OUT::AS_NEW_EXPR_out when AS_INITIAL_EXPR then AS_INITIAL_EXPR_out(t)-- AS_OUT::AS_INITIAL_EXPR_out when AS_BREAK_EXPR then AS_BREAK_EXPR_out(t)-- AS_OUT::AS_BREAK_EXPR_out when AS_RESULT_EXPR then AS_RESULT_EXPR_out(t)-- AS_OUT::AS_RESULT_EXPR_out when AS_BOOL_LIT_EXPR then AS_BOOL_LIT_EXPR_out(t)-- AS_OUT::AS_BOOL_LIT_EXPR_out when AS_CHAR_LIT_EXPR then AS_CHAR_LIT_EXPR_out(t)-- AS_OUT::AS_CHAR_LIT_EXPR_out when AS_STR_LIT_EXPR then AS_STR_LIT_EXPR_out(t)-- AS_OUT::AS_STR_LIT_EXPR_out when AS_INT_LIT_EXPR then AS_INT_LIT_EXPR_out(t)-- AS_OUT::AS_INT_LIT_EXPR_out when AS_FLT_LIT_EXPR then AS_FLT_LIT_EXPR_out(t) -- AS_OUT::AS_FLT_LIT_EXPR_out -- pSather when AS_HERE_EXPR then AS_HERE_EXPR_out(t)-- AS_OUT::AS_HERE_EXPR_out when AS_ANY_EXPR then AS_ANY_EXPR_out(t)-- AS_OUT::AS_ANY_EXPR_out when AS_WHERE_EXPR then AS_WHERE_EXPR_out(t)-- AS_OUT::AS_WHERE_EXPR_out when AS_NEAR_EXPR then AS_NEAR_EXPR_out(t)-- AS_OUT::AS_NEAR_EXPR_out when AS_FAR_EXPR then AS_FAR_EXPR_out(t)-- AS_OUT::AS_FAR_EXPR_out when AS_AT_EXPR then AS_AT_EXPR_out(t)-- AS_OUT::AS_AT_EXPR_out when AS_CLUSTER_EXPR then AS_CLUSTER_EXPR_out(t)-- AS_OUT::AS_CLUSTER_EXPR_out when AS_CLUSTER_SIZE_EXPR then AS_CLUSTER_SIZE_EXPR_out(t) -- AS_OUT::AS_CLUSTER_SIZE_EXPR_out when AS_COHORT_EXPR then AS_COHORT_EXPR_out(t)-- AS_OUT::AS_COHORT_EXPR_out end; if ~void(t.next) then-- BOOL::not #OUT+", ";-- OUT::create OUT::plus AS_MODE_EXPR_out(m.next, t.next);-- AS_OUT::AS_MODE_EXPR_out AS_ARG_MODE::next end; end; AS_CLASS_DEF_out(t:AS_CLASS_DEF) is indent := 0;-- AS_OUT::indent if void(t) then #OUT + "AS_CLASS_DEF=void\n\n"; return end;-- OUT::create OUT::plus case t.kind-- AS_CLASS_DEF::kind when t.imm then #OUT + "immutable class ";-- AS_CLASS_DEF::imm OUT::create OUT::plus when t.ref then #OUT + "class "-- AS_CLASS_DEF::ref OUT::create when t.abs then #OUT + "type ";-- OUT::plus AS_CLASS_DEF::abs OUT::create OUT::plus when t.c_ext then #OUT + "external C class " -- AS_CLASS_DEF::c_ext OUT::create when t.fortran_ext then #OUT + "external FORTRAN class " -- OUT::plus AS_CLASS_DEF::fortran_ext OUT::create when t.spr then #OUT + "spread class "-- OUT::plus AS_CLASS_DEF::spr OUT::create end; -- OUT::plus #OUT + withoutunder(t.name.str.upper) + ' ';-- OUT::create OUT::plus AS_OUT::withoutunder AS_CLASS_DEF::name IDENT::str STR::upper OUT::plus if ~void(t.params) then-- AS_CLASS_DEF::params BOOL::not #OUT+"{";-- OUT::create OUT::plus AS_PARAM_DEC_out(t.params);-- AS_OUT::AS_PARAM_DEC_out AS_CLASS_DEF::params #OUT+"}";-- OUT::create OUT::plus end; if ~void(t.under) then -- AS_CLASS_DEF::under BOOL::not #OUT+" < ";-- OUT::create OUT::plus AS_TYPE_SPEC_out(t.under);-- AS_OUT::AS_TYPE_SPEC_out AS_CLASS_DEF::under end; if ~void(t.over) then -- AS_CLASS_DEF::over BOOL::not #OUT+" > ";-- OUT::create OUT::plus AS_TYPE_SPEC_out(t.over);-- AS_OUT::AS_TYPE_SPEC_out AS_CLASS_DEF::over end; #OUT+" is \n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_CLASS_ELT_out(t.body);-- AS_OUT::AS_CLASS_ELT_out AS_CLASS_DEF::body #OUT+"end; -- of " + withoutunder(t.name.str.upper) + "\n";-- OUT::create OUT::plus OUT::plus AS_OUT::withoutunder AS_CLASS_DEF::name IDENT::str STR::upper OUT::plus end; AS_CONST_DEF_out(t:AS_CONST_DEF) is if void(t) then #OUT + "AS_CONST_DEF=void\n\n"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind if t.is_private then #OUT+"private "; end;-- AS_CONST_DEF::is_private OUT::create OUT::plus #OUT+"const "+withoutunder(t.name.str)+' ';-- OUT::create OUT::plus OUT::plus AS_OUT::withoutunder AS_CONST_DEF::name IDENT::str OUT::plus if ~void(t.tp) then-- AS_CONST_DEF::tp BOOL::not #OUT+": ";-- OUT::create OUT::plus AS_TYPE_SPEC_out(t.tp);-- AS_OUT::AS_TYPE_SPEC_out AS_CONST_DEF::tp end; if ~void(t.init) then-- AS_CONST_DEF::init BOOL::not #OUT+":= ";-- OUT::create OUT::plus AS_EXPR_out(t.init);-- AS_OUT::AS_EXPR_out AS_CONST_DEF::init end; #OUT+";\n";-- OUT::create OUT::plus if ~void(t.next) then AS_CLASS_ELT_out(t.next) end;-- AS_CONST_DEF::next BOOL::not AS_OUT::AS_CLASS_ELT_out AS_CONST_DEF::next end; AS_SHARED_DEF_out(t:AS_SHARED_DEF) is if void(t) then #OUT + "AS_SHARED_DEF=void\n\n"; return end;-- OUT::create OUT::plus ind;-- AS_OUT::ind if t.is_private then #OUT+"private "; end;-- AS_SHARED_DEF::is_private OUT::create OUT::plus if t.is_readonly then #OUT+"readonly "; end;-- AS_SHARED_DEF::is_readonly OUT::create OUT::plus #OUT+"shared "+withoutunder(t.name.str)+' ';-- OUT::create OUT::plus OUT::plus AS_OUT::withoutunder AS_SHARED_DEF::name IDENT::str OUT::plus if ~void(t.tp) then-- AS_SHARED_DEF::tp BOOL::not #OUT+": ";-- OUT::create OUT::plus AS_TYPE_SPEC_out(t.tp);-- AS_OUT::AS_TYPE_SPEC_out AS_SHARED_DEF::tp end; if ~void(t.init) then-- AS_SHARED_DEF::init BOOL::not #OUT+":= ";-- OUT::create OUT::plus end; #OUT+";\n";-- OUT::create OUT::plus if ~void(t.next) then AS_CLASS_ELT_out(t.next) end;-- AS_SHARED_DEF::next BOOL::not AS_OUT::AS_CLASS_ELT_out AS_SHARED_DEF::next end; AS_ATTR_DEF_out(t:AS_ATTR_DEF) is if void(t) then #OUT + "AS_ATTR_DEF=void\n\n"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind if t.is_private then #OUT+"private "; end;-- AS_ATTR_DEF::is_private OUT::create OUT::plus if t.is_readonly then #OUT+"readonly "; end;-- AS_ATTR_DEF::is_readonly OUT::create OUT::plus #OUT+"attr "+withoutunder(t.name.str)+' ';-- OUT::create OUT::plus OUT::plus AS_OUT::withoutunder AS_ATTR_DEF::name IDENT::str OUT::plus if ~void(t.tp) then-- AS_ATTR_DEF::tp BOOL::not #OUT+": ";-- OUT::create OUT::plus AS_TYPE_SPEC_out(t.tp);-- AS_OUT::AS_TYPE_SPEC_out AS_ATTR_DEF::tp end; #OUT+";\n";-- OUT::create OUT::plus if ~void(t.next) then AS_CLASS_ELT_out(t.next) end;-- AS_ATTR_DEF::next BOOL::not AS_OUT::AS_CLASS_ELT_out AS_ATTR_DEF::next end; AS_ROUT_DEF_out(t:AS_ROUT_DEF) is if void(t) then #OUT + "AS_ROUT_DEF=void\n\n"; return end; -- OUT::create OUT::plus ind; -- AS_OUT::ind if t.is_private then #OUT+"private "; end;-- AS_ROUT_DEF::is_private OUT::create OUT::plus #OUT+withoutunder(t.name.str)+' ';-- OUT::create OUT::plus AS_OUT::withoutunder AS_ROUT_DEF::name IDENT::str OUT::plus if ~void(t.args_dec) then-- AS_ROUT_DEF::args_dec BOOL::not #OUT+"(";-- OUT::create OUT::plus AS_ARG_DEC_out(t.args_dec);-- AS_OUT::AS_ARG_DEC_out AS_ROUT_DEF::args_dec #OUT+")";-- OUT::create OUT::plus end; if ~void(t.ret_dec) then-- AS_ROUT_DEF::ret_dec BOOL::not #OUT+": ";-- OUT::create OUT::plus AS_TYPE_SPEC_out(t.ret_dec);-- AS_OUT::AS_TYPE_SPEC_out AS_ROUT_DEF::ret_dec if ~void(t.pre_e) or ~void(t.post_e) then #OUT+"\n";ind; end;-- AS_ROUT_DEF::pre_e BOOL::not AS_ROUT_DEF::post_e BOOL::not OUT::create OUT::plus AS_OUT::ind end; if ~void(t.pre_e) then-- AS_ROUT_DEF::pre_e BOOL::not #OUT+"pre ";-- OUT::create OUT::plus AS_EXPR_out(t.pre_e);-- AS_OUT::AS_EXPR_out AS_ROUT_DEF::pre_e #OUT+"\n";ind;-- OUT::create OUT::plus AS_OUT::ind end; if ~void(t.post_e) then-- AS_ROUT_DEF::post_e BOOL::not #OUT+"post ";-- OUT::create OUT::plus AS_EXPR_out(t.post_e);-- AS_OUT::AS_EXPR_out AS_ROUT_DEF::post_e #OUT+"\n";ind;-- OUT::create OUT::plus AS_OUT::ind end; if t.is_abstract then -- AS_ROUT_DEF::is_abstract #OUT+";\n";-- OUT::create OUT::plus elsif t.is_builtin then-- AS_ROUT_DEF::is_builtin #OUT+"builtin "+t.builtin_name.str+";\n";-- OUT::create OUT::plus OUT::plus AS_ROUT_DEF::builtin_name IDENT::str OUT::plus else #OUT+" is\n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_STMT_LIST_out(t.body);-- AS_OUT::AS_STMT_LIST_out AS_ROUT_DEF::body idec;-- AS_OUT::idec ind;-- AS_OUT::ind #OUT+"end; -- of "+withoutunder(t.name.str)+"\n";-- OUT::create OUT::plus OUT::plus AS_OUT::withoutunder AS_ROUT_DEF::name IDENT::str OUT::plus end; if ~void(t.next) then AS_CLASS_ELT_out(t.next) end -- AS_ROUT_DEF::next BOOL::not AS_OUT::AS_CLASS_ELT_out AS_ROUT_DEF::next end; AS_INCLUDE_CLAUSE_out(t:AS_INCLUDE_CLAUSE) is if void(t) then #OUT + "AS_INCLUDE_CLAUSE=void\n\n"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind if t.is_private then #OUT+"private "; end;-- AS_INCLUDE_CLAUSE::is_private OUT::create OUT::plus #OUT+"include "; -- OUT::create OUT::plus AS_TYPE_SPEC_out(t.tp);-- AS_OUT::AS_TYPE_SPEC_out AS_INCLUDE_CLAUSE::tp if ~void(t.mods) then-- AS_INCLUDE_CLAUSE::mods BOOL::not #OUT+"\n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_FEAT_MOD_out(t.mods);-- AS_OUT::AS_FEAT_MOD_out AS_INCLUDE_CLAUSE::mods end; #OUT+";\n";-- OUT::create OUT::plus if ~void(t.mods) then-- AS_INCLUDE_CLAUSE::mods BOOL::not idec;-- AS_OUT::idec end; if ~void(t.next) then AS_CLASS_ELT_out(t.next) end -- AS_INCLUDE_CLAUSE::next BOOL::not AS_OUT::AS_CLASS_ELT_out AS_INCLUDE_CLAUSE::next end; AS_DEC_STMT_out(t:AS_DEC_STMT) is if void(t) then #OUT + "void"; return end;-- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+withoutunder(t.name.str)+": ";-- OUT::create OUT::plus AS_OUT::withoutunder AS_DEC_STMT::name IDENT::str OUT::plus AS_TYPE_SPEC_out(t.tp);-- AS_OUT::AS_TYPE_SPEC_out AS_DEC_STMT::tp #OUT+";\n"; -- OUT::create OUT::plus end; AS_ASSIGN_STMT_out(t:AS_ASSIGN_STMT) is if void(t) then #OUT + "void"; return end;-- OUT::create OUT::plus ind; -- AS_OUT::ind if ~void(t.lhs_expr) then-- AS_ASSIGN_STMT::lhs_expr BOOL::not AS_EXPR_out(t.lhs_expr);-- AS_OUT::AS_EXPR_out AS_ASSIGN_STMT::lhs_expr else #OUT+withoutunder(t.name.str);-- OUT::create OUT::plus AS_OUT::withoutunder AS_ASSIGN_STMT::name IDENT::str #OUT+":";-- OUT::create OUT::plus end; if ~void(t.tp) then-- AS_ASSIGN_STMT::tp BOOL::not AS_TYPE_SPEC_out(t.tp);-- AS_OUT::AS_TYPE_SPEC_out AS_ASSIGN_STMT::tp end; #OUT+":=";-- OUT::create OUT::plus AS_EXPR_out(t.rhs);-- AS_OUT::AS_EXPR_out AS_ASSIGN_STMT::rhs #OUT+";\n";-- OUT::create OUT::plus end; AS_IF_STMT_out(t:AS_IF_STMT) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"if ";-- OUT::create OUT::plus AS_EXPR_out(t.test);-- AS_OUT::AS_EXPR_out AS_IF_STMT::test #OUT+" then\n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_STMT_LIST_out(t.then_part);-- AS_OUT::AS_STMT_LIST_out AS_IF_STMT::then_part idec;-- AS_OUT::idec if ~void(t.else_part) then-- AS_IF_STMT::else_part BOOL::not ind;-- AS_OUT::ind #OUT+"else\n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_STMT_LIST_out(t.else_part);-- AS_OUT::AS_STMT_LIST_out AS_IF_STMT::else_part idec;-- AS_OUT::idec end; ind;-- AS_OUT::ind #OUT+"end; -- of if\n";-- OUT::create OUT::plus end; AS_LOOP_STMT_out(t:AS_LOOP_STMT) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"loop\n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_STMT_LIST_out(t.body);-- AS_OUT::AS_STMT_LIST_out AS_LOOP_STMT::body idec; ind;-- AS_OUT::idec AS_OUT::ind #OUT+"end; -- of loop\n";-- OUT::create OUT::plus end; AS_RETURN_STMT_out(t:AS_RETURN_STMT) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"return ";-- OUT::create OUT::plus if ~void(t.val) then-- AS_RETURN_STMT::val BOOL::not AS_EXPR_out(t.val);-- AS_OUT::AS_EXPR_out AS_RETURN_STMT::val end; #OUT+";\n";-- OUT::create OUT::plus end; AS_YIELD_STMT_out(t:AS_YIELD_STMT) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"yield ";-- OUT::create OUT::plus if ~void(t.val) then-- AS_YIELD_STMT::val BOOL::not AS_EXPR_out(t.val);-- AS_OUT::AS_EXPR_out AS_YIELD_STMT::val end; #OUT+";\n";-- OUT::create OUT::plus end; AS_QUIT_STMT_out(t:AS_QUIT_STMT) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"quit;\n";-- OUT::create OUT::plus end; AS_CASE_STMT_out(t:AS_CASE_STMT) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"case ";-- OUT::create OUT::plus AS_EXPR_out(t.test);-- AS_OUT::AS_EXPR_out AS_CASE_STMT::test #OUT+"\n";-- OUT::create OUT::plus if ~void(t.when_part) then-- AS_CASE_STMT::when_part BOOL::not AS_CASE_WHEN_out(t.when_part);-- AS_OUT::AS_CASE_WHEN_out AS_CASE_STMT::when_part end; if ~t.no_else then-- AS_CASE_STMT::no_else BOOL::not ind;-- AS_OUT::ind #OUT+"else\n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_STMT_LIST_out(t.else_part);-- AS_OUT::AS_STMT_LIST_out AS_CASE_STMT::else_part idec;-- AS_OUT::idec end; ind;-- AS_OUT::ind #OUT+"end; -- of case\n";-- OUT::create OUT::plus end; AS_TYPECASE_STMT_out(t:AS_TYPECASE_STMT) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"typecase "+withoutunder(t.name.str)+"\n";-- OUT::create OUT::plus OUT::plus AS_OUT::withoutunder AS_TYPECASE_STMT::name IDENT::str OUT::plus if ~void(t.when_part) then-- AS_TYPECASE_STMT::when_part BOOL::not AS_TYPECASE_WHEN_out(t.when_part);-- AS_OUT::AS_TYPECASE_WHEN_out AS_TYPECASE_STMT::when_part end; if ~t.no_else then-- AS_TYPECASE_STMT::no_else BOOL::not ind;-- AS_OUT::ind #OUT+"else\n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_STMT_LIST_out(t.else_part);-- AS_OUT::AS_STMT_LIST_out AS_TYPECASE_STMT::else_part idec;-- AS_OUT::idec end; ind;-- AS_OUT::ind #OUT+"end; -- of typecase\n";-- OUT::create OUT::plus end; AS_ASSERT_STMT_out(t:AS_ASSERT_STMT) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"assert ";-- OUT::create OUT::plus AS_EXPR_out(t.test);-- AS_OUT::AS_EXPR_out AS_ASSERT_STMT::test #OUT+";\n";-- OUT::create OUT::plus end; AS_PROTECT_STMT_out(t:AS_PROTECT_STMT) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"protect\n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_STMT_LIST_out(t.body);-- AS_OUT::AS_STMT_LIST_out AS_PROTECT_STMT::body idec;-- AS_OUT::idec if ~void(t.when_part) then-- AS_PROTECT_STMT::when_part BOOL::not AS_PROTECT_WHEN_out(t.when_part);-- AS_OUT::AS_PROTECT_WHEN_out AS_PROTECT_STMT::when_part end; if ~t.no_else then-- AS_PROTECT_STMT::no_else BOOL::not ind;-- AS_OUT::ind #OUT+"else\n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_STMT_LIST_out(t.else_part);-- AS_OUT::AS_STMT_LIST_out AS_PROTECT_STMT::else_part idec;-- AS_OUT::idec end; ind;-- AS_OUT::ind #OUT+"end; -- of protect\n";-- OUT::create OUT::plus end; AS_RAISE_STMT_out(t:AS_RAISE_STMT) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"raise ";-- OUT::create OUT::plus AS_EXPR_out(t.val);-- AS_OUT::AS_EXPR_out AS_RAISE_STMT::val #OUT+";\n";-- OUT::create OUT::plus end; AS_EXPR_STMT_out(t:AS_EXPR_STMT) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind AS_EXPR_out(t.e);-- AS_OUT::AS_EXPR_out AS_EXPR_STMT::e if ~void(t.at) then-- AS_EXPR_STMT::at BOOL::not #OUT+" @ ";-- OUT::create OUT::plus AS_EXPR_out(t.at);-- AS_OUT::AS_EXPR_out AS_EXPR_STMT::at end; #OUT+";\n";-- OUT::create OUT::plus end; -- pSather AS_PAR_STMT_out(t:AS_PAR_STMT) is if void(t) then #OUT + "void"; return end;-- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"-- par:\n";-- OUT::create OUT::plus if ~void(t.body) then-- AS_PAR_STMT::body BOOL::not iinc;-- AS_OUT::iinc AS_STMT_LIST_out(t.body);-- AS_OUT::AS_STMT_LIST_out AS_PAR_STMT::body idec;-- AS_OUT::idec ind;-- AS_OUT::ind #OUT+"-- end; -- of par\n";-- OUT::create OUT::plus end; end; -- pSather AS_INTERF_ATTACH_STMT_out(t:AS_INTERF_ATTACH_STMT) is if void(t) then #OUT + "void"; return end;-- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"THREAD("+withoutunder(t.routname.str)+", ";-- OUT::create OUT::plus OUT::plus AS_OUT::withoutunder AS_INTERF_ATTACH_STMT::routname IDENT::str OUT::plus #OUT+withoutunder(t.helpername.str)+", ";-- OUT::create OUT::plus AS_OUT::withoutunder AS_INTERF_ATTACH_STMT::helpername IDENT::str OUT::plus #OUT+withoutunder(t.gatename.str)+", ";-- OUT::create OUT::plus AS_OUT::withoutunder AS_INTERF_ATTACH_STMT::gatename IDENT::str OUT::plus if void(t.at) then #OUT+"void" else AS_EXPR_out(t.at) end;-- AS_INTERF_ATTACH_STMT::at OUT::create OUT::plus AS_OUT::AS_EXPR_out AS_INTERF_ATTACH_STMT::at #OUT+"); -- conc.\n"-- OUT::create end;-- OUT::plus -- pSather AS_LOCK_STMT_out(t:AS_LOCK_STMT) is if void(t) then #OUT + "void"; return end;-- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"lock\n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_LOCK_IF_WHEN_out(t.if_when_part);-- AS_OUT::AS_LOCK_IF_WHEN_out AS_LOCK_STMT::if_when_part if ~t.no_else then-- AS_LOCK_STMT::no_else BOOL::not ind;-- AS_OUT::ind #OUT+"else\n"; -- OUT::create OUT::plus AS_STMT_LIST_out(t.else_part);-- AS_OUT::AS_STMT_LIST_out AS_LOCK_STMT::else_part end; idec;-- AS_OUT::idec ind;-- AS_OUT::ind #OUT+"end; -- of lock\n";-- OUT::create OUT::plus end; -- pSather AS_LOCK_IF_WHEN_out(t:AS_LOCK_IF_WHEN) is if void(t) then #OUT + "void"; return end;-- OUT::create OUT::plus ind;-- AS_OUT::ind with_guard ::= true; tv ::= t.val;-- AS_LOCK_IF_WHEN::val typecase tv when AS_BOOL_LIT_EXPR then if tv.val = true then with_guard := false end;-- AS_BOOL_LIT_EXPR::val BOOL::is_eq else end; if with_guard then #OUT+"if ";-- OUT::create OUT::plus AS_EXPR_out(t.val);-- AS_OUT::AS_EXPR_out AS_LOCK_IF_WHEN::val #OUT+" ";-- OUT::create OUT::plus end; #OUT+"when ";-- OUT::create OUT::plus AS_EXPR_out(t.e_list);-- AS_OUT::AS_EXPR_out AS_LOCK_IF_WHEN::e_list #OUT+" then\n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_STMT_LIST_out(t.then_part);-- AS_OUT::AS_STMT_LIST_out AS_LOCK_IF_WHEN::then_part idec;-- AS_OUT::idec ind;-- AS_OUT::ind #OUT+"end -- lock clause\n";-- OUT::create OUT::plus if ~void(t.next) then AS_LOCK_IF_WHEN_out(t.next);-- AS_LOCK_IF_WHEN::next BOOL::not AS_OUT::AS_LOCK_IF_WHEN_out AS_LOCK_IF_WHEN::next end; end; -- pSather AS_UNLOCK_STMT_out(t:AS_UNLOCK_STMT) is if void(t) then #OUT + "void"; return end;-- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"unlock ";-- OUT::create OUT::plus AS_EXPR_out(t.e);-- AS_OUT::AS_EXPR_out AS_UNLOCK_STMT::e #OUT+";\n";-- OUT::create OUT::plus end; -- pSather AS_WITH_NEAR_STMT_out(t:AS_WITH_NEAR_STMT) is if void(t) then #OUT + "void"; return end;-- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"with ";-- OUT::create OUT::plus AS_IDENT_LIST_out(t.idents);-- AS_OUT::AS_IDENT_LIST_out AS_WITH_NEAR_STMT::idents if t.self_occurred then-- AS_WITH_NEAR_STMT::self_occurred if ~void(t.idents) then-- AS_WITH_NEAR_STMT::idents BOOL::not #OUT+", ";-- OUT::create OUT::plus end; #OUT+"self";-- OUT::create OUT::plus end; #OUT+" near\n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_STMT_LIST_out(t.near_part);-- AS_OUT::AS_STMT_LIST_out AS_WITH_NEAR_STMT::near_part idec;-- AS_OUT::idec if ~void(t.else_part) then-- AS_WITH_NEAR_STMT::else_part BOOL::not ind;-- AS_OUT::ind #OUT+"else\n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_STMT_LIST_out(t.else_part);-- AS_OUT::AS_STMT_LIST_out AS_WITH_NEAR_STMT::else_part idec;-- AS_OUT::idec end; ind;-- AS_OUT::ind #OUT+"end; -- of with-near\n";-- OUT::create OUT::plus end; -- pSather AS_ATTACH_STMT_out(t:AS_ATTACH_STMT) is if void(t) then #OUT + "void"; return end;-- OUT::create OUT::plus ind;-- AS_OUT::ind if t.dont_print then-- AS_ATTACH_STMT::dont_print #OUT+"-- attach:\n";-- OUT::create OUT::plus else AS_EXPR_out(t.lhs);-- AS_OUT::AS_EXPR_out AS_ATTACH_STMT::lhs #OUT+" :- ";-- OUT::create OUT::plus AS_EXPR_out(t.rhs);-- AS_OUT::AS_EXPR_out AS_ATTACH_STMT::rhs #OUT+";\n";-- OUT::create OUT::plus end; end; -- pSather AS_FORK_STMT_out(t:AS_FORK_STMT) is if void(t) then #OUT + "void"; return end;-- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"-- fork @ ";-- OUT::create OUT::plus AS_EXPR_out(t.at);-- AS_OUT::AS_EXPR_out AS_FORK_STMT::at #OUT+"\n";-- OUT::create OUT::plus if ~void(t.body) then -- this will be set to void during pSather trafo-- AS_FORK_STMT::body BOOL::not iinc;-- AS_OUT::iinc AS_STMT_LIST_out(t.body);-- AS_OUT::AS_STMT_LIST_out AS_FORK_STMT::body idec;-- AS_OUT::idec ind;-- AS_OUT::ind #OUT+"-- end; -- of fork\n";-- OUT::create OUT::plus end; end; -- pSather AS_SYNC_STMT_out(t:AS_SYNC_STMT) is if void(t) then #OUT + "void"; return end;-- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"sync;\n";-- OUT::create OUT::plus end; AS_SELF_EXPR_out(t:AS_SELF_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"self";-- OUT::create OUT::plus end; AS_CALL_EXPR_out(t:AS_CALL_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus if ~void(t.ob) then-- AS_CALL_EXPR::ob BOOL::not e::=t.ob; close_it:BOOL:=false;-- AS_CALL_EXPR::ob typecase e when AS_VOID_EXPR then when AS_CREATE_EXPR then when AS_ARRAY_EXPR then when AS_UNDERSCORE_ARG then else #OUT+"("; close_it:=true;-- OUT::create OUT::plus end; AS_EXPR_out(t.ob);-- AS_OUT::AS_EXPR_out AS_CALL_EXPR::ob if close_it then #OUT+")"; end;-- OUT::create OUT::plus if ~t.is_array then #OUT+"."; end;-- AS_CALL_EXPR::is_array BOOL::not OUT::create OUT::plus end; if ~void(t.tp)-- AS_CALL_EXPR::tp and ( (t.tp.name.str /= "SYS")-- BOOL::not AS_CALL_EXPR::tp AS_TYPE_SPEC::name IDENT::str STR::is_eq or (~void(t.name) and t.name.str /= "cluster!"))-- AS_CALL_EXPR::name BOOL::not AS_CALL_EXPR::name IDENT::str STR::is_eq BOOL::not then AS_TYPE_SPEC_out(t.tp);-- AS_OUT::AS_TYPE_SPEC_out AS_CALL_EXPR::tp #OUT+"::";-- OUT::create OUT::plus end; if ~void(t.name) then-- AS_CALL_EXPR::name BOOL::not #OUT+withoutunder(t.name.str);-- OUT::create OUT::plus AS_OUT::withoutunder AS_CALL_EXPR::name IDENT::str end; if ~void(t.args) then-- AS_CALL_EXPR::args BOOL::not if t.is_array then -- AS_CALL_EXPR::is_array #OUT+"["; -- OUT::create OUT::plus AS_EXPR_out(t.args);-- AS_OUT::AS_EXPR_out AS_CALL_EXPR::args #OUT+"]";-- OUT::create OUT::plus else #OUT + "(";-- OUT::create OUT::plus AS_MODE_EXPR_out(t.modes, t.args);-- AS_OUT::AS_MODE_EXPR_out AS_CALL_EXPR::modes AS_CALL_EXPR::args #OUT+")"; -- OUT::create OUT::plus end; end; end; AS_VOID_EXPR_out(t:AS_VOID_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"void";-- OUT::create OUT::plus end; AS_IS_VOID_EXPR_out(t:AS_IS_VOID_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"void(";-- OUT::create OUT::plus AS_EXPR_out(t.arg);-- AS_OUT::AS_EXPR_out AS_IS_VOID_EXPR::arg #OUT+")";-- OUT::create OUT::plus end; AS_ARRAY_EXPR_out(t:AS_ARRAY_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"|";-- OUT::create OUT::plus AS_EXPR_out(t.elts);-- AS_OUT::AS_EXPR_out AS_ARRAY_EXPR::elts #OUT+"|";-- OUT::create OUT::plus end; AS_CREATE_EXPR_out(t:AS_CREATE_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"#";-- OUT::create OUT::plus if ~void(t.tp) then-- AS_CREATE_EXPR::tp BOOL::not AS_TYPE_SPEC_out(t.tp);-- AS_OUT::AS_TYPE_SPEC_out AS_CREATE_EXPR::tp end; if ~void(t.elts) then-- AS_CREATE_EXPR::elts BOOL::not #OUT+"(";-- OUT::create OUT::plus AS_MODE_EXPR_out(t.modes, t.elts);-- AS_OUT::AS_MODE_EXPR_out AS_CREATE_EXPR::modes AS_CREATE_EXPR::elts #OUT+")";-- OUT::create OUT::plus end; end; AS_BOUND_CREATE_EXPR_out(t:AS_BOUND_CREATE_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"#";-- OUT::create OUT::plus if t.is_iter then #OUT+"ITER(" else #OUT+"ROUT(" end;-- AS_BOUND_CREATE_EXPR::is_iter OUT::create OUT::plus OUT::create OUT::plus AS_CALL_EXPR_out(t.call);-- AS_OUT::AS_CALL_EXPR_out AS_BOUND_CREATE_EXPR::call if ~void(t.ret) then-- AS_BOUND_CREATE_EXPR::ret BOOL::not #OUT+":";-- OUT::create OUT::plus AS_TYPE_SPEC_out(t.ret);-- AS_OUT::AS_TYPE_SPEC_out AS_BOUND_CREATE_EXPR::ret end; #OUT+")";-- OUT::create OUT::plus end; AS_AND_EXPR_out(t:AS_AND_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"(";-- OUT::create OUT::plus AS_EXPR_out(t.e1);-- AS_OUT::AS_EXPR_out AS_AND_EXPR::e1 #OUT+") and (";-- OUT::create OUT::plus AS_EXPR_out(t.e2);-- AS_OUT::AS_EXPR_out AS_AND_EXPR::e2 #OUT+")";-- OUT::create OUT::plus end; AS_OR_EXPR_out(t:AS_OR_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"(";-- OUT::create OUT::plus AS_EXPR_out(t.e1);-- AS_OUT::AS_EXPR_out AS_OR_EXPR::e1 #OUT+") or (";-- OUT::create OUT::plus AS_EXPR_out(t.e2);-- AS_OUT::AS_EXPR_out AS_OR_EXPR::e2 #OUT+")";-- OUT::create OUT::plus end; AS_EXCEPT_EXPR_out(t:AS_EXCEPT_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"exception";-- OUT::create OUT::plus end; AS_NEW_EXPR_out(t:AS_NEW_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"new";-- OUT::create OUT::plus if ~void(t.arg) then-- AS_NEW_EXPR::arg BOOL::not #OUT+"(";-- OUT::create OUT::plus AS_EXPR_out(t.arg);-- AS_OUT::AS_EXPR_out AS_NEW_EXPR::arg #OUT+")";-- OUT::create OUT::plus end; end; AS_INITIAL_EXPR_out(t:AS_INITIAL_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"initial(";-- OUT::create OUT::plus AS_EXPR_out(t.e);-- AS_OUT::AS_EXPR_out AS_INITIAL_EXPR::e #OUT+")";-- OUT::create OUT::plus end; AS_BREAK_EXPR_out(t:AS_BREAK_EXPR) is if void(t) then #OUT + "void"; return end;-- OUT::create OUT::plus #OUT+"break!"; -- OUT::create OUT::plus end; AS_RESULT_EXPR_out(t:AS_RESULT_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"result";-- OUT::create OUT::plus end; AS_BOOL_LIT_EXPR_out(t:AS_BOOL_LIT_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+t.val;-- OUT::create OUT::plus AS_BOOL_LIT_EXPR::val end; AS_CHAR_LIT_EXPR_out(t:AS_CHAR_LIT_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+t.val.char.pretty; -- OUT::create OUT::plus AS_CHAR_LIT_EXPR::val INT::char CHAR::pretty end; AS_STR_LIT_EXPR_out(t:AS_STR_LIT_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+t.s.pretty;-- OUT::create OUT::plus AS_STR_LIT_EXPR::s STR::pretty end; AS_INT_LIT_EXPR_out(t:AS_INT_LIT_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+t.val;-- OUT::create OUT::plus AS_INT_LIT_EXPR::val if t.is_inti then #OUT+"i" end;-- AS_INT_LIT_EXPR::is_inti OUT::create OUT::plus end; AS_FLT_LIT_EXPR_out(t:AS_FLT_LIT_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus s,s2,s3:STR; case t.tp-- AS_FLT_LIT_EXPR::tp when AS_FLT_LIT_EXPR::flt then -- AS_FLT_LIT_EXPR::flt s:= t.val.str(8);-- AS_FLT_LIT_EXPR::val RAT::str else s:= t.val.str(17);-- AS_FLT_LIT_EXPR::val RAT::str end; posi ::= s.search('e');-- STR::search if posi /= -1 then-- INT::is_eq BOOL::not s2:= s.head(posi) +".0"+s.tail(s.length-posi);-- STR::head STR::plus STR::plus STR::tail STR::length INT::minus else s2:= s+".0";-- STR::plus end; case t.tp-- AS_FLT_LIT_EXPR::tp when AS_FLT_LIT_EXPR::flti then s3 := s2+"i";-- AS_FLT_LIT_EXPR::flti STR::plus when AS_FLT_LIT_EXPR::fltdx then s3 := s2+"dx";-- AS_FLT_LIT_EXPR::fltdx STR::plus when AS_FLT_LIT_EXPR::fltd then s3 := s2+"d";-- AS_FLT_LIT_EXPR::fltd STR::plus when AS_FLT_LIT_EXPR::fltx then s3 := s2+"x";-- AS_FLT_LIT_EXPR::fltx STR::plus else s3:=s2; end; #OUT+s3;-- OUT::create OUT::plus end; --pSather AS_HERE_EXPR_out(t:AS_HERE_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"here" -- OUT::create end;-- OUT::plus --pSather AS_ANY_EXPR_out(t:AS_ANY_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"any"-- OUT::create end;-- OUT::plus --pSather AS_CLUSTER_EXPR_out(t:AS_CLUSTER_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"clusters"-- OUT::create end;-- OUT::plus AS_CLUSTER_SIZE_EXPR_out(t:AS_CLUSTER_SIZE_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"cluster_size"-- OUT::create end;-- OUT::plus --pSather AS_COHORT_EXPR_out(t:AS_COHORT_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus if void(t.name_after_pSather_trafo) then-- AS_COHORT_EXPR::name_after_pSather_trafo #OUT+"cohort"-- OUT::create else-- OUT::plus #OUT+t.name_after_pSather_trafo.str;-- OUT::create OUT::plus AS_COHORT_EXPR::name_after_pSather_trafo IDENT::str end; end; --pSather AS_WHERE_EXPR_out(t:AS_WHERE_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"where(";-- OUT::create OUT::plus AS_EXPR_out(t.e);-- AS_OUT::AS_EXPR_out AS_WHERE_EXPR::e #OUT+")";-- OUT::create OUT::plus end; --pSather AS_NEAR_EXPR_out(t:AS_NEAR_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"near(";-- OUT::create OUT::plus AS_EXPR_out(t.e);-- AS_OUT::AS_EXPR_out AS_NEAR_EXPR::e #OUT+")";-- OUT::create OUT::plus end; --pSather AS_FAR_EXPR_out(t:AS_FAR_EXPR) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+"far(";-- OUT::create OUT::plus AS_EXPR_out(t.e);-- AS_OUT::AS_EXPR_out AS_FAR_EXPR::e #OUT+")";-- OUT::create OUT::plus end; --pSather AS_AT_EXPR_out(t:AS_AT_EXPR) is if void(t) then #OUT + "void"; return end;-- OUT::create OUT::plus AS_EXPR_out(t.e);-- AS_OUT::AS_EXPR_out AS_AT_EXPR::e #OUT+" @ ";-- OUT::create OUT::plus AS_EXPR_out(t.at);-- AS_OUT::AS_EXPR_out AS_AT_EXPR::at end; AS_PARAM_DEC_out(t:AS_PARAM_DEC) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus #OUT+withoutunder(t.name.str);-- OUT::create OUT::plus AS_OUT::withoutunder AS_PARAM_DEC::name IDENT::str if ~void(t.type_constraint) then-- AS_PARAM_DEC::type_constraint BOOL::not #OUT+" < ";-- OUT::create OUT::plus AS_TYPE_SPEC_out(t.type_constraint);-- AS_OUT::AS_TYPE_SPEC_out AS_PARAM_DEC::type_constraint end; if ~void(t.next) then-- AS_PARAM_DEC::next BOOL::not #OUT+", ";-- OUT::create OUT::plus AS_PARAM_DEC_out(t.next);-- AS_OUT::AS_PARAM_DEC_out AS_PARAM_DEC::next end; end; AS_TYPE_SPEC_out(t:AS_TYPE_SPEC) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus if ~void(t.mode) then-- AS_TYPE_SPEC::mode BOOL::not AS_MODE_out(t.mode);-- AS_OUT::AS_MODE_out AS_TYPE_SPEC::mode end; case t.kind-- AS_TYPE_SPEC::kind when AS_TYPE_SPEC::same then -- AS_TYPE_SPEC::same #OUT+"SAME";-- OUT::create OUT::plus when AS_TYPE_SPEC::rt then -- AS_TYPE_SPEC::rt #OUT+"ROUT";-- OUT::create OUT::plus if ~void(t.params) then-- AS_TYPE_SPEC::params BOOL::not #OUT+"{";-- OUT::create OUT::plus AS_TYPE_SPEC_out(t.params);-- AS_OUT::AS_TYPE_SPEC_out AS_TYPE_SPEC::params #OUT+"}";-- OUT::create OUT::plus end; if ~void(t.ret) then-- AS_TYPE_SPEC::ret BOOL::not #OUT+":";-- OUT::create OUT::plus AS_TYPE_SPEC_out(t.ret);-- AS_OUT::AS_TYPE_SPEC_out AS_TYPE_SPEC::ret end; when AS_TYPE_SPEC::it then -- AS_TYPE_SPEC::it #OUT+"ITER";-- OUT::create OUT::plus if ~void(t.params) then-- AS_TYPE_SPEC::params BOOL::not #OUT+"{";-- OUT::create OUT::plus AS_TYPE_SPEC_out(t.params);-- AS_OUT::AS_TYPE_SPEC_out AS_TYPE_SPEC::params #OUT+"}";-- OUT::create OUT::plus end; if ~void(t.ret) then-- AS_TYPE_SPEC::ret BOOL::not #OUT+":";-- OUT::create OUT::plus AS_TYPE_SPEC_out(t.ret);-- AS_OUT::AS_TYPE_SPEC_out AS_TYPE_SPEC::ret end; else #OUT+withoutunder(t.name.str.upper);-- OUT::create OUT::plus AS_OUT::withoutunder AS_TYPE_SPEC::name IDENT::str STR::upper if ~void(t.params) then-- AS_TYPE_SPEC::params BOOL::not #OUT+"{";-- OUT::create OUT::plus AS_TYPE_SPEC_out(t.params);-- AS_OUT::AS_TYPE_SPEC_out AS_TYPE_SPEC::params #OUT+"}";-- OUT::create OUT::plus end; end; if t.is_hot then #OUT+"!"; end;-- AS_TYPE_SPEC::is_hot OUT::create OUT::plus if ~void(t.next) then-- AS_TYPE_SPEC::next BOOL::not #OUT+", ";-- OUT::create OUT::plus AS_TYPE_SPEC_out(t.next);-- AS_OUT::AS_TYPE_SPEC_out AS_TYPE_SPEC::next end; end; AS_ARG_DEC_out(t:AS_ARG_DEC) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus AS_MODE_out(t.mode);-- AS_OUT::AS_MODE_out AS_ARG_DEC::mode #OUT+withoutunder(t.name.str)+":";-- OUT::create OUT::plus AS_OUT::withoutunder AS_ARG_DEC::name IDENT::str OUT::plus AS_TYPE_SPEC_out(t.tp);-- AS_OUT::AS_TYPE_SPEC_out AS_ARG_DEC::tp if t.is_hot then #OUT+"!"; end;-- AS_ARG_DEC::is_hot OUT::create OUT::plus if ~void(t.next) then-- AS_ARG_DEC::next BOOL::not #OUT+", ";-- OUT::create OUT::plus AS_ARG_DEC_out(t.next);-- AS_OUT::AS_ARG_DEC_out AS_ARG_DEC::next end; end; AS_FEAT_MOD_out(t:AS_FEAT_MOD) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+withoutunder(t.name.str)+" -> ";-- OUT::create OUT::plus AS_OUT::withoutunder AS_FEAT_MOD::name IDENT::str OUT::plus if t.is_private then #OUT+"private "; end;-- AS_FEAT_MOD::is_private OUT::create OUT::plus if t.is_readonly then #OUT+"readonly "; end;-- AS_FEAT_MOD::is_readonly OUT::create OUT::plus if ~void(t.new_name) then-- AS_FEAT_MOD::new_name BOOL::not #OUT+withoutunder(t.new_name.str);-- OUT::create OUT::plus AS_OUT::withoutunder AS_FEAT_MOD::new_name IDENT::str end; if ~void(t.next) then-- AS_FEAT_MOD::next BOOL::not #OUT+", \n";-- OUT::create OUT::plus AS_FEAT_MOD_out(t.next);-- AS_OUT::AS_FEAT_MOD_out AS_FEAT_MOD::next end; end; AS_CASE_WHEN_out(t:AS_CASE_WHEN) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"when ";-- OUT::create OUT::plus AS_EXPR_out(t.val);-- AS_OUT::AS_EXPR_out AS_CASE_WHEN::val #OUT+" then\n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_STMT_LIST_out(t.then_part);-- AS_OUT::AS_STMT_LIST_out AS_CASE_WHEN::then_part idec;-- AS_OUT::idec if ~void(t.next) then-- AS_CASE_WHEN::next BOOL::not AS_CASE_WHEN_out(t.next);-- AS_OUT::AS_CASE_WHEN_out AS_CASE_WHEN::next end; end; AS_TYPECASE_WHEN_out(t:AS_TYPECASE_WHEN) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"when ";-- OUT::create OUT::plus AS_TYPE_SPEC_out(t.tp);-- AS_OUT::AS_TYPE_SPEC_out AS_TYPECASE_WHEN::tp #OUT+" then\n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_STMT_LIST_out(t.then_part);-- AS_OUT::AS_STMT_LIST_out AS_TYPECASE_WHEN::then_part idec;-- AS_OUT::idec if ~void(t.next) then-- AS_TYPECASE_WHEN::next BOOL::not AS_TYPECASE_WHEN_out(t.next);-- AS_OUT::AS_TYPECASE_WHEN_out AS_TYPECASE_WHEN::next end; end; AS_PROTECT_WHEN_out(t:AS_PROTECT_WHEN) is if void(t) then #OUT + "void"; return end; -- OUT::create OUT::plus ind;-- AS_OUT::ind #OUT+"when ";-- OUT::create OUT::plus AS_TYPE_SPEC_out(t.tp);-- AS_OUT::AS_TYPE_SPEC_out AS_PROTECT_WHEN::tp #OUT+" then\n";-- OUT::create OUT::plus iinc;-- AS_OUT::iinc AS_STMT_LIST_out(t.then_part);-- AS_OUT::AS_STMT_LIST_out AS_PROTECT_WHEN::then_part idec;-- AS_OUT::idec if ~void(t.next) then-- AS_PROTECT_WHEN::next BOOL::not AS_PROTECT_WHEN_out(t.next);-- AS_OUT::AS_PROTECT_WHEN_out AS_PROTECT_WHEN::next end; end; AS_IDENT_LIST_out(t:AS_IDENT_LIST) is if void(t) then #OUT + "void"; return end;-- OUT::create OUT::plus #OUT+withoutunder(t.name.str);-- OUT::create OUT::plus AS_OUT::withoutunder AS_IDENT_LIST::name IDENT::str if ~void(t.next) then-- AS_IDENT_LIST::next BOOL::not #OUT+", ";-- OUT::create OUT::plus AS_IDENT_LIST_out(t.next);-- AS_OUT::AS_IDENT_LIST_out AS_IDENT_LIST::next end; end; AS_UNDERSCORE_ARG_out(t:AS_UNDERSCORE_ARG) is if void(t) then #OUT + "void"; return end;-- OUT::create OUT::plus if ~void(t.tp) then-- AS_UNDERSCORE_ARG::tp BOOL::not AS_MODE_out(t.tp.mode);-- AS_OUT::AS_MODE_out AS_UNDERSCORE_ARG::tp AS_TYPE_SPEC::mode end; #OUT+"_";-- OUT::create OUT::plus if ~void(t.tp) then-- AS_UNDERSCORE_ARG::tp BOOL::not AS_TYPE_SPEC_out(t.tp);-- AS_OUT::AS_TYPE_SPEC_out AS_UNDERSCORE_ARG::tp end; end; AS_MODE_out(m: AS_ARG_MODE) is case m.mod-- AS_ARG_MODE::mod when AS_ARG_MODE::out_mode then-- AS_ARG_MODE::out_mode #OUT + "out ";-- OUT::create OUT::plus when AS_ARG_MODE::inout_mode then-- AS_ARG_MODE::inout_mode #OUT + "inout ";-- OUT::create OUT::plus when AS_ARG_MODE::once_mode then-- AS_ARG_MODE::once_mode #OUT + "once ";-- OUT::create OUT::plus when AS_ARG_MODE::in_mode then-- AS_ARG_MODE::in_mode #OUT + "in ";-- OUT::create OUT::plus end; end; private withoutunder(s:STR):STR is if void(s) then return void else if s.head(1) = "_" then-- STR::head STR::is_eq return s.tail(s.size-1);-- STR::tail STR::size INT::minus else return s; end; end; end; end;