1 #include <bash/Config.h>
3 // -------------------------------------------------------------------------
4 int main( int argc, char* argv[] )
10 << "Usage: " << argv[ 0 ]
11 << " definitons_file object_name output_file"
16 std::string definitions_filename = argv[ 1 ];
17 std::string object_name = argv[ 2 ];
18 std::string output_filename = argv[ 3 ];
21 std::string definitions_buffer;
22 if( !( cpPlugins_bash::Read( definitions_buffer, definitions_filename ) ) )
26 << ": Error reading definitions file \"" << definitions_filename
32 // Put it in a line-by-line structure
33 TStrings definitions_lines;
34 cpPlugins_bash::Tokenize( definitions_lines, definitions_buffer, "\n" );
38 cpPlugins_bash::Parse( commands, definitions_lines );
40 // Load pre-compiled definitions
41 cpPlugins_bash::LoadDefinitions( commands );
44 TCommands definitions;
45 cpPlugins_bash::ExpandDefinitions( definitions, commands );
48 std::stringstream data;
50 << "#ifndef __cpPlugins__Demangler__" << object_name << "__h__" << std::endl
51 << "#define __cpPlugins__Demangler__" << object_name << "__h__" << std::endl
54 for( auto cIt = commands.begin( ); cIt != commands.end( ); ++cIt )
56 if( cIt->first == "define" )
60 cpPlugins_bash::Expand( instances, definitions, commands, cIt->first );
62 cpPlugins_bash::Tokenize( toks, cIt->first, "|" );
63 if( toks.size( ) > 1 )
66 << "#define cpPlugins_Demangle_" << object_name << "_"
67 << toks[ 0 ] << "( o, f, ";
68 for( unsigned int i = 1; i < toks.size( ); ++i )
69 data << toks[ i ] << ", ";
74 << "#define cpPlugins_Demangle_" << object_name << "_"
75 << toks[ 0 ] << "( o, f, a ) \\";
77 std::string prefix = "";
78 for( auto iIt = instances.begin( ); iIt != instances.end( ); ++iIt )
82 << "if( dynamic_cast< " << *iIt << "* >( o ) != NULL ) \\"
84 << " this->f( a dynamic_cast< " << *iIt << "* >( o ) ); \\"
89 data << " " << prefix << std::endl << std::endl;
94 << "#endif // __cpPlugins__Demangler__" << object_name << "__h__"
96 if( !( cpPlugins_bash::Write( data.str( ), output_filename ) ) )
98 std::cerr << "Error writing file." << std::endl;
107 cpPlugins_bash::Expand( instances, definitions, commands, "instances" );
109 // Build all instances
110 for( auto iIt = instances.begin( ); iIt != instances.end( ); ++iIt )
112 std::cout << *iIt << std::endl;