From af28f72e6564f0a87a9c3662794bc69a84e8531e Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Fri, 13 Aug 2010 10:36:45 +0200 Subject: Store the default value of the formal argument in a string literal. --- src/shared/cplusplus/Bind.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/shared/cplusplus') 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 +#include #include #include @@ -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; -- cgit v1.2.1