mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 12:43:36 +01:00
bindings: named struct support
llvm-svn: 141993
This commit is contained in:
parent
50c1b48b4c
commit
4beae25e5a
@ -294,9 +294,14 @@ external struct_type : llcontext -> lltype array -> lltype = "llvm_struct_type"
|
|||||||
external packed_struct_type : llcontext -> lltype array -> lltype
|
external packed_struct_type : llcontext -> lltype array -> lltype
|
||||||
= "llvm_packed_struct_type"
|
= "llvm_packed_struct_type"
|
||||||
external struct_name : lltype -> string option = "llvm_struct_name"
|
external struct_name : lltype -> string option = "llvm_struct_name"
|
||||||
|
external named_struct_type : llcontext -> string -> lltype =
|
||||||
|
"llvm_named_struct_type"
|
||||||
|
external struct_set_body : lltype -> lltype array -> bool -> unit =
|
||||||
|
"llvm_struct_set_body"
|
||||||
external struct_element_types : lltype -> lltype array
|
external struct_element_types : lltype -> lltype array
|
||||||
= "llvm_struct_element_types"
|
= "llvm_struct_element_types"
|
||||||
external is_packed : lltype -> bool = "llvm_is_packed"
|
external is_packed : lltype -> bool = "llvm_is_packed"
|
||||||
|
external is_opaque : lltype -> bool = "llvm_is_opaque"
|
||||||
|
|
||||||
(*--... Operations on pointer, vector, and array types .....................--*)
|
(*--... Operations on pointer, vector, and array types .....................--*)
|
||||||
external array_type : lltype -> int -> lltype = "llvm_array_type"
|
external array_type : lltype -> int -> lltype = "llvm_array_type"
|
||||||
@ -400,6 +405,8 @@ external const_stringz : llcontext -> string -> llvalue = "llvm_const_stringz"
|
|||||||
external const_array : lltype -> llvalue array -> llvalue = "llvm_const_array"
|
external const_array : lltype -> llvalue array -> llvalue = "llvm_const_array"
|
||||||
external const_struct : llcontext -> llvalue array -> llvalue
|
external const_struct : llcontext -> llvalue array -> llvalue
|
||||||
= "llvm_const_struct"
|
= "llvm_const_struct"
|
||||||
|
external const_named_struct : lltype -> llvalue array -> llvalue
|
||||||
|
= "llvm_const_named_struct"
|
||||||
external const_packed_struct : llcontext -> llvalue array -> llvalue
|
external const_packed_struct : llcontext -> llvalue array -> llvalue
|
||||||
= "llvm_const_packed_struct"
|
= "llvm_const_packed_struct"
|
||||||
external const_vector : llvalue array -> llvalue = "llvm_const_vector"
|
external const_vector : llvalue array -> llvalue = "llvm_const_vector"
|
||||||
|
@ -478,6 +478,15 @@ val packed_struct_type : llcontext -> lltype array -> lltype
|
|||||||
* or None if the structure type is not named *)
|
* or None if the structure type is not named *)
|
||||||
val struct_name : lltype -> string option
|
val struct_name : lltype -> string option
|
||||||
|
|
||||||
|
(** [named_struct_type context name] returns the named structure type [name]
|
||||||
|
* in the context [context].
|
||||||
|
* See the method [llvm::StructType::get]. *)
|
||||||
|
val named_struct_type : llcontext -> string -> lltype
|
||||||
|
|
||||||
|
(** [struct_set_body ty elts ispacked] sets the body of the named struct [ty]
|
||||||
|
* to the [elts] elements.
|
||||||
|
* See the moethd [llvm::StructType::setBody]. *)
|
||||||
|
val struct_set_body : lltype -> lltype array -> bool -> unit
|
||||||
|
|
||||||
(** [struct_element_types sty] returns the constituent types of the struct type
|
(** [struct_element_types sty] returns the constituent types of the struct type
|
||||||
[sty]. See the method [llvm::StructType::getElementType]. *)
|
[sty]. See the method [llvm::StructType::getElementType]. *)
|
||||||
@ -488,6 +497,9 @@ val struct_element_types : lltype -> lltype array
|
|||||||
[false] otherwise. See the method [llvm::StructType::isPacked]. *)
|
[false] otherwise. See the method [llvm::StructType::isPacked]. *)
|
||||||
val is_packed : lltype -> bool
|
val is_packed : lltype -> bool
|
||||||
|
|
||||||
|
(** [is_opaque sty] returns [true] if the structure type [sty] is opaque.
|
||||||
|
[false] otherwise. See the method [llvm::StructType::isOpaque]. *)
|
||||||
|
val is_opaque : lltype -> bool
|
||||||
|
|
||||||
(** {7 Operations on pointer, vector, and array types} *)
|
(** {7 Operations on pointer, vector, and array types} *)
|
||||||
|
|
||||||
@ -738,9 +750,14 @@ val const_array : lltype -> llvalue array -> llvalue
|
|||||||
(** [const_struct context elts] returns the structured constant of type
|
(** [const_struct context elts] returns the structured constant of type
|
||||||
[struct_type (Array.map type_of elts)] and containing the values [elts]
|
[struct_type (Array.map type_of elts)] and containing the values [elts]
|
||||||
in the context [context]. This value can in turn be used as the initializer
|
in the context [context]. This value can in turn be used as the initializer
|
||||||
for a global variable. See the method [llvm::ConstantStruct::get]. *)
|
for a global variable. See the method [llvm::ConstantStruct::getAnon]. *)
|
||||||
val const_struct : llcontext -> llvalue array -> llvalue
|
val const_struct : llcontext -> llvalue array -> llvalue
|
||||||
|
|
||||||
|
(** [const_named_struct namedty elts] returns the structured constant of type
|
||||||
|
[namedty] (which must be a named structure type) and containing the values [elts].
|
||||||
|
This value can in turn be used as the initializer
|
||||||
|
for a global variable. See the method [llvm::ConstantStruct::get]. *)
|
||||||
|
val const_named_struct : lltype -> llvalue array -> llvalue
|
||||||
|
|
||||||
(** [const_packed_struct context elts] returns the structured constant of
|
(** [const_packed_struct context elts] returns the structured constant of
|
||||||
type {!packed_struct_type} [(Array.map type_of elts)] and containing the
|
type {!packed_struct_type} [(Array.map type_of elts)] and containing the
|
||||||
|
@ -292,6 +292,20 @@ CAMLprim LLVMTypeRef llvm_packed_struct_type(LLVMContextRef C,
|
|||||||
Wosize_val(ElementTypes), 1);
|
Wosize_val(ElementTypes), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* llcontext -> string -> lltype */
|
||||||
|
CAMLprim LLVMTypeRef llvm_named_struct_type(LLVMContextRef C,
|
||||||
|
value Name) {
|
||||||
|
return LLVMStructCreateNamed(C, String_val(Name));
|
||||||
|
}
|
||||||
|
|
||||||
|
CAMLprim value llvm_struct_set_body(LLVMTypeRef Ty,
|
||||||
|
value ElementTypes,
|
||||||
|
value Packed) {
|
||||||
|
LLVMStructSetBody(Ty, (LLVMTypeRef *) ElementTypes,
|
||||||
|
Wosize_val(ElementTypes), Bool_val(Packed));
|
||||||
|
return Val_unit;
|
||||||
|
}
|
||||||
|
|
||||||
/* lltype -> string option */
|
/* lltype -> string option */
|
||||||
CAMLprim value llvm_struct_name(LLVMTypeRef Ty)
|
CAMLprim value llvm_struct_name(LLVMTypeRef Ty)
|
||||||
{
|
{
|
||||||
@ -318,6 +332,11 @@ CAMLprim value llvm_is_packed(LLVMTypeRef StructTy) {
|
|||||||
return Val_bool(LLVMIsPackedStruct(StructTy));
|
return Val_bool(LLVMIsPackedStruct(StructTy));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* lltype -> bool */
|
||||||
|
CAMLprim value llvm_is_opaque(LLVMTypeRef StructTy) {
|
||||||
|
return Val_bool(LLVMIsOpaqueStruct(StructTy));
|
||||||
|
}
|
||||||
|
|
||||||
/*--... Operations on array, pointer, and vector types .....................--*/
|
/*--... Operations on array, pointer, and vector types .....................--*/
|
||||||
|
|
||||||
/* lltype -> int -> lltype */
|
/* lltype -> int -> lltype */
|
||||||
@ -641,6 +660,11 @@ CAMLprim LLVMValueRef llvm_const_struct(LLVMContextRef C, value ElementVals) {
|
|||||||
Wosize_val(ElementVals), 0);
|
Wosize_val(ElementVals), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* lltype -> llvalue array -> llvalue */
|
||||||
|
CAMLprim LLVMValueRef llvm_const_named_struct(LLVMTypeRef Ty, value ElementVals) {
|
||||||
|
return LLVMConstNamedStruct(Ty, (LLVMValueRef *) Op_val(ElementVals), Wosize_val(ElementVals));
|
||||||
|
}
|
||||||
|
|
||||||
/* llcontext -> llvalue array -> llvalue */
|
/* llcontext -> llvalue array -> llvalue */
|
||||||
CAMLprim LLVMValueRef llvm_const_packed_struct(LLVMContextRef C,
|
CAMLprim LLVMValueRef llvm_const_packed_struct(LLVMContextRef C,
|
||||||
value ElementVals) {
|
value ElementVals) {
|
||||||
|
Loading…
Reference in New Issue
Block a user