Compare commits
2 Commits
0eb48ba425
...
31df7a65f0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
31df7a65f0 | ||
|
|
185989ba62 |
@@ -1,13 +0,0 @@
|
|||||||
import java.lang.String;
|
|
||||||
|
|
||||||
public class Bug365a{
|
|
||||||
swap(f){
|
|
||||||
return x -> y -> f.apply(y).apply(x);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public ex2() {
|
|
||||||
var func = x -> y -> x + y;
|
|
||||||
return swap(func).apply("A").apply("B");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1099,9 +1099,9 @@ public class StatementGenerator {
|
|||||||
block = lambdaGenerator.convert(expression.lambdaBody().block(), true);
|
block = lambdaGenerator.convert(expression.lambdaBody().block(), true);
|
||||||
}
|
}
|
||||||
List<RefTypeOrTPHOrWildcardOrGeneric> funNParams = new ArrayList<>();
|
List<RefTypeOrTPHOrWildcardOrGeneric> funNParams = new ArrayList<>();
|
||||||
funNParams.add(TypePlaceholder.fresh(expression.getStart()));// ret-Type
|
funNParams.add(TypePlaceholder.fresh(expression.getStart(), -1, false));// ret-Type
|
||||||
params.getFormalparalist().forEach(formalParameter -> // Für jeden Parameter einen TPH anfügen:
|
params.getFormalparalist().forEach(formalParameter -> // Für jeden Parameter einen TPH anfügen:
|
||||||
funNParams.add(TypePlaceholder.fresh(expression.getStart())));
|
funNParams.add(TypePlaceholder.fresh(expression.getStart(), 1, false)));
|
||||||
RefTypeOrTPHOrWildcardOrGeneric lambdaType = TypePlaceholder.fresh(expression.getStart());
|
RefTypeOrTPHOrWildcardOrGeneric lambdaType = TypePlaceholder.fresh(expression.getStart());
|
||||||
// RefType lambdaType = new
|
// RefType lambdaType = new
|
||||||
// RefType(reg.getName("Fun"+params.getFormalparalist().size()),
|
// RefType(reg.getName("Fun"+params.getFormalparalist().size()),
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ public class TYPEStmt implements StatementVisitor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(LambdaExpression lambdaExpression) {
|
public void visit(LambdaExpression lambdaExpression) {
|
||||||
TypePlaceholder tphRetType = TypePlaceholder.fresh(new NullToken());
|
TypePlaceholder tphRetType = TypePlaceholder.fresh(new NullToken(), -1, false);
|
||||||
List<RefTypeOrTPHOrWildcardOrGeneric> lambdaParams = lambdaExpression.params.getFormalparalist().stream().map((formalParameter -> formalParameter.getType())).collect(Collectors.toList());
|
List<RefTypeOrTPHOrWildcardOrGeneric> lambdaParams = lambdaExpression.params.getFormalparalist().stream().map((formalParameter -> formalParameter.getType())).collect(Collectors.toList());
|
||||||
lambdaParams.add(tphRetType);
|
lambdaParams.add(tphRetType);
|
||||||
// lambdaParams.add(0,tphRetType);
|
// lambdaParams.add(0,tphRetType);
|
||||||
@@ -635,18 +635,8 @@ public class TYPEStmt implements StatementVisitor {
|
|||||||
params.add(resolver.resolve(new GenericRefType(gtv.getName(), new NullToken())));
|
params.add(resolver.resolve(new GenericRefType(gtv.getName(), new NullToken())));
|
||||||
}
|
}
|
||||||
RefTypeOrTPHOrWildcardOrGeneric receiverType;
|
RefTypeOrTPHOrWildcardOrGeneric receiverType;
|
||||||
//alle Variance auf COntravariant setzen
|
|
||||||
if (receiver instanceof FunNClass) {
|
if (receiver instanceof FunNClass) {
|
||||||
params.forEach(x -> {
|
|
||||||
if (x instanceof TypePlaceholder) {
|
|
||||||
((TypePlaceholder) x).setVariance(1);
|
|
||||||
}}
|
|
||||||
);
|
|
||||||
//Returntyp auf Contravariance setzen.
|
|
||||||
RefTypeOrTPHOrWildcardOrGeneric para;
|
|
||||||
if ((para= params.getLast()) instanceof TypePlaceholder) {
|
|
||||||
((TypePlaceholder) para).setVariance(-1);
|
|
||||||
}
|
|
||||||
receiverType = new RefType(new JavaClassName(receiver.getClassName().toString() + "$$"), params, new NullToken()); // new FunN(params);
|
receiverType = new RefType(new JavaClassName(receiver.getClassName().toString() + "$$"), params, new NullToken()); // new FunN(params);
|
||||||
} else {
|
} else {
|
||||||
receiverType = new RefType(receiver.getClassName(), params, new NullToken());
|
receiverType = new RefType(receiver.getClassName(), params, new NullToken());
|
||||||
|
|||||||
@@ -1445,16 +1445,6 @@ public class TestComplete {
|
|||||||
//assertEquals(0.0, ex2.invoke(instance));
|
//assertEquals(0.0, ex2.invoke(instance));
|
||||||
}
|
}
|
||||||
@Test
|
@Test
|
||||||
public void testBug365a() throws Exception {
|
|
||||||
var classFiles = generateClassFiles(createClassLoader(), "Bug365a.jav");
|
|
||||||
var clazz = classFiles.get("Bug365");
|
|
||||||
var instance = clazz.getDeclaredConstructor().newInstance();
|
|
||||||
var m = clazz.getDeclaredMethod("ex1");
|
|
||||||
assertEquals("ABC", m.invoke(instance));
|
|
||||||
//var ex2 = clazz.getDeclaredMethod("ex2");
|
|
||||||
//assertEquals(0.0, ex2.invoke(instance));
|
|
||||||
}
|
|
||||||
@Test
|
|
||||||
public void testBug366() throws Exception {
|
public void testBug366() throws Exception {
|
||||||
var classFiles = generateClassFiles(createClassLoader(), "Bug366.jav");
|
var classFiles = generateClassFiles(createClassLoader(), "Bug366.jav");
|
||||||
var clazz = classFiles.get("Bug366");
|
var clazz = classFiles.get("Bug366");
|
||||||
|
|||||||
Reference in New Issue
Block a user