blob: b4917af334fc5c55e2a9685b0f42472cdeac3676 [file] [log] [blame]
/* translation of file "util.k" */
/* generated by:
* @(#)$Author$
*/
#define KC_FUNCTIONS_util_
#include <stdlib.h>
#include "k.h"
#include "util.h"
namespace kc { }
using namespace kc;
/* included stuff */
//
// The Termprocessor Kimwitu++
//
// Copyright (C) 1991 University of Twente, Dept TIOS.
// Copyright (C) 1998-2003 Humboldt-University of Berlin, Institute of Informatics
// All rights reserved.
//
// Kimwitu++ is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// Kimwitu++ is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Kimwitu++; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
static char util_kAccesSid[] = "@(#)$Id$";
addedphylumdeclarations pl_addedphylumdeclarations = 0;
countedphylumdeclarations pl_countedphylumdeclarations = 0;
#include <string.h> /* for strcmp */
#include "parse.h" /* for f_lookupdecl */
static unparseitems** string_collection;
static unparseitems The_Nilunparseitems;
unparseitems The_current_unparseitems;
/* end included stuff */
namespace kc {
#ifndef KC_TRACE_PROVIDED
#define KC_TRACE_PROVIDED(COND,FILE,LINE,NODE) COND
#endif
static ID f_do_check_unpattributes_in_phylum (unpattributes a, ID p);
static void v_do_check_dollarvar_in_operators (INT i, operators o, ID p);
static ID f_do_subphylum (arguments a, INT i, int a_i);
static argument f_do_argument (arguments a, INT i, int a_i);
static alternative f_do_alternative (alternatives a, int i, int a_i);
static storageclasses do_add_to_storageclasses (ID v, ID p, storageclasses s, storageclasses all);
bool f_added(ID id)
{
{
ID kc_selvar_0_1 = phylum_cast<ID>( id );
if ((kc_selvar_0_1->prod_sel() == sel_Id)) {
const uniqID uid = phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1;
return AddedPhylumdeclaration( uid )->added;
} else
{ kc_no_default_in_with( "f_added", __LINE__, __FILE__ );
return static_cast<bool>(0); }
}
}
void v_add(ID id)
{
{
ID kc_selvar_0_1 = phylum_cast<ID>( id );
if ((kc_selvar_0_1->prod_sel() == sel_Id)) {
const uniqID uid = phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1;
AddedPhylumdeclaration( uid )->added = true;
} else
kc_no_default_in_with( "v_add", __LINE__, __FILE__ );
}
}
void v_freeadded()
{
pl_addedphylumdeclarations->free( true );
pl_addedphylumdeclarations = 0;
}
int f_getcount(ID id)
{
{
ID kc_selvar_0_1 = phylum_cast<ID>( id );
if ((kc_selvar_0_1->prod_sel() == sel_Id)) {
const uniqID uid = phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1;
return ++(CountedPhylumdeclaration( uid ) -> count);
} else
{
return 0; /* NOTREACHED */
}
}
}
void v_resetcount()
{
if (pl_countedphylumdeclarations) {
{
countedphylumdeclarations kc_fe_selvar_1 = pl_countedphylumdeclarations ;
while(
kc_fe_selvar_1->prod_sel() == sel_Conscountedphylumdeclarations
) {
countedphylumdeclaration kc_selvar_0_1 = kc_fe_selvar_1->countedphylumdeclaration_1;
{
{
{
const countedphylumdeclaration c = kc_selvar_0_1;
c->count = 0;
}
}
}
kc_fe_selvar_1 = kc_fe_selvar_1->countedphylumdeclarations_1;
}
}
}
}
void v_freecount()
{
if (pl_countedphylumdeclarations) {
v_resetcount();
pl_countedphylumdeclarations->free( true );
pl_countedphylumdeclarations = 0;
}
}
bool is_uview_var(ID id)
{
if(!The_current_unparseitems)
return false;
{
unparseitems kc_fe_selvar_1 = The_current_unparseitems;
while(
kc_fe_selvar_1->prod_sel() == sel_Consunparseitems
) {
unparseitem kc_selvar_0_1 = kc_fe_selvar_1->unparseitem_1;
{
{
{
const unparseitem item = kc_selvar_0_1;
{
unparseitem kc_selvar_1_1 = phylum_cast<unparseitem>(item);
if ((kc_selvar_1_1->prod_sel() == sel_UViewVarDecl)) {
const ID var = phylum_cast<const impl_unparseitem_UViewVarDecl*>(kc_selvar_1_1)->ID_2;
if(var->eq(id)) {
id->type=ITUViewVar();
return true;
}
} else
{
}
}
}
}
}
kc_fe_selvar_1 = kc_fe_selvar_1->unparseitems_1;
}
}
return false;
}
bool f_DvIsDisallowed(dollarvarstatus dvs)
{{
dollarvarstatus kc_selvar_0_1 = phylum_cast<dollarvarstatus>(dvs);
if ((kc_selvar_0_1->prod_sel() == sel_DVDisallowed)) {
return true;
} else
if ((kc_selvar_0_1->prod_sel() == sel_DVAllowed)) {
return false;
} else
{ kc_no_default_in_with( "f_DvIsDisallowed", __LINE__, __FILE__ );
return static_cast<bool>(0); }
}
}
ID f_listelementphylum(ID id)
{{
ID kc_selvar_0_1 = phylum_cast<ID>(id);
if ((kc_selvar_0_1->prod_sel() == sel_Id)) {
const uniqID uid = phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1;
{
IDtype kc_selvar_1_1 = phylum_cast<IDtype>( uid->type );
if ((kc_selvar_1_1->prod_sel() == sel_ITUserPhylum)) {
const phylumdeclaration pd = phylum_cast<const impl_IDtype_ITUserPhylum*>(kc_selvar_1_1)->phylumdeclaration_1;
{
phylumdeclaration kc_selvar_2_1 = phylum_cast<phylumdeclaration>( pd );
if ((kc_selvar_2_1->prod_sel() == sel_PhylumDeclaration) && (phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_2_1)->productionblock_1->prod_sel() == sel_ListAlternatives)) {
const ID i = phylum_cast<const impl_productionblock_ListAlternatives*>(phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_2_1)->productionblock_1)->ID_1;
return i;
} else
{
return f_emptyId();
}
}
} else
{
return f_emptyId();
}
}
} else
{ kc_no_default_in_with( "f_listelementphylum", __LINE__, __FILE__ );
return static_cast<ID>(0); }
}
}
ID f_listelementconsoperator(ID id)
{{
ID kc_selvar_0_1 = phylum_cast<ID>(id);
if ((kc_selvar_0_1->prod_sel() == sel_Id)) {
const uniqID uid = phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1;
{
IDtype kc_selvar_1_1 = phylum_cast<IDtype>( uid->type );
if ((kc_selvar_1_1->prod_sel() == sel_ITUserPhylum)) {
const phylumdeclaration pd = phylum_cast<const impl_IDtype_ITUserPhylum*>(kc_selvar_1_1)->phylumdeclaration_1;
{
phylumdeclaration kc_selvar_2_1 = phylum_cast<phylumdeclaration>( pd );
if ((kc_selvar_2_1->prod_sel() == sel_PhylumDeclaration) && (phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_2_1)->productionblock_1->prod_sel() == sel_ListAlternatives) && (phylum_cast<const impl_productionblock_ListAlternatives*>(phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_2_1)->productionblock_1)->alternatives_1->prod_sel() == sel_Consalternatives) && ((phylum_cast<const impl_productionblock_ListAlternatives*>(phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_2_1)->productionblock_1)->alternatives_1)->alternative_1->prod_sel() == sel_Alternative)) {
const ID Cons_id = phylum_cast<const impl_alternative_Alternative*>((phylum_cast<const impl_productionblock_ListAlternatives*>(phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_2_1)->productionblock_1)->alternatives_1)->alternative_1)->ID_1;
return Cons_id;
} else
{
return f_emptyId();
}
}
} else
{
return f_emptyId();
}
}
} else
{ kc_no_default_in_with( "f_listelementconsoperator", __LINE__, __FILE__ );
return static_cast<ID>(0); }
}
}
ID f_emptyId()
{
static ID emptyID = 0;
if (! emptyID) {
emptyID = Id (Str( mkcasestring( "" )));
}
return emptyID;
}
bool f_operatorinphylum(ID oid, ID pid)
{{
ID kc_selvar_0_1 = phylum_cast<ID>(oid);
if ((kc_selvar_0_1->prod_sel() == sel_Id)) {
const uniqID uid = phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1;
{
IDtype kc_selvar_1_1 = phylum_cast<IDtype>( uid->type );
if ((kc_selvar_1_1->prod_sel() == sel_ITUserOperator)) {
const ID id = phylum_cast<const impl_IDtype_ITUserOperator*>(kc_selvar_1_1)->ID_1;
return pid->eq( id );
} else
{
return false;
}
}
} else
{ kc_no_default_in_with( "f_operatorinphylum", __LINE__, __FILE__ );
return static_cast<bool>(0); }
}
}
bool f_isphylum(ID id)
{{
ID kc_selvar_0_1 = phylum_cast<ID>(id);
if ((kc_selvar_0_1->prod_sel() == sel_Id)) {
const uniqID uid = phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1;
{
IDtype kc_selvar_1_1 = phylum_cast<IDtype>( uid->type );
if ((kc_selvar_1_1->prod_sel() == sel_ITUserPhylum)) {
return true;
} else
if ((kc_selvar_1_1->prod_sel() == sel_ITPredefinedPhylum)) {
return true;
} else
{
return false;
}
}
} else
{ kc_no_default_in_with( "f_isphylum", __LINE__, __FILE__ );
return static_cast<bool>(0); }
}
}
phylumdeclaration f_phylumdeclofid(ID id)
{{
ID kc_selvar_0_1 = phylum_cast<ID>(id);
if ((kc_selvar_0_1->prod_sel() == sel_Id)) {
const uniqID uid = phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1;
{
IDtype kc_selvar_1_1 = phylum_cast<IDtype>( uid->type );
if ((kc_selvar_1_1->prod_sel() == sel_ITUserPhylum)) {
const phylumdeclaration dcl = phylum_cast<const impl_IDtype_ITUserPhylum*>(kc_selvar_1_1)->phylumdeclaration_1;
return dcl;
} else
if ((kc_selvar_1_1->prod_sel() == sel_ITPredefinedPhylum)) {
const phylumdeclaration dcl = phylum_cast<const impl_IDtype_ITPredefinedPhylum*>(kc_selvar_1_1)->phylumdeclaration_1;
return dcl;
} else
{
return NULL;
}
}
} else
{ kc_no_default_in_with( "f_phylumdeclofid", __LINE__, __FILE__ );
return static_cast<phylumdeclaration>(0); }
}
}
bool f_ispredefinedphylum(ID id)
{{
ID kc_selvar_0_1 = phylum_cast<ID>(id);
if ((kc_selvar_0_1->prod_sel() == sel_Id)) {
const uniqID uid = phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1;
{
IDtype kc_selvar_1_1 = phylum_cast<IDtype>( uid->type );
if ((kc_selvar_1_1->prod_sel() == sel_ITPredefinedPhylum)) {
return true;
} else
{
return false;
}
}
} else
{ kc_no_default_in_with( "f_ispredefinedphylum", __LINE__, __FILE__ );
return static_cast<bool>(0); }
}
}
alternative f_alternativeofoperator(ID oid)
{{
ID kc_selvar_0_1 = phylum_cast<ID>(oid);
if ((kc_selvar_0_1->prod_sel() == sel_Id)) {
const uniqID uid = phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1;
{
IDtype kc_selvar_1_1 = phylum_cast<IDtype>( uid->type );
if ((kc_selvar_1_1->prod_sel() == sel_ITUserOperator)) {
const alternative a = phylum_cast<const impl_IDtype_ITUserOperator*>(kc_selvar_1_1)->alternative_1;
return a;
} else
{
return 0;
}
}
} else
{ kc_no_default_in_with( "f_alternativeofoperator", __LINE__, __FILE__ );
return static_cast<alternative>(0); }
}
}
arguments f_argumentsofoperator(ID oid)
{{
ID kc_selvar_0_1 = phylum_cast<ID>(oid);
if ((kc_selvar_0_1->prod_sel() == sel_Id)) {
const uniqID uid = phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1;
{
IDtype kc_selvar_1_1 = phylum_cast<IDtype>( uid->type );
if ((kc_selvar_1_1->prod_sel() == sel_ITUserOperator) && (phylum_cast<const impl_IDtype_ITUserOperator*>(kc_selvar_1_1)->alternative_1->prod_sel() == sel_Alternative)) {
const arguments args = phylum_cast<const impl_alternative_Alternative*>(phylum_cast<const impl_IDtype_ITUserOperator*>(kc_selvar_1_1)->alternative_1)->arguments_1;
return args;
} else
{
return Nilarguments();
}
}
} else
{ kc_no_default_in_with( "f_argumentsofoperator", __LINE__, __FILE__ );
return static_cast<arguments>(0); }
}
}
ID f_phylumofoperator(ID oid)
{{
ID kc_selvar_0_1 = phylum_cast<ID>(oid);
if ((kc_selvar_0_1->prod_sel() == sel_Id)) {
const uniqID uid = phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1;
{
IDtype kc_selvar_1_1 = phylum_cast<IDtype>( uid->type );
if ((kc_selvar_1_1->prod_sel() == sel_ITUserOperator)) {
const ID id = phylum_cast<const impl_IDtype_ITUserOperator*>(kc_selvar_1_1)->ID_1;
return id;
} else
if ((kc_selvar_1_1->prod_sel() == sel_ITPredefinedOperator)) {
const ID id = phylum_cast<const impl_IDtype_ITPredefinedOperator*>(kc_selvar_1_1)->ID_1;
return id;
} else
{
return f_emptyId();
}
}
} else
{ kc_no_default_in_with( "f_phylumofoperator", __LINE__, __FILE__ );
return static_cast<ID>(0); }
}
}
ID f_phylumofpatternID(ID vid)
{
{
IDtype kc_selvar_0_1 = phylum_cast<IDtype>( vid->type );
if ((kc_selvar_0_1->prod_sel() == sel_ITPatternVariable)) {
const ID id = phylum_cast<const impl_IDtype_ITPatternVariable*>(kc_selvar_0_1)->ID_1;
return id;
} else
{
return f_emptyId();
}
}
}
ID f_phylumofpatternvariable(ID vid)
{{
ID kc_selvar_0_1 = phylum_cast<ID>(vid);
if ((kc_selvar_0_1->prod_sel() == sel_Id)) {
const uniqID uid = phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1;
{
IDtype kc_selvar_1_1 = phylum_cast<IDtype>( uid->type );
if ((kc_selvar_1_1->prod_sel() == sel_ITPatternVariable)) {
const ID id = phylum_cast<const impl_IDtype_ITPatternVariable*>(kc_selvar_1_1)->ID_1;
return id;
} else
{
return f_emptyId();
}
}
} else
{ kc_no_default_in_with( "f_phylumofpatternvariable", __LINE__, __FILE__ );
return static_cast<ID>(0); }
}
}
void v_syn_type_attribute_ID(ID id)
{{
ID kc_selvar_0_1 = phylum_cast<ID>(id);
if ((kc_selvar_0_1->prod_sel() == sel_Id)) {
const uniqID uid = phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1;
{
IDtype kc_selvar_1_1 = phylum_cast<IDtype>( uid->type );
if ((kc_selvar_1_1->prod_sel() == sel_ITPatternVariable)) {
id->type = uid->type;
} else
{
/* EMPTY */
}
}
} else
kc_no_default_in_with( "v_syn_type_attribute_ID", __LINE__, __FILE__ );
}
}
bool f_Nilarguments(arguments a)
{{
arguments kc_selvar_0_1 = phylum_cast<arguments>(a);
if ((kc_selvar_0_1->prod_sel() == sel_Consarguments)) {
return false;
} else
if ((kc_selvar_0_1->prod_sel() == sel_Nilarguments)) {
return true;
} else
{ kc_no_default_in_with( "f_Nilarguments", __LINE__, __FILE__ );
return static_cast<bool>(0); }
}
}
ID f_hd_arguments(arguments a)
{{
arguments kc_selvar_0_1 = phylum_cast<arguments>(a);
if ((kc_selvar_0_1->prod_sel() == sel_Consarguments)) {
const ID hd = (kc_selvar_0_1)->ID_1;
return hd;
} else
if ((kc_selvar_0_1->prod_sel() == sel_Nilarguments)) {
assertionFailed("Head of empty argument list requested");
return 0;
} else
{ kc_no_default_in_with( "f_hd_arguments", __LINE__, __FILE__ );
return static_cast<ID>(0); }
}
}
arguments f_tl_arguments(arguments a)
{{
arguments kc_selvar_0_1 = phylum_cast<arguments>(a);
if ((kc_selvar_0_1->prod_sel() == sel_Consarguments)) {
const arguments tl = (kc_selvar_0_1)->arguments_1;
return tl;
} else
if ((kc_selvar_0_1->prod_sel() == sel_Nilarguments)) {
assertionFailed("Tail of empty argument list requested");
return 0;
} else
{ kc_no_default_in_with( "f_tl_arguments", __LINE__, __FILE__ );
return static_cast<arguments>(0); }
}
}
void v_check_dollarvar_attribute_in_operators(INT i, unpattributes a, operators o)
{{
operators kc_selvar_0_1 = phylum_cast<operators>(o);
if ((kc_selvar_0_1->prod_sel() == sel_Consoperators)) {
const ID o_o = (kc_selvar_0_1)->ID_1;
const operators o_os = (kc_selvar_0_1)->operators_1;
ID phy = f_subphylumofoperator( o_o, i );
if (phy->eq(f_emptyId())) {
v_report(NonFatal( FileLine( i->file, i->line ),
Problem1S1INT1S1ID( "illegal dollar variable", i,
"not that many subterms in operator", o_o )));
} else {
f_check_unpattributes_in_phylum( a, phy );
v_do_check_dollarvar_in_operators( i, o_os, phy );
}
} else
if ((kc_selvar_0_1->prod_sel() == sel_Niloperators)) {
/* EMPTY */
} else
kc_no_default_in_with( "v_check_dollarvar_attribute_in_operators", __LINE__, __FILE__ );
}
}
ID f_check_unpattributes_in_phylum(unpattributes a, ID p)
{
ID tmp;
unpattributes t = a->reverse();
tmp = f_do_check_unpattributes_in_phylum( t, p );
t->freelist();
return tmp;
}
static ID f_do_check_unpattributes_in_phylum(unpattributes a, ID p)
{{
unpattributes kc_selvar_0_1 = phylum_cast<unpattributes>(a);
if ((kc_selvar_0_1->prod_sel() == sel_Consunpattributes)) {
const ID a_id = (kc_selvar_0_1)->ID_1;
const unpattributes r_a = (kc_selvar_0_1)->unpattributes_1;
ID type = f_typeof_attribute_in_phylym( a_id, p );
if ( type->eq(f_emptyId() )) {
v_report(NonFatal( FileLine( a_id->file, a_id->line ),
Problem1S1ID1S1ID( "attribute", a_id, "not defined in phylum", p )));
return f_emptyId();
} else {
return f_do_check_unpattributes_in_phylum( r_a, type );
}
} else
if ((kc_selvar_0_1->prod_sel() == sel_Nilunpattributes)) {
return p;
} else
{ kc_no_default_in_with( "f_do_check_unpattributes_in_phylum", __LINE__, __FILE__ );
return static_cast<ID>(0); }
}
}
static void v_do_check_dollarvar_in_operators(INT i, operators o, ID p)
{{
operators kc_selvar_0_1 = phylum_cast<operators>(o);
if ((kc_selvar_0_1->prod_sel() == sel_Consoperators)) {
const ID o_o = (kc_selvar_0_1)->ID_1;
const operators o_os = (kc_selvar_0_1)->operators_1;
ID phy = f_subphylumofoperator( o_o, i );
if (phy->eq(f_emptyId())) {
v_report(NonFatal( FileLine( i->file, i->line ),
Problem1S1INT1S1ID( "illegal dollar variable", i,
"not that many subterms in operator", o_o )));
} else if (! p->eq( phy )) {
v_report(NonFatal( FileLine( i->file, i->line ),
Problem1S1INT1S1ID1S1ID( " type mismatch for dollar varariable:", i,
"; old type", p, "; new type", phy )));
}
v_do_check_dollarvar_in_operators( i, o_os, p );
} else
if ((kc_selvar_0_1->prod_sel() == sel_Niloperators)) {
/* EMPTY */
} else
kc_no_default_in_with( "v_do_check_dollarvar_in_operators", __LINE__, __FILE__ );
}
}
bool f_attribute_in_phylym(ID a, ID p)
{
return f_typeof_attribute_in_phylym(a, p)->eq(f_emptyId()) ? false : true;
}
ID f_typeof_attribute_in_phylym(ID a, ID p)
{
phylumdeclaration tmp = f_lookupdecl( p );
if ( tmp == 0 ) {
v_report(NonFatal( FileLine( p->file, p->line ),
Problem1S1ID( "internal error: could not find declaration of phylum:",
p )));
return f_emptyId();
}
{
phylumdeclaration kc_selvar_0_1 = phylum_cast<phylumdeclaration>( tmp );
if ((kc_selvar_0_1->prod_sel() == sel_PhylumDeclaration) && (phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_0_1)->Ccode_option_1->prod_sel() == sel_CcodeOption)) {
const attributes attrs = phylum_cast<const impl_Ccode_option_CcodeOption*>(phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_0_1)->Ccode_option_1)->attributes_1;
{
attributes kc_fe_selvar_1 = attrs ;
while(
kc_fe_selvar_1->prod_sel() == sel_Consattributes
) {
attribute kc_selvar_1_1 = kc_fe_selvar_1->attribute_1;
{
{
if ((kc_selvar_1_1->prod_sel() == sel_Attribute)) {
const ID a_type = phylum_cast<const impl_attribute_Attribute*>(kc_selvar_1_1)->ID_1;
const ID a_id = phylum_cast<const impl_attribute_Attribute*>(kc_selvar_1_1)->ID_2;
if (a->eq(a_id))
return a_type;
} else
{/* EMPTY */ /*skip: no matching pattern in foreach patterns*/}
}
}
kc_fe_selvar_1 = kc_fe_selvar_1->attributes_1;
}
}
{
fndeclarations kc_fe_selvar_1 = kc_selvar_0_1->additional_members;
while(
kc_fe_selvar_1->prod_sel() == sel_Consfndeclarations
) {
fndeclaration kc_selvar_1_1 = kc_fe_selvar_1->fndeclaration_1;
{
{
if ((kc_selvar_1_1->prod_sel() == sel_AcMemberDeclaration) && (phylum_cast<const impl_fndeclaration_AcMemberDeclaration*>(kc_selvar_1_1)->ac_declaration_specifiers_1->prod_sel() == sel_Consac_declaration_specifiers) && ((phylum_cast<const impl_fndeclaration_AcMemberDeclaration*>(kc_selvar_1_1)->ac_declaration_specifiers_1)->ac_declaration_specifier_1->prod_sel() == sel_AcDeclSpecTypeSpec) && (phylum_cast<const impl_ac_declaration_specifier_AcDeclSpecTypeSpec*>((phylum_cast<const impl_fndeclaration_AcMemberDeclaration*>(kc_selvar_1_1)->ac_declaration_specifiers_1)->ac_declaration_specifier_1)->ac_type_specifier_1->prod_sel() == sel_AcTypeSpec) && (phylum_cast<const impl_fndeclaration_AcMemberDeclaration*>(kc_selvar_1_1)->ac_declarator_1->prod_sel() == sel_AcDeclarator) && (phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_AcMemberDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1->prod_sel() == sel_AcMemberDecl)) {
const ID a_type = phylum_cast<const impl_ac_type_specifier_AcTypeSpec*>(phylum_cast<const impl_ac_declaration_specifier_AcDeclSpecTypeSpec*>((phylum_cast<const impl_fndeclaration_AcMemberDeclaration*>(kc_selvar_1_1)->ac_declaration_specifiers_1)->ac_declaration_specifier_1)->ac_type_specifier_1)->ID_1;
const ID a_id = phylum_cast<const impl_ac_direct_declarator_AcMemberDecl*>(phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_AcMemberDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1)->ID_2;
if (a->eq(a_id))
return a_type;
} else
{/* EMPTY */ /*skip: no matching pattern in foreach patterns*/}
}
}
kc_fe_selvar_1 = kc_fe_selvar_1->fndeclarations_1;
}
}
return f_emptyId();
} else
{ kc_no_default_in_with( "f_typeof_attribute_in_phylym", __LINE__, __FILE__ );
return static_cast<ID>(0); }
}
}
ID f_subphylumofoperator(ID o, INT i)
{{
INT kc_selvar_0_1 = phylum_cast<INT>(i);
if ((kc_selvar_0_1->prod_sel() == sel_Int)) {
const integer ii = phylum_cast<const impl_INT_Int*>(kc_selvar_0_1)->integer_1;
if (ii->value == 0) {
return f_phylumofoperator( o );
} else {
return f_subphylum( f_argumentsofoperator( o ), i );
}
} else
{ kc_no_default_in_with( "f_subphylumofoperator", __LINE__, __FILE__ );
return static_cast<ID>(0); }
}
}
ID f_subphylum(arguments a, INT i)
{
return f_do_subphylum( a, i, a->length() );
}
static ID f_do_subphylum(arguments a, INT i, int a_i)
{{
arguments kc_selvar_0_1 = phylum_cast<arguments>(a);
if ((kc_selvar_0_1->prod_sel() == sel_Consarguments)) {
const ID a_a = (kc_selvar_0_1)->ID_1;
const arguments a_as = (kc_selvar_0_1)->arguments_1;
{
INT kc_selvar_1_1 = phylum_cast<INT>( i );
if ((kc_selvar_1_1->prod_sel() == sel_Int)) {
const integer ii = phylum_cast<const impl_INT_Int*>(kc_selvar_1_1)->integer_1;
if (ii->value == a_i) {
return a_a;
} else {
return f_do_subphylum( a_as, i, a_i - 1 );
}
} else
{ kc_no_default_in_with( "f_do_subphylum", __LINE__, __FILE__ );
return static_cast<ID>(0); }
}
} else
if ((kc_selvar_0_1->prod_sel() == sel_Nilarguments)) {
return f_emptyId();
} else
{ kc_no_default_in_with( "f_do_subphylum", __LINE__, __FILE__ );
return static_cast<ID>(0); }
}
}
argument f_argumentofoperator(ID o, INT i)
{{
INT kc_selvar_0_1 = phylum_cast<INT>(i);
if ((kc_selvar_0_1->prod_sel() == sel_Int)) {
const integer ii = phylum_cast<const impl_INT_Int*>(kc_selvar_0_1)->integer_1;
if (ii->value == 0) {
return Argument( f_phylumofoperator( o ), mkinteger(0));
} else {
return f_argument( f_argumentsofoperator( o ), i );
}
} else
{ kc_no_default_in_with( "f_argumentofoperator", __LINE__, __FILE__ );
return static_cast<argument>(0); }
}
}
argument f_argument(arguments a, INT i)
{
return f_do_argument( a, i, a->length() );
}
static argument f_do_argument(arguments a, INT i, int a_i)
{{
arguments kc_selvar_0_1 = phylum_cast<arguments>(a);
if ((kc_selvar_0_1->prod_sel() == sel_Consarguments)) {
const ID a_a = (kc_selvar_0_1)->ID_1;
const arguments a_as = (kc_selvar_0_1)->arguments_1;
{
INT kc_selvar_1_1 = phylum_cast<INT>( i );
if ((kc_selvar_1_1->prod_sel() == sel_Int)) {
const integer ii = phylum_cast<const impl_INT_Int*>(kc_selvar_1_1)->integer_1;
if (ii->value == a_i) {
return Argument( a_a, mkinteger(a->seqnr) );
} else {
return f_do_argument( a_as, i, a_i - 1 );
}
} else
{ kc_no_default_in_with( "f_do_argument", __LINE__, __FILE__ );
return static_cast<argument>(0); }
}
} else
if ((kc_selvar_0_1->prod_sel() == sel_Nilarguments)) {
return Argument(f_emptyId(), mkinteger(0));
} else
{ kc_no_default_in_with( "f_do_argument", __LINE__, __FILE__ );
return static_cast<argument>(0); }
}
}
ID f_phylumofoutmostpattern(outmostpattern p)
{{
outmostpattern kc_selvar_0_1 = phylum_cast<outmostpattern>(p);
if ((kc_selvar_0_1->prod_sel() == sel_OPWildcard)) {
return f_emptyId();
} else
if ((kc_selvar_0_1->prod_sel() == sel_OPDefault)) {
return f_emptyId();
} else
if ((kc_selvar_0_1->prod_sel() == sel_OPNonLeafVariable)) {
const outmostpattern r_p = phylum_cast<const impl_outmostpattern_OPNonLeafVariable*>(kc_selvar_0_1)->outmostpattern_1;
return f_phylumofoutmostpattern( r_p );
} else
if ((kc_selvar_0_1->prod_sel() == sel_OPOperator)) {
const ID o = phylum_cast<const impl_outmostpattern_OPOperator*>(kc_selvar_0_1)->ID_1;
return f_phylumofoperator( o );
} else
if ((kc_selvar_0_1->prod_sel() == sel_OPOperatorWildcard)) {
const ID o = phylum_cast<const impl_outmostpattern_OPOperatorWildcard*>(kc_selvar_0_1)->ID_1;
return f_phylumofoperator( o );
} else
{ kc_no_default_in_with( "f_phylumofoutmostpattern", __LINE__, __FILE__ );
return static_cast<ID>(0); }
}
}
ID f_operatorofphylum(ID p, int i)
{
phylumdeclaration tmp = f_lookupdecl( p );
if ( tmp == 0 ) {
v_report(NonFatal( FileLine( p->file, p->line ),
Problem1S1ID( "internal error: could not find declaration of phylum:",
p )));
return f_emptyId();
}
{
phylumdeclaration kc_selvar_0_1 = phylum_cast<phylumdeclaration>( tmp );
if ((kc_selvar_0_1->prod_sel() == sel_PhylumDeclaration)) {
const productionblock pb = phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_0_1)->productionblock_1;
{
productionblock kc_selvar_1_1 = phylum_cast<productionblock>( pb );
if ((kc_selvar_1_1->prod_sel() == sel_PredefinedAlternatives)) {
const alternatives a = phylum_cast<const impl_productionblock_PredefinedAlternatives*>(kc_selvar_1_1)->alternatives_1;
alternative tmp_a = f_alternative( a, i );
if ( tmp_a == 0 ) {
v_report(NonFatal( FileLine( p->file, p->line ),
Problem1S1ID(
"internal error: could not find operators of phylum:",
p )));
return f_emptyId();
}
{
alternative kc_selvar_2_1 = phylum_cast<alternative>( tmp_a );
if ((kc_selvar_2_1->prod_sel() == sel_Alternative)) {
const ID id = phylum_cast<const impl_alternative_Alternative*>(kc_selvar_2_1)->ID_1;
return id;
} else
{ kc_no_default_in_with( "f_operatorofphylum", __LINE__, __FILE__ );
return static_cast<ID>(0); }
}
} else
if ((kc_selvar_1_1->prod_sel() == sel_NonlistAlternatives)) {
const alternatives a = phylum_cast<const impl_productionblock_NonlistAlternatives*>(kc_selvar_1_1)->alternatives_1;
alternative tmp_a = f_alternative( a, i );
if ( tmp_a == 0 ) {
v_report(NonFatal( FileLine( p->file, p->line ),
Problem1S1ID(
"internal error: could not find operators of phylum:",
p )));
return f_emptyId();
}
{
alternative kc_selvar_2_1 = phylum_cast<alternative>( tmp_a );
if ((kc_selvar_2_1->prod_sel() == sel_Alternative)) {
const ID id = phylum_cast<const impl_alternative_Alternative*>(kc_selvar_2_1)->ID_1;
return id;
} else
{ kc_no_default_in_with( "f_operatorofphylum", __LINE__, __FILE__ );
return static_cast<ID>(0); }
}
} else
if ((kc_selvar_1_1->prod_sel() == sel_ListAlternatives)) {
const alternatives a = phylum_cast<const impl_productionblock_ListAlternatives*>(kc_selvar_1_1)->alternatives_1;
alternative tmp_a = f_alternative( a, i );
if ( tmp_a == 0 ) {
v_report(NonFatal( FileLine( p->file, p->line ),
Problem1S1ID(
"internal error: could not find operators of phylum:",
p )));
return f_emptyId();
}
{
alternative kc_selvar_2_1 = phylum_cast<alternative>( tmp_a );
if ((kc_selvar_2_1->prod_sel() == sel_Alternative)) {
const ID id = phylum_cast<const impl_alternative_Alternative*>(kc_selvar_2_1)->ID_1;
return id;
} else
{ kc_no_default_in_with( "f_operatorofphylum", __LINE__, __FILE__ );
return static_cast<ID>(0); }
}
} else
if ((kc_selvar_1_1->prod_sel() == sel_Emptyproductionblock)) {
return f_emptyId();
} else
{ kc_no_default_in_with( "f_operatorofphylum", __LINE__, __FILE__ );
return static_cast<ID>(0); }
}
} else
{ kc_no_default_in_with( "f_operatorofphylum", __LINE__, __FILE__ );
return static_cast<ID>(0); }
}
}
alternative f_alternative(alternatives a, int i)
{
return f_do_alternative( a, i, a->length() );
}
static alternative f_do_alternative(alternatives a, int i, int a_i)
{{
alternatives kc_selvar_0_1 = phylum_cast<alternatives>(a);
if ((kc_selvar_0_1->prod_sel() == sel_Consalternatives)) {
const alternative a_a = (kc_selvar_0_1)->alternative_1;
const alternatives a_as = (kc_selvar_0_1)->alternatives_1;
if (i == a_i) {
return a_a;
} else {
return f_do_alternative( a_as, i, a_i - 1 );
}
} else
if ((kc_selvar_0_1->prod_sel() == sel_Nilalternatives)) {
return 0;
} else
{ kc_no_default_in_with( "f_do_alternative", __LINE__, __FILE__ );
return static_cast<alternative>(0); }
}
}
void v_reset_phylumdeclaration_marks()
{
{
phylumdeclarations kc_fe_selvar_1 = Thephylumdeclarations ;
while(
kc_fe_selvar_1->prod_sel() == sel_Consphylumdeclarations
) {
phylumdeclaration kc_selvar_0_1 = kc_fe_selvar_1->phylumdeclaration_1;
{
{
{
const phylumdeclaration p = kc_selvar_0_1;
p->marked = 0;
}
}
}
kc_fe_selvar_1 = kc_fe_selvar_1->phylumdeclarations_1;
}
}
}
void v_reset_variables_type(variables v)
{
{
variables kc_fe_selvar_1 = v ;
while(
kc_fe_selvar_1->prod_sel() == sel_Consvariables
) {
ID kc_selvar_0_1 = kc_fe_selvar_1->ID_1;
{
{
{
const ID var = kc_selvar_0_1;
{
ID kc_selvar_1_1 = phylum_cast<ID>( var );
if ((kc_selvar_1_1->prod_sel() == sel_Id)) {
const uniqID uid = phylum_cast<const impl_ID_Id*>(kc_selvar_1_1)->uniqID_1;
{
IDtype kc_selvar_2_1 = phylum_cast<IDtype>( uid->type );
if ((kc_selvar_2_1->prod_sel() == sel_ITPatternVariable)) {
const integer uid_scope = phylum_cast<const impl_IDtype_ITPatternVariable*>(kc_selvar_2_1)->integer_1;
{
scopetypefilelinestack kc_selvar_3_1 = phylum_cast<scopetypefilelinestack>( uid->scopeinfo );
if ((kc_selvar_3_1->prod_sel() == sel_Consscopetypefilelinestack) && ((kc_selvar_3_1)->scopetypefileline_1->prod_sel() == sel_ScopeTypeFileLine)) {
const integer s = phylum_cast<const impl_scopetypefileline_ScopeTypeFileLine*>((kc_selvar_3_1)->scopetypefileline_1)->integer_1;
const IDtype t = phylum_cast<const impl_scopetypefileline_ScopeTypeFileLine*>((kc_selvar_3_1)->scopetypefileline_1)->IDtype_1;
const casestring f = phylum_cast<const impl_scopetypefileline_ScopeTypeFileLine*>((kc_selvar_3_1)->scopetypefileline_1)->casestring_1;
const integer l = phylum_cast<const impl_scopetypefileline_ScopeTypeFileLine*>((kc_selvar_3_1)->scopetypefileline_1)->integer_2;
const scopetypefilelinestack r_scopeinfo = (kc_selvar_3_1)->scopetypefilelinestack_1;
if (s == uid_scope) {
uid->type = t;
uid->file = f;
uid->line = l->value;
uid->scopeinfo = r_scopeinfo;
}
} else
if ((kc_selvar_3_1->prod_sel() == sel_Nilscopetypefilelinestack)) {
uid->type = ITUnknown();
uid->file = mkcasestring("");
uid->line = 0;
} else
kc_no_default_in_with( "v_reset_variables_type", __LINE__, __FILE__ );
}
} else
if ((kc_selvar_2_1->prod_sel() == sel_ITUserRView)) {
/* EMPTY */
} else
if ((kc_selvar_2_1->prod_sel() == sel_ITPredefinedRView)) {
/* EMPTY */
} else
if ((kc_selvar_2_1->prod_sel() == sel_ITUserUView)) {
/* EMPTY */
} else
if ((kc_selvar_2_1->prod_sel() == sel_ITPredefinedUView)) {
/* EMPTY */
} else
if ((kc_selvar_2_1->prod_sel() == sel_ITUserFunction)) {
/* EMPTY */
} else
if ((kc_selvar_2_1->prod_sel() == sel_ITStorageClass)) {
/* EMPTY */
} else
if ((kc_selvar_2_1->prod_sel() == sel_ITPredefinedStorageClass)) {
/* EMPTY */
} else
if ((kc_selvar_2_1->prod_sel() == sel_ITUserOperator)) {
/* EMPTY */
} else
if ((kc_selvar_2_1->prod_sel() == sel_ITPredefinedOperator)) {
/* EMPTY */
} else
if ((kc_selvar_2_1->prod_sel() == sel_ITUserPhylum)) {
/* EMPTY */
} else
if ((kc_selvar_2_1->prod_sel() == sel_ITPredefinedPhylum)) {
/* EMPTY */
} else
if ((kc_selvar_2_1->prod_sel() == sel_ITUnknown)) {
/* EMPTY */
} else
kc_no_default_in_with( "v_reset_variables_type", __LINE__, __FILE__ );
}
} else
kc_no_default_in_with( "v_reset_variables_type", __LINE__, __FILE__ );
}
}
}
}
kc_fe_selvar_1 = kc_fe_selvar_1->variables_1;
}
}
}
void v_add_to_uviewnames(ID v)
{
{
viewnames kc_fe_selvar_1 = Theuviewnames ;
while(
kc_fe_selvar_1->prod_sel() == sel_Consviewnames
) {
ID kc_selvar_0_1 = kc_fe_selvar_1->ID_1;
{
{
{
const ID vn = kc_selvar_0_1;
if ( vn->eq( v )) return;
}
}
}
kc_fe_selvar_1 = kc_fe_selvar_1->viewnames_1;
}
}
Theuviewnames = Consviewnames( v, Theuviewnames );
}
void v_add_to_uviewnames_ext(ID v)
{
viewnames uviewnames=Theuviewnames;
while(uviewnames) {
{
viewnames kc_selvar_0_1 = phylum_cast<viewnames>(uviewnames);
if ((kc_selvar_0_1->prod_sel() == sel_Nilviewnames)) {
uviewnames=0;
} else
if ((kc_selvar_0_1->prod_sel() == sel_Consviewnames)) {
const viewnames node = kc_selvar_0_1;
const ID vn = (kc_selvar_0_1)->ID_1;
const viewnames tail = (kc_selvar_0_1)->viewnames_1;
if(vn->eq(v)) {
if(!node->is_extern)
node->is_extern=true;
return;
}
uviewnames=tail;
} else
kc_no_default_in_with( "v_add_to_uviewnames_ext", __LINE__, __FILE__ );
}
}
Theuviewnames = Consviewnames( v, Theuviewnames );
Theuviewnames->is_extern=true;
}
void v_add_to_rviewnames(ID v)
{
{
viewnames kc_fe_selvar_1 = Therviewnames ;
while(
kc_fe_selvar_1->prod_sel() == sel_Consviewnames
) {
ID kc_selvar_0_1 = kc_fe_selvar_1->ID_1;
{
{
{
const ID vn = kc_selvar_0_1;
if ( vn->eq( v )) return;
}
}
}
kc_fe_selvar_1 = kc_fe_selvar_1->viewnames_1;
}
}
Therviewnames = Consviewnames( v, Therviewnames );
}
void v_add_to_rviewnames_ext(ID v)
{
viewnames rviewnames=Therviewnames;
while(rviewnames) {
{
viewnames kc_selvar_0_1 = phylum_cast<viewnames>(rviewnames);
if ((kc_selvar_0_1->prod_sel() == sel_Nilviewnames)) {
rviewnames=0;
} else
if ((kc_selvar_0_1->prod_sel() == sel_Consviewnames)) {
const viewnames node = kc_selvar_0_1;
const ID vn = (kc_selvar_0_1)->ID_1;
const viewnames tail = (kc_selvar_0_1)->viewnames_1;
if(vn->eq(v)) {
if(!node->is_extern)
node->is_extern=true;
return;
}
rviewnames=tail;
} else
kc_no_default_in_with( "v_add_to_rviewnames_ext", __LINE__, __FILE__ );
}
}
Therviewnames = Consviewnames( v, Therviewnames );
Therviewnames->is_extern=true;
}
void v_add_to_storageclasses(ID v, ID p)
{
Thestorageclasses =
do_add_to_storageclasses( v, p, Thestorageclasses, Thestorageclasses );
}
static storageclasses do_add_to_storageclasses(ID v, ID p, storageclasses s, storageclasses all)
{{
storageclasses kc_selvar_0_1 = phylum_cast<storageclasses>(s);
if ((kc_selvar_0_1->prod_sel() == sel_Consstorageclasses)) {
const ID sc = (kc_selvar_0_1)->ID_1;
const storageclasses r_sc = (kc_selvar_0_1)->storageclasses_1;
if ( sc->eq( v )) {
if (! p->eq(f_emptyId())) {
s->phyla = Consphylumnames( p, s->phyla );
}
return all;
} else {
return do_add_to_storageclasses( v, p, r_sc, all );
}
} else
if ((kc_selvar_0_1->prod_sel() == sel_Nilstorageclasses)) {
storageclasses tmp = Consstorageclasses( v, all );
tmp->phyla = Nilphylumnames();
if (! p->eq(f_emptyId())) {
tmp->phyla = Consphylumnames( p, tmp->phyla );
}
return tmp;
} else
{ kc_no_default_in_with( "do_add_to_storageclasses", __LINE__, __FILE__ );
return static_cast<storageclasses>(0); }
}
}
void collect_strings()
{
long i;
long ssize=last_text_nr()+1;
int lsize=Thelanguages->length();
The_Nilunparseitems=Nilunparseitems();
string_collection=new unparseitems*[ssize];
for( i=0; i<ssize;i++) {
int j=0;
string_collection[i]=new unparseitems[lsize];
for(;j<lsize;j++)
string_collection[i][j]=The_Nilunparseitems;
}
Theunparsedeclarations->unparse(v_null_printer, view_collect_strings);
}
void add_string_to_collection(unparseitem s)
{{
unparseitem kc_selvar_0_1 = phylum_cast<unparseitem>(s);
if ((kc_selvar_0_1->prod_sel() == sel_UnpStr) && (phylum_cast<const impl_unparseitem_UnpStr*>(kc_selvar_0_1)->languageoption_1->prod_sel() == sel_LanguageList)) {
const languagenames langs = phylum_cast<const impl_languageoption_LanguageList*>(phylum_cast<const impl_unparseitem_UnpStr*>(kc_selvar_0_1)->languageoption_1)->languagenames_1;
long nr=s->text_nr;
{
languagenames kc_fe_selvar_1 = langs;
while(
kc_fe_selvar_1->prod_sel() == sel_Conslanguagenames
) {
ID kc_selvar_1_1 = kc_fe_selvar_1->ID_1;
{
{
if ((kc_selvar_1_1->prod_sel() == sel_Id)) {
const uniqID u_id = phylum_cast<const impl_ID_Id*>(kc_selvar_1_1)->uniqID_1;
{
IDtype kc_selvar_2_1 = phylum_cast<IDtype>((IDtype)u_id->type);
if ((kc_selvar_2_1->prod_sel() == sel_ITLanguageName)) {
const integer l = phylum_cast<const impl_IDtype_ITLanguageName*>(kc_selvar_2_1)->integer_1;
unparseitems entry=string_collection[nr][l->value];
{
unparseitems kc_selvar_3_1 = phylum_cast<unparseitems>(entry);
if ((kc_selvar_3_1->prod_sel() == sel_Consunparseitems) && ((kc_selvar_3_1)->unparseitem_1->prod_sel() == sel_UnpStr) && (phylum_cast<const impl_unparseitem_UnpStr*>((kc_selvar_3_1)->unparseitem_1)->languageoption_1->prod_sel() == sel_NoLanguagename) && ((kc_selvar_3_1)->unparseitems_1->prod_sel() == sel_Nilunparseitems)) {
string_collection[nr][l->value]=Consunparseitems(s,The_Nilunparseitems);
} else
if ((kc_selvar_3_1->prod_sel() == sel_Nilunparseitems)) {
string_collection[nr][l->value]=Consunparseitems(s,The_Nilunparseitems);
} else
{
string_collection[nr][l->value]= Consunparseitems(s,entry);
}
}
} else
{
/* EMPTY */
}
}
} else
{/* EMPTY */ /*skip: no matching pattern in foreach patterns*/}
}
}
kc_fe_selvar_1 = kc_fe_selvar_1->languagenames_1;
}
}
} else
if ((kc_selvar_0_1->prod_sel() == sel_UnpStr) && (phylum_cast<const impl_unparseitem_UnpStr*>(kc_selvar_0_1)->languageoption_1->prod_sel() == sel_NoLanguagename)) {
int lsize=Thelanguages->length();
long nr=s->text_nr;
int i;
for(i=0;i<lsize;i++) {
unparseitems entry=string_collection[nr][i];
string_collection[nr][i]= Consunparseitems(s,entry);
}
} else
kc_no_default_in_with( "add_string_to_collection", __LINE__, __FILE__ );
}
}
void unparse_string_collection()
{
int l=Thelanguages->length();
long ssize=last_text_nr()+1;
{
languagenames kc_fe_selvar_1 = Thelanguages;
while(
kc_fe_selvar_1->prod_sel() == sel_Conslanguagenames
) {
ID kc_selvar_0_1 = kc_fe_selvar_1->ID_1;
{
{
{
const ID language = kc_selvar_0_1;
long nr;
l--;
language->unparse(v_ccfile_printer,view_output_collection);
for(nr=0;nr<ssize;nr++) {
static char buf[30];
unparseitems entry=string_collection[nr][l];
sprintf(buf,"/*%ld*/",nr);
v_ccfile_printer(buf,base_uview);
entry->unparse(v_ccfile_printer,view_output_collection);
v_ccfile_printer(",\n",base_uview);
}
v_ccfile_printer("};\n\n",base_uview);
}
}
}
kc_fe_selvar_1 = kc_fe_selvar_1->languagenames_1;
}
}
v_ccfile_printer("char **kc_language=kc_language_",base_uview);
{
languagenames kc_selvar_0_1 = phylum_cast<languagenames>((languagenames)Thelanguages);
if ((kc_selvar_0_1->prod_sel() == sel_Conslanguagenames)) {
const ID l = (kc_selvar_0_1)->ID_1;
l->unparse(v_ccfile_printer,base_uview);
} else
kc_no_default_in_with( "unparse_string_collection", __LINE__, __FILE__ );
}
v_ccfile_printer(";\n\n",base_uview);
}
phylumnames f_phylumnames_foreachwith_vars(idCexpressions a_idCexpressions)
{
return t_f_phylumnames_foreachwith_vars(a_idCexpressions);
}
phylumnames t_f_phylumnames_foreachwith_vars(idCexpressions a_idCexpressions)
{{
idCexpressions kc_selvar_0_1 = phylum_cast<idCexpressions>(a_idCexpressions);
if ((kc_selvar_0_1->prod_sel() == sel_ConsidCexpressions) && ((kc_selvar_0_1)->idCexpression_1->prod_sel() == sel_IdCexpression)) {
const ID id = phylum_cast<const impl_idCexpression_IdCexpression*>((kc_selvar_0_1)->idCexpression_1)->ID_1;
const idCexpressions t = (kc_selvar_0_1)->idCexpressions_1;
return Consphylumnames(
f_listelementphylum(id),
t_f_phylumnames_foreachwith_vars( t ));
} else
if ((kc_selvar_0_1->prod_sel() == sel_NilidCexpressions)) {
return Nilphylumnames();
} else
{ kc_no_default_in_with( "t_f_phylumnames_foreachwith_vars", __LINE__, __FILE__ );
return static_cast<phylumnames>(0); }
}
}
phylumnames f_phylumnames_foreachwith_listvars(idCexpressions a_idCexpressions)
{
return t_f_phylumnames_foreachwith_listvars(a_idCexpressions);
}
phylumnames t_f_phylumnames_foreachwith_listvars(idCexpressions a_idCexpressions)
{{
idCexpressions kc_selvar_0_1 = phylum_cast<idCexpressions>(a_idCexpressions);
if ((kc_selvar_0_1->prod_sel() == sel_ConsidCexpressions) && ((kc_selvar_0_1)->idCexpression_1->prod_sel() == sel_IdCexpression)) {
const ID id = phylum_cast<const impl_idCexpression_IdCexpression*>((kc_selvar_0_1)->idCexpression_1)->ID_1;
const idCexpressions t = (kc_selvar_0_1)->idCexpressions_1;
return Consphylumnames(
id,
t_f_phylumnames_foreachwith_listvars( t ));
} else
if ((kc_selvar_0_1->prod_sel() == sel_NilidCexpressions)) {
return Nilphylumnames();
} else
{ kc_no_default_in_with( "t_f_phylumnames_foreachwith_listvars", __LINE__, __FILE__ );
return static_cast<phylumnames>(0); }
}
}
void f_collect_members(fndeclarations fns)
{
{
fndeclarations kc_fe_selvar_1 = fns;
while(
kc_fe_selvar_1->prod_sel() == sel_Consfndeclarations
) {
fndeclaration kc_selvar_0_1 = kc_fe_selvar_1->fndeclaration_1;
{
{
{
const fndeclaration fn = kc_selvar_0_1;
{
fndeclaration kc_selvar_1_1 = phylum_cast<fndeclaration>(fn);
if ((kc_selvar_1_1->prod_sel() == sel_FnAcDeclaration) && (phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1->prod_sel() == sel_AcDeclarator) && (phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1->prod_sel() == sel_AcQualifiedDeclProto) && (phylum_cast<const impl_ac_direct_declarator_AcQualifiedDeclProto*>(phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1)->ac_class_qualifier_list_1->prod_sel() == sel_Consac_class_qualifier_list) && ((phylum_cast<const impl_ac_direct_declarator_AcQualifiedDeclProto*>(phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1)->ac_class_qualifier_list_1)->ac_class_qualifier_list_1->prod_sel() == sel_Nilac_class_qualifier_list) && (phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->fnclass_1->prod_sel() == sel_MemberFn)) {
const ID id = (phylum_cast<const impl_ac_direct_declarator_AcQualifiedDeclProto*>(phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1)->ac_class_qualifier_list_1)->ID_1;
phylumdeclaration ph_decl=f_phylumdeclofid(id);
alternative op=f_alternativeofoperator(id);
if(ph_decl)
ph_decl->additional_members=Consfndeclarations(fn, ph_decl->additional_members);
else if(op)
op->additional_members=Consfndeclarations(fn, op->additional_members);
} else
if ((kc_selvar_1_1->prod_sel() == sel_FnAcDeclaration) && (phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1->prod_sel() == sel_AcDeclarator) && (phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1->prod_sel() == sel_AcQualifiedDeclProto) && (phylum_cast<const impl_ac_direct_declarator_AcQualifiedDeclProto*>(phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1)->ac_direct_declarator_1->prod_sel() == sel_AcDirectDeclId) && (phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->fnclass_1->prod_sel() == sel_DestructorFn)) {
const ID id = phylum_cast<const impl_ac_direct_declarator_AcDirectDeclId*>(phylum_cast<const impl_ac_direct_declarator_AcQualifiedDeclProto*>(phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1)->ac_direct_declarator_1)->ID_1;
phylumdeclaration ph_decl=f_phylumdeclofid(id);
alternative op=f_alternativeofoperator(id);
if(ph_decl)
ph_decl->additional_members=Consfndeclarations(fn, ph_decl->additional_members);
else if(op)
op->additional_members=Consfndeclarations(fn, op->additional_members);
} else
if ((kc_selvar_1_1->prod_sel() == sel_FnAcDeclaration) && (phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1->prod_sel() == sel_AcDeclarator) && (phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1->prod_sel() == sel_AcQualifiedDeclProto) && (phylum_cast<const impl_ac_direct_declarator_AcQualifiedDeclProto*>(phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1)->ac_direct_declarator_1->prod_sel() == sel_AcDirectDeclId) && (phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->fnclass_1->prod_sel() == sel_ConstructorFn)) {
const ID id = phylum_cast<const impl_ac_direct_declarator_AcDirectDeclId*>(phylum_cast<const impl_ac_direct_declarator_AcQualifiedDeclProto*>(phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1)->ac_direct_declarator_1)->ID_1;
phylumdeclaration ph_decl=f_phylumdeclofid(id);
alternative op=f_alternativeofoperator(id);
if(ph_decl)
ph_decl->additional_members=Consfndeclarations(fn, ph_decl->additional_members);
else if(op)
op->additional_members=Consfndeclarations(fn, op->additional_members);
} else
if ((kc_selvar_1_1->prod_sel() == sel_FnAcDeclaration) && (phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1->prod_sel() == sel_AcDeclarator) && (phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1->prod_sel() == sel_AcQualifiedDeclProto) && (phylum_cast<const impl_ac_direct_declarator_AcQualifiedDeclProto*>(phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1)->ac_direct_declarator_1->prod_sel() == sel_AcConvOperatorDecl) && (phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->fnclass_1->prod_sel() == sel_ConvOperatorFn)) {
const ID id = phylum_cast<const impl_ac_direct_declarator_AcConvOperatorDecl*>(phylum_cast<const impl_ac_direct_declarator_AcQualifiedDeclProto*>(phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_FnAcDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1)->ac_direct_declarator_1)->ID_1;
phylumdeclaration ph_decl=f_phylumdeclofid(id);
alternative op=f_alternativeofoperator(id);
if(ph_decl)
ph_decl->additional_members=Consfndeclarations(fn, ph_decl->additional_members);
else if(op)
op->additional_members=Consfndeclarations(fn, op->additional_members);
} else
if ((kc_selvar_1_1->prod_sel() == sel_AcMemberDeclaration) && (phylum_cast<const impl_fndeclaration_AcMemberDeclaration*>(kc_selvar_1_1)->ac_declarator_1->prod_sel() == sel_AcDeclarator) && (phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_AcMemberDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1->prod_sel() == sel_AcMemberDecl)) {
const ID id = phylum_cast<const impl_ac_direct_declarator_AcMemberDecl*>(phylum_cast<const impl_ac_declarator_AcDeclarator*>(phylum_cast<const impl_fndeclaration_AcMemberDeclaration*>(kc_selvar_1_1)->ac_declarator_1)->ac_direct_declarator_1)->ID_1;
phylumdeclaration ph_decl=f_phylumdeclofid(id);
alternative op=f_alternativeofoperator(id);
if(ph_decl)
ph_decl->additional_members=Consfndeclarations(fn, ph_decl->additional_members);
else if(op)
op->additional_members=Consfndeclarations(fn, op->additional_members);
} else
{
}
}
}
}
}
kc_fe_selvar_1 = kc_fe_selvar_1->fndeclarations_1;
}
}
}
ID f_id_of_ctor_dtor_decl(ac_declarator decl)
{{
ac_declarator kc_selvar_0_1 = phylum_cast<ac_declarator>(decl);
if ((kc_selvar_0_1->prod_sel() == sel_AcDeclarator) && (phylum_cast<const impl_ac_declarator_AcDeclarator*>(kc_selvar_0_1)->ac_direct_declarator_1->prod_sel() == sel_AcQualifiedDeclProto) && (phylum_cast<const impl_ac_direct_declarator_AcQualifiedDeclProto*>(phylum_cast<const impl_ac_declarator_AcDeclarator*>(kc_selvar_0_1)->ac_direct_declarator_1)->ac_direct_declarator_1->prod_sel() == sel_AcDirectDeclId)) {
const ID id = phylum_cast<const impl_ac_direct_declarator_AcDirectDeclId*>(phylum_cast<const impl_ac_direct_declarator_AcQualifiedDeclProto*>(phylum_cast<const impl_ac_declarator_AcDeclarator*>(kc_selvar_0_1)->ac_direct_declarator_1)->ac_direct_declarator_1)->ID_1;
return id;
} else
{
return NULL;
}
}
}
void prepare_base_classes(baseclass_declarations decls)
{
{
baseclass_declarations kc_fe_selvar_1 = decls;
while(
kc_fe_selvar_1->prod_sel() == sel_Consbaseclass_declarations
) {
baseclass_decl kc_selvar_0_1 = kc_fe_selvar_1->baseclass_decl_1;
{
{
if ((kc_selvar_0_1->prod_sel() == sel_BaseClassDecl)) {
const ID id = phylum_cast<const impl_baseclass_decl_BaseClassDecl*>(kc_selvar_0_1)->ID_1;
const baseclass_list bases = phylum_cast<const impl_baseclass_decl_BaseClassDecl*>(kc_selvar_0_1)->baseclass_list_1;
phylumdeclaration ph_decl=f_phylumdeclofid(id);
alternative op=f_alternativeofoperator(id);
if(ph_decl)
ph_decl->base_classes=concat(bases, ph_decl->base_classes);
else if(op)
op->base_classes=concat(bases,op->base_classes);
} else
{/* EMPTY */ /*skip: no matching pattern in foreach patterns*/}
}
}
kc_fe_selvar_1 = kc_fe_selvar_1->baseclass_declarations_1;
}
}
}
} // namespace kc