diff options
-rw-r--r-- | src/shared/cplusplus/Bind.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/shared/cplusplus/Bind.cpp b/src/shared/cplusplus/Bind.cpp index 74ae70c839..cb7dc7311a 100644 --- a/src/shared/cplusplus/Bind.cpp +++ b/src/shared/cplusplus/Bind.cpp @@ -56,6 +56,7 @@ #include "Literals.h" #include "Scope.h" #include <vector> +#include <string> #include <memory> #include <cassert> @@ -1696,6 +1697,20 @@ bool Bind::visit(ParameterDeclarationAST *ast) Argument *arg = control()->newArgument(sourceLocation, argName); arg->setType(type); + if (ast->expression) { + unsigned startOfExpression = ast->expression->firstToken(); + unsigned endOfExpression = ast->expression->lastToken(); + std::string buffer; + for (unsigned index = startOfExpression; index != endOfExpression; ++index) { + const Token &tk = tokenAt(index); + if (tk.whitespace() || tk.newline()) + buffer += ' '; + buffer += tk.spell(); + } + const StringLiteral *initializer = control()->stringLiteral(buffer.c_str(), buffer.size()); + arg->setInitializer(initializer); + } + _scope->addMember(arg); ast->symbol = arg; |