bool PragmaOKForInlines( // TEST IF PRAGMA IS SUITABLE FOR INLINED FN AUX_INFO *fnp ) // - pragma { if( fnp->code != NULL ) { return FALSE; } if( ReverseParms( fnp ) ) { return FALSE; } return TRUE; }
static void ParmDeclList( void ) /* process old style function definitions */ { TYPEPTR typ; PARMPTR parm; decl_state state; SYM_ENTRY sym; decl_info info; size_t len; while( CurToken != T_LEFT_BRACE ) { FullDeclSpecifier( &info ); if( info.stg == SC_NONE && info.typ == NULL ) { if( CurToken == T_ID ) { CErr2p( ERR_MISSING_DATA_TYPE, Buffer ); } } if( info.stg != SC_NONE && info.stg != SC_REGISTER ) { CErr1( ERR_INVALID_STG_CLASS_FOR_PARM ); info.stg = SC_NONE; } state = DECL_STATE_NONE; typ = info.typ; if( typ == NULL ) { state |= DECL_STATE_NOTYPE; typ = TypeDefault(); } if( info.stg == SC_NONE ) info.stg = SC_AUTO; for( ;; ) { if( CurToken == T_SEMI_COLON ) { Chk_Struct_Union_Enum( typ ); } else { sym.name = NULL; Declarator( &sym, info.mod, typ, state ); if( sym.name == NULL || sym.name[0] == '\0' ) { InvDecl(); } else { len = strlen( sym.name ) + 1; for( parm = ParmList; parm != NULL; parm = parm->next_parm ) { if( parm->sym.name != NULL ) { if( memcmp( parm->sym.name, sym.name, len ) == 0 ) { break; } } } if( parm == NULL ) { CErr2p( ERR_SYM_NOT_IN_PARM_LIST, sym.name ); } else if( parm->sym.sym_type != NULL ) { CErr2p( ERR_PARM_ALREADY_DECLARED, sym.name ); } else { ArgPromotion( &sym ); parm->sym.sym_type = sym.sym_type; parm->sym.attribs.stg_class = info.stg; } } CMemFree( sym.name ); } if( CurToken == T_SEMI_COLON ) { NextToken(); break; } if( CurToken == T_LEFT_BRACE ) { CErr1( ERR_MISSING_SEMICOLON ); break; } if( CurToken == T_EOF ) return; MustRecog( T_COMMA ); } } ReverseParms(); if( CurFunc->sym_type->u.fn.parms == NULL ) { CurFunc->flags |= SYM_OLD_STYLE_FUNC; AddParms(); } else { ChkParms(); } ParmList = NULL; if( VarParm( CurFunc ) ) { CurFunc->flags &= ~ SYM_OK_TO_RECURSE; } }