Index: compiler/java/com/google/dart/compiler/DartCompiler.java |
diff --git a/compiler/java/com/google/dart/compiler/DartCompiler.java b/compiler/java/com/google/dart/compiler/DartCompiler.java |
index e860694aaf961e36c05236ae59a13f9a269e8df0..c40658658db2cf78a2fe34b8e102f3e4c0ccb2d8 100644 |
--- a/compiler/java/com/google/dart/compiler/DartCompiler.java |
+++ b/compiler/java/com/google/dart/compiler/DartCompiler.java |
@@ -4,6 +4,7 @@ |
package com.google.dart.compiler; |
+import com.google.common.collect.Lists; |
import com.google.common.io.CharStreams; |
import com.google.common.io.Closeables; |
import com.google.common.io.Files; |
@@ -70,6 +71,49 @@ public class DartCompiler { |
public static final String CORELIB_URL_SPEC = "dart:core"; |
public static final String MAIN_ENTRY_POINT_NAME = "main"; |
+ private static class NamedPlaceHolderLibrarySource implements LibrarySource { |
+ private final String name; |
+ |
+ public NamedPlaceHolderLibrarySource(String name) { |
+ this.name = name; |
+ } |
+ |
+ @Override |
+ public boolean exists() { |
+ throw new AssertionError(); |
+ } |
+ |
+ @Override |
+ public long getLastModified() { |
+ throw new AssertionError(); |
+ } |
+ |
+ @Override |
+ public String getName() { |
+ return name; |
+ } |
+ |
+ @Override |
+ public Reader getSourceReader() { |
+ throw new AssertionError(); |
+ } |
+ |
+ @Override |
+ public URI getUri() { |
+ throw new AssertionError(); |
+ } |
+ |
+ @Override |
+ public LibrarySource getImportFor(String relPath) { |
+ throw new AssertionError(); |
+ } |
+ |
+ @Override |
+ public DartSource getSourceFor(String relPath) { |
+ throw new AssertionError(); |
+ } |
+ } |
+ |
private static class Compiler { |
private final LibrarySource app; |
private final List<LibrarySource> embeddedLibraries = new ArrayList<LibrarySource>(); |
@@ -417,7 +461,7 @@ public class DartCompiler { |
} |
} |
} |
- |
+ |
if (filesHaveChanged) { |
context.setFilesHaveChanged(); |
} |
@@ -500,7 +544,7 @@ public class DartCompiler { |
Tracer.end(logEvent); |
} |
} |
- |
+ |
private void validateLibraryDirectives() { |
LibraryUnit appLibUnit = context.getAppLibraryUnit(); |
for (LibraryUnit lib : libraries.values()) { |
@@ -576,7 +620,7 @@ public class DartCompiler { |
private void setEntryPoint() { |
LibraryUnit lib = context.getAppLibraryUnit(); |
lib.setEntryNode(new LibraryNode(MAIN_ENTRY_POINT_NAME)); |
- // this ensures that if we find it, it's a top-level static element |
+ // this ensures that if we find it, it's a top-level static element |
Element element = lib.getElement().lookupLocalElement(MAIN_ENTRY_POINT_NAME); |
switch (ElementKind.of(element)) { |
case NONE: |
@@ -1052,6 +1096,16 @@ public class DartCompiler { |
DartCompilerListener listener) throws IOException { |
DartCompilerMainContext context = new DartCompilerMainContext(lib, provider, listener, |
config); |
+ if (config.getCompilerOptions().shouldExposeCoreImpl()) { |
+ if (embeddedLibraries == null) { |
+ embeddedLibraries = Lists.newArrayList(); |
+ } |
+ // use a place-holder LibrarySource instance, to be replaced when embedded |
+ // in the compiler, where the dart uri can be resolved. |
+ embeddedLibraries.add(new NamedPlaceHolderLibrarySource("dart:coreimpl")); |
+ } |
+ |
+ |
new Compiler(lib, embeddedLibraries, config, context).compile(); |
int errorCount = context.getErrorCount(); |
if (config.typeErrorsAreFatal()) { |
@@ -1172,7 +1226,7 @@ public class DartCompiler { |
} |
return null; |
} |
- |
+ |
public static LibraryUnit getCoreLib(LibraryUnit libraryUnit) { |
return findLibrary(libraryUnit, "corelib.dart", new HashSet<LibraryElement>()); |
} |