repl: fix two anonymous functions

This commit is contained in:
Stepan Koltsov
2012-06-09 23:25:40 +04:00
parent 3bf648ed56
commit f11767319a
7 changed files with 25 additions and 9 deletions
@@ -62,7 +62,6 @@ public class ClosureAnnotator {
this.files = files; this.files = files;
} }
@PostConstruct
public void init() { public void init() {
mapFilesToNamespaces(files); mapFilesToNamespaces(files);
prepareAnonymousClasses(); prepareAnonymousClasses();
@@ -241,7 +240,12 @@ public class ClosureAnnotator {
@Override @Override
public void visitJetFile(JetFile file) { public void visitJetFile(JetFile file) {
nameStack.push(JetPsiUtil.getFQName(file).getFqName().replace('.', '/')); if (file.isScript()) {
nameStack.push(classNameForScriptPsi(file.getScript()).getInternalName());
}
else {
nameStack.push(JetPsiUtil.getFQName(file).getFqName().replace('.', '/'));
}
file.acceptChildren(this); file.acceptChildren(this);
nameStack.pop(); nameStack.pop();
} }
@@ -135,9 +135,13 @@ public class GenerationState {
return getFactory().forNamespace(fqName, namespace); return getFactory().forNamespace(fqName, namespace);
} }
public void compileCorrectFiles(@NotNull CompilationErrorHandler errorHandler) { private void beforeCompile() {
markUsed(); markUsed();
injector.getClosureAnnotator().init();
}
public void compileCorrectFiles(@NotNull CompilationErrorHandler errorHandler) {
for (JetFile file : this.files) { for (JetFile file : this.files) {
if (file.isScript()) { if (file.isScript()) {
injector.getClosureAnnotator().registerClassNameForScript(file.getScript(), ScriptCodegen.SCRIPT_DEFAULT_CLASS_NAME); injector.getClosureAnnotator().registerClassNameForScript(file.getScript(), ScriptCodegen.SCRIPT_DEFAULT_CLASS_NAME);
@@ -146,6 +150,8 @@ public class GenerationState {
injector.getScriptCodegen().registerEarlierScripts(Collections.<Pair<ScriptDescriptor, JvmClassName>>emptyList()); injector.getScriptCodegen().registerEarlierScripts(Collections.<Pair<ScriptDescriptor, JvmClassName>>emptyList());
beforeCompile();
MultiMap<FqName, JetFile> namespaceGrouping = new MultiMap<FqName, JetFile>(); MultiMap<FqName, JetFile> namespaceGrouping = new MultiMap<FqName, JetFile>();
for (JetFile file : this.files) { for (JetFile file : this.files) {
if (file == null) throw new IllegalArgumentException("A null file given for compilation"); if (file == null) throw new IllegalArgumentException("A null file given for compilation");
@@ -162,12 +168,12 @@ public class GenerationState {
@NotNull JvmClassName className, @NotNull JvmClassName className,
@NotNull List<Pair<ScriptDescriptor, JvmClassName>> earlierScripts, @NotNull List<Pair<ScriptDescriptor, JvmClassName>> earlierScripts,
@NotNull CompilationErrorHandler errorHandler) { @NotNull CompilationErrorHandler errorHandler) {
markUsed();
injector.getScriptCodegen().registerEarlierScripts(earlierScripts); injector.getScriptCodegen().registerEarlierScripts(earlierScripts);
injector.getClosureAnnotator().registerClassNameForScript(script, className); injector.getClosureAnnotator().registerClassNameForScript(script, className);
beforeCompile();
generateNamespace( generateNamespace(
JetPsiUtil.getFQName((JetFile) script.getContainingFile()), JetPsiUtil.getFQName((JetFile) script.getContainingFile()),
Collections.singleton((JetFile) script.getContainingFile()), Collections.singleton((JetFile) script.getContainingFile()),
@@ -67,8 +67,6 @@ public class InjectorForJetTypeMapper {
jetTypeMapper.init(); jetTypeMapper.init();
closureAnnotator.init();
} }
@PreDestroy @PreDestroy
@@ -121,8 +121,6 @@ public class InjectorForJvmCodegen {
intrinsics.init(); intrinsics.init();
closureAnnotator.init();
} }
@PreDestroy @PreDestroy
@@ -249,6 +249,7 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
declarationDescriptor.accept(rootVisitor, stringBuilder); declarationDescriptor.accept(rootVisitor, stringBuilder);
if (stringBuilder.length() == 0) { if (stringBuilder.length() == 0) {
// don't use toString here because render may be called from toString
stringBuilder.append(declarationDescriptor.getClass().getName() + "@" + System.identityHashCode(declarationDescriptor)); stringBuilder.append(declarationDescriptor.getClass().getName() + "@" + System.identityHashCode(declarationDescriptor));
} }
+4
View File
@@ -0,0 +1,4 @@
>>> { -> }; 21
21
>>> { -> }; 22
22
@@ -87,5 +87,10 @@ public class ReplInterpreterTest {
testFile("functionReferencesPrev.repl"); testFile("functionReferencesPrev.repl");
} }
@Test
public void twoClosures() {
testFile("twoClosures.repl");
}
} }