All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Fix the
DOWNLOAD_EXTRACT_TIMESTAMP
CMake warning (see datatype99/issues/15).
IFACE99_VERSION_COMPATIBLE
to check for a SemVer-compatible version.IFACE99_VERSION_EQ
to check for an exact version.
DYN_LIT
that constructs interface objects out of compound literals.
- Specify
C
as the project language inCMakeLists.txt
. Previously, CMake detected C++ and required a C++ compiler to compile the project. - Require CMake v3.11.4.
- Add the root
CMakeLists.txt
to be able to use CMake withFetchContent
oradd_subdirectory
.
- Programmatically require Metalang99 version compliant with 1.12.0.
VCALL
,VCALL_OBJ
,VCALL_SUPER
,VCALL_SUPER_OBJ
as a convenient syntax sugar to call virtual functions.VSelf
andVSELF(T)
to imitate typedself
parameters.
iMethod
=>vfunc
(consistent withVTABLE
,vptr
) [BC].defaultIMethod
=>vfuncDefault
[BC].externImpl
=>implExtern
[BC].externDeclImpl
=>declImplExtern
[BC].self
(VSelf
) parameters are nowrestrict
.
method
=>iMethod
,defaultMethod
=>defaultIMethod
to avoid name clashes [BC].
- Previously, shortcuts referring to functional macros were object-like. To avoid nasty compilation errors, now they are function-like too:
interface(iface)
impl(iface, implementer)
externImpl(iface, implementer)
declImpl(iface, implementer)
externDeclImpl(iface, implementer)
iMethod(ret_ty, name, ...)
defaultIMethod(ret_ty, name, ...)
DYN(implementer, iface, ...)
VTABLE(implementer, iface)
- Default method implementations.
- Use
method
anddefaultMethod
instead of X-Macro for the sake of conciseness [BC]. <iface>_INTERFACE
=><iface>_IFACE
[BC].
- Remove
implPrimary
,externImplPrimary
[BC].
- Use a variation of the X-Macro pattern instead of
iFn
. This change makes the implementation easier to reason about [BC].
- Generate virtual tables with static linkage in
impl(Primary)
&declImpl
[BC]. dyn
=>DYN
to know where is a function and where is a macro.
- Counterparts with external linkage:
externImpl(Primary)
&externDeclImpl
.
- Generate
typedef struct <iface>VTable <iface>VTable;
andtypedef struct <iface> <iface>;
prior to their definitions to allow accepting<ifaceVTable>
and<iface>
as interface function parameters.
- Generate
char dummy;
only for an empty virtual table (i.e., a marker interface without superinterfaces) [BC].
- This excellent project.