| /* translation of file "parse.k" */ |
| /* generated by: |
| * @(#)$Author$ |
| */ |
| #define KC_FUNCTIONS_parse_ |
| |
| #include <stdlib.h> |
| #include "k.h" |
| #include "parse.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 parse_kAccesSid[] = "@(#)$Id$"; |
| |
| int pg_lineno = 1; /* global line # */ |
| int pg_column = 0; /* global column # */ |
| int pg_charpos = 0; /* global charpos # */ |
| casestring pg_filename; /* global file name */ |
| int pg_no_of_arguments; /* no_of_arguments */ |
| phylumdeclarations Thephylumdeclarations; /* global phylumdecls */ |
| rwdeclarations Therwdeclarations; /* global rw-decls */ |
| fndeclarations Thefndeclarations; /* fn-decls for the file being parsed */ |
| fnfiles Thefnfiles; /* global fn-decls */ |
| includefiles Theincludefiles; /* global incl-decls */ |
| unparsedeclarations Theunparsedeclarations; /* global unp-decls */ |
| argsnumbers Theargsnumbers; /* global list of argsnumbers */ |
| viewnames Theuviewnames; /* global list of u-viewnames */ |
| viewnames Therviewnames; /* global list of r-viewnames */ |
| storageclasses Thestorageclasses; /* global list of storageclasses */ |
| languagenames Thelanguages; /* global list of used languages */ |
| baseclass_declarations Thebaseclasses; /* global list of defined baseclasses */ |
| bool pg_uviewshavebeendefined; /* global indication */ |
| bool pg_rviewshavebeendefined; /* global indication */ |
| bool pg_storageclasseshavebeendefined; /* global indication */ |
| bool pg_languageshavebeendefined; /* global indication */ |
| |
| static long language_text_nr=0; |
| static bool language_text_nr_used=false; |
| |
| #include "util.h" |
| |
| /* end included stuff */ |
| |
| |
| namespace kc { |
| |
| #ifndef KC_TRACE_PROVIDED |
| #define KC_TRACE_PROVIDED(COND,FILE,LINE,NODE) COND |
| #endif |
| |
| static ID f_ID_of_direct_decl (ac_direct_declarator d); |
| static int f_stars_of_ac_pointer_option (ac_pointer_option d); |
| static int f_stars_of_ac_pointer (ac_pointer d); |
| static bool f_is_member_fn (ac_declarator dec); |
| static bool f_static_in_ac_decl_spec (ac_declaration_specifier ds); |
| static bool f_static_in_ac_stor_class (ac_storage_class_specifier sc); |
| static ID f_ID_of_ac_declaration_specifier (ac_declaration_specifier d); |
| static ID f_ID_of_ac_type_specifier (ac_type_specifier d); |
| phylumdeclarations mergephylumdeclarations(phylumdeclaration pd, phylumdeclarations pds) |
| {{ |
| phylumdeclaration kc_selvar_0_1 = phylum_cast<phylumdeclaration>(pd); |
| if ((kc_selvar_0_1->prod_sel() == sel_PhylumDeclaration)) { |
| const ID pd_id = phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_0_1)->ID_1; |
| const storageoption pd_stopt = phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_0_1)->storageoption_1; |
| const productionblock pd_pb = phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_0_1)->productionblock_1; |
| const Ccode_option pd_ccopt = phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_0_1)->Ccode_option_1; |
| |
| phylumdeclaration fpd = f_lookupuserdecl( pd_id ); |
| if (!fpd) { |
| v_add( pd_id ); |
| return Consphylumdeclarations( pd, pds ); |
| } else if ( pd == fpd ) { |
| if ( f_added( pd_id ) ) { |
| return pds; |
| } else { |
| v_add( pd_id ); |
| return Consphylumdeclarations( pd, pds ); |
| } |
| } |
| |
| { |
| phylumdeclaration kc_selvar_1_1 = phylum_cast<phylumdeclaration>( fpd ); |
| if ((kc_selvar_1_1->prod_sel() == sel_PhylumDeclaration)) { |
| const ID fpd_id = phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_1_1)->ID_1; |
| const storageoption fpd_stopt = phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_1_1)->storageoption_1; |
| const productionblock fpd_pb = phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_1_1)->productionblock_1; |
| const Ccode_option fpd_ccopt = phylum_cast<const impl_phylumdeclaration_PhylumDeclaration*>(kc_selvar_1_1)->Ccode_option_1; |
| |
| { |
| storageoption kc_selvar_2_1 = phylum_cast<storageoption>( pd_stopt); |
| storageoption kc_selvar_2_2 = phylum_cast<storageoption>( fpd_stopt ); |
| if ((kc_selvar_2_1->prod_sel() == sel_PositiveStorageOption) && (kc_selvar_2_2->prod_sel() == sel_NegativeStorageOption) && (phylum_cast<const impl_storageoption_NegativeStorageOption*>(kc_selvar_2_2)->ID_1->eq(phylum_cast<const impl_storageoption_PositiveStorageOption*>(kc_selvar_2_1)->ID_1))) { |
| const ID id = phylum_cast<const impl_storageoption_PositiveStorageOption*>(kc_selvar_2_1)->ID_1; |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1storageoption1S1ID( "storage option mismatch ( declared as ", fpd_stopt, ") for phylum", fpd_id ))); |
| |
| } else |
| if ((kc_selvar_2_1->prod_sel() == sel_NegativeStorageOption) && (kc_selvar_2_2->prod_sel() == sel_PositiveStorageOption) && (phylum_cast<const impl_storageoption_PositiveStorageOption*>(kc_selvar_2_2)->ID_1->eq(phylum_cast<const impl_storageoption_NegativeStorageOption*>(kc_selvar_2_1)->ID_1))) { |
| const ID id = phylum_cast<const impl_storageoption_NegativeStorageOption*>(kc_selvar_2_1)->ID_1; |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1storageoption1S1ID( "storage option mismatch ( declared as ", fpd_stopt, ") for phylum", fpd_id ))); |
| |
| } else |
| if ((kc_selvar_2_1->prod_sel() == sel_PositiveStorageOption) && (kc_selvar_2_2->prod_sel() == sel_PositiveStorageOption) && (phylum_cast<const impl_storageoption_PositiveStorageOption*>(kc_selvar_2_2)->ID_1->eq(phylum_cast<const impl_storageoption_PositiveStorageOption*>(kc_selvar_2_1)->ID_1))) { |
| const ID id = phylum_cast<const impl_storageoption_PositiveStorageOption*>(kc_selvar_2_1)->ID_1; |
| |
| } else |
| if ((kc_selvar_2_1->prod_sel() == sel_NegativeStorageOption) && (kc_selvar_2_2->prod_sel() == sel_NegativeStorageOption) && (phylum_cast<const impl_storageoption_NegativeStorageOption*>(kc_selvar_2_2)->ID_1->eq(phylum_cast<const impl_storageoption_NegativeStorageOption*>(kc_selvar_2_1)->ID_1))) { |
| const ID id = phylum_cast<const impl_storageoption_NegativeStorageOption*>(kc_selvar_2_1)->ID_1; |
| |
| } else |
| if ((kc_selvar_2_1->prod_sel() == sel_NoStorageOption)) { |
| /*EMPTY*/ |
| } else |
| if ((kc_selvar_2_2->prod_sel() == sel_NoStorageOption)) { |
| static_cast<impl_phylumdeclaration_PhylumDeclaration*>(fpd)->storageoption_1 = pd_stopt; |
| } else |
| { |
| |
| |
| |
| |
| v_report(NonFatal( FileLine( pd_id->file, pd_id->line ), Problem1S1storageoption1S1ID( "storage option mismatch ( declared as ", fpd_stopt, ") for phylum", fpd_id ))); |
| |
| } |
| } |
| { |
| productionblock kc_selvar_2_1 = phylum_cast<productionblock>( pd_pb); |
| productionblock kc_selvar_2_2 = phylum_cast<productionblock>( fpd_pb ); |
| if ((kc_selvar_2_1->prod_sel() == sel_NonlistAlternatives) && (kc_selvar_2_2->prod_sel() == sel_NonlistAlternatives)) { |
| const alternatives pd_pb_a = phylum_cast<const impl_productionblock_NonlistAlternatives*>(kc_selvar_2_1)->alternatives_1; |
| const alternatives fpd_pb_a = phylum_cast<const impl_productionblock_NonlistAlternatives*>(kc_selvar_2_2)->alternatives_1; |
| |
| static_cast<impl_productionblock_NonlistAlternatives*>(fpd_pb)->alternatives_1 = concat(pd_pb_a, fpd_pb_a ); |
| |
| } else |
| if ((kc_selvar_2_1->prod_sel() == sel_NonlistAlternatives) && (kc_selvar_2_2->prod_sel() == sel_Emptyproductionblock)) { |
| static_cast<impl_phylumdeclaration_PhylumDeclaration*>(fpd)->productionblock_1 = pd_pb; |
| } else |
| if ((kc_selvar_2_1->prod_sel() == sel_PredefinedAlternatives) && (kc_selvar_2_2->prod_sel() == sel_Emptyproductionblock)) { |
| static_cast<impl_phylumdeclaration_PhylumDeclaration*>(fpd)->productionblock_1 = pd_pb; |
| } else |
| if ((kc_selvar_2_1->prod_sel() == sel_ListAlternatives) && (kc_selvar_2_2->prod_sel() == sel_Emptyproductionblock)) { |
| static_cast<impl_phylumdeclaration_PhylumDeclaration*>(fpd)->productionblock_1 = pd_pb; |
| } else |
| if ((kc_selvar_2_1->prod_sel() == sel_Emptyproductionblock) && (kc_selvar_2_2->prod_sel() == sel_Emptyproductionblock)) { |
| /*EMPTY*/ |
| } else |
| if ((kc_selvar_2_1->prod_sel() == sel_NonlistAlternatives)) { |
| |
| v_report(NonFatal( FileLine( pd_id->file, pd_id->line ), Problem1S1ID( "production block mismatch: trying to extend phylum", pd_id ))); |
| |
| } else |
| if ((kc_selvar_2_1->prod_sel() == sel_PredefinedAlternatives)) { |
| |
| v_report(NonFatal( FileLine( pd_id->file, pd_id->line ), Problem1S1ID( "production block mismatch: trying to predefine phylum", pd_id ))); |
| |
| } else |
| if ((kc_selvar_2_1->prod_sel() == sel_ListAlternatives)) { |
| |
| v_report(NonFatal( FileLine( pd_id->file, pd_id->line ), Problem1S1ID( "production block mismatch: trying to redefine list phylum", pd_id ))); |
| |
| } else |
| if ((kc_selvar_2_1->prod_sel() == sel_Emptyproductionblock)) { |
| /*EMPTY*/ |
| } else |
| { kc_no_default_in_with( "mergephylumdeclarations", __LINE__, __FILE__ ); |
| return static_cast<phylumdeclarations>(0); } |
| } |
| { |
| Ccode_option kc_selvar_2_1 = phylum_cast<Ccode_option>( pd_ccopt); |
| Ccode_option kc_selvar_2_2 = phylum_cast<Ccode_option>( fpd_ccopt ); |
| if ((kc_selvar_2_1->prod_sel() == sel_CcodeOption) && (kc_selvar_2_2->prod_sel() == sel_CcodeOption)) { |
| const attributes pd_ccopt_attr = phylum_cast<const impl_Ccode_option_CcodeOption*>(kc_selvar_2_1)->attributes_1; |
| const Ctexts pd_ccopt_ct = phylum_cast<const impl_Ccode_option_CcodeOption*>(kc_selvar_2_1)->Ctexts_1; |
| const attributes fpd_ccopt_attr = phylum_cast<const impl_Ccode_option_CcodeOption*>(kc_selvar_2_2)->attributes_1; |
| const Ctexts fpd_ccopt_ct = phylum_cast<const impl_Ccode_option_CcodeOption*>(kc_selvar_2_2)->Ctexts_1; |
| |
| static_cast<impl_phylumdeclaration_PhylumDeclaration*>(fpd)->Ccode_option_1 = CcodeOption( concat(pd_ccopt_attr, fpd_ccopt_attr), concat(pd_ccopt_ct, fpd_ccopt_ct )); |
| |
| } else |
| { kc_no_default_in_with( "mergephylumdeclarations", __LINE__, __FILE__ ); |
| return static_cast<phylumdeclarations>(0); } |
| } |
| |
| } else |
| { kc_no_default_in_with( "mergephylumdeclarations", __LINE__, __FILE__ ); |
| return static_cast<phylumdeclarations>(0); } |
| } |
| return pds; |
| |
| } else |
| { kc_no_default_in_with( "mergephylumdeclarations", __LINE__, __FILE__ ); |
| return static_cast<phylumdeclarations>(0); } |
| } |
| |
| } |
| |
| alternatives makeListAlternatives(ID listphylum, ID elementphylum) |
| { |
| ID Nil_id, Cons_id; |
| alternative Nil_alternative, Cons_alternative; |
| Nil_id = Id( Str( mkcasestring((string("Nil")+f_strofID(listphylum)).c_str()))); |
| Cons_id = Id( Str( mkcasestring((string("Cons")+f_strofID(listphylum)).c_str()))); |
| Nil_id->line = elementphylum->line; |
| Nil_id->file = elementphylum->file; |
| Cons_id->line = elementphylum->line; |
| Cons_id->file = elementphylum->file; |
| Nil_alternative = Alternative( Nil_id, Nilarguments() ); |
| Cons_alternative = Alternative( Cons_id, Consarguments( listphylum, Consarguments( elementphylum, Nilarguments() ) ) ); |
| v_extendoccur( Nil_id, ITUserOperator( Nil_alternative, listphylum ) ); |
| v_extendoccur( Cons_id, ITUserOperator( Cons_alternative, listphylum ) ); |
| return Consalternatives( Cons_alternative, Consalternatives( Nil_alternative, Nilalternatives() ) ); |
| |
| } |
| |
| const char *f_strofID(ID id) |
| {{ |
| ID kc_selvar_0_1 = phylum_cast<ID>(id); |
| if ((kc_selvar_0_1->prod_sel() == sel_Id) && (phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1->prod_sel() == sel_Str)) { |
| const casestring cs = phylum_cast<const impl_uniqID_Str*>(phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1)->casestring_1; |
| return cs->name; |
| } else |
| { kc_no_default_in_with( "f_strofID", __LINE__, __FILE__ ); |
| return static_cast<char*>(0); } |
| } |
| |
| } |
| |
| phylumdeclaration f_lookupuserdecl(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_ITUserFunction)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of user-defined function:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITUserRView)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of user-defined rewrite view:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITPredefinedRView)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of predefined rewrite view:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITUserUView)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of user-defined unparse view:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITPredefinedUView)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of predefined unparse view:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITStorageClass)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of user-defined storage class:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITPredefinedStorageClass)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of predefined storage class:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITUserOperator)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of user-defined operator:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITPredefinedOperator)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of predefined operator:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITUserPhylum)) { |
| const phylumdeclaration pd = phylum_cast<const impl_IDtype_ITUserPhylum*>(kc_selvar_1_1)->phylumdeclaration_1; |
| return pd; |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITPredefinedPhylum)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of predefined phylum:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITUnknown)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "undefined phylum:", id ))); |
| return 0; |
| |
| } else |
| { kc_no_default_in_with( "f_lookupuserdecl", __LINE__, __FILE__ ); |
| return static_cast<phylumdeclaration>(0); } |
| } |
| |
| } else |
| { kc_no_default_in_with( "f_lookupuserdecl", __LINE__, __FILE__ ); |
| return static_cast<phylumdeclaration>(0); } |
| } |
| |
| } |
| |
| phylumdeclaration f_lookupdecl(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_ITUserFunction)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of user-defined function:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITUserRView)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of user-defined rewrite view:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITPredefinedRView)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of predefined rewrite view:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITUserUView)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of user-defined unparse view:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITPredefinedUView)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of predefined unparse view:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITStorageClass)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of user-defined storage class:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITPredefinedStorageClass)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of predefined storage class:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITUserOperator)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of user-defined operator:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITPredefinedOperator)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "expected user-defined phylum instead of predefined operator:", id ))); |
| return 0; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITUserPhylum)) { |
| const phylumdeclaration pd = phylum_cast<const impl_IDtype_ITUserPhylum*>(kc_selvar_1_1)->phylumdeclaration_1; |
| return pd; |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITPredefinedPhylum)) { |
| const phylumdeclaration pd = phylum_cast<const impl_IDtype_ITPredefinedPhylum*>(kc_selvar_1_1)->phylumdeclaration_1; |
| return pd; |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ITUnknown)) { |
| |
| v_report(NonFatal( FileLine( id->file, id->line ), Problem1S1ID( "undefined phylum:", id ))); |
| return 0; |
| |
| } else |
| { kc_no_default_in_with( "f_lookupdecl", __LINE__, __FILE__ ); |
| return static_cast<phylumdeclaration>(0); } |
| } |
| |
| } else |
| { kc_no_default_in_with( "f_lookupdecl", __LINE__, __FILE__ ); |
| return static_cast<phylumdeclaration>(0); } |
| } |
| |
| } |
| |
| argsnumbers insert_in_argsnumbers(int i, argsnumbers a) |
| {{ |
| argsnumbers kc_selvar_0_1 = phylum_cast<argsnumbers>(a); |
| if ((kc_selvar_0_1->prod_sel() == sel_Consargsnumbers)) { |
| const integer j = (kc_selvar_0_1)->integer_1; |
| const argsnumbers ra = (kc_selvar_0_1)->argsnumbers_1; |
| |
| if ( i < j->value ) |
| return Consargsnumbers( mkinteger(i), a ); |
| else if ( i == j->value ) |
| return a; |
| else |
| return Consargsnumbers( j, insert_in_argsnumbers( i, ra )); |
| |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_Nilargsnumbers)) { |
| return Consargsnumbers( mkinteger(i), a ); |
| } else |
| { kc_no_default_in_with( "insert_in_argsnumbers", __LINE__, __FILE__ ); |
| return static_cast<argsnumbers>(0); } |
| } |
| |
| } |
| |
| void set_includefiles(includefiles ifs, includedeclaration i) |
| { |
| { |
| includefiles kc_fe_selvar_1 = ifs ; |
| |
| while( |
| kc_fe_selvar_1->prod_sel() == sel_Consincludefiles |
| ) { |
| includefile kc_selvar_0_1 = kc_fe_selvar_1->includefile_1; |
| { |
| { |
| { |
| const includefile pl_includefile = kc_selvar_0_1; |
| |
| assertCond((pl_includefile->inc_type == include_file) || (pl_includefile->inc_type == include_header)); |
| pl_includefile->inc[pl_includefile->inc_type] = |
| Consincludedeclarations( i, pl_includefile->inc[pl_includefile->inc_type] ); |
| |
| } |
| } |
| |
| } |
| kc_fe_selvar_1 = kc_fe_selvar_1->includefiles_1; |
| |
| } |
| } |
| |
| } |
| |
| languagenames merge_languagenames(languagenames names, languagenames name_list) |
| { |
| languagenames res=name_list; |
| { |
| languagenames kc_fe_selvar_1 = names ; |
| |
| while( |
| kc_fe_selvar_1->prod_sel() == sel_Conslanguagenames |
| ) { |
| ID kc_selvar_0_1 = kc_fe_selvar_1->ID_1; |
| { |
| { |
| if ((kc_selvar_0_1->prod_sel() == sel_Id)) { |
| const ID id = kc_selvar_0_1; |
| const uniqID u_id = phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1; |
| |
| if(u_id->type->eq(ITUnknown())) { |
| res=Conslanguagenames(id,res); |
| u_id->type=ITLanguageName( |
| mkinteger(res->length()-1)); |
| } |
| |
| } else |
| {/* EMPTY */ /*skip: no matching pattern in foreach patterns*/} |
| } |
| |
| } |
| kc_fe_selvar_1 = kc_fe_selvar_1->languagenames_1; |
| |
| } |
| } |
| return res; |
| |
| } |
| |
| long get_text_nr() |
| { |
| language_text_nr_used=true; |
| return language_text_nr; |
| |
| } |
| |
| void inc_text_nr() |
| { |
| if(language_text_nr_used) { |
| language_text_nr++; |
| language_text_nr_used=false; |
| } |
| |
| } |
| |
| long last_text_nr() |
| { |
| if(language_text_nr_used) |
| return language_text_nr; |
| else |
| return language_text_nr-1; |
| |
| } |
| |
| ID f_ID_of_declarator(ac_declarator d) |
| {{ |
| ac_declarator kc_selvar_0_1 = phylum_cast<ac_declarator>(d); |
| if ((kc_selvar_0_1->prod_sel() == sel_AcDeclarator)) { |
| const ac_direct_declarator dd = phylum_cast<const impl_ac_declarator_AcDeclarator*>(kc_selvar_0_1)->ac_direct_declarator_1; |
| |
| return f_ID_of_direct_decl( dd ); |
| |
| } else |
| { kc_no_default_in_with( "f_ID_of_declarator", __LINE__, __FILE__ ); |
| return static_cast<ID>(0); } |
| } |
| |
| } |
| |
| ID f_ID_of_fn_declarator(ac_declarator d, fnclass fnc) |
| {{ |
| ac_declarator kc_selvar_0_1 = phylum_cast<ac_declarator>(d); |
| if ((kc_selvar_0_1->prod_sel() == sel_AcDeclarator)) { |
| const ac_direct_declarator dd = phylum_cast<const impl_ac_declarator_AcDeclarator*>(kc_selvar_0_1)->ac_direct_declarator_1; |
| |
| ID id=f_ID_of_direct_decl( dd ); |
| { |
| fnclass kc_selvar_1_1 = phylum_cast<fnclass>(fnc); |
| if ((kc_selvar_1_1->prod_sel() == sel_DestructorFn)) { |
| |
| static int dtor_nr=0; |
| char buf[30]; |
| sprintf(buf,"destructor_%d",++dtor_nr); |
| ID new_id=Id(Str(mkcasestring(buf))); |
| new_id->file=id->file; |
| new_id->line=id->line; |
| return new_id; |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_ConstructorFn)) { |
| |
| static int ctor_nr=0; |
| char buf[30]; |
| sprintf(buf,"constructor_%d",++ctor_nr); |
| ID new_id=Id(Str(mkcasestring(buf))); |
| new_id->file=id->file; |
| new_id->line=id->line; |
| return new_id; |
| |
| } else |
| { |
| return id; |
| } |
| } |
| |
| } else |
| { kc_no_default_in_with( "f_ID_of_fn_declarator", __LINE__, __FILE__ ); |
| return static_cast<ID>(0); } |
| } |
| |
| } |
| |
| static ID f_ID_of_direct_decl(ac_direct_declarator d) |
| {{ |
| ac_direct_declarator kc_selvar_0_1 = phylum_cast<ac_direct_declarator>(d); |
| if ((kc_selvar_0_1->prod_sel() == sel_AcQualifiedDeclProto)) { |
| const ac_direct_declarator a_d = phylum_cast<const impl_ac_direct_declarator_AcQualifiedDeclProto*>(kc_selvar_0_1)->ac_direct_declarator_1; |
| return f_ID_of_direct_decl( a_d ); |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_AcDirectDeclProto)) { |
| const ac_direct_declarator a_d = phylum_cast<const impl_ac_direct_declarator_AcDirectDeclProto*>(kc_selvar_0_1)->ac_direct_declarator_1; |
| return f_ID_of_direct_decl( a_d ); |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_AcDirectDeclArray)) { |
| const ac_direct_declarator a_d = phylum_cast<const impl_ac_direct_declarator_AcDirectDeclArray*>(kc_selvar_0_1)->ac_direct_declarator_1; |
| return f_ID_of_direct_decl( a_d ); |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_AcDirectDeclPack)) { |
| const ac_declarator a_d = phylum_cast<const impl_ac_direct_declarator_AcDirectDeclPack*>(kc_selvar_0_1)->ac_declarator_1; |
| return f_ID_of_declarator( a_d ); |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_AcDirectDeclId)) { |
| const ID i = phylum_cast<const impl_ac_direct_declarator_AcDirectDeclId*>(kc_selvar_0_1)->ID_1; |
| return i; |
| } else |
| { |
| return f_emptyId(); |
| } |
| } |
| |
| } |
| |
| int f_stars_of_declarator(ac_declarator d) |
| {{ |
| ac_declarator kc_selvar_0_1 = phylum_cast<ac_declarator>(d); |
| if ((kc_selvar_0_1->prod_sel() == sel_AcDeclarator)) { |
| const ac_pointer_option po = phylum_cast<const impl_ac_declarator_AcDeclarator*>(kc_selvar_0_1)->ac_pointer_option_1; |
| return f_stars_of_ac_pointer_option( po ); |
| } else |
| { |
| return 0; |
| } |
| } |
| |
| } |
| |
| static int f_stars_of_ac_pointer_option(ac_pointer_option d) |
| {{ |
| ac_pointer_option kc_selvar_0_1 = phylum_cast<ac_pointer_option>(d); |
| if ((kc_selvar_0_1->prod_sel() == sel_Yespointer)) { |
| const ac_pointer p = phylum_cast<const impl_ac_pointer_option_Yespointer*>(kc_selvar_0_1)->ac_pointer_1; |
| return f_stars_of_ac_pointer( p ); |
| } else |
| { |
| return 0; |
| } |
| } |
| |
| } |
| |
| static int f_stars_of_ac_pointer(ac_pointer d) |
| {{ |
| ac_pointer kc_selvar_0_1 = phylum_cast<ac_pointer>(d); |
| if ((kc_selvar_0_1->prod_sel() == sel_AcPointerCons)) { |
| const ac_pointer p = phylum_cast<const impl_ac_pointer_AcPointerCons*>(kc_selvar_0_1)->ac_pointer_1; |
| return 1 + f_stars_of_ac_pointer( p ); |
| } else |
| { |
| return 1; |
| } |
| } |
| |
| } |
| |
| static bool f_is_member_fn(ac_declarator dec) |
| {{ |
| ac_declarator kc_selvar_0_1 = phylum_cast<ac_declarator>(dec); |
| 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_class_qualifier_list_1->prod_sel() == sel_Consac_class_qualifier_list)) { |
| return true; |
| } else |
| { |
| return false; |
| } |
| } |
| |
| } |
| |
| fnclass f_fnclass_info(ac_declaration_specifiers ds, casestring fn, ac_declarator dec) |
| {{ |
| ac_declaration_specifiers kc_selvar_0_1 = phylum_cast<ac_declaration_specifiers>(ds); |
| if ((kc_selvar_0_1->prod_sel() == sel_Consac_declaration_specifiers)) { |
| const ac_declaration_specifier h = (kc_selvar_0_1)->ac_declaration_specifier_1; |
| const ac_declaration_specifiers t = (kc_selvar_0_1)->ac_declaration_specifiers_1; |
| |
| if (f_static_in_ac_decl_spec( h )) { |
| return StaticFn( fn ); |
| } else { |
| return f_is_member_fn(dec)?MemberFn():f_fnclass_info( t, fn , dec); |
| } |
| |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_Nilac_declaration_specifiers)) { |
| |
| assertCond(!f_is_member_fn(dec)); |
| return |
| |
| GlobalFn(); |
| } else |
| { kc_no_default_in_with( "f_fnclass_info", __LINE__, __FILE__ ); |
| return static_cast<fnclass>(0); } |
| } |
| |
| } |
| |
| fnclass f_member_class_info(ac_declaration_specifiers ds, casestring fn) |
| {{ |
| ac_declaration_specifiers kc_selvar_0_1 = phylum_cast<ac_declaration_specifiers>(ds); |
| if ((kc_selvar_0_1->prod_sel() == sel_Consac_declaration_specifiers)) { |
| const ac_declaration_specifier h = (kc_selvar_0_1)->ac_declaration_specifier_1; |
| const ac_declaration_specifiers t = (kc_selvar_0_1)->ac_declaration_specifiers_1; |
| |
| if (f_static_in_ac_decl_spec( h )) { |
| return StaticFn( fn ); |
| } else { |
| return f_member_class_info( t, fn); |
| } |
| |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_Nilac_declaration_specifiers)) { |
| return MemberFn(); |
| } else |
| { kc_no_default_in_with( "f_member_class_info", __LINE__, __FILE__ ); |
| return static_cast<fnclass>(0); } |
| } |
| |
| } |
| |
| bool f_static_in_ac_decl_specs(ac_declaration_specifiers ds) |
| {{ |
| ac_declaration_specifiers kc_selvar_0_1 = phylum_cast<ac_declaration_specifiers>(ds); |
| if ((kc_selvar_0_1->prod_sel() == sel_Nilac_declaration_specifiers)) { |
| return false; |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_Consac_declaration_specifiers)) { |
| const ac_declaration_specifier head = (kc_selvar_0_1)->ac_declaration_specifier_1; |
| const ac_declaration_specifiers tail = (kc_selvar_0_1)->ac_declaration_specifiers_1; |
| |
| return f_static_in_ac_decl_spec(head) || f_static_in_ac_decl_specs(tail); |
| |
| } else |
| { kc_no_default_in_with( "f_static_in_ac_decl_specs", __LINE__, __FILE__ ); |
| return static_cast<bool>(0); } |
| } |
| |
| } |
| |
| static bool f_static_in_ac_decl_spec(ac_declaration_specifier ds) |
| {{ |
| ac_declaration_specifier kc_selvar_0_1 = phylum_cast<ac_declaration_specifier>(ds); |
| if ((kc_selvar_0_1->prod_sel() == sel_AcDeclSpecTypeQual)) { |
| return false; |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_AcDeclSpecTypeSpec)) { |
| return false; |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_AcDeclSpecStorageSpec)) { |
| const ac_storage_class_specifier a_sc = phylum_cast<const impl_ac_declaration_specifier_AcDeclSpecStorageSpec*>(kc_selvar_0_1)->ac_storage_class_specifier_1; |
| return f_static_in_ac_stor_class( a_sc ); |
| } else |
| { kc_no_default_in_with( "f_static_in_ac_decl_spec", __LINE__, __FILE__ ); |
| return static_cast<bool>(0); } |
| } |
| |
| } |
| |
| static bool f_static_in_ac_stor_class(ac_storage_class_specifier sc) |
| {{ |
| ac_storage_class_specifier kc_selvar_0_1 = phylum_cast<ac_storage_class_specifier>(sc); |
| if ((kc_selvar_0_1->prod_sel() == sel_AcTypedef)) { |
| return false; |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_AcExtern)) { |
| return false; |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_AcStatic)) { |
| return true; |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_AcRegister)) { |
| return false; |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_AcAuto)) { |
| return false; |
| } else |
| { kc_no_default_in_with( "f_static_in_ac_stor_class", __LINE__, __FILE__ ); |
| return static_cast<bool>(0); } |
| } |
| |
| } |
| |
| ID f_ID_of_ac_declaration_specifiers(ac_declaration_specifiers d) |
| {{ |
| ac_declaration_specifiers kc_selvar_0_1 = phylum_cast<ac_declaration_specifiers>(d); |
| if ((kc_selvar_0_1->prod_sel() == sel_Consac_declaration_specifiers)) { |
| const ac_declaration_specifier h = (kc_selvar_0_1)->ac_declaration_specifier_1; |
| const ac_declaration_specifiers t = (kc_selvar_0_1)->ac_declaration_specifiers_1; |
| |
| ID tmp = f_ID_of_ac_declaration_specifier( h ); |
| if (tmp) |
| return tmp; |
| else |
| return f_ID_of_ac_declaration_specifiers( t ); |
| |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_Nilac_declaration_specifiers)) { |
| return 0; |
| } else |
| { kc_no_default_in_with( "f_ID_of_ac_declaration_specifiers", __LINE__, __FILE__ ); |
| return static_cast<ID>(0); } |
| } |
| |
| } |
| |
| static ID f_ID_of_ac_declaration_specifier(ac_declaration_specifier d) |
| {{ |
| ac_declaration_specifier kc_selvar_0_1 = phylum_cast<ac_declaration_specifier>(d); |
| if ((kc_selvar_0_1->prod_sel() == sel_AcDeclSpecTypeSpec)) { |
| const ac_type_specifier t = phylum_cast<const impl_ac_declaration_specifier_AcDeclSpecTypeSpec*>(kc_selvar_0_1)->ac_type_specifier_1; |
| |
| return f_ID_of_ac_type_specifier( t ); |
| |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_AcDeclSpecTypeQual)) { |
| return 0; |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_AcDeclSpecStorageSpec)) { |
| return 0; |
| } else |
| { kc_no_default_in_with( "f_ID_of_ac_declaration_specifier", __LINE__, __FILE__ ); |
| return static_cast<ID>(0); } |
| } |
| |
| } |
| |
| static ID f_ID_of_ac_type_specifier(ac_type_specifier d) |
| {{ |
| ac_type_specifier kc_selvar_0_1 = phylum_cast<ac_type_specifier>(d); |
| if ((kc_selvar_0_1->prod_sel() == sel_AcTypeSpec)) { |
| const ID i = phylum_cast<const impl_ac_type_specifier_AcTypeSpec*>(kc_selvar_0_1)->ID_1; |
| return i; |
| } else |
| { kc_no_default_in_with( "f_ID_of_ac_type_specifier", __LINE__, __FILE__ ); |
| return static_cast<ID>(0); } |
| } |
| |
| } |
| |
| void check_no_patternchaingroup_in_patternchain(casestring f, int l, patternchain a_patternchain, const char *ctxt) |
| {{ |
| patternchain kc_selvar_0_1 = phylum_cast<patternchain>(a_patternchain); |
| if ((kc_selvar_0_1->prod_sel() == sel_Nilpatternchain)) { |
| /*EMPTY*/ |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_Conspatternchain)) { |
| const patternchainitem h = (kc_selvar_0_1)->patternchainitem_1; |
| const patternchain t = (kc_selvar_0_1)->patternchain_1; |
| |
| check_no_patternchaingroup_in_patternchain( f, l, t, ctxt ); |
| { |
| patternchainitem kc_selvar_1_1 = phylum_cast<patternchainitem>( h ); |
| if ((kc_selvar_1_1->prod_sel() == sel_PatternchainitemGroup)) { |
| |
| v_report(NonFatal( FileLine( f, l ), Problem3S( "no pattern grouping () allowed in", ctxt, "context." ))); |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_PatternchainitemDollarid)) { |
| /*EMPTY*/ |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_PatternchainitemOutmost)) { |
| /*EMPTY*/ |
| } else |
| kc_no_default_in_with( "check_no_patternchaingroup_in_patternchain", __LINE__, __FILE__ ); |
| } |
| |
| } else |
| kc_no_default_in_with( "check_no_patternchaingroup_in_patternchain", __LINE__, __FILE__ ); |
| } |
| |
| } |
| |
| void check_no_patternchaingroup_in_patternchains(casestring f, int l, patternchains a_patternchains, const char *ctxt) |
| {{ |
| patternchains kc_selvar_0_1 = phylum_cast<patternchains>(a_patternchains); |
| if ((kc_selvar_0_1->prod_sel() == sel_Nilpatternchains)) { |
| /*EMPTY*/ |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_Conspatternchains)) { |
| const patternchain h = (kc_selvar_0_1)->patternchain_1; |
| const patternchains t = (kc_selvar_0_1)->patternchains_1; |
| |
| check_no_patternchaingroup_in_patternchains( f, l, t, ctxt ); |
| check_no_patternchaingroup_in_patternchain( f, l, h, ctxt ); |
| |
| } else |
| kc_no_default_in_with( "check_no_patternchaingroup_in_patternchains", __LINE__, __FILE__ ); |
| } |
| |
| } |
| |
| void check_no_patternchaingroup_or_pattern_in_patternchain(casestring f, int l, patternchain a_patternchain, const char *ctxt) |
| {{ |
| patternchain kc_selvar_0_1 = phylum_cast<patternchain>(a_patternchain); |
| if ((kc_selvar_0_1->prod_sel() == sel_Nilpatternchain)) { |
| /*EMPTY*/ |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_Conspatternchain)) { |
| const patternchainitem h = (kc_selvar_0_1)->patternchainitem_1; |
| const patternchain t = (kc_selvar_0_1)->patternchain_1; |
| |
| check_no_patternchaingroup_or_pattern_in_patternchain( f, l, t, ctxt ); |
| { |
| patternchainitem kc_selvar_1_1 = phylum_cast<patternchainitem>( h ); |
| if ((kc_selvar_1_1->prod_sel() == sel_PatternchainitemGroup)) { |
| |
| v_report(NonFatal( FileLine( f, l ), Problem3S( "no pattern grouping () allowed in", ctxt, "context." ))); |
| |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_PatternchainitemDollarid)) { |
| /*EMPTY*/ |
| } else |
| if ((kc_selvar_1_1->prod_sel() == sel_PatternchainitemOutmost)) { |
| const outmostpattern op = phylum_cast<const impl_patternchainitem_PatternchainitemOutmost*>(kc_selvar_1_1)->outmostpattern_1; |
| |
| |
| |
| } else |
| kc_no_default_in_with( "check_no_patternchaingroup_or_pattern_in_patternchain", __LINE__, __FILE__ ); |
| } |
| |
| } else |
| kc_no_default_in_with( "check_no_patternchaingroup_or_pattern_in_patternchain", __LINE__, __FILE__ ); |
| } |
| |
| } |
| |
| void check_no_patternchaingroup_or_pattern_in_patternchains(casestring f, int l, patternchains a_patternchains, const char *ctxt) |
| {{ |
| patternchains kc_selvar_0_1 = phylum_cast<patternchains>(a_patternchains); |
| if ((kc_selvar_0_1->prod_sel() == sel_Nilpatternchains)) { |
| /*EMPTY*/ |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_Conspatternchains)) { |
| const patternchain h = (kc_selvar_0_1)->patternchain_1; |
| const patternchains t = (kc_selvar_0_1)->patternchains_1; |
| |
| check_no_patternchaingroup_or_pattern_in_patternchains( f, l, t, ctxt ); |
| check_no_patternchaingroup_or_pattern_in_patternchain( f, l, h, ctxt ); |
| |
| } else |
| kc_no_default_in_with( "check_no_patternchaingroup_or_pattern_in_patternchains", __LINE__, __FILE__ ); |
| } |
| |
| } |
| |
| patternchains syn_patternchains_fileline(patternchains a_patternchains, casestring a_file, int a_line) |
| {{ |
| patternchains kc_selvar_0_1 = phylum_cast<patternchains>(a_patternchains); |
| if ((kc_selvar_0_1->prod_sel() == sel_Nilpatternchains)) { |
| |
| kc_selvar_0_1->file = a_file; |
| kc_selvar_0_1->line = a_line; |
| return a_patternchains; |
| |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_Conspatternchains)) { |
| const patternchain h = (kc_selvar_0_1)->patternchain_1; |
| const patternchains t = (kc_selvar_0_1)->patternchains_1; |
| |
| syn_patternchains_fileline( t, a_file, a_line ); |
| syn_patternchain_fileline( h, t->file, t->line ); |
| kc_selvar_0_1->file = h->file; |
| kc_selvar_0_1->line = h->line; |
| return a_patternchains; |
| |
| } else |
| { kc_no_default_in_with( "syn_patternchains_fileline", __LINE__, __FILE__ ); |
| return static_cast<patternchains>(0); } |
| } |
| |
| } |
| |
| patternchain syn_patternchain_fileline(patternchain a_patternchain, casestring a_file, int a_line) |
| {{ |
| patternchain kc_selvar_0_1 = phylum_cast<patternchain>(a_patternchain); |
| if ((kc_selvar_0_1->prod_sel() == sel_Nilpatternchain)) { |
| |
| kc_selvar_0_1->file = a_file; |
| kc_selvar_0_1->line = a_line; |
| return a_patternchain; |
| |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_Conspatternchain)) { |
| const patternchainitem h = (kc_selvar_0_1)->patternchainitem_1; |
| const patternchain t = (kc_selvar_0_1)->patternchain_1; |
| |
| syn_patternchain_fileline( t, a_file, a_line ); |
| kc_selvar_0_1->file = h->file; |
| kc_selvar_0_1->line = h->line; |
| return a_patternchain; |
| |
| } else |
| { kc_no_default_in_with( "syn_patternchain_fileline", __LINE__, __FILE__ ); |
| return static_cast<patternchain>(0); } |
| } |
| |
| } |
| |
| withexpressions pf_gen_foreachwith_vars(idCexpressions a_idCexpressions) |
| { |
| static int nrof_foreach_occ = 0; |
| nrof_foreach_occ++; |
| return t_pf_gen_foreachwith_vars(a_idCexpressions, nrof_foreach_occ, a_idCexpressions->length(), false); |
| |
| } |
| |
| withexpressions pf_gen_foreachwith_listvars(idCexpressions a_idCexpressions) |
| { |
| static int nrof_foreach_occ = 0; |
| nrof_foreach_occ++; |
| return t_pf_gen_foreachwith_vars(a_idCexpressions, nrof_foreach_occ, a_idCexpressions->length(), true); |
| |
| } |
| |
| withexpressions t_pf_gen_foreachwith_vars(idCexpressions a_idCexpressions, int occ, int nr, bool listvars) |
| {{ |
| 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 idCexpression ice = (kc_selvar_0_1)->idCexpression_1; |
| const ID id = phylum_cast<const impl_idCexpression_IdCexpression*>((kc_selvar_0_1)->idCexpression_1)->ID_1; |
| const Cexpression ce = phylum_cast<const impl_idCexpression_IdCexpression*>((kc_selvar_0_1)->idCexpression_1)->Cexpression_1; |
| const idCexpressions t = (kc_selvar_0_1)->idCexpressions_1; |
| |
| char tmp[BUFSIZ]; |
| withexpression w; |
| withexpressions ws; |
| ID w_id; |
| if (listvars) |
| sprintf(tmp, "kc_fe_withlistvar_%d_%d", occ, nr); |
| else |
| sprintf(tmp, "kc_fe_withvar_%d_%d", occ, nr); |
| w_id = Id(Str(mkcasestring(tmp))); |
| w = WEVariable(w_id); |
| w->type = (listvars ? id : f_listelementphylum(id)); |
| w->file = ce->file; |
| w->line = ce->line; |
| ice->id = w_id; |
| ws = Conswithexpressions( |
| w, |
| t_pf_gen_foreachwith_vars( t, occ, nr-1, listvars)); |
| ws->file = w->file; |
| ws->line = w->line; |
| return ws; |
| |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_NilidCexpressions)) { |
| return Nilwithexpressions(); |
| } else |
| { kc_no_default_in_with( "t_pf_gen_foreachwith_vars", __LINE__, __FILE__ ); |
| return static_cast<withexpressions>(0); } |
| } |
| |
| } |
| |
| ac_class_qualifier_list f_check_build_qualifier_tail(ac_class_qualifier_help_list qh_list) |
| {{ |
| ac_class_qualifier_help_list kc_selvar_0_1 = phylum_cast<ac_class_qualifier_help_list>(qh_list); |
| if ((kc_selvar_0_1->prod_sel() == sel_Consac_class_qualifier_help_list) && ((kc_selvar_0_1)->ac_direct_declarator_1->prod_sel() == sel_AcOperatorDeclId) && (phylum_cast<const impl_ac_direct_declarator_AcOperatorDeclId*>((kc_selvar_0_1)->ac_direct_declarator_1)->ac_operator_name_1->prod_sel() == sel_AcOperatorName)) { |
| const ac_operator_name op = phylum_cast<const impl_ac_direct_declarator_AcOperatorDeclId*>((kc_selvar_0_1)->ac_direct_declarator_1)->ac_operator_name_1; |
| const casestring str = phylum_cast<const impl_ac_operator_name_AcOperatorName*>(phylum_cast<const impl_ac_direct_declarator_AcOperatorDeclId*>((kc_selvar_0_1)->ac_direct_declarator_1)->ac_operator_name_1)->casestring_1; |
| |
| v_report(NonFatal( FileLine( op->file, op->line ), Problem3S( "operator ",str->name, "is not a type name" ))); |
| return Nilac_class_qualifier_list(); |
| |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_Consac_class_qualifier_help_list) && ((kc_selvar_0_1)->ac_direct_declarator_1->prod_sel() == sel_AcDirectDeclId)) { |
| const ID id = phylum_cast<const impl_ac_direct_declarator_AcDirectDeclId*>((kc_selvar_0_1)->ac_direct_declarator_1)->ID_1; |
| const ac_class_qualifier_help_list tail = (kc_selvar_0_1)->ac_class_qualifier_help_list_1; |
| |
| return Consac_class_qualifier_list(id,f_check_build_qualifier_tail(tail)); |
| |
| } else |
| if ((kc_selvar_0_1->prod_sel() == sel_Nilac_class_qualifier_help_list)) { |
| return Nilac_class_qualifier_list(); |
| } else |
| { kc_no_default_in_with( "f_check_build_qualifier_tail", __LINE__, __FILE__ ); |
| return static_cast<ac_class_qualifier_list>(0); } |
| } |
| |
| } |
| |
| ac_class_qualifier_list f_check_build_qualifier(ac_class_qualifier_help_list qh_list, ac_direct_declarator &decl) |
| {{ |
| ac_class_qualifier_help_list kc_selvar_0_1 = phylum_cast<ac_class_qualifier_help_list>(qh_list); |
| if ((kc_selvar_0_1->prod_sel() == sel_Consac_class_qualifier_help_list)) { |
| const ac_direct_declarator dd = (kc_selvar_0_1)->ac_direct_declarator_1; |
| const ac_class_qualifier_help_list tail = (kc_selvar_0_1)->ac_class_qualifier_help_list_1; |
| |
| decl=dd; |
| return f_check_build_qualifier_tail(tail); |
| |
| } else |
| { |
| assertCond(false); return NULL; |
| } |
| } |
| |
| } |
| |
| ID subst_name(ID n, casestring oldname, casestring newname) |
| {{ |
| ID kc_selvar_0_1 = phylum_cast<ID>(n); |
| if ((kc_selvar_0_1->prod_sel() == sel_Id) && (phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1->prod_sel() == sel_Str)) { |
| const casestring s = phylum_cast<const impl_uniqID_Str*>(phylum_cast<const impl_ID_Id*>(kc_selvar_0_1)->uniqID_1)->casestring_1; |
| |
| if (s->eq(oldname)) { |
| ID tmp = Id(Str(newname)); |
| tmp->file = n->file; |
| tmp->line = n->line; |
| return tmp; |
| } else |
| return n; |
| |
| } else |
| { kc_no_default_in_with( "subst_name", __LINE__, __FILE__ ); |
| return static_cast<ID>(0); } |
| } |
| |
| } |
| |
| |
| } // namespace kc |