Search in sources :

Example 1 with FunctionType

use of org.robovm.compiler.llvm.FunctionType in project robovm by robovm.

the class Functions method call.

public static Value call(Function currentFunction, Value fn, Value... args) {
    Variable result = null;
    Type returnType = ((FunctionType) fn.getType()).getReturnType();
    if (returnType != VOID) {
        result = currentFunction.newVariable(returnType);
    }
    currentFunction.add(new Call(result, fn, args));
    return result == null ? null : result.ref();
}
Also used : TailCall(org.robovm.compiler.llvm.TailCall) Call(org.robovm.compiler.llvm.Call) PointerType(org.robovm.compiler.llvm.PointerType) Type(org.robovm.compiler.llvm.Type) FunctionType(org.robovm.compiler.llvm.FunctionType) Variable(org.robovm.compiler.llvm.Variable) FunctionType(org.robovm.compiler.llvm.FunctionType)

Example 2 with FunctionType

use of org.robovm.compiler.llvm.FunctionType in project robovm by robovm.

the class Functions method tailcall.

public static Value tailcall(Function currentFunction, Value fn, Value... args) {
    Variable result = null;
    Type returnType = ((FunctionType) fn.getType()).getReturnType();
    if (returnType != VOID) {
        result = currentFunction.newVariable(returnType);
    }
    currentFunction.add(new TailCall(result, fn, args));
    return result == null ? null : result.ref();
}
Also used : PointerType(org.robovm.compiler.llvm.PointerType) Type(org.robovm.compiler.llvm.Type) FunctionType(org.robovm.compiler.llvm.FunctionType) Variable(org.robovm.compiler.llvm.Variable) TailCall(org.robovm.compiler.llvm.TailCall) FunctionType(org.robovm.compiler.llvm.FunctionType)

Example 3 with FunctionType

use of org.robovm.compiler.llvm.FunctionType in project robovm by robovm.

the class BridgeMethodCompilerTest method testCreateBridgeCWrapperComplexNestedStructByValParameter.

@Test
public void testCreateBridgeCWrapperComplexNestedStructByValParameter() {
    FunctionType functionType = new FunctionType(VOID, new StructureType(new StructureType(I8, I16), new StructureType(I32, I64), new StructureType(FLOAT, DOUBLE), new StructureType(I8_PTR, new PointerType(new StructureType(I32)))));
    assertEquals("void f(void* target, void* p0) {\n" + "    struct f_0001_0003 {void* m0;void* m1;};\n" + "    struct f_0001_0002 {float m0;double m1;};\n" + "    struct f_0001_0001 {int m0;long long m1;};\n" + "    struct f_0001_0000 {char m0;short m1;};\n" + "    struct f_0001 {struct f_0001_0000 m0;struct f_0001_0001 m1;struct f_0001_0002 m2;struct f_0001_0003 m3;};\n" + "    ((void (*)(struct f_0001)) target)(*((struct f_0001*)p0));\n" + "}\n", BridgeMethodCompiler.createBridgeCWrapper(functionType.getReturnType(), functionType.getParameterTypes(), functionType.getParameterTypes(), "f"));
}
Also used : FunctionType(org.robovm.compiler.llvm.FunctionType) StructureType(org.robovm.compiler.llvm.StructureType) PointerType(org.robovm.compiler.llvm.PointerType) Test(org.junit.Test)

Example 4 with FunctionType

use of org.robovm.compiler.llvm.FunctionType in project robovm by robovm.

the class BridgeMethodCompilerTest method testCreateBridgeCWrapperNestedStructByValParameter.

@Test
public void testCreateBridgeCWrapperNestedStructByValParameter() {
    FunctionType functionType = new FunctionType(VOID, new StructureType(new StructureType(I32), new StructureType(I32)));
    assertEquals("void f(void* target, void* p0) {\n" + "    struct f_0001_0001 {int m0;};\n" + "    struct f_0001_0000 {int m0;};\n" + "    struct f_0001 {struct f_0001_0000 m0;struct f_0001_0001 m1;};\n" + "    ((void (*)(struct f_0001)) target)(*((struct f_0001*)p0));\n" + "}\n", BridgeMethodCompiler.createBridgeCWrapper(functionType.getReturnType(), functionType.getParameterTypes(), functionType.getParameterTypes(), "f"));
}
Also used : FunctionType(org.robovm.compiler.llvm.FunctionType) StructureType(org.robovm.compiler.llvm.StructureType) Test(org.junit.Test)

Example 5 with FunctionType

use of org.robovm.compiler.llvm.FunctionType in project robovm by robovm.

the class BridgeMethodCompilerTest method testCreateBridgeCWrapperSmallStructByValParameter.

@Test
public void testCreateBridgeCWrapperSmallStructByValParameter() {
    FunctionType functionType = new FunctionType(VOID, new StructureType(I32));
    assertEquals("void f(void* target, void* p0) {\n" + "    struct f_0001 {int m0;};\n" + "    ((void (*)(struct f_0001)) target)(*((struct f_0001*)p0));\n" + "}\n", BridgeMethodCompiler.createBridgeCWrapper(functionType.getReturnType(), functionType.getParameterTypes(), functionType.getParameterTypes(), "f"));
}
Also used : FunctionType(org.robovm.compiler.llvm.FunctionType) StructureType(org.robovm.compiler.llvm.StructureType) Test(org.junit.Test)

Aggregations

FunctionType (org.robovm.compiler.llvm.FunctionType)33 PointerType (org.robovm.compiler.llvm.PointerType)16 Test (org.junit.Test)15 StructureType (org.robovm.compiler.llvm.StructureType)15 Type (org.robovm.compiler.llvm.Type)12 FunctionRef (org.robovm.compiler.llvm.FunctionRef)10 Variable (org.robovm.compiler.llvm.Variable)8 ArrayList (java.util.ArrayList)7 Function (org.robovm.compiler.llvm.Function)7 Value (org.robovm.compiler.llvm.Value)7 IntegerType (org.robovm.compiler.llvm.IntegerType)6 Ret (org.robovm.compiler.llvm.Ret)6 ArrayType (org.robovm.compiler.llvm.ArrayType)5 Global (org.robovm.compiler.llvm.Global)5 IntegerConstant (org.robovm.compiler.llvm.IntegerConstant)5 LongType (soot.LongType)5 PrimType (soot.PrimType)5 Call (org.robovm.compiler.llvm.Call)4 Label (org.robovm.compiler.llvm.Label)4 NullConstant (org.robovm.compiler.llvm.NullConstant)4