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