From af28f72e6564f0a87a9c3662794bc69a84e8531e Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Fri, 13 Aug 2010 10:36:45 +0200 Subject: [PATCH] Store the default value of the formal argument in a string literal. --- src/shared/cplusplus/Bind.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/shared/cplusplus/Bind.cpp b/src/shared/cplusplus/Bind.cpp index 74ae70c839a..cb7dc7311ab 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; -- GitLab