aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoralon@honor <none@none>2010-09-10 21:15:40 -0700
committeralon@honor <none@none>2010-09-10 21:15:40 -0700
commit285a5ef5d5ffb9c555b95a08ef5192b9be8033c6 (patch)
treea3dc0d29d2a64abb1e9b32259016b45dde169fae /src
parentbcb46261d622c6e6919bab5ccc6506913d5da57a (diff)
Proper parsing of llvm strings
Diffstat (limited to 'src')
-rw-r--r--src/parser.js20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/parser.js b/src/parser.js
index aa91b60b..c91d83da 100644
--- a/src/parser.js
+++ b/src/parser.js
@@ -341,6 +341,24 @@ function parseNumerical(value, type) {
return value;
}
+// \0Dsometext is really '\r', then sometext
+// This function returns an array of int values
+function parseLLVMString(str) {
+ var ret = [];
+ var i = 0;
+ while (i < str.length) {
+ var chr = str[i];
+ if (chr != '\\') {
+ ret.push(chr.charCodeAt(0));
+ i++;
+ } else {
+ ret.push(_HexToInt(str[i+1]+str[i+2]));
+ i += 3;
+ }
+ }
+ return ret;
+}
+
function getLabelIds(labels) {
return labels.map(function(label) { return label.ident });
}
@@ -1915,7 +1933,7 @@ function JSify(data) {
return makePointer(JSON.stringify(makeEmptyStruct(type)));
} else if (value.text[0] == '"') {
value.text = value.text.substr(1, value.text.length-2);
- return makePointer('intArrayFromString("' + value.text + '")');
+ return makePointer(JSON.stringify(parseLLVMString(value.text)));
} else {
// Gets an array of constant items, separated by ',' tokens
function handleSegments(tokens) {