Unifex.CodeGenerator.BaseType behaviour (Unifex v0.6.0) View Source
Behaviour and abstraction over type-specific code generation.
When invoking callbacks for type :type
and interface Interface
it searches for
a module that implements given callback in the following order:
Unifex.CodeGenerator.BaseTypes.Type.Interface
Unifex.CodeGenerator.BaseTypes.Type
Unifex.CodeGenerator.BaseTypes.Default.Interface
Link to this section Summary
Callbacks
Generates function call parsing UNIFEX_TERM argument
into the native variable with name variable
. Function should
return boolean value.
Provides a way to convert native variable name
into UNIFEX_TERM
Generates a destruction of variable content. Should be paired with generate_initialization/2
Generates an initialization of variable content. Should be paired with generate_destruction/2
Generates a native counterpart for the type.
Returns level of pointer nesting of native type.
Functions
Generates parsing of UNIFEX_TERM argument
into the native variable
Provides a way to convert native variable name
into UNIFEX_TERM
Generates a declaration of parameter (to be placed in function header) based on generate_native_type/1
and
provided name
.
Generates an destrucition of variable content. Should be paired with generate_initialization/1
Generates an initialization of variable content. Should be paired with generate_destruction/1
Link to this section Types
Specs
arg_parse_ctx_t() :: %{ result_var: Unifex.CodeGenerator.code_t(), exit_label: Unifex.CodeGenerator.code_t() }
Specs
Specs
Link to this section Callbacks
Specs
generate_arg_parse(argument :: String.t(), variable :: String.t(), ctx :: map()) :: Unifex.CodeGenerator.code_t()
Generates function call parsing UNIFEX_TERM argument
into the native variable with name variable
. Function should
return boolean value.
Specs
generate_arg_serialize(name :: atom(), ctx :: map()) :: Unifex.CodeGenerator.code_t()
Provides a way to convert native variable name
into UNIFEX_TERM
Specs
generate_destruction(name :: atom(), ctx :: map()) :: Unifex.CodeGenerator.code_t()
Generates a destruction of variable content. Should be paired with generate_initialization/2
Specs
generate_initialization(name :: atom(), ctx :: map()) :: Unifex.CodeGenerator.code_t()
Generates an initialization of variable content. Should be paired with generate_destruction/2
Specs
generate_native_type(ctx :: map()) :: Unifex.CodeGenerator.code_t() | [Unifex.CodeGenerator.code_t()]
Generates a native counterpart for the type.
Specs
Returns level of pointer nesting of native type.
Link to this section Functions
generate_arg_parse(type, name, argument, postproc_fun \\ &(&1), code_generator, ctx)
View SourceGenerates parsing of UNIFEX_TERM argument
into the native variable
Specs
generate_arg_serialize(t(), name :: atom(), module(), ctx :: map()) :: Unifex.CodeGenerator.code_t()
Provides a way to convert native variable name
into UNIFEX_TERM
Tries to get value from type-specific module, uses enif_make_#{type}
as fallback value.
generate_declaration(type, name, mode \\ :default, code_generator, ctx)
View SourceSpecs
generate_declaration( t(), name :: atom(), mode :: :default | :const | :const_unless_ptr_on_ptr, module(), ctx :: map() ) :: [Unifex.CodeGenerator.code_t()]
Generates a declaration of parameter (to be placed in function header) based on generate_native_type/1
and
provided name
.
Uses type
as fallback for generate_native_type/1
When mode is set to :const_unless_ptr_on_ptr, function will choose to behave like it would be set to :default or :const,
depending on value returned by ptr_level(type, code_generator, ctx)
.
This mode can be used in places, when in general, you want to have declaration of variable with const type, but using :const
mode would generate code, that would require explicit cast to avoid generating warnings during compilation - e.g. in C,
passing argument of type char **
to function, that expects argument of type char const * const *
without any explicit cast,
will generate such a warning
Specs
generate_destruction(t(), name :: atom(), module(), ctx :: map()) :: Unifex.CodeGenerator.code_t()
Generates an destrucition of variable content. Should be paired with generate_initialization/1
Returns an empty string if the type does not provide destructor
Specs
generate_initialization(t(), name :: atom(), module(), ctx :: map()) :: Unifex.CodeGenerator.code_t()
Generates an initialization of variable content. Should be paired with generate_destruction/1
Returns an empty string if the type does not provide initialization