summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Sotoudeh <matthewsot@outlook.com>2017-07-26 15:16:57 -0700
committerMatthew Sotoudeh <matthewsot@outlook.com>2017-07-26 15:16:57 -0700
commite275ebdc473e79f773c277cfdf6037b6018f512b (patch)
treec2db40fbe1cad5fbf12d19ba40c765bf95cdb21f
parent8cea21ce551baf8fe75fb796a555b45b61e30bf7 (diff)
improved the js wrapping code
-rw-r--r--content/scripts/editor.js1
-rw-r--r--content/scripts/wrap-await.js27
2 files changed, 17 insertions, 11 deletions
diff --git a/content/scripts/editor.js b/content/scripts/editor.js
index a148779..432ea31 100644
--- a/content/scripts/editor.js
+++ b/content/scripts/editor.js
@@ -52,7 +52,6 @@ function runJS() {
var scriptStr = editor.getValue();
scriptStr = wrapAwait(scriptStr);
- alert(scriptStr);
const script = new vm.Script(scriptStr);
var sandbox = {
diff --git a/content/scripts/wrap-await.js b/content/scripts/wrap-await.js
index d7be4ac..de3c864 100644
--- a/content/scripts/wrap-await.js
+++ b/content/scripts/wrap-await.js
@@ -1,13 +1,16 @@
let esprima = require("esprima");
let escodegen = require("escodegen");
+
function wrapSingle(el) {
if (el === undefined) return undefined;
- el.argument = wrapSingle(el.argument);
- el.arguments = wrapList(el.arguments);
+ el.argument = wrap(el.argument);
+ el.init = wrap(el.init);
+ el.arguments = wrap(el.arguments);
+ el.declarations = wrap(el.declarations);
- el.left = wrapSingle(el.left);
- el.right = wrapSingle(el.right);
+ el.left = wrap(el.left);
+ el.right = wrap(el.right);
if (el.type == "CallExpression") {
el = {
@@ -16,24 +19,28 @@ function wrapSingle(el) {
};
}
- el.expression = wrapSingle(el.expression);
- el.body = wrapList(el.body);
+ el.expression = wrap(el.expression);
+ el.body = wrap(el.body);
return el;
}
function wrapList(list) {
if (list === undefined) return undefined;
if (list.body !== undefined) {
- list.body = wrapList(list.body);
+ list.body = wrap(list.body);
return list;
}
var newList = []
for (var i = 0; i < list.length; i++) {
- list[i] = wrapSingle(list[i]);
+ list[i] = wrap(list[i]);
}
return list;
}
+function wrap(el) {
+ if (Array.isArray(el)) return wrapList(el);
+ return wrapSingle(el);
+}
function wrapAwait(script) {
var parsed = esprima.parse(script).body;
@@ -43,13 +50,13 @@ function wrapAwait(script) {
for (var i = 0; i < parsed.length; i++) {
if (parsed[i].type == "FunctionDeclaration") {
parsed[i].async = true;
- parsed[i].body = wrapList(parsed[i].body);
+ parsed[i].body = wrap(parsed[i].body);
functions.push(parsed[i]);
} else {
body.push(parsed[i]);
}
}
- body = wrapList(body);
+ body = wrap(body);
var pre = escodegen.generate({ type: "Program", body: functions });
var internal = escodegen.generate({ type: "Program", body: body });
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback