diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-28 19:18:53 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-28 19:18:53 +0100 |
| commit | dab3e3e24b485e732c9419620557c5f83ff7984e (patch) | |
| tree | c98cf454bd5966b8451d2c73b971aaf5b1511ccc /src/main/java | |
| parent | af0f173fcc0bf84316e188a0e6d4da4dfe11b021 (diff) | |
Pass supplier for each type param in arbitrary generic native func
Diffstat (limited to 'src/main/java')
2 files changed, 24 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/analysis/ArbitraryValueAnalysis.java b/src/main/java/org/zwobble/hobgoblin/compiler/analysis/ArbitraryValueAnalysis.java index 650e753..6664538 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/analysis/ArbitraryValueAnalysis.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/analysis/ArbitraryValueAnalysis.java @@ -15,9 +15,15 @@ public class ArbitraryValueAnalysis { public sealed interface ArbitraryValue { void collectTypeParams(Set<TypeParam> typeParams); - record NativeFunctionCall(SimpleNativeType type) implements ArbitraryValue { + record NativeFunctionCall( + SimpleNativeType type, + List<ArbitraryValue> args + ) implements ArbitraryValue { @Override public void collectTypeParams(Set<TypeParam> typeParams) { + for (var arg : args) { + arg.collectTypeParams(typeParams); + } } } @@ -79,7 +85,14 @@ public class ArbitraryValueAnalysis { yield new ArbitraryValue.Shared(arbitraryValue(constructedNativeType.args().getFirst(), typesInfo)); } - yield new ArbitraryValue.NativeFunctionCall(constructedNativeType.constructor().genericType()); + var args = constructedNativeType.args().stream() + .map(argType -> arbitraryValue(argType, typesInfo)) + .toList(); + + yield new ArbitraryValue.NativeFunctionCall( + constructedNativeType.constructor().genericType(), + args + ); } case ConstructedStructType constructedStructType -> { @@ -106,7 +119,7 @@ public class ArbitraryValueAnalysis { new ArbitraryValue.EnumVariantValue(enumType, typesInfo.enumVariants(enumType).getFirst()); case SimpleNativeType simpleNativeType -> - new ArbitraryValue.NativeFunctionCall(simpleNativeType); + new ArbitraryValue.NativeFunctionCall(simpleNativeType, List.of()); case SimpleStructType simpleStructType -> new ArbitraryValue.SimpleStructBuilder(simpleStructType); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java index 3143905..814fe4b 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java @@ -692,7 +692,14 @@ public class JavaTypesGenerator implements Generator { JavaTypeRef.topLevel(javaPackageName, javaClassName), List.of(), generateFieldName("arbitrary" + simpleNativeType.name()), - List.of() + nativeFunctionCall.args().stream() + .<JavaExpression>map(arg -> new JavaLambdaExpression( + List.of(), + new JavaBlock(List.of( + new JavaReturn(abstractArbitraryValueToJava(arg, context)) + )) + )) + .toList() ); }); } |
