public static bool AddFunction <A0, A1, A2, A3, R>(this CFlat self, string functionName, System.Func <A0, A1, A2, A3, R> function) where A0 : struct, IMarshalable where A1 : struct, IMarshalable where A2 : struct, IMarshalable where A3 : struct, IMarshalable where R : struct, IMarshalable { var builder = new FunctionTypeBuilder(self.chunk); builder.WithParam(Marshal.TypeOf <A0>(self.chunk)); builder.WithParam(Marshal.TypeOf <A1>(self.chunk)); builder.WithParam(Marshal.TypeOf <A2>(self.chunk)); builder.WithParam(Marshal.TypeOf <A3>(self.chunk)); builder.returnType = Marshal.TypeOf <R>(self.chunk); return(FinishAddFunction(self, builder, functionName, (vm, top) => { var functionInterface = new FunctionInterface(vm, top); FunctionInterface.Return(vm, function( functionInterface.Arg <A0>(), functionInterface.Arg <A1>(), functionInterface.Arg <A2>(), functionInterface.Arg <A3>() )); })); }
public static bool AddFunction <R>(this CFlat self, string functionName, System.Func <R> function) where R : struct, IMarshalable { var builder = new FunctionTypeBuilder(self.chunk); builder.returnType = Marshal.TypeOf <R>(self.chunk); return(FinishAddFunction(self, builder, functionName, (vm, top) => { FunctionInterface.Return(vm, function()); })); }