You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							78 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
	
	
							78 lines
						
					
					
						
							2.1 KiB
						
					
					
				var fs = require("fs"); | 
						|
 | 
						|
exports.FILES = [ | 
						|
    "../lib/utils.js", | 
						|
    "../lib/ast.js", | 
						|
    "../lib/parse.js", | 
						|
    "../lib/transform.js", | 
						|
    "../lib/scope.js", | 
						|
    "../lib/output.js", | 
						|
    "../lib/compress.js", | 
						|
    "../lib/sourcemap.js", | 
						|
    "../lib/mozilla-ast.js", | 
						|
    "../lib/propmangle.js", | 
						|
    "../lib/minify.js", | 
						|
    "./exports.js", | 
						|
].map(function(file) { | 
						|
    return require.resolve(file); | 
						|
}); | 
						|
 | 
						|
new Function("MOZ_SourceMap", "exports", function() { | 
						|
    var code = exports.FILES.map(function(file) { | 
						|
        return fs.readFileSync(file, "utf8"); | 
						|
    }); | 
						|
    code.push("exports.describe_ast = " + describe_ast.toString()); | 
						|
    return code.join("\n\n"); | 
						|
}())(require("source-map"), exports); | 
						|
 | 
						|
function describe_ast() { | 
						|
    var out = OutputStream({ beautify: true }); | 
						|
    function doitem(ctor) { | 
						|
        out.print("AST_" + ctor.TYPE); | 
						|
        var props = ctor.SELF_PROPS.filter(function(prop) { | 
						|
            return !/^\$/.test(prop); | 
						|
        }); | 
						|
        if (props.length > 0) { | 
						|
            out.space(); | 
						|
            out.with_parens(function() { | 
						|
                props.forEach(function(prop, i) { | 
						|
                    if (i) out.space(); | 
						|
                    out.print(prop); | 
						|
                }); | 
						|
            }); | 
						|
        } | 
						|
        if (ctor.documentation) { | 
						|
            out.space(); | 
						|
            out.print_string(ctor.documentation); | 
						|
        } | 
						|
        if (ctor.SUBCLASSES.length > 0) { | 
						|
            out.space(); | 
						|
            out.with_block(function() { | 
						|
                ctor.SUBCLASSES.forEach(function(ctor, i) { | 
						|
                    out.indent(); | 
						|
                    doitem(ctor); | 
						|
                    out.newline(); | 
						|
                }); | 
						|
            }); | 
						|
        } | 
						|
    }; | 
						|
    doitem(AST_Node); | 
						|
    return out + "\n"; | 
						|
} | 
						|
 | 
						|
function infer_options(options) { | 
						|
    var result = exports.minify("", options); | 
						|
    return result.error && result.error.defs; | 
						|
} | 
						|
 | 
						|
exports.default_options = function() { | 
						|
    var defs = {}; | 
						|
    Object.keys(infer_options({ 0: 0 })).forEach(function(component) { | 
						|
        var options = {}; | 
						|
        options[component] = { 0: 0 }; | 
						|
        if (options = infer_options(options)) { | 
						|
            defs[component] = options; | 
						|
        } | 
						|
    }); | 
						|
    return defs; | 
						|
};
 | 
						|
 |