NamedFunctionDescriptor

This commit is contained in:
Stepan Koltsov
2012-01-12 01:25:42 +04:00
parent 6198fb90f3
commit f4bf59ff32
34 changed files with 143 additions and 87 deletions
@@ -207,11 +207,11 @@ public abstract class CodegenContext {
if(accessor != null)
return accessor;
if(descriptor instanceof FunctionDescriptor) {
FunctionDescriptorImpl myAccessor = new FunctionDescriptorImpl(contextType,
if(descriptor instanceof NamedFunctionDescriptor) {
NamedFunctionDescriptorImpl myAccessor = new NamedFunctionDescriptorImpl(contextType,
Collections.<AnnotationDescriptor>emptyList(),
descriptor.getName() + "$bridge$" + accessors.size());
FunctionDescriptor fd = (FunctionDescriptor) descriptor;
FunctionDescriptor fd = (NamedFunctionDescriptor) descriptor;
myAccessor.initialize(fd.getReceiverParameter().exists() ? fd.getReceiverParameter().getType() : null,
fd.getExpectedThisObject(),
fd.getTypeParameters(),
@@ -85,9 +85,9 @@ public class CodegenUtil {
return hasDerivedTypeInfoField(type);
}
public static FunctionDescriptor createInvoke(ExpressionAsFunctionDescriptor fd) {
public static NamedFunctionDescriptor createInvoke(ExpressionAsFunctionDescriptor fd) {
int arity = fd.getValueParameters().size();
FunctionDescriptorImpl invokeDescriptor = new FunctionDescriptorImpl(
NamedFunctionDescriptorImpl invokeDescriptor = new NamedFunctionDescriptorImpl(
fd.getExpectedThisObject().exists() ? JetStandardClasses.getReceiverFunction(arity) : JetStandardClasses.getFunction(arity),
Collections.<AnnotationDescriptor>emptyList(),
"invoke");
@@ -1218,7 +1218,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
callableMethod = ClosureCodegen.asCallableMethod((FunctionDescriptor) fd);
}
else if (fd instanceof ExpressionAsFunctionDescriptor) {
FunctionDescriptor invoke = CodegenUtil.createInvoke((ExpressionAsFunctionDescriptor) fd);
NamedFunctionDescriptor invoke = CodegenUtil.createInvoke((ExpressionAsFunctionDescriptor) fd);
callableMethod = ClosureCodegen.asCallableMethod(invoke);
}
else if (fd instanceof FunctionDescriptor) {
@@ -40,7 +40,7 @@ public class FunctionCodegen {
}
public void gen(JetNamedFunction f) {
final FunctionDescriptor functionDescriptor = state.getBindingContext().get(BindingContext.FUNCTION, f);
final NamedFunctionDescriptor functionDescriptor = state.getBindingContext().get(BindingContext.FUNCTION, f);
assert functionDescriptor != null;
JvmMethodSignature method = typeMapper.mapToCallableMethod(functionDescriptor, false, owner.getContextKind()).getSignature();
generateMethod(f, method, functionDescriptor);
@@ -445,8 +445,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
HashSet<FunctionDescriptor> overridden = new HashSet<FunctionDescriptor>();
for (JetDeclaration declaration : myClass.getDeclarations()) {
if (declaration instanceof JetFunction) {
FunctionDescriptor functionDescriptor = bindingContext.get(BindingContext.FUNCTION, declaration);
if (declaration instanceof JetNamedFunction) {
NamedFunctionDescriptor functionDescriptor = bindingContext.get(BindingContext.FUNCTION, declaration);
assert functionDescriptor != null;
overridden.addAll(functionDescriptor.getOverriddenDescriptors());
}
@@ -158,8 +158,8 @@ public class IntrinsicMethods {
}
);
for (DeclarationDescriptor stringMember : stringMembers) {
if (stringMember instanceof FunctionDescriptor) {
final FunctionDescriptor stringMethod = (FunctionDescriptor) stringMember;
if (stringMember instanceof NamedFunctionDescriptor) {
final NamedFunctionDescriptor stringMethod = (NamedFunctionDescriptor) stringMember;
final PsiMethod[] methods = stringPsiClass != null?
stringPsiClass.findMethodsByName(stringMember.getName(), false) : new PsiMethod[]{};
for (PsiMethod method : methods) {
@@ -5,7 +5,7 @@ import org.jetbrains.jet.codegen.CallableMethod;
import org.jetbrains.jet.codegen.ExpressionCodegen;
import org.jetbrains.jet.codegen.OwnerKind;
import org.jetbrains.jet.codegen.StackValue;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.NamedFunctionDescriptor;
import org.jetbrains.jet.lang.psi.JetCallExpression;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.objectweb.asm.Type;
@@ -18,9 +18,9 @@ import java.util.List;
* @author alex.tkachman
*/
public class PsiMethodCall implements IntrinsicMethod {
private final FunctionDescriptor myMethod;
private final NamedFunctionDescriptor myMethod;
public PsiMethodCall(FunctionDescriptor method) {
public PsiMethodCall(NamedFunctionDescriptor method) {
myMethod = method;
}