|
[anjuta/cxxparser] cxx-parser: test-complex-struct solved.: msg#08233svn-commits-list
commit 4e524e9ad69365abd66d62847310b0200595886d Author: Massimo Corà <mcora@xxxxxxxxxxxxx> Date: Sat Aug 1 01:24:19 2009 +0200 cxx-parser: test-complex-struct solved. this commit just to set a milestone in the process. Now there's a need of a rewrite of process_expression (), maybe in a modular way. Typedef kind detection is not done in the last printout so the test-complex-struct isn't completed but the result is there the same. plugins/symbol-db/cxxparser/engine-parser.cpp | 42 +++++++++++++++---- plugins/symbol-db/cxxparser/main.c | 4 +- .../cxxparser/sample-db/test-cast-simple-struct.c | 8 ++-- .../cxxparser/sample-db/test-simple-struct.c | 4 +- 4 files changed, 41 insertions(+), 17 deletions(-) --- diff --git a/plugins/symbol-db/cxxparser/engine-parser.cpp b/plugins/symbol-db/cxxparser/engine-parser.cpp index eb8f612..54ee9d2 100644 --- a/plugins/symbol-db/cxxparser/engine-parser.cpp +++ b/plugins/symbol-db/cxxparser/engine-parser.cpp @@ -226,20 +226,40 @@ EngineParser::processExpression(const string& stmt, symbol_db_engine_find_symbol_by_name_pattern_filtered ( _dbe, prev_token_type_name.c_str (), SYMTYPE_SCOPE_CONTAINER, TRUE, - SYMSEARCH_FILESCOPE_IGNORE, NULL, -1 , - -1, SYMINFO_SIMPLE); - do { + SYMSEARCH_FILESCOPE_IGNORE, NULL, 1, + -1, (SymExtraInfo)(SYMINFO_SIMPLE | SYMINFO_KIND)); + if (curr_searchable_scope != NULL) + { SymbolDBEngineIteratorNode *node; node = SYMBOL_DB_ENGINE_ITERATOR_NODE (curr_searchable_scope); cout << "Current Searchable Scope " << - symbol_db_engine_iterator_node_get_symbol_name (node) << endl; - - } while (symbol_db_engine_iterator_move_next (curr_searchable_scope) == TRUE); + symbol_db_engine_iterator_node_get_symbol_name (node) << + " and id "<< symbol_db_engine_iterator_node_get_symbol_id (node) << + endl; - /* reset it to first position */ - symbol_db_engine_iterator_first (curr_searchable_scope); + /* is it a typedef? In that case find the parent struct */ + if (g_strcmp0 (symbol_db_engine_iterator_node_get_symbol_extra_string (node, + SYMINFO_KIND), "typedef") == 0) + { + cout << "it's a struct!" << endl; + int struct_id = symbol_db_engine_get_parent_scope_id_by_symbol_id (_dbe, + symbol_db_engine_iterator_node_get_symbol_id (node), + NULL); + + g_object_unref (curr_searchable_scope); + curr_searchable_scope = symbol_db_engine_get_symbol_info_by_id (_dbe, + struct_id, + (SymExtraInfo)(SYMINFO_SIMPLE | SYMINFO_KIND)); + + node = SYMBOL_DB_ENGINE_ITERATOR_NODE (curr_searchable_scope); + cout << "(NEW) Current Searchable Scope " << + symbol_db_engine_iterator_node_get_symbol_name (node) << + " and id "<< symbol_db_engine_iterator_node_get_symbol_id (node) << + endl; + } + } } cout << "--------\nCurrent token \"" << current_token << "\" with op " << op << endl; @@ -289,6 +309,10 @@ EngineParser::processExpression(const string& stmt, else { cout << "Good element " << result.m_name << endl; + out_type_name = result.m_name; + out_type_scope = symbol_db_engine_iterator_node_get_symbol_name (node); + evaluation_succeed = true; + continue; } // FIXME iter? diff --git a/plugins/symbol-db/cxxparser/main.c b/plugins/symbol-db/cxxparser/main.c index c5f2f23..8cab016 100644 --- a/plugins/symbol-db/cxxparser/main.c +++ b/plugins/symbol-db/cxxparser/main.c @@ -135,9 +135,9 @@ int main (int argc, char *argv[]) g_test_init (&argc, &argv, NULL); -// g_test_add_func ("/simple_c/test-simple-struct", test_simple_struct); + g_test_add_func ("/simple_c/test-simple-struct", test_simple_struct); // g_test_add_func ("/simple_c/test-cast-simple-struct", test_cast_simple_struct); - g_test_add_func ("/complex_c/test-complex-struct", test_complex_struct); +// g_test_add_func ("/complex_c/test-complex-struct", test_complex_struct); g_test_run (); g_message ("test run finished"); diff --git a/plugins/symbol-db/cxxparser/sample-db/test-cast-simple-struct.c b/plugins/symbol-db/cxxparser/sample-db/test-cast-simple-struct.c index 7f87eac..9f71df9 100644 --- a/plugins/symbol-db/cxxparser/sample-db/test-cast-simple-struct.c +++ b/plugins/symbol-db/cxxparser/sample-db/test-cast-simple-struct.c @@ -1,15 +1,15 @@ -struct asd { +struct _asd { char a; int b; }; -struct foo { +struct _foo { char c; void *d; }; void main () { - asd var; - ((foo)var). + _asd var; + ((_foo)var). diff --git a/plugins/symbol-db/cxxparser/sample-db/test-simple-struct.c b/plugins/symbol-db/cxxparser/sample-db/test-simple-struct.c index 131a67b..7ed4e40 100644 --- a/plugins/symbol-db/cxxparser/sample-db/test-simple-struct.c +++ b/plugins/symbol-db/cxxparser/sample-db/test-simple-struct.c @@ -1,11 +1,11 @@ -struct asd { +struct _asd { char a; int b; }; void main () { - asd var; + _asd var; var. _______________________________________________ SVN-commits-list mailing list (read only) http://mail.gnome.org/mailman/listinfo/svn-commits-list Want to limit the commits to a few modules? Go to above URL, log in to edit your options and select the modules ('topics') you want.
|
|
||||||||||||||||||||||||||
|
|
|
| News | Mail Home | sitemap | FAQ | advertise |