Store the default value of the formal argument in a string literal.

This commit is contained in:
Roberto Raggi
2010-08-13 10:36:45 +02:00
parent 89dba0e57b
commit af28f72e65

View File

@@ -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;