AST_Node.warn_function(string_template(txt, props));
};
-var AST_Debugger = DEFNODE("Debugger", null, {
- $documentation: "Represents a debugger statement"
-});
+/* -----[ statements ]----- */
-var AST_Directive = DEFNODE("Directive", "value", {
- $documentation: "Represents a directive, like \"use strict\";"
+var AST_StatementBase = DEFNODE("StatementBase", null, {
});
-/* -----[ loops ]----- */
-
var AST_Statement = DEFNODE("Statement", "body", {
$documentation: "Base class of all statements",
_walk: function(visitor) {
this.body._walk(visitor);
});
}
-});
+}, AST_StatementBase);
+
+var AST_Debugger = DEFNODE("Debugger", null, {
+ $documentation: "Represents a debugger statement"
+}, AST_StatementBase);
+
+var AST_Directive = DEFNODE("Directive", "value", {
+ $documentation: "Represents a directive, like \"use strict\";"
+}, AST_StatementBase);
var AST_SimpleStatement = DEFNODE("SimpleStatement", null, {
$documentation: "A statement consisting of an expression, i.e. a = 1 + 2."
function walk_body(node, visitor) {
if (node.body instanceof Array) node.body.forEach(function(stat){
stat._walk(visitor);
- }); else node.body._walk(visitor);
+ });
+ else if (node.body instanceof AST_Statement) node.body._walk(visitor);
};
var AST_Block = DEFNODE("Block", null, {
return path.resolve(tests_dir, dir);
}
+function as_toplevel(input) {
+ if (input instanceof U.AST_BlockStatement) input = input.body;
+ else if (input instanceof U.AST_StatementBase) input = [ input ];
+ else throw new Error("Unsupported input syntax");
+ return new U.AST_Toplevel({ body: input });
+}
+
function run_compress_tests() {
var dir = test_directory("compress");
log_directory("compress");
function test_case(test) {
log_test(test.name);
var cmp = new U.Compressor(test.options || {}, true);
- var expect = make_code(test.expect, false);
- var output = make_code(test.input.squeeze(cmp), false);
+ var expect = make_code(as_toplevel(test.expect), false);
+ var input = as_toplevel(test.input);
+ input.figure_out_scope();
+ var output = make_code(input.squeeze(cmp), false);
if (expect != output) {
log("!!! failed\n---INPUT---\n{input}\n---OUTPUT---\n{output}\n---EXPECTED---\n{expected}\n\n", {
input: make_code(test.input),