00001 #include "tplconstantnormalizer.h"
00002 #include "stree.h"
00003 #include "streeconstant.h"
00004
00005 Node* TPLConstantNormalizer::transform(Node *node) const{
00006 if (node->getName() != CConstantString) return node;
00007 Constant* constant = dynamic_cast<Constant*>(((dynamic_cast<ConstantString*>(node))->getStatement1()));
00008
00009 char* newstr = (char*)malloc(constant->getValue().length()+1);
00010 char* t = newstr;
00011 const char* s = constant->getValue().c_str();
00012 const char* end = s + constant->getValue().length();
00013
00014 while (s<end) {
00015 if (*s=='\\') {
00016 s++;
00017 if (s>=end) {
00018 continue;
00019 }
00020 switch(*s) {
00021 case '\\':
00022 case '\'':
00023 *t++ = *s;
00024 break;
00025 default:
00026 *t++ = '\\';
00027 *t++ = *s;
00028 break;
00029 }
00030 s++;
00031 } else {
00032 *t++ = *s++;
00033 }
00034 }
00035 *t = 0;
00036 ConstantString *result = new ConstantString(new Constant(newstr));
00037 free(newstr);
00038 return result;
00039 };