Пример #1
0
    void RunAndAssert(CompressTestData testData, ICompressOptions options)
    {
        var(outAst, outMinJs, outNiceJs) = CompressTestCore(testData, options);

        Assert.Equal(testData.ExpectedAst, outAst);
        Assert.Equal(testData.ExpectedNiceJs, outNiceJs);
        Assert.Equal(testData.ExpectedMinJs, outMinJs);
    }
Пример #2
0
    string Optimize(string input, ICompressOptions compressOptions)
    {
        var parser   = new Parser(new Options(), input);
        var toplevel = parser.Parse();

        toplevel = toplevel.Compress(compressOptions);
        var outMinJsBuilder = new SourceMapBuilder();

        toplevel.PrintToBuilder(outMinJsBuilder, new OutputOptions());
        return(outMinJsBuilder.Content());
    }
Пример #3
0
 public CompressTreeTransformer(ICompressOptions options)
 {
     _compressModules = new List <CompressModuleTreeTransformerBase>
     {
         new EmptyStatementEliminationTreeTransformer(options),
         new BlockEliminationTreeTransformer(options),
         new UnusedFunctionEliminationTreeTransformer(options),
         new UnreachableCodeEliminationTreeTransformer(options),
         new UnreachableFunctionCodeEliminationTreeTransformer(options),
         new FunctionReturnTreeTransformer(options),
         new UnreachableLoopCodeEliminationTreeTransformer(options),
         new UnreachableSwitchCodeEliminationTreeTransformer(options),
         new VariableHoistingTreeTransformer(options),
         new BooleanConstantsTreeTransformer(options)
     };
 }
Пример #4
0
 public BlockEliminationTreeTransformer(ICompressOptions options) : base(options)
 {
 }
Пример #5
0
 protected override bool CanProcessNode(ICompressOptions options, AstNode node)
 {
     return(options.EnableBlockElimination && node is AstBlock astBlock && !BlockIsDisallowed(astBlock));
 }
 protected override bool CanProcessNode(ICompressOptions options, AstNode node)
 {
     return(options.EnableUnreachableCodeElimination && node is TRootNodeType);
 }
 protected UnreachableAfterJumpCodeEliminationTreeTransformerBase(ICompressOptions options) : base(options)
 {
 }
Пример #8
0
 public UnusedFunctionEliminationTreeTransformer(ICompressOptions options) : base(options)
 {
 }
 protected override bool CanProcessNode(ICompressOptions options, AstNode node)
 {
     return(options.EnableUnreachableCodeElimination && node is AstStatementWithBody);
 }
 public BooleanConstantsTreeTransformer(ICompressOptions options) : base(options)
 {
 }
 protected override bool CanProcessNode(ICompressOptions options, AstNode node)
 {
     return(options.EnableBooleanCompress && node is AstBoolean);
 }
Пример #12
0
 protected override bool CanProcessNode(ICompressOptions options, AstNode node)
 {
     return(options.EnableVariableHoisting && node is AstScope && !(node is AstClass));
 }
Пример #13
0
 public VariableHoistingTreeTransformer(ICompressOptions options) : base(options)
 {
 }
Пример #14
0
 public UnreachableSwitchCodeEliminationTreeTransformer(ICompressOptions options) : base(options)
 {
     IsProcessingSwitchStatement = true;
 }
Пример #15
0
    public static (string outAst, string outMinJs, string outNiceJs)  CompressTestCore(CompressTestData testData, ICompressOptions options)
    {
        string outAst;
        var    outNiceJs = string.Empty;
        var    outMinJs  = string.Empty;

        try
        {
            var parser   = new Parser(new Options(), testData.InputContent);
            var toplevel = parser.Parse();
            toplevel.FigureOutScope();
            toplevel = toplevel.Compress(options);
            var strSink = new StringLineSink();
            var dumper  = new DumpAst(new AstDumpWriter(strSink));
            dumper.Walk(toplevel);
            outAst = strSink.ToString();
            var outMinJsBuilder = new SourceMapBuilder();
            toplevel.PrintToBuilder(outMinJsBuilder, new OutputOptions());
            outMinJs = outMinJsBuilder.Content();
            var outNiceJsBuilder = new SourceMapBuilder();
            toplevel.PrintToBuilder(outNiceJsBuilder, new OutputOptions {
                Beautify = true
            });
            outNiceJs = outNiceJsBuilder.Content();
        }
        catch (SyntaxError e)
        {
            outAst = e.Message;
        }

        return(outAst, outMinJs, outNiceJs);
    }
Пример #16
0
 protected override bool CanProcessNode(ICompressOptions options, AstNode node)
 {
     return(options.EnableEmptyStatementElimination && node is AstEmptyStatement);
 }
Пример #17
0
 public EmptyStatementEliminationTreeTransformer(ICompressOptions options) : base(options)
 {
 }
Пример #18
0
 protected CompressModuleTreeTransformerBase(ICompressOptions options)
 {
     _options = options;
 }
 public UnreachableCodeEliminationTreeTransformer(ICompressOptions options) : base(options)
 {
 }
Пример #20
0
 protected abstract bool CanProcessNode(ICompressOptions options, AstNode node);