From f27147f75222155cba7f02e23564869847016394 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Tue, 5 Jun 2012 22:56:26 +0400 Subject: [PATCH] script: make top level declarations class members --- .../jet/codegen/ClosureAnnotator.java | 23 +++++- .../jetbrains/jet/codegen/CodegenContext.java | 4 +- .../jet/codegen/CodegenContexts.java | 11 ++- .../jet/codegen/ExpressionCodegen.java | 76 ++++++++++++++++--- .../codegen/ImplementationBodyCodegen.java | 7 +- .../jetbrains/jet/codegen/JetTypeMapper.java | 7 ++ .../jetbrains/jet/codegen/ScriptCodegen.java | 52 +++++++++++-- .../jet/di/InjectorForJvmCodegen.java | 11 ++- .../descriptors/ScriptCodeDescriptor.java | 11 +++ .../lang/descriptors/ScriptDescriptor.java | 9 +++ .../jet/lang/psi/JetNamedDeclaration.java | 4 + .../org/jetbrains/jet/lang/psi/JetScript.java | 5 ++ .../jet/lang/resolve/DescriptorResolver.java | 29 ++++++- .../jet/lang/resolve/DescriptorUtils.java | 4 + .../jet/lang/resolve/ScriptResolver.java | 3 + .../calls/autocasts/AutoCastUtils.java | 5 ++ .../receivers/ReceiverDescriptorVisitor.java | 4 + .../scopes/receivers/ScriptReceiver.java | 60 +++++++++++++++ .../codegen/script/topLevelProperty.ktscript | 3 + .../jetbrains/jet/codegen/ScriptGenTest.java | 12 ++- .../jet/di/AllInjectorsGenerator.java | 1 + 21 files changed, 308 insertions(+), 33 deletions(-) create mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ScriptReceiver.java create mode 100644 compiler/testData/codegen/script/topLevelProperty.ktscript diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java index 9d88e2f8254..707b824cece 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java @@ -42,7 +42,7 @@ public class ClosureAnnotator { private final Map classNamesForAnonymousClasses = new HashMap(); private final Map classNamesForClassDescriptor = new HashMap(); private final Map anonymousSubclassesCount = new HashMap(); - private final Map classesForFunctions = new HashMap(); + private final Map classesForFunctions = new HashMap(); private final Map enclosing = new HashMap(); private final MultiMap namespaceName2Files = MultiMap.create(); @@ -86,6 +86,27 @@ public class ClosureAnnotator { return classDescriptor; } + @NotNull + public ClassDescriptor classDescriptorForScrpitDescriptor(@NotNull ScriptDescriptor scriptDescriptor) { + ClassDescriptorImpl classDescriptor = classesForFunctions.get(scriptDescriptor); + if (classDescriptor == null) { + classDescriptor = new ClassDescriptorImpl( + scriptDescriptor, + Collections.emptyList(), + Name.special("