add debugging compiler flags:

--human-readable-output : generates readable source code in optimized output. 
--disable-type-optimizations : disables type optimizations. 
Review URL: https://chromereviews.googleplex.com/3513020

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@70 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
fabiomfv@google.com 2011-10-05 20:40:38 +00:00
parent b4be3ca2fe
commit 02fc5cc91f
7 changed files with 61 additions and 5 deletions

View file

@ -38,6 +38,10 @@ public class CommandLineOptions {
usage = "do not generate output, only analyze") usage = "do not generate output, only analyze")
private boolean checkOnly = false; private boolean checkOnly = false;
@Option(name = "--disable-type-optimizations",
usage = "Debugging: disable type optimizations")
private boolean disableTypeOptimizations = false;
@Option(name = "-documentation-lib", @Option(name = "-documentation-lib",
usage = "only generate documentation for the given library") usage = "only generate documentation for the given library")
private String documentationLibrary = null; private String documentationLibrary = null;
@ -53,6 +57,10 @@ public class CommandLineOptions {
usage = "classes to generate stubs for, comma-separated") usage = "classes to generate stubs for, comma-separated")
private String generateIsolateStubs = null; private String generateIsolateStubs = null;
@Option(name = "--human-readable-output",
usage = "Debugging: generates human readable javascript output")
private boolean generateHumanReadableOutput = false;
@Option(name = "--ignore-unrecognized-flags", usage = "ignore unrecognized command line flags") @Option(name = "--ignore-unrecognized-flags", usage = "ignore unrecognized command line flags")
private boolean ignoreUnrecognizedFlags = false; private boolean ignoreUnrecognizedFlags = false;
@ -180,6 +188,14 @@ public class CommandLineOptions {
return batch; return batch;
} }
public boolean disableTypeOptimizations() {
return disableTypeOptimizations;
}
public boolean generateHumanReadableOutput() {
return generateHumanReadableOutput;
}
/** /**
* Enables optimization of the generated JavaScript. * Enables optimization of the generated JavaScript.
*/ */

View file

@ -4,6 +4,7 @@
package com.google.dart.compiler; package com.google.dart.compiler;
import com.google.dart.compiler.CommandLineOptions.CompilerOptions;
import com.google.dart.compiler.metrics.CompilerMetrics; import com.google.dart.compiler.metrics.CompilerMetrics;
import java.io.File; import java.io.File;
@ -87,4 +88,10 @@ public interface CompilerConfiguration {
* Return the system library corresponding to the specified "dart:<libname>" spec. * Return the system library corresponding to the specified "dart:<libname>" spec.
*/ */
LibrarySource getSystemLibraryFor(String importSpec); LibrarySource getSystemLibraryFor(String importSpec);
/**
* Return {@link CompilerOptions} instance.
* @return command line options passed to the compiler.
*/
CompilerOptions getCompilerOptions();
} }

View file

@ -53,7 +53,7 @@ public class DefaultCompilerConfiguration implements CompilerConfiguration {
return new DartIsolateStubGenerator(compilerOptions.getIsolateStubClasses(), return new DartIsolateStubGenerator(compilerOptions.getIsolateStubClasses(),
compilerOptions.getIsolateStubOutputFile()); compilerOptions.getIsolateStubOutputFile());
} else if (compilerOptions.shouldOptimize()) { } else if (compilerOptions.shouldOptimize()) {
return new ClosureJsBackend(); return new ClosureJsBackend(compilerOptions.generateHumanReadableOutput());
} else { } else {
return new JavascriptBackend(); return new JavascriptBackend();
} }
@ -205,4 +205,9 @@ public class DefaultCompilerConfiguration implements CompilerConfiguration {
} }
return new UrlLibrarySource(systemUri, this.systemLibraryManager); return new UrlLibrarySource(systemUri, this.systemLibraryManager);
} }
@Override
public CompilerOptions getCompilerOptions() {
return compilerOptions;
}
} }

View file

@ -4,6 +4,7 @@
package com.google.dart.compiler; package com.google.dart.compiler;
import com.google.dart.compiler.CommandLineOptions.CompilerOptions;
import com.google.dart.compiler.metrics.CompilerMetrics; import com.google.dart.compiler.metrics.CompilerMetrics;
import java.io.File; import java.io.File;
@ -100,4 +101,9 @@ public class DelegatingCompilerConfiguration implements CompilerConfiguration {
public LibrarySource getSystemLibraryFor(String importSpec) { public LibrarySource getSystemLibraryFor(String importSpec) {
return delegate.getSystemLibraryFor(importSpec); return delegate.getSystemLibraryFor(importSpec);
} }
@Override
public CompilerOptions getCompilerOptions() {
return delegate.getCompilerOptions();
}
} }

View file

@ -12,6 +12,7 @@ import com.google.common.collect.Maps;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps; import com.google.common.collect.Multimaps;
import com.google.common.collect.Multiset; import com.google.common.collect.Multiset;
import com.google.dart.compiler.CommandLineOptions.CompilerOptions;
import com.google.dart.compiler.DartCompilerContext; import com.google.dart.compiler.DartCompilerContext;
import com.google.dart.compiler.DartSource; import com.google.dart.compiler.DartSource;
import com.google.dart.compiler.ast.DartClass; import com.google.dart.compiler.ast.DartClass;
@ -308,9 +309,13 @@ public abstract class AbstractJsBackend extends AbstractBackend {
Tracer.canTrace() ? Tracer.start(DartEventType.TRANSLATE_TO_JS, "unit", Tracer.canTrace() ? Tracer.start(DartEventType.TRANSLATE_TO_JS, "unit",
unit.getSourceName()) : null; unit.getSourceName()) : null;
OptimizationStrategy optimizationStrategy = shouldOptimize() ? CompilerOptions options = context.getCompilerConfiguration().getCompilerOptions();
new BasicOptimizationStrategy(unit, typeProvider) : OptimizationStrategy optimizationStrategy;
new NoOptimizationStrategy(unit, typeProvider); if (shouldOptimize() && !options.disableTypeOptimizations()) {
optimizationStrategy = new BasicOptimizationStrategy(unit, typeProvider);
} else {
optimizationStrategy = new NoOptimizationStrategy(unit, typeProvider);
}
try { try {
TraceEvent normalizeEvent = TraceEvent normalizeEvent =

View file

@ -66,7 +66,18 @@ public class ClosureJsBackend extends AbstractJsBackend {
private long totalJsOutputCharCount; private long totalJsOutputCharCount;
// Generate "readable" output for debugging // Generate "readable" output for debugging
private boolean generateHumanReadableOutput = false; private final boolean generateHumanReadableOutput;
public ClosureJsBackend() {
this.generateHumanReadableOutput = false;
}
/**
* @param generateHumanReadableOutput - generates human readable javascript output.
*/
public ClosureJsBackend(boolean generateHumanReadableOutput) {
this.generateHumanReadableOutput = generateHumanReadableOutput;
}
@Override @Override
public boolean isOutOfDate(DartSource src, DartCompilerContext context) { public boolean isOutOfDate(DartSource src, DartCompilerContext context) {

View file

@ -5,6 +5,7 @@
package com.google.dart.compiler.testing; package com.google.dart.compiler.testing;
import com.google.dart.compiler.Backend; import com.google.dart.compiler.Backend;
import com.google.dart.compiler.CommandLineOptions.CompilerOptions;
import com.google.dart.compiler.CompilerConfiguration; import com.google.dart.compiler.CompilerConfiguration;
import com.google.dart.compiler.DartCompilationPhase; import com.google.dart.compiler.DartCompilationPhase;
import com.google.dart.compiler.LibrarySource; import com.google.dart.compiler.LibrarySource;
@ -109,4 +110,9 @@ public class TestCompilerConfiguration implements CompilerConfiguration {
} }
return new UrlLibrarySource(systemUri, this.systemLibraryManager); return new UrlLibrarySource(systemUri, this.systemLibraryManager);
} }
@Override
public CompilerOptions getCompilerOptions() {
throw new AssertionError();
}
} }