The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
MODULE = LLVM				PACKAGE = LLVM::Type

Type
void(class)
	SV *class

	CODE:
		RETVAL = LLVMVoidType();

	OUTPUT: RETVAL

Type
int(class, bits)
	SV *class
	unsigned int bits

	CODE:
		RETVAL = LLVMIntType(bits);

	OUTPUT: RETVAL

Type
float(class)
	SV *class

	CODE:
		RETVAL = LLVMFloatType();

	OUTPUT: RETVAL

Type
double(class)
	SV *class

	CODE:
		RETVAL = LLVMDoubleType();

	OUTPUT: RETVAL

Type
func(class, ret_type, ...)
	SV *class
	Type ret_type

	CODE:
		int i;

		Type *params = malloc(sizeof(Type) * (items - 2));

		for (i = 2; i < items; i++) {
			Type param;
			SV *arg = ST(i);

			if (sv_isobject(arg) && sv_derived_from(arg, "LLVM::Type"))
				param = INT2PTR(Type, SvIV((SV *) SvRV(arg)));
			else
				Perl_croak(aTHX_ "arg is not of type LLVM::Type");

			params[i - 2] = param;
		}

		RETVAL = LLVMFunctionType(ret_type, params, items - 2, 0);

	OUTPUT: RETVAL