This repository was archived by the owner on Mar 8, 2020. It is now read-only.
Description Originally reported by Olivier Mesnard in https://forum.sourced.tech/t/parsing-cpp-code-with-parameterized-types/246 .
The CDT C++ parser may be incorrectly treating the template instantiation brackets as operators.
Repro (courtesy of Olivier): Given the sample code
#include < string>
#include < deque>
#include < iostream>
class ParameterizedType {
public:
std::deque<std::string> sortPerm (std::string permissions[]);
};
/* *
* declaration of Parameterized types
* @return std::deque<std::string>
*/
std::deque<std::string> ParameterizedType::sortPerm (std::string permissions[]) {
// std::string result(0); // OK, node is cpp:CPPASTDeclarationStatement
std::deque<std::string>result (0 ); // NOK, node is cpp:CPPASTBinaryExpression
return result;
}
the following client script demonstrates the bug:
import bblfsh
def main ():
client = bblfsh .BblfshClient ("0.0.0.0:9432" )
ctx = client .parse ('ParameterizedType.cpp' )
for unode in ctx .filter ("//uast:Function" ):
func_node = unode .get ()
assert func_node ['@type' ] == 'uast:Function'
block_node = func_node ['Body' ]
assert block_node ['@type' ] == 'uast:Block'
cpp_expression_statement_node = block_node ['Statements' ][0 ]
assert cpp_expression_statement_node ['@type' ] == 'cpp:CPPASTExpressionStatement'
cpp_binary_expression_node = cpp_expression_statement_node ['Prop_Expression' ]
print ('type=' ,cpp_binary_expression_node ['@type' ])
assert cpp_binary_expression_node ['@type' ] == 'cpp:CPPASTDeclarationStatement'
break
if __name__ == '__main__' :
main ()
I suspect CDT (or at least the version of it we're using in the driver) may not be up-to-date with the lexical changes from C++11 et seq.