コード例 #1
0
ファイル: cp_enum.c プロジェクト: mildrock/dummy
extern Enum_t f_Enum( void )
{
   Enum_t Enum;
   Save();
   niveau++;

   if( token( 0 ) != SN_ENUM )
   {
      niveau--;
      Restore();
      return 0;
   }

   Enum = f_EnumCreate();

   step( 1 );

   if( token( 0 ) != LBRACE ) /* SN_IDENTIFIER or SN_NEW or ... */
   {
      Enum->Name = f_NameCreate( ident( 0 ));
      step( 1 );
   }

   if( token( 0 ) == LBRACE )
   {
//      step( 1 );										//- MTP (bugfix -- skipped 1st enum)
      Enum->ListEnumerator = f_EnumeratorList();
      f_StepTo( RBRACE, 0 );
      step( 1 );
   }

   niveau--;
   return Enum;
}
コード例 #2
0
ファイル: cp_enum.c プロジェクト: mildrock/dummy
static Enumerator_t f_Enumerator( void )
{
   Enumerator_t Enumerator;
   Save();
   niveau++;

   if( token( 0 ) == SN_IDENTIFIER )
   {
      Enumerator = f_EnumeratorCreate();

      Enumerator->Name = f_NameCreate( ident( 0 ));

      step( 1 );

      if( token( 0 ) == '=' )
      {
         step( 1 );
         Enumerator->Expr = f_ConstantExpression();
      }
      niveau--;
      return Enumerator;
   }
   else
   {
      Restore();
      niveau--;
      return 0;
   }
}
コード例 #3
0
ファイル: cp_type.c プロジェクト: mildrock/dummy
extern Type_t f_TypeFromDeclaration( Declaration_t Declaration )
{
   Type_t Type = f_TypeCreate();
   char *name;

   if( Declaration->Name )
   {
      name = Declaration->Name->pcName;
   }
   else if( Declaration->Class )
   {
      if( Declaration->Class->Name )
         name = Declaration->Class->Name->pcName;
      else
         name = 0;
   }
   else if( Declaration->Enum )
   {
      if( Declaration->Enum->Name )
         name = Declaration->Enum->Name->pcName;
      else
         name = 0;
   }
   else
   {
      name = 0;
   }

   Type->fct_specifier  = Declaration->fct_specifier;
   Type->s_ellipsis     = Declaration->s_ellipsis;
   Type->s_const        = Declaration->s_const;
   Type->s_volatile     = Declaration->s_volatile;
   Type->s_char         = Declaration->s_char;
   Type->s_short        = Declaration->s_short;
   Type->s_int          = Declaration->s_int;
   Type->s_long         = Declaration->s_long;
   Type->s_signed       = Declaration->s_signed;
   Type->s_unsigned     = Declaration->s_unsigned;
   Type->s_float        = Declaration->s_float;
   Type->s_double       = Declaration->s_double;
   Type->s_bool         = Declaration->s_bool;
   Type->s_void         = Declaration->s_void;
   Type->Name           = name ? f_NameCreate( name ) : 0;
   Type->Class          = 0;
   Type->Enum           = 0;
   Type->Declarator     = 0;

   return Type;
}
コード例 #4
0
ファイル: cp_type.c プロジェクト: mildrock/dummy
static Name_t CompleteClassName( void )
{
   char ac[10000];   /* old: 1000 */
   TokenSave();
   
   ac[0] = 0;

   if( Token( 0 ) == SN_CLCL )
   {
      f_Strcat( ac, "::" );
      TokenStep( 1 );
   }

   if( Token( 0 ) == SN_IDENTIFIER )
   {
      f_Strcat( ac, TokenIdent( 0 ));
      TokenStep( 1 );
      if( Token( 0 ) == '<' )
      {
         TemplateArgList( ac );
      }
   }
   else
   {
      TokenRestore();
      return 0;
   }

   while( True )
   {
/*    TokenSave(); */

      if( Token( 0 ) == SN_CLCL
       && Token( 1 ) == SN_IDENTIFIER )
      {
         f_Strcat( ac, "::" );
         f_Strcat( ac, TokenIdent( 1 ));
         TokenStep( 2 );
      }
      else
      {
         return f_NameCreate( ac );
      }
   }
}
コード例 #5
0
ファイル: cp_statement.c プロジェクト: AndresGG/sn-8.4
extern Boolean_t f_CompoundStatement( char *types, char *names )
{
   int retval;

/* printf( "Compund Statement: (%s) (%s)\n", types, names ); */

   if( SymtabVariable == 0 )
   {
      SymtabVariable = SymtabCreate((void (*)(void*)) f_TypeDestroy );
   }

   if( SymtabClass == 0 )
   {
      SymtabClass = SymtabCreate((void (*)(void*)) f_ClassDestroy );
   }

   if( types && names )
   {
      /* feldolgozzuk a fuggveny argumentum listat */

      char *my_types, *types_beg, *types_end;
      char *my_names, *names_beg, *names_end;
      int iBreak;

      my_types = SN_StrDup( types );
      my_names = SN_StrDup( names );

      types_beg = my_types;
      names_beg = my_names;
      iBreak = False;

      while( ! iBreak )
      {
         if(( types_end = my_strchr( types_beg, ',' ))) { *types_end = 0; }
         else                                           { iBreak = True; }

         if(( names_end = my_strchr( names_beg, ',' ))) { *names_end = 0; }
         else                                           { iBreak = True; }

         if( *names_beg && types_beg[0] != '.' )
         {
            Type_t Type;

            Type = f_TypeFromString( types_beg );

            if( Type == 0 )
            {
/* 24.02.97 rigo */
/* int DEFUN(_IO_fflush, (fp), register _IO_FILE *fp ){} eseten elofordul */
/*             f_InternalError( 61 ); */
               Type = f_TypeCreateInt();
            }

            if( Type->Declarator == 0 )
            {
               Type->Declarator = f_DeclaratorCreate();
               Type->Declarator->Name = f_NameCreate( names_beg );
            }
            else
            {
               if( Type->Declarator->Name )
               {
                  f_InternalError( 62 );
               }
               else
               {
                  Type->Declarator->Name = f_NameCreate( names_beg );
               }
            }

            /* felodjuk az esetleges typedef-eket */
            Type = f_TypeBasic( Type, start_lineno_g - 1 );

            if( SymtabInsert( SymtabVariable
                            , Type->Declarator->Name->pcName
                            , (void *) Type
                            , niveauComp ))
            {
#ifdef SYMTAB_TRACE
               char acType[10000];  /* old: 1000 */

               f_TypeToString( Type, acType, 1 );
               printf( "argument type: %s ----- name: %s\n"
                     , acType
                     , Type->Declarator->Name->pcName
                     );
#endif
            }
            else
            {
               f_TypeDestroy( Type );
            }
         }

         if( ! iBreak )
         {
            types_beg = types_end + 1;
            names_beg = names_end + 1;
         }
      }

      ckfree( my_names );
      ckfree( my_types );
   }

   retval = compound_statement();

#ifdef SYMTAB_TRACE
   printf( "vor Clear\n" );
   SymtabPrint( SymtabVariable, 0 );
#endif

   SymtabClear( SymtabVariable );
   SymtabClear( SymtabClass    );

#ifdef SYMTAB_TRACE
   printf( "after Clear\n" );
   SymtabPrint( SymtabVariable, 0 );
#endif

   return retval;
}