You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/user/language-support/feature-matrix.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -72,7 +72,7 @@ where they apply.
72
72
| Scalar character arguments, results, and fields | Supported |[Strings](../guide/strings.md)|[Character argument tests](../../../tests/fortran/strings/end_to_end/test_character_boundaries.py), [edge-case tests](../../../tests/fortran/strings/end_to_end/test_character_edge_cases.py)| Character arrays use fixed-width NumPy bytes dtype. Scalar `character``allocatable` and `pointer` values are supported for `intent(in)`, `intent(out)`, `intent(inout)`, and function results, at deferred (`len=:`) and declared (`len=n`) length; a mutable dummy returns the value the procedure left behind, or `None`. PRIK frees the target it allocated for the call while it can still prove that identity, but never a target the procedure reassociated or the library owns; a procedure that returns a fresh allocation each call leaks unless it frees its own. |
73
73
| Character arrays and caller-supplied deferred-length character storage | Supported |[Strings](../guide/strings.md)|[Character edge tests](../../../tests/fortran/strings/end_to_end/test_character_edge_cases.py)| Character arrays use fixed-width NumPy bytes dtype, whose width each accessor reports from the Fortran declaration. `character(kind=selected_char_kind('ISO_10646'))` uses `UString` contracts and NumPy `U<n>` storage on compilers that provide the kind. Scalar `character``allocatable` and `pointer` values work for every intent and as function results. A mutable `pointer` dummy that the native procedure reassociates without deallocating orphans the target the adapter allocated for that call. |
74
74
| Scalar kind coverage | Supported |[Data types](../guide/data-types.md)|[Scalar kind tests](../../../tests/fortran/data_types/end_to_end/test_primitive_scalar_runtime.py)| Real and complex storage wider than the target's `long double` is blocked. Logical scalars use Python `bool`; arrays use their documented NumPy dtype. |
75
-
| Multi-source builds, Makefiles, verbose mode, and output placement | Supported |[Building the shared library](../guide/building-shared-library.md)|[Multi-source tests](../../../tests/fortran/infrastructure/building/end_to_end/test_multi_source_builds.py), [compiler verbose tests](../../../tests/fortran/infrastructure/building/compiling/test_compiler_verbose.py)|Wrapped project sources compile in dependency order derived from their module/`use` graph, falling back to the given order when a compiled source was not parsed. PRIK does not discover sources you did not name, prebuilt module paths, or external libraries. |
75
+
| Multi-source builds, module-source discovery, Makefiles, verbose mode, and output placement | Supported |[Building the shared library](../guide/building-shared-library.md), [CLI source discovery](../reference/cli-commands.md#input-selection)|[Multi-source tests](../../../tests/fortran/infrastructure/building/end_to_end/test_multi_source_builds.py), [module discovery tests](../../../tests/fortran/modules/end_to_end/test_module_source_discovery.py), [compiler verbose tests](../../../tests/fortran/infrastructure/building/compiling/test_compiler_verbose.py)|PRIK orders sources by module dependencies and can discover used module sources under `--module-source-dir`. External libraries and prebuilt module directories remain explicit inputs. |
76
76
| Visibility, naming, keyword escaping, and collision policy | Supported |[Generic interfaces](../guide/generic-interfaces.md#key-rules)|[Visibility/naming tests](../../../tests/fortran/infrastructure/semantic_pyi/contracts/exports_and_modules/end_to_end/test_visibility_naming.py)| Strict mode rejects names that default mode can normalize. |
77
77
| Immediate call-scoped Python callbacks | Supported |[Callbacks](../guide/callbacks.md)|[Callback plan tests](../../../tests/fortran/callbacks/codegen/test_callback_planning.py), [scalar callback tests](../../../tests/fortran/callbacks/end_to_end/test_scalar_callbacks.py), [array callback tests](../../../tests/fortran/callbacks/end_to_end/test_array_callbacks.py), [combined shape tests](../../../tests/fortran/callbacks/end_to_end/test_supported_callback_shapes.py), [optional callback tests](../../../tests/fortran/callbacks/end_to_end/test_optional_callbacks.py)| Direct wrapper-plan generation supports entering-thread callbacks only; an optional callback may be omitted or `None`. Stored, asynchronous, or cross-thread callbacks are unsupported. |
78
78
| Runtime error projection, GIL policy, recursion, OpenMP path, and GNU ABI checks | Supported |[Error handling](../guide/error-handling.md)|[Status projection runtime](../../../tests/fortran/error_handling/end_to_end/test_status_projection.py), [status and GIL lowering](../../../tests/fortran/error_handling/codegen/test_status_error_lowering.py), [recursion tests](../../../tests/fortran/error_handling/end_to_end/test_runtime_recursion.py), [OpenMP tests](../../../tests/fortran/error_handling/end_to_end/test_openmp_runtime.py), [ABI tests](../../../tests/fortran/infrastructure/building/end_to_end/test_runtime_compatibility.py)| OpenMP and ABI evidence is compiler/platform-specific; callers still own native synchronization. |
| Unproved pointer lifetime and ownership-changing operations | Unsupported |[Pointer safety](../guide/pointers.md#safety-checklist)|[Pointer policy tests](../../../tests/fortran/pointers/policy/test_pointer_ownership_policy.py), [pointer handle tests](../../../tests/fortran/pointers/end_to_end/test_pointer_handles.py)| Native targets must outlive every handle use; allocation, target deallocation, resize, and writable reassociation require explicit completed policy. |
129
129
| Persistent callbacks and procedure pointers | Unsupported |[Callback limitations](../guide/callbacks.md#important-limitations)|[Callback policy tests](../../../tests/fortran/callbacks/policy/test_callback_policy.py), [scalar callback tests](../../../tests/fortran/callbacks/end_to_end/test_scalar_callbacks.py)| Callbacks are valid only during the wrapped call. |
130
-
|Advanced multi-source dependency discovery and external-library integration | Unsupported |[Multiple source files](../guide/building-shared-library.md#multiple-source-files)|[Multi-source tests](../../../tests/fortran/infrastructure/building/end_to_end/test_multi_source_builds.py)|PRIK does not discover sources you did not name, prebuilt module search paths, or external libraries. Dependency ordering among the sources it parses is supported. |
130
+
|Automatic discovery of external libraries and prebuilt module directories | Unsupported |[Building the shared library](../guide/building-shared-library.md)|[Module discovery tests](../../../tests/fortran/modules/end_to_end/test_module_source_discovery.py)|`--module-source-dir` finds Fortran sources; supply prebuilt module paths and libraries explicitly. |
131
131
| Blocked array forms | Unsupported |[Arrays](../guide/arrays.md)|[Array semantic tests](../../../tests/fortran/arrays/semantics/test_array_semantics.py), [diagnostics](../reference/diagnostic-codes.md)| Arrays of derived types and character arrays not representable as fixed-width bytes need missing runtime contracts. |
132
132
| Unsupported polymorphic forms | Unsupported |[Inheritance limits](../guide/wrapping-derived-types.md#inheritance-and-polymorphic-input-dispatch)|[Inheritance tests](../../../tests/fortran/derived_types/codegen/test_class_surfaces.py)| Results, mutable dummies, arrays, polymorphic allocatable/pointer scalars, and `class(*)` are blocked. Abstract types and deferred bindings are supported. |
133
133
| Ambiguous or incomplete constructor overload sets | Unsupported |[Constructor limitations](../guide/wrapping-derived-types.md#custom-constructor)|[Constructor semantic tests](../../../tests/fortran/infrastructure/semantic_pyi/contracts/functions_and_classes/semantics/test_method_and_constructor_contracts.py), [class-plan validation tests](../../../tests/fortran/infrastructure/semantic_pyi/contracts/functions_and_classes/policy/test_class_surface_policy.py)| Candidates must have distinguishable exact runtime signatures and compatible native-owner lifecycles. A Fortran `interface <typename>` is wrapped as the type's overloaded constructor. |
| Decorator | Valid target | Language and meaning |
562
565
| --- | --- | --- |
563
566
|`@private`| Function or method | Shared: declaration remains available to contract dependencies but is not exported. |
564
-
|`@bind("symbol")`| Function, method, constructor, prototype, or destructor | Shared: select a different native name. A module-level Fortran procedure is called through the native module the contract module names, so the symbol may be any procedure or generic that module provides, including one it imports. |
567
+
|`@bind("symbol")`| Function, method, constructor, prototype, or destructor | Shared: select a native target. A plain Fortran method target calls a module procedure; a class-qualified target calls a type-bound procedure. A module-level Fortran target may be any procedure or generic that module provides, including one it imports. |
565
568
|`@native_abi("c")`| Function, method, or prototype | Fortran only: original declaration is `bind(C)`. |
566
569
|`@standalone`| Module-level function | Fortran only: native procedure is outside a module. |
567
570
|`@native_call([...], result=...)`| Function, method, or constructor | Shared: state the complete native argument order and optional native result mapping. |
0 commit comments