(file) Return to gen.cpp CVS log (file) (dir) Up to [OMI] / omi / gen

Diff for /omi/gen/gen.cpp between version 1.4 and 1.5

version 1.4, 2015/04/20 18:10:12 version 1.5, 2015/04/20 18:19:52
Line 39 
Line 39 
  
 #include "QualifierDecls.h" #include "QualifierDecls.h"
  
 #include <base/strings.h>  #include <pal/strings.h>
 #include <base/types.h> #include <base/types.h>
 #include <base/io.h>  #include <pal/format.h>
 #include <base/dir.h>  #include <pal/file.h>
   #include <pal/dir.h>
 #include <base/env.h> #include <base/env.h>
 #include <base/paths.h> #include <base/paths.h>
  
 #if defined(CONFIG_OS_WINDOWS)  #if defined(_MSC_VER)
 # include <time.h> # include <time.h>
 #else #else
 # include <unistd.h> # include <unistd.h>
Line 73 
Line 74 
 /* xlc doesn't want to use static inline funciotns inside temaplate functions */ /* xlc doesn't want to use static inline funciotns inside temaplate functions */
 int _Scasecmp(const MI_Char* s1, const MI_Char* s2) int _Scasecmp(const MI_Char* s1, const MI_Char* s2)
 { {
     return Zcasecmp(s1, s2);      return Strcasecmp(s1, s2);
 } }
  
 //============================================================================== //==============================================================================
Line 103 
Line 104 
     association = false;     association = false;
     extraClasses.clear();     extraClasses.clear();
     entryPoint.clear();     entryPoint.clear();
     warnings = false;      no_warnings = false;
       modelCorrespondence = false;
 } }
  
 //============================================================================== //==============================================================================
Line 154 
Line 156 
  
 //============================================================================== //==============================================================================
 // //
 // err()  // Fprintf()
 // //
 //     Writes a formatted error message to standard error (preceded by argv[0])  //     Formats and writes a message to FILE.
 //     and then exists.  
 // //
 //============================================================================== //==============================================================================
  
Line 173 
Line 174 
     if (wformat)     if (wformat)
     {     {
         vfwprintf(os, wformat, ap);         vfwprintf(os, wformat, ap);
         free(wformat);          PAL_Free(wformat);
     }     }
     else     else
 #endif #endif
Line 189 
Line 190 
 // err() // err()
 // //
 //     Writes a formatted error message to standard error (preceded by argv[0]) //     Writes a formatted error message to standard error (preceded by argv[0])
 //     and then exists.  //     and then exits.
 // //
 //============================================================================== //==============================================================================
  
Line 207 
Line 208 
     if (wformat)     if (wformat)
     {     {
         vfwprintf(stderr, wformat, ap);         vfwprintf(stderr, wformat, ap);
         free(wformat);          PAL_Free(wformat);
     }     }
     else     else
 #endif #endif
Line 224 
Line 225 
  
 //============================================================================== //==============================================================================
 // //
   // errRefPropCount()
   //
   //     For assocation class, it must have 2 reference properties count.
   //     Otherwise, call this function to write error message and exits.
   //
   //==============================================================================
   void errRefPropCount(const MI_Char* classname)
   {
       err(ID_INSUFFICIENT_REFERENCES, "incorrect references properties count: "
           "assocation class %s shall have two references properties", classname);
   }
   
   //==============================================================================
   //
 // put() // put()
 // //
 //     Write formatted output to the given stream (similar to fprintf). //     Write formatted output to the given stream (similar to fprintf).
Line 306 
Line 321 
  
 static bool Inhale(const char* path, vector<char>& data) static bool Inhale(const char* path, vector<char>& data)
 { {
     FILE* is = Fopen(path, "r");      FILE* is = File_Open(path, "r");
  
     if (!is)     if (!is)
         return false;         return false;
Line 1820 
Line 1835 
         "{\n"         "{\n"
         "    return MI_Instance_Delete(&self->__instance);\n"         "    return MI_Instance_Delete(&self->__instance);\n"
         "}\n"         "}\n"
         "\n"          "\n";
         "MI_INLINE MI_Result MI_CALL <ALIAS>_Post(\n"  
       string r = T;
       if (cd->flags & MI_FLAG_INDICATION)
       {
           r += "MI_INLINE MI_Result MI_CALL <ALIAS>_Post(\n"
           "    const <ALIAS>* self,\n"
           "    MI_Context* context,\n"
           "    MI_Uint32 subscriptionIDCount,\n"
           "    const MI_Char* bookmark)\n"
           "{\n"
           "    return MI_Context_PostIndication(context, &self->__instance, subscriptionIDCount, bookmark);\n"
           "}\n"
           "\n";
       }
       else
       {
           r += "MI_INLINE MI_Result MI_CALL <ALIAS>_Post(\n"
         "    const <ALIAS>* self,\n"         "    const <ALIAS>* self,\n"
         "    MI_Context* context)\n"         "    MI_Context* context)\n"
         "{\n"         "{\n"
         "    return MI_PostInstance(context, &self->__instance);\n"         "    return MI_PostInstance(context, &self->__instance);\n"
         "}\n"         "}\n"
         "\n";         "\n";
       }
     string r = T;  
     r = sub(r, "<ALIAS>", alias);     r = sub(r, "<ALIAS>", alias);
     puts(os, r);     puts(os, r);
 } }
Line 2388 
Line 2418 
         {         {
             string r;             string r;
  
             if (!s_options.association && CanGenerateAssocRoles(cd))              if (CanGenerateAssocRoles(cd))
               {
                   if (!s_options.association)
             {             {
                 r = ASSOCIATION_PROVIDER_CLASS_DECLARATION_ROLES;                 r = ASSOCIATION_PROVIDER_CLASS_DECLARATION_ROLES;
                 SubRoles(cd, r);                 SubRoles(cd, r);
             }             }
             else             else
                 r = ASSOCIATION_PROVIDER_CLASS_DECLARATION;                 r = ASSOCIATION_PROVIDER_CLASS_DECLARATION;
               }
               else
                   errRefPropCount(cd->name);
  
             r = sub(r, "<ALIAS>", alias);             r = sub(r, "<ALIAS>", alias);
             r = sub(r, "<DATA_MEMBERS>", extraDataMemebers);             r = sub(r, "<DATA_MEMBERS>", extraDataMemebers);
Line 2474 
Line 2509 
         }         }
         else         else
         {         {
             FILE* os = Fopen(path.c_str(), "w");              FILE* os = File_Open(path.c_str(), "w");
  
             if (!os)             if (!os)
             {             {
Line 2551 
Line 2586 
     else     else
     {     {
         // Rewrite the file.         // Rewrite the file.
         FILE* os = Fopen(path.c_str(), "w");          FILE* os = File_Open(path.c_str(), "w");
  
         if (!os)         if (!os)
             err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s",path.c_str());             err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s",path.c_str());
Line 2652 
Line 2687 
  
         // Rewrite the file.         // Rewrite the file.
         {         {
             FILE* os = Fopen(path.c_str(), "w");              FILE* os = File_Open(path.c_str(), "w");
  
             if (!os)             if (!os)
             {             {
Line 2693 
Line 2728 
  
         // Rewrite the file.         // Rewrite the file.
         {         {
             FILE* os = Fopen(path.c_str(), "w");              FILE* os = File_Open(path.c_str(), "w");
  
             if (!os)             if (!os)
             {             {
Line 2740 
Line 2775 
  
             _PatchLoadUnloadCPP(alias, path, data);             _PatchLoadUnloadCPP(alias, path, data);
  
             os = Fopen(path.c_str(), "a");              os = File_Open(path.c_str(), "a");
  
             if (!os)             if (!os)
             {             {
Line 2750 
Line 2785 
         }         }
         else         else
         {         {
             os = Fopen(path.c_str(), "w");              os = File_Open(path.c_str(), "w");
  
             if (!os)             if (!os)
             {             {
Line 2780 
Line 2815 
  
         if (cd->flags & MI_FLAG_ASSOCIATION)         if (cd->flags & MI_FLAG_ASSOCIATION)
         {         {
             if (!s_options.association && CanGenerateAssocRoles(cd))              if (CanGenerateAssocRoles(cd))
               {
                   if (!s_options.association)
             {             {
                 r = ASSOCIATION_PROVIDER_CLASS_STUBS_CPP_ROLES;                 r = ASSOCIATION_PROVIDER_CLASS_STUBS_CPP_ROLES;
                 SubRoles(cd, r);                 SubRoles(cd, r);
Line 2788 
Line 2825 
             else             else
                 r = ASSOCIATION_PROVIDER_CLASS_STUBS_CPP;                 r = ASSOCIATION_PROVIDER_CLASS_STUBS_CPP;
         }         }
               else
                   errRefPropCount(cd->name);
           }
         else if (cd->flags & MI_FLAG_INDICATION)         else if (cd->flags & MI_FLAG_INDICATION)
             r = INDICATION_PROVIDER_CLASS_STUBS_CPP;             r = INDICATION_PROVIDER_CLASS_STUBS_CPP;
         else         else
Line 2876 
Line 2916 
         {         {
             string r;             string r;
  
             if (!s_options.association && CanGenerateAssocRoles(cd))              if (CanGenerateAssocRoles(cd))
               {
                   if (!s_options.association)
             {             {
                 r = ASSOCIATION_PROVIDER_STUBS_CPP_ROLES;                 r = ASSOCIATION_PROVIDER_STUBS_CPP_ROLES;
                 SubRoles(cd, r);                 SubRoles(cd, r);
             }             }
             else             else
                 r = ASSOCIATION_PROVIDER_STUBS_CPP;                 r = ASSOCIATION_PROVIDER_STUBS_CPP;
               }
               else
                   errRefPropCount(cd->name);
  
             r = sub(r, "<ALIAS>", alias);             r = sub(r, "<ALIAS>", alias);
             puts(os, r);             puts(os, r);
Line 2966 
Line 3011 
     string path = ExpandPath(alias + ".h");     string path = ExpandPath(alias + ".h");
     Fprintf(s_stdout, ID_CREATING, "Creating %s\n", path.c_str());     Fprintf(s_stdout, ID_CREATING, "Creating %s\n", path.c_str());
  
     FILE* os = Fopen(path.c_str(), "w");      FILE* os = File_Open(path.c_str(), "w");
  
     if (!os)     if (!os)
         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", path.c_str());         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", path.c_str());
Line 3114 
Line 3159 
         GenInstanceFunctions(os,cd);         GenInstanceFunctions(os,cd);
  
     // Gen setters.     // Gen setters.
     if (!s_options.noProviders)  
     {     {
         for (size_t i = 0; i < cd->numProperties; i++)         for (size_t i = 0; i < cd->numProperties; i++)
             GenSetter(os, cd, NULL, (MI_ParameterDecl*)cd->properties[i]);             GenSetter(os, cd, NULL, (MI_ParameterDecl*)cd->properties[i]);
Line 3184 
Line 3228 
             {             {
                 string r;                 string r;
  
                 if (s_options.association || !CanGenerateAssocRoles(cd))                  if (CanGenerateAssocRoles(cd))
                   {
                       if (s_options.association)
                     r = ASSOCIATION_PROVIDER_PROTOTYPES;                     r = ASSOCIATION_PROVIDER_PROTOTYPES;
                 else                 else
                 {                 {
                     r = ROLE_PROVIDER_PROTOTYPES;                     r = ROLE_PROVIDER_PROTOTYPES;
                     SubRoles(cd, r);                     SubRoles(cd, r);
                 }                 }
                   }
                   else
                       errRefPropCount(cd->name);
  
                 r = sub(r, "<ALIAS>", alias);                 r = sub(r, "<ALIAS>", alias);
                 puts(os, r);                 puts(os, r);
Line 3287 
Line 3336 
  
             _PatchLoadSignature(alias, path, data);             _PatchLoadSignature(alias, path, data);
  
             os = Fopen(path.c_str(), "a");              os = File_Open(path.c_str(), "a");
  
             if (!os)             if (!os)
             {             {
Line 3297 
Line 3346 
         }         }
         else         else
         {         {
             os = Fopen(path.c_str(), "w");              os = File_Open(path.c_str(), "w");
  
             if (!os)             if (!os)
             {             {
Line 3324 
Line 3373 
         if (cd->flags & MI_FLAG_ASSOCIATION)         if (cd->flags & MI_FLAG_ASSOCIATION)
         {         {
             string r;             string r;
             if (s_options.association || !CanGenerateAssocRoles(cd))              if (CanGenerateAssocRoles(cd))
               {
                   if (s_options.association)
                 r = ASSOCIATION_PROVIDER_STUBS;                 r = ASSOCIATION_PROVIDER_STUBS;
             else             else
             {             {
                 r = ROLE_PROVIDER_STUBS;                 r = ROLE_PROVIDER_STUBS;
                 SubRoles(cd, r);                 SubRoles(cd, r);
             }             }
               }
               else
                   errRefPropCount(cd->name);
  
             r = sub(r, "<ALIAS>", alias);             r = sub(r, "<ALIAS>", alias);
             puts(os, r);             puts(os, r);
Line 3758 
Line 3812 
         if (eqi(q->name, "ValueMap") && !s_options.values)         if (eqi(q->name, "ValueMap") && !s_options.values)
             continue;             continue;
  
         // Skip Values qualifier if -M option was given.          // Skip MappingStrings qualifier if -M option was given.
         if (eqi(q->name, "MappingStrings") && !s_options.mappingStrings)         if (eqi(q->name, "MappingStrings") && !s_options.mappingStrings)
             continue;             continue;
  
           // Skip ModelCorrespondence qualifiers?
           if (eqi(q->name, "ModelCorrespondence") && !s_options.modelCorrespondence)
               continue;
   
         GenQualifier(parser, os, q, stem);         GenQualifier(parser, os, q, stem);
         count++;         count++;
     }     }
Line 3799 
Line 3857 
         if (eqi(q->name, "MappingStrings") && !s_options.mappingStrings)         if (eqi(q->name, "MappingStrings") && !s_options.mappingStrings)
             continue;             continue;
  
           // Skip ModelCorrespondence qualifiers?
           if (eqi(q->name, "ModelCorrespondence") && !s_options.modelCorrespondence)
               continue;
   
         putl(os, "    &%s_%s_qual,", stem.c_str(), q->name);         putl(os, "    &%s_%s_qual,", stem.c_str(), q->name);
     }     }
  
Line 4318 
Line 4380 
         "        }\n"         "        }\n"
         "    }\n"         "    }\n"
         "\n"         "\n"
         "    MI_PostResult(context, MI_RESULT_OK);\n"          "    MI_Context_PostResult(context, MI_RESULT_OK);\n"
         "}\n"         "}\n"
         "\n"         "\n"
         "static void MI_CALL <ALIAS>_ReferenceInstances(\n"         "static void MI_CALL <ALIAS>_ReferenceInstances(\n"
Line 4366 
Line 4428 
         "        }\n"         "        }\n"
         "    }\n"         "    }\n"
         "\n"         "\n"
         "    MI_PostResult(context, MI_RESULT_OK);\n"          "    MI_Context_PostResult(context, MI_RESULT_OK);\n"
         "}\n"         "}\n"
         "\n";         "\n";
  
Line 4376 
Line 4438 
  
     if (cd->flags & MI_FLAG_ASSOCIATION)     if (cd->flags & MI_FLAG_ASSOCIATION)
     {     {
         if (!s_options.association && CanGenerateAssocRoles(cd))          if (CanGenerateAssocRoles(cd))
           {
               if (!s_options.association)
         {         {
             string r = ROLES;             string r = ROLES;
             r = sub(r, "<ALIAS>", alias);             r = sub(r, "<ALIAS>", alias);
             SubRoles(cd, r);             SubRoles(cd, r);
             puts(os, r);             puts(os, r);
         }         }
           }
           else
               errRefPropCount(cd->name);
  
         const char T[] =         const char T[] =
           "static MI_CONST MI_ProviderFT <ALIAS>_funcs =\n"           "static MI_CONST MI_ProviderFT <ALIAS>_funcs =\n"
Line 4558 
Line 4625 
     else     else
         r = sub(r, "<SCHEMA>", "schemaDecl");         r = sub(r, "<SCHEMA>", "schemaDecl");
  
     if (s_options.cpp || !s_options.noProviders)  
         r = sub(r, "<STATIC>", "");         r = sub(r, "<STATIC>", "");
     else  
         r = sub(r, "<STATIC>", "static ");  
  
     if (cd->numProperties)     if (cd->numProperties)
     {     {
Line 4836 
Line 4900 
     // Open the file.     // Open the file.
     string path = ExpandPath("schema.c");     string path = ExpandPath("schema.c");
  
     FILE* os = Fopen(path.c_str(), "w");      FILE* os = File_Open(path.c_str(), "w");
  
     if (!os)     if (!os)
         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", path.c_str());         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", path.c_str());
Line 4863 
Line 4927 
         if (!cd)         if (!cd)
             err(ID_UNKNOWN_CLASS, "unknown class: %s", classNames[i].c_str());             err(ID_UNKNOWN_CLASS, "unknown class: %s", classNames[i].c_str());
  
         if (!s_options.association && (cd->flags & MI_FLAG_ASSOCIATION) &&          if (cd->flags & MI_FLAG_ASSOCIATION)
             CanGenerateAssocRoles(cd))          {
               if (CanGenerateAssocRoles(cd))
         {         {
                   if (!s_options.association)
             generateMatch = true;             generateMatch = true;
         }         }
               else
                   errRefPropCount(cd->name);
           }
  
         // Include the class header.         // Include the class header.
         const string alias = AliasOf(cd->name);         const string alias = AliasOf(cd->name);
Line 4991 
Line 5060 
     }     }
  
     // Generate MI_Server methods.     // Generate MI_Server methods.
       if (!s_options.noProviders)
     {     {
         const char T[] =         const char T[] =
             "MI_Result MI_CALL MI_Server_GetVersion(\n"             "MI_Result MI_CALL MI_Server_GetVersion(\n"
Line 5109 
Line 5179 
         {         {
             char buf[64];             char buf[64];
             Snprintf(buf, MI_COUNT(buf), "MI_MAKE_VERSION(%u,%u,%u)",             Snprintf(buf, MI_COUNT(buf), "MI_MAKE_VERSION(%u,%u,%u)",
                 MI_MAJOR, MI_MINOR, MI_REVISON);                  MI_MAJOR, MI_MINOR, MI_REVISION);
             r = sub(r, "<VERSION>", buf);             r = sub(r, "<VERSION>", buf);
         }         }
  
Line 5300 
Line 5370 
  
             // Rewrite the file.             // Rewrite the file.
             {             {
                 FILE* os = Fopen(path.c_str(), "w");                  FILE* os = File_Open(path.c_str(), "w");
  
                 if (!os)                 if (!os)
                 {                 {
Line 5329 
Line 5399 
         return;         return;
     }     }
  
     FILE* os = Fopen(path.c_str(), "w");      FILE* os = File_Open(path.c_str(), "w");
  
     if (!os)     if (!os)
         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", path.c_str());         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", path.c_str());
Line 5379 
Line 5449 
         return;         return;
     }     }
  
     FILE* os = Fopen(path.c_str(), "w");      FILE* os = File_Open(path.c_str(), "w");
  
     if (!os)     if (!os)
         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", path.c_str());         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", path.c_str());
Line 5415 
Line 5485 
         return;         return;
     }     }
  
     FILE* os = Fopen(path.c_str(), "w");      FILE* os = File_Open(path.c_str(), "w");
  
     if (!os)     if (!os)
         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", path.c_str());         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", path.c_str());
Line 5448 
Line 5518 
     // Open the file.     // Open the file.
     string path = ExpandPath("stubs.cpp");     string path = ExpandPath("stubs.cpp");
  
     FILE* os = Fopen(path.c_str(), "w");      FILE* os = File_Open(path.c_str(), "w");
  
     if (!os)     if (!os)
         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", path.c_str());         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", path.c_str());
Line 5540 
Line 5610 
 { {
     // Open the file.     // Open the file.
     const string path = ExpandPath("strings.rc");     const string path = ExpandPath("strings.rc");
     FILE* os = Fopen(path.c_str(), "w");      FILE* os = File_Open(path.c_str(), "w");
  
     if (!os)     if (!os)
         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", path.c_str());         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", path.c_str());
Line 5620 
Line 5690 
         }         }
  
         if (!cd_right)         if (!cd_right)
         {              errRefPropCount(cd->name);
             err(ID_INSUFFICIENT_REFERENCES, "insufficient references: "  
                 "class must have 2 or more: %s", cd->name);  
         }  
  
         res = _GetClassInheritanceRegistrationEntry(cd_left) +         res = _GetClassInheritanceRegistrationEntry(cd_left) +
             "+" +             "+" +
Line 5654 
Line 5721 
 { {
     // Open the file.     // Open the file.
     const string path = ExpandPath(s_options.providerRegistryPath);     const string path = ExpandPath(s_options.providerRegistryPath);
     FILE* os = Fopen(path.c_str(), "a");      FILE* os = File_Open(path.c_str(), "a");
  
     if (!os)     if (!os)
         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", path.c_str());         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", path.c_str());
Line 5722 
Line 5789 
     }     }
  
     // Open Makefile:     // Open Makefile:
     FILE* os = Fopen(MAKEFILE, "w");      FILE* os = File_Open(MAKEFILE, "w");
     if (!os)     if (!os)
         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", MAKEFILE);         err(ID_FAILED_TO_OPEN_FILE, "failed to open file: %s", MAKEFILE);
  
     {     {
         // 'OMIMAK' variable.         // 'OMIMAK' variable.
         string OMIMAK = string(GetPath(ID_DATADIR)) + "/omi.mak";          string OMIMAK = string(OMI_GetPath(ID_DATADIR)) + "/omi.mak";
  
         // 'PROVIDER' variable.         // 'PROVIDER' variable.
         string PROVIDER = s_options.providerName;         string PROVIDER = s_options.providerName;
Line 5765 
Line 5832 
         r = sub(r, "<SOURCES>", SOURCES);         r = sub(r, "<SOURCES>", SOURCES);
         r = sub(r, "<CLASSES>", CLASSES);         r = sub(r, "<CLASSES>", CLASSES);
         r = sub(r, "<CMDLINE>", cmdLine);         r = sub(r, "<CMDLINE>", cmdLine);
           r = subu(r, "<MIAPIVERSION>", _MIAPIVERSION);
         puts(os, r);         puts(os, r);
     }     }
  
Line 5799 
Line 5867 
             localClassNamesArg.push_back(classNamesArg[i].c_str());             localClassNamesArg.push_back(classNamesArg[i].c_str());
     }     }
  
     // WIndows trick to get compatible float format  
 #ifdef WIN32 #ifdef WIN32
       // Platform-specific trick to get compatible float format
     _set_output_format(_TWO_DIGIT_EXPONENT);     _set_output_format(_TWO_DIGIT_EXPONENT);
 #endif #endif
  
Line 5830 
Line 5898 
  
     if ( s_options.quiet )     if ( s_options.quiet )
     {     {
         s_stdout = Fopen(NULL_FILE, "a");          s_stdout = File_Open(NULL_FILE, "a");
     }     }
     else     else
     {     {
Line 5838 
Line 5906 
     }     }
  
     // Create the parser.     // Create the parser.
     Parser parser(s_options.paths, s_options.warnings);      Parser parser(s_options.paths, !s_options.no_warnings);
  
     // Parse all the MOF files.     // Parse all the MOF files.
     for (size_t i = 0; i < mofFilesArg.size(); i++)     for (size_t i = 0; i < mofFilesArg.size(); i++)
Line 5898 
Line 5966 
                 classNames.push_back(cd->name);                 classNames.push_back(cd->name);
  
             // Reject classes that are abstract.             // Reject classes that are abstract.
             if (cd->flags & MI_FLAG_ABSTRACT)              if (cd->flags & MI_FLAG_ABSTRACT && !s_options.noProviders)
             {             {
                 err(ID_REFUSED_TO_GENERATE_PROVIDER_FOR_ABSTRACT_CLASS,                 err(ID_REFUSED_TO_GENERATE_PROVIDER_FOR_ABSTRACT_CLASS,
                     "refused to generated provider for abstract class: %s",                     "refused to generated provider for abstract class: %s",


Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

ViewCVS 0.9.2