Property definitions

nitc $ FFILanguage :: defaultinit
# Visitor for a specific languages. Works kinda like a `Phase` and is executed
# by a `Phase`.
class FFILanguage
	# `FFILanguageAssignationPhase` assigning `self` to `AExternCodeBlock`s
	var ffi_language_assignation_phase: FFILanguageAssignationPhase

	init
	do
		ffi_language_assignation_phase.languages.add(self)
	end

	# Is this `block` written in this language?
	fun identify_language(block: AExternCodeBlock ): Bool is abstract

	# Generate wrapper code for this module/header code block
	fun compile_module_block(block: AExternCodeBlock, ecc: CCompilationUnit, mmodule: MModule) is abstract

	# Generate wrapper code for this extern method
	fun compile_extern_method(block: AExternCodeBlock, m: AMethPropdef,
		ecc: CCompilationUnit, nmodule: MModule) is abstract

	# Generate wrapper code for this extern class
	fun compile_extern_class(block: AExternCodeBlock, m: AClassdef,
		ecc: CCompilationUnit, mmodule: MModule) is abstract

	# Get the foreign type of this extern class definition
	fun get_ftype(block: AExternCodeBlock, m: AClassdef): ForeignType is abstract

	# Complete compilation of generated code
	fun compile_to_files(mmodule: MModule, directory: String) do end
end
src/ffi/light_ffi_base.nit:106,1--136,3