Skip implicit link info for multiple OS X archs
[cmake.git] / Source / cmDependsJavaParserHelper.h
blob2c0905d84263a4339eac0770f9c055365889ccfe
1 /*=========================================================================
3 Program: CMake - Cross-Platform Makefile Generator
4 Module: $RCSfile: cmDependsJavaParserHelper.h,v $
5 Language: C++
6 Date: $Date: 2009-09-14 14:31:38 $
7 Version: $Revision: 1.4 $
9 Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
10 See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
12 This software is distributed WITHOUT ANY WARRANTY; without even
13 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 PURPOSE. See the above copyright notices for more information.
16 =========================================================================*/
17 #ifndef cmDependsJavaParserHelper_h
18 #define cmDependsJavaParserHelper_h
20 #include "cmStandardIncludes.h"
22 #define YYSTYPE cmDependsJavaParserHelper::ParserType
23 #define YYSTYPE_IS_DECLARED
24 #define YY_EXTRA_TYPE cmDependsJavaParserHelper*
25 #define YY_DECL int cmDependsJava_yylex(YYSTYPE* yylvalp, yyscan_t yyscanner)
27 /** \class cmDependsJavaParserHelper
28 * \brief Helper class for parsing java source files
30 * Finds dependencies for java file and list of outputs
33 class cmDependsJavaParserHelper
35 public:
36 typedef struct {
37 char* str;
38 } ParserType;
40 cmDependsJavaParserHelper();
41 ~cmDependsJavaParserHelper();
43 int ParseString(const char* str, int verb);
44 int ParseFile(const char* file);
46 // For the lexer:
47 void AllocateParserType(cmDependsJavaParserHelper::ParserType* pt,
48 const char* str, int len = 0);
50 int LexInput(char* buf, int maxlen);
51 void Error(const char* str);
53 // For yacc
54 void AddClassFound(const char* sclass);
55 void PrepareElement(ParserType* opt);
56 void DeallocateParserType(char** pt);
57 void CheckEmpty(int line, int cnt, ParserType* pt);
58 void StartClass(const char* cls);
59 void EndClass();
60 void AddPackagesImport(const char* sclass);
61 void SetCurrentPackage(const char* pkg) { this->CurrentPackage = pkg; }
62 const char* GetCurrentPackage() { return this->CurrentPackage.c_str(); }
63 void SetCurrentCombine(const char* cmb) { this->CurrentCombine = cmb; }
64 const char* GetCurrentCombine() { return this->CurrentCombine.c_str(); }
65 void UpdateCombine(const char* str1, const char* str2);
67 std::vector<cmStdString>& GetClassesFound() { return this->ClassesFound; }
69 std::vector<cmStdString> GetFilesProduced();
71 private:
72 class CurrentClass
74 public:
75 cmStdString Name;
76 std::vector<CurrentClass>* NestedClasses;
77 CurrentClass()
79 this->NestedClasses = new std::vector<CurrentClass>;
81 ~CurrentClass()
83 delete this->NestedClasses;
85 CurrentClass& operator=(CurrentClass const& c)
87 this->NestedClasses->clear();
88 this->Name = c.Name;
89 std::copy(
90 c.NestedClasses->begin(),
91 c.NestedClasses->end(),
92 std::back_inserter(
93 *this->NestedClasses)
95 return *this;
97 CurrentClass(CurrentClass const& c)
99 (*this) = c;
101 void AddFileNamesForPrinting(std::vector<cmStdString> *files,
102 const char* prefix, const char* sep);
104 cmStdString CurrentPackage;
105 cmStdString::size_type InputBufferPos;
106 cmStdString InputBuffer;
107 std::vector<char> OutputBuffer;
108 std::vector<cmStdString> ClassesFound;
109 std::vector<cmStdString> PackagesImport;
110 cmStdString CurrentCombine;
112 std::vector<CurrentClass> ClassStack;
114 int CurrentLine;
115 int UnionsAvailable;
116 int LastClassId;
117 int CurrentDepth;
118 int Verbose;
120 std::vector<char*> Allocates;
122 void PrintClasses();
124 void Print(const char* place, const char* str);
125 void CombineUnions(char** out, const char* in1, char** in2,
126 const char* sep);
127 void SafePrintMissing(const char* str, int line, int cnt);
129 void CleanupParser();
132 #endif