Skip to content

Commit

Permalink
feat: Add generation of api static methods and icall for static metho…
Browse files Browse the repository at this point in the history
…ds in engine (#343)
  • Loading branch information
piiertho authored Jul 19, 2022
1 parent c4400e5 commit d108e23
Show file tree
Hide file tree
Showing 698 changed files with 21,585 additions and 23,247 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -119,10 +119,6 @@ class GenerationService(
constantsTypeReceiver.addProperty(generateConstant(constant, name))
}

if (constantsTypeReceiver != classTypeBuilder) {
constantsTypeReceiver.build().let { classTypeBuilder.addType(it) }
}

for (signal in enrichedClass.signals) {
classTypeBuilder.addProperty(generateSignals(signal, name))
}
Expand Down Expand Up @@ -151,10 +147,13 @@ class GenerationService(
}

for (method in enrichedClass.methods.filter { it.internal.isStatic }) {
//TODO/4.0: Change implementation for static method
constantsTypeReceiver.addFunction(generateMethod(enrichedClass, method))
}

if (constantsTypeReceiver != classTypeBuilder) {
constantsTypeReceiver.build().let { classTypeBuilder.addType(it) }
}

val generatedClass = classTypeBuilder.build()

val fileBuilder = FileSpec
Expand Down Expand Up @@ -787,7 +786,8 @@ class GenerationService(
if (!enrichedMethod.internal.isVirtual) {
generateJvmMethodCall(
enrichedMethod,
callArgumentsAsString
callArgumentsAsString,
enrichedMethod.internal.isStatic
)
} else if (enrichedMethod.getTypeClassName().typeName != UNIT) {
addStatement(
Expand All @@ -802,6 +802,7 @@ class GenerationService(
private fun <T : CallableTrait> FunSpec.Builder.generateJvmMethodCall(
callable: T,
callArgumentsAsString: String,
isStatic: Boolean = false
): FunSpec.Builder {
val ktVariantClassNames = callable.arguments.map {
it.jvmVariantTypeValue
Expand All @@ -826,8 +827,13 @@ class GenerationService(

val returnTypeVariantTypeClass = callable.jvmVariantTypeValue

val icallTemplate = if (isStatic) {
"%T.icallStatic(%M, %T.ordinal)"
} else {
"%T.icall(rawPtr, %M, %T.ordinal)"
}
addStatement(
"%T.callMethod(rawPtr, %M, %T)",
icallTemplate,
TRANSFER_CONTEXT,
MemberName("godot", callable.engineIndexName),
returnTypeVariantTypeClass
Expand Down
11 changes: 2 additions & 9 deletions kt/godot-library/src/main/kotlin/godot/core/TransferContext.kt
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,6 @@ internal object TransferContext {
return ret
}

fun callMethod(ptr: VoidPtr, methodIndex: Int, expectedReturnType: VariantType) {
icall(
ptr,
methodIndex,
expectedReturnType.ordinal
)
}

fun freeObject(obj: KtObject) {
freeObject(obj.rawPtr)
}
Expand All @@ -65,5 +57,6 @@ internal object TransferContext {
external fun getSingleton(classIndex: Int): VoidPtr
external fun freeObject(rawPtr: VoidPtr)

private external fun icall(ptr: VoidPtr, methodIndex: Int, expectedReturnType: Int)
external fun icall(ptr: VoidPtr, methodIndex: Int, expectedReturnType: Int)
external fun icallStatic(methodIndex: Int, expectedReturnType: Int)
}
12 changes: 6 additions & 6 deletions kt/godot-library/src/main/kotlin/godot/gen/godot/AESContext.kt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

65 changes: 34 additions & 31 deletions kt/godot-library/src/main/kotlin/godot/gen/godot/AStar2D.kt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit d108e23

Please sign in to comment.