summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/lib/codegen-test-common.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/lib/codegen-test-common.js')
-rw-r--r--js/src/jit-test/lib/codegen-test-common.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/js/src/jit-test/lib/codegen-test-common.js b/js/src/jit-test/lib/codegen-test-common.js
new file mode 100644
index 0000000000..ad5511746b
--- /dev/null
+++ b/js/src/jit-test/lib/codegen-test-common.js
@@ -0,0 +1,53 @@
+// Set to true to emit ' +' instead of the unreadable '\s+'.
+var SPACEDEBUG = false;
+
+// Any hex string
+var HEX = '[0-9a-fA-F]'
+var HEXES = `${HEX}+`;
+
+function wrap(options, funcs) {
+ if ('memory' in options)
+ return `(module (memory ${options.memory}) ${funcs})`;
+ return `(module ${funcs})`;
+}
+
+function fixlines(s) {
+ return s.split(/\n+/)
+ .map(strip)
+ .filter(x => x.length > 0)
+ .map(x => '(?:0x)?' + HEXES + ' ' + x)
+ .map(spaces)
+ .join('\n');
+}
+
+function strip(s) {
+ while (s.length > 0 && isspace(s.charAt(0)))
+ s = s.substring(1);
+ while (s.length > 0 && isspace(s.charAt(s.length-1)))
+ s = s.substring(0, s.length-1);
+ return s;
+}
+
+function striplines(s) {
+ return s.split('\n').map(strip).join('\n');
+}
+
+function spaces(s) {
+ let t = '';
+ let i = 0;
+ while (i < s.length) {
+ if (isspace(s.charAt(i))) {
+ t += SPACEDEBUG ? ' +' : '\\s+';
+ i++;
+ while (i < s.length && isspace(s.charAt(i)))
+ i++;
+ } else {
+ t += s.charAt(i++);
+ }
+ }
+ return t;
+}
+
+function isspace(c) {
+ return c == ' ' || c == '\t';
+}