summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/shared/cplusplus/Bind.cpp15
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;