Initial support for classes in scripts and REPL

This commit is contained in:
Alexander Udalov
2014-07-07 03:53:02 +04:00
parent c873806b54
commit 415fe7a5e6
18 changed files with 177 additions and 5 deletions
@@ -26,8 +26,7 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.psi.JetDeclaration;
import org.jetbrains.jet.lang.psi.JetScript;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodSignature;
import org.jetbrains.org.objectweb.asm.MethodVisitor;
@@ -215,7 +214,12 @@ public class ScriptCodegen extends MemberCodegen<JetScript> {
private void genMembers() {
for (JetDeclaration declaration : scriptDeclaration.getDeclarations()) {
genFunctionOrProperty(declaration);
if (declaration instanceof JetProperty || declaration instanceof JetNamedFunction) {
genFunctionOrProperty(declaration);
}
else if (declaration instanceof JetClassOrObject) {
genClassOrObject((JetClassOrObject) declaration);
}
}
}
}
@@ -309,6 +309,11 @@ public class CodegenBinding {
return fqName.isRoot() ? shortName : fqName.asString().replace('.', '/') + '/' + shortName;
}
if (container instanceof ScriptDescriptor) {
Type scriptType = asmTypeForScriptDescriptor(bindingContext, (ScriptDescriptor) container);
return scriptType.getInternalName() + "$" + name.getIdentifier();
}
assert container instanceof ClassDescriptor : "Unexpected container: " + container + " for " + klass;
String containerInternalName = getAsmType(bindingContext, (ClassDescriptor) container).getInternalName();