mcpu-cpp 1.0.3 =============== Align the per-user configuration hierarchy with the common MCPU environment and add an explicit command-line system-root override. * Move the normal per-user configuration from `$HOME/.mcpu/mcpu-cpp.conf` to `$HOME/.mcpu/etc/mcpu-cpp.conf`; the obsolete location is no longer read. * Add `--sys-root=PATH`. PATH may be absolute or relative; relative paths are resolved from the invocation working directory. * `--sys-root` makes `PATH/include` the effective system include root and suppresses every configuration-file layer, including `--config-file`. * Keep the relocatable executable-derived root and `--no-config` behavior unchanged when `--sys-root` is not present. * Synchronize command-line help, bilingual Markdown manuals and man pages. mcpu-cpp 1.0.2 =============== Implemented LibMPU, LibMPUIO congiguring check using libmpu.m4, libmpuio.m4. mcpu-cpp 1.0.1 =============== Integrate the mcpu-cpp(1) manual pages. * Add English man/mcpu-cpp.1 and Russian man/ru/mcpu-cpp.1. * Install the pages through Automake's standard man directory hierarchy. mcpu-cpp 1.0.0 =============== Remove Russian preprocessing-directive aliases and prepare the public interface for another verification cycle before 1.0.0. * Accept only canonical English preprocessing-directive names; Unicode support for identifiers and ordinary source text is unchanged. * Remove Russian-alias regression cases without changing the underlying macro, conditional, include, diagnostic, language-stack, or output engines. * Retitle manual section 10 as "GNU-compatible features" and summarize the documented behaviors intentionally aligned with GNU CPP. * Remove references to the predecessor preprocessor from both normative manuals. mcpu-cpp 0.0.50 =============== Refresh and bilingualize the normative manual and add a developer bootstrap. * Replace the single doc/mcpu-cpp.md with synchronized Russian and English manuals: doc/mcpu-cpp-ru.md and doc/mcpu-cpp-en.md. * Bring the manual up to the 0.0.49 feature set, fix stale future-work text and conditional-expression subsection numbering, and document the current intentionally unsupported legacy features. * Add a root bootstrap script, modeled after the LibMPU/LibMPUIO bootstrap workflow, that regenerates the ZUBR parser and Autotools-generated files. * Add a root .gitignore describing files that a developer Git tree may omit; keep release archives self-contained and the ordinary release build unchanged. mcpu-cpp 0.0.49 =============== Compact invisible output lines while preserving exact source coordinates. * Track the next visible logical source position instead of materializing every consumed directive/comment/blank source line in .E output. * Match GNU CPP's 0..7 newline versus 8+ corrective-linemarker boundary. * Preserve include entry/return markers and avoid synthetic progress markers for completely silent included files. * Keep __LINE__, diagnostics, #line and logical coordinates independent of the compacted physical output representation. mcpu-cpp 0.0.48 =============== Normalize whitespace that belongs to macro replacement lists. * Canonicalize replacement-list whitespace to one ASCII space after line splicing while preserving ordinary source formatting and actual-argument whitespace. * Preserve literal contents and preprocessing-token boundaries around #, ##, __VA_ARGS__, __VA_OPT__ and placemarkers. mcpu-cpp 0.0.47 =============== Add the standard __VA_OPT__(pp-tokens) mechanism. * Decide variadic emptiness after normal macro substitution. * Support balanced parentheses, stringification, token concatenation, placemarkers and rescan integration. * Intentionally omit GNU named variadics and the historical comma-swallow extension , ## __VA_ARGS__. mcpu-cpp 0.0.46 =============== Add C99-style variadic function-like macros. * Accept ... as the final macro parameter and substitute __VA_ARGS__. * Preserve ordinary prescan, raw stringification and token-paste semantics for the complete variadic tail, including empty-tail placemarkers. * Keep the old GNU named form args... and __VA_OPT__ outside this release. * Preserve variadic definitions in macro dumps and document the exact contract. * Add dedicated regression coverage for expansion, #, ##, dumps and errors. mcpu-cpp 0.0.45 =============== Add GNU-like missing-generated dependency handling. * Implement -MG for dependency-only -M/-MM modes. * Record unresolved includes in the existing ordered dependency registry while keeping their textual identity separate from physical st_dev/st_ino identity. * Preserve GNU-like user/system filtering for missing quoted/angle includes and system-header context; tolerate missing -include/-imacros operands under -MG. * Keep -MG invalid with -MD/-MMD or without -M/-MM. * Document the unresolved-dependency model and add dedicated regression coverage. mcpu-cpp 0.0.44 =============== Add explicit dependency targets and complete the forced-file documentation. * Implement GNU-like -MT TARGET and -MQ TARGET, including attached forms. * Allow repeated -MT/-MQ options and multiple targets in one dependency rule. * Keep -MT literal while -MQ applies Make quoting; suppress the default target whenever an explicit target is present. * Document -include/-imacros and -MT/-MQ in doc/mcpu-cpp.md. * Add dedicated dependency-target regression coverage. mcpu-cpp 0.0.41 =============== Clean the public interface and formalize selected Russian directive aliases. * Remove obsolete compatibility options from the command-line parser so they are diagnosed as unknown options instead of remaining dormant handlers. * Keep -E as the intentional compiler-driver compatibility no-op. * Document --object-suffix in --help and require its argument. * Add Russian aliases for define, line, include, include_next, undef, pragma and lang; normalize non-once #управление output to #pragma. * Rename the product description to "MCPU languages preprocessor" and remove predecessor-oriented wording from source comments and documentation. * Add interface-cleanup and Russian-alias regression coverage. mcpu-cpp 0.0.40 =============== Add explicit warning-control semantics. * Implement -Wcomment/-Wcomments and negative forms for nested block-comment openers and backslash-newline continuation of // comments. * Make -Wall enable the optional comment-warning class while preserving the priority of an explicit -Wno-comment regardless of option order. * Implement -Werror/-Wno-error for every warning actually emitted by mcpu-cpp, without making -Werror enable optional warning classes. * Route #warning, zNNN width warnings, macro redefinition and invalid ## paste through the common warning policy. * Add dedicated regression coverage and a normative documentation section. mcpu-cpp 0.0.39 =============== Split final macro dumping into ordinary and predefined views. * Make -dM dump only source/include and command-line macros. * Implement -dMP as predefined macros first, followed by ordinary macros. * Preserve deterministic name sorting inside each group and final #undef state. * Keep context-dependent special macros out of the static dump. * Leave -dD semantics unchanged. * Add dedicated regression coverage and document the macro-origin contract. mcpu-cpp 0.0.38 =============== Extend dependency generation with side-effect dependency files. * Add GNU-like -MD and -MMD without suppressing normal preprocessing output. * Add -MF FILE, including attached -MFfile spelling and -MF - for stdout. * Derive the default .d filename from the input basename, or from ordinary -o output when present. * Reuse the existing -M/-MM dependency graph and system-header classification. * Add dedicated regression coverage and document the dependency-output rules. mcpu-cpp 0.0.37 =============== Make the MCPU installation tree relocatable and shared by the future toolchain. * Install under `$libdir/mcpu` rather than `$libdir/mcpu-VERSION`. * Resolve the real executable at run time and derive `/include` and `/etc/mcpu-cpp.conf` from the physical MCPU root. * Keep `/etc/mcpu/mcpu-cpp.conf` and `$HOME/.mcpu/mcpu-cpp.conf` as higher priority overrides, including full replacement of MCPU_CPP_SYSTEM_INCLUDE_PATH. * Remove the absolute installation default from the packaged config and runtime binary contract. * Add a regression that physically moves a complete MCPU tree and verifies the new root, include search, packaged config and symlink invocation. * Document one relocatable `bin/etc/include/lib` root as a general MCPU ecosystem principle for mcpu-cpp, mcpu-as, mcpu-ld and mcpu-run. mcpu-cpp 0.0.36 =============== Correct --no-config so it suppresses configuration-file reads without discarding the compiled installation defaults. * Keep the compiled MCPU_CPP_SYSTEM_INCLUDE_PATH active under --no-config. * Make -dsearch-dirs, -dconfig and -v expose that built-in default even when every configuration file is ignored. * Preserve explicit -I/-isystem/-idirafter ordering around the compiled system tree and keep -nostdinc as the switch that suppresses standard-system paths. * Add dedicated regression coverage and document the distinction between compiled defaults, configuration files and -nostdinc. mcpu-cpp 0.0.35 =============== Implement the first dependency-generation stage. * Add -M make-rule output including system headers. * Add -MM user-dependency output excluding system headers and descendants reachable only from system-header contexts. * Collect dependencies directly from the existing include/#include_next pipeline and deduplicate physical files by device/inode identity. * Keep #line logical filenames out of dependency output and preserve a file in -MM when it is also reached through a user include context. * Add dedicated dependency-generation regression coverage and documentation. mcpu-cpp 0.0.33 =============== Align the configure-time console presentation with the LibMPU/LibMPUIO/ZUBR package family and normalize the author's given name spelling. * Add the shared-style mcpu-cpp configure headline and AC_MSG_CFG_PART section headings to make configure output follow the same visual structure as the other MCPU/LibMPU projects. * Keep the existing detailed configuration summary as its own final section. * Normalize every textual occurrence of the author given name to `Andrey` throughout the maintained project tree. mcpu-cpp 0.0.32 =============== Polish include-path diagnostics after the 0.0.31 installation/search contract. * Make -v print each effective include configuration variable once, after all configuration layers have been resolved. * Add -dsearch-dirs to print effective include search directories in semantic priority order and stop without preprocessing. * Document the distinction between effective configuration values and the expanded global search-directory chain. mcpu-cpp 0.0.31 =============== Introduce the versioned MCPU installation/configuration contract. * Install mcpu-cpp under `$libdir/mcpu-0.0.31/bin` and its packaged configuration under `$libdir/mcpu-0.0.31/etc`. * Install `$bindir/mcpu-cpp` as a symbolic link to the versioned executable. * Do not install or create `/etc/mcpu`; treat `/etc/mcpu/mcpu-cpp.conf` only as an optional distributor/administrator override. * Load configuration in increasing priority: compiled versioned defaults, versioned packaged config, optional `/etc` override, then the unversioned `$HOME/.mcpu/mcpu-cpp.conf` user override. * Restore `MCPU_CPP_SYSTEM_INCLUDE_PATH` as the replaceable effective system include root, defaulting to `$libdir/mcpu-0.0.31/include`. Derive `/` internally; no per-language system variables exist. * Let a higher-priority config replace the system tree completely or disable it with an empty value. * Keep the normative include and #include_next search order established in 0.0.30, now using the effective `MCPU_CPP_SYSTEM_INCLUDE_PATH`. * Document the versioned tree, configuration precedence, sandbox workflow and wrapper-header rationale as normative interfaces. mcpu-cpp 0.0.30 =============== Define and enforce the normative include-search contract discovered by manual wrapper-header testing. * Give explicit command-line -I, -isystem and -idirafter directories priority over persistent configuration classes. * Search configured user language paths before MCPU_CPP_INCLUDE_PATH. * Replace MCPU_CPP_SYSTEM_INCLUDE_PATH with the singular MCPU_CPP_SYSTEM_INCLUDE_DIR system-tree root. Derive the fixed / directory internally and then search ; no per-language system config variables exist. * Allow an empty MCPU_CPP_SYSTEM_INCLUDE_DIR to disable the configured system tree. -nostdinc suppresses the same configured system classes for one run without suppressing explicit -isystem. * Keep explicit -idirafter before MCPU_CPP_AFTER_INCLUDE_PATH and never derive language-specific AFTER directories. * Make #include_next traverse this exact effective chain by physical provenance. * Add a dedicated manual-style regression that places the same header in all eight search classes and verifies the complete #include_next order. * Add a separate normative documentation section explaining the search order, configurable user paths, fixed system subdirectory names and wrapper-header purpose. mcpu-cpp 0.0.29 =============== Implement GNU-style #include_next wrapper-header search. * Track the exact configured include-directory entry that supplied each nested header and continue #include_next strictly after that entry. * Preserve the semantic search order across -I, explicit -isystem, configured system directories and -idirafter directories. * Do not re-search the current source-file directory for #include_next; the directive intentionally does not distinguish between "file" and . * Support macro-expanded #include_next operands through the ordinary include operand parser and macro-expansion path. * Keep physical include provenance independent of logical #line filenames. * Add regression coverage for the wrapper -> configured-system -> idirafter chain, quoted-source origin, macro operands, inactive branches and failure when no later header exists. mcpu-cpp 0.0.28 =============== Implement #error and #warning diagnostics. * Active #error emits a source-location error diagnostic and stops preprocessing. * Active #warning emits a source-location warning and preprocessing continues. * Diagnostic directive arguments are not macro-expanded, following the directive contract; whitespace between tokens is folded while quoted text is kept. * Diagnostic directives are consumed and never copied to normal or -dD output. * Inactive conditional branches suppress both directives completely. * Historical Russian aliases #ошибка and #предупреждение are recognized. mcpu-cpp 0.0.27 =============== Define the MCPU integer-width suffix contract for conditional expressions and remove the obsolete assertion command-line heritage. * Accept `zNNN`/`ZNNN` and optional trailing `U`/`u` on integer constants. NNN is always decimal, including forms with leading zeroes. * `z8`, `z16`, `z32` and `z64` normalize the low N bits by sign extension; an optional U/u selects zero extension. All later expression evaluation is still exactly 64-bit and does not retain the source width. * Widths above 64 are errors in conditional directives. Invalid widths up to 64 are ignored with a warning; a trailing U/u remains effective. * Remove C-style L/LL integer suffix acceptance from the #if lexer. * Diagnose a suffix that runs into an identifier instead of splitting it into unrelated tokens. * Remove the obsolete `-A` assertion option, the assertion action kind and the `-dMA` assertion-dump modifier. * Document the complete normalization and 64-bit evaluation model. * Add regression coverage for width suffixes, sign/zero extension, truncation, 64-bit post-normalization operations, errors and removed assertion options. mcpu-cpp 0.0.26 =============== Use the ZUBR grammar architecture for #if expression parsing. * Add mcpp-expr.zubr with the grammar and UCS-2 lexical analyzer; generated mcpp-expr.c uses the mcpp_zubr_* prefix from ZUBR 4.1.0. * Keep the established defined() preprocessing and macro-expansion front end. * Move fixed-width #if arithmetic to mcpp-semantic.c/h; expression integers use LibMPU 64-bit types rather than host long/intmax_t. * Parse binary/octal/decimal/hexadecimal integer lexemes through LibMPU iatoui() after validating/copying the ASCII subset from UCS-2. * Character units are UCS-2 __mpu_uint16_t values; multi-character packing is retained up to the 64-bit expression width. * Preserve the defined precedence, negative-shift direction and short-circuit behavior for &&, || and ?:. * Ship the generated C source; ZUBR is needed only when the .zubr grammar is regenerated. The obsolete code-page -T option is not used. * Add a dedicated ZUBR expression regression. mcpu-cpp 0.0.25 =============== Refine preprocessing identifiers and command-line macro declarator parsing. * Permit `$` after the first preprocessing-identifier character, while keeping `$` forbidden as an identifier start. * Apply the same `$` continuation rule throughout macro names, parameters, conditionals, expansion, # stringification and ## rescanning. * Parse the -D declarator separately from its replacement value so an invalid tail before '=' is discarded instead of becoming replacement text. * Apply the same valid-identifier-prefix rule to -U command-line actions. * Document shell quoting explicitly: single quotes already protect `$`; an unquoted or double-quoted `$` must be escaped when literal text is intended. * Extend Unicode/command-line macro regressions for `$`, invalid tails, -U and forbidden `$` at identifier start. mcpu-cpp 0.0.24 =============== Correct -dD origin markers for command-line macro definitions. * Macros installed by -D are tagged as command-line definitions internally. * -dD emits `# 0 ""` before command-line definitions instead of incorrectly reporting them as `# 0 ""`. * Predefined/builtin macros retain the `# 0 ""` marker. * Added a regression covering Unicode -D names and both marker classes. mcpu-cpp 0.0.23 =============== Implement command-line macro definition and undefinition. * -DNAME defines NAME as 1; -DNAME=VALUE defines VALUE, including an empty replacement after an explicit '='. * Function-like command-line macros use the same parser and macro engine as source #define directives, including # stringification and ## concatenation. * -D and -U payloads alone are decoded from UTF-8 to strict UCS-2; filenames, include paths and all other command-line arguments remain byte strings. * Unicode command-line macro names use the same XID_Start/XID_Continue rules as source identifiers. Invalid UTF-8 and non-UCS-2 characters are rejected. * -D/-U actions are applied in command-line order after predefined/builtin macros are installed, so -U may remove a predefined macro and later -D may define it again. * Added dedicated regression coverage for ASCII and Unicode command-line macros, order, function macros, #/##, conditionals and invalid encodings. mcpu-cpp 0.0.22 =============== Use LibMPUIO 1.0.4 strict UCS-2 Unicode 18.0.0 XID classification for preprocessing identifiers. * Identifier start is `_` or Unicode XID_Start. * Identifier continuation is `_` or Unicode XID_Continue. * Macro names and parameters may therefore use UCS-2 letters from supported scripts, combining marks in continuation positions, and non-ASCII decimal digits in continuation positions. * The same identifier rules are used by #define/#undef, #ifdef/#ifndef, defined(), ordinary macro expansion, stringification, token concatenation rescanning. * Classification is locale-independent and inherits LibMPUIO strict UCS-2 semantics; surrogate code units are never identifiers. * Configure now verifies that the required LibMPUIO UCS-2 ctype API is present. mcpu-cpp 0.0.21 =============== Implement GNU-compatible token concatenation (##). * ## now pastes preprocessing tokens in both object-like and function-like macro replacement lists. * A formal parameter adjacent to ## uses its raw, unexpanded actual argument; the completed replacement list is rescanned afterwards. This preserves the standard two-level CAT/XCAT expansion technique. * Empty pasted arguments use placemarker semantics, and multi-token arguments paste only the token adjacent to ##. * Pasting can form identifiers, preprocessing numbers, multi-character punctuators and prefixed string/character tokens. * An invalid paste is diagnosed and the original two tokens are emitted; ## at either end of a replacement list is rejected when the macro is defined. * Stringification (#) and concatenation (##) may be used in the same macro. * Added dedicated token-concatenation regression coverage and updated macro error tests. mcpu-cpp 0.0.20 =============== Corrective release of the quoted #lang contract introduced in 0.0.19. * The #lang implementation contract is unchanged: exactly one quoted language name, no whitespace inside the quotes, no escape processing, same-physical-line termination, ASCII case-insensitive validation against the internal language table only, original spelling preserved, and normalized external whitespace. * Regression coverage explicitly checks the accepted spellings "diff", "Diff", "DIFF" and "dIfF", as well as all other internal languages. * All package-version regression expectations are synchronized with 0.0.20; this fixes the stale-version test failures seen in the first 0.0.19 test run. mcpu-cpp 0.0.19 =============== Tighten and normalize the #lang directive contract. * #lang now requires a quoted language name, for example `#lang "diff"`; the unquoted form is rejected. * The quoted text must be one non-empty word without whitespace, must close on the same physical source line, and may be followed only by whitespace. * Escape sequences are not interpreted inside the #lang string. * Language lookup is ASCII case-insensitive but is restricted to the internal language table: diff, dift, alg, as, avm and ACS. * Output preserves the spelling inside the quotes while normalizing external whitespace to exactly `#lang "name"`. * Updated existing language tests and added a dedicated #lang string-contract regression. mcpu-cpp 0.0.18 =============== Implement conditional-compilation control flow. * #if, #ifdef, #ifndef, #elif, #else and #endif are consumed by the preprocessor and never copied to normal or -dD output. * Inactive branches are skipped without executing definitions, includes or ordinary macro expansion; nested conditionals remain balanced. * #if expressions follow the expr.zubr precedence model, including defined, unknown identifiers as zero, integer operators, ?: and short-circuit evaluation. * Include files keep independent conditional-stack boundaries and diagnose unbalanced or unterminated groups. * Generated source-location information now uses GNU linemarkers (`# N "file"`) instead of emitting `#line`; include entry/return markers carry flags 1 and 2. * Input #line directives are consumed, macro-expanded and update __LINE__ and __FILE__; the resulting location is emitted as a GNU linemarker. * Added regression coverage for include guards, nested groups, all conditional directives, defined, macro-expanded expressions, malformed groups and line control. mcpu-cpp 0.0.17 =============== Finish comment whitespace cleanup. * Removing a // or /* ... */ comment at the end of a non-empty source line no longer leaves a trailing blank before the newline. * The same rule applies when a block comment begins after program text and continues onto following physical lines. * Inline comments between tokens still preserve a separating blank where it is required to prevent accidental token concatenation. mcpu-cpp 0.0.16 =============== Implement -dD and correct comment/UCS-2 phase behavior. * -dD preserves normal preprocessed output, emits predefined macro definitions with markers, and keeps encountered #define directives. * Comment-only lines are left truly empty after // or /* ... */ removal while inline comments still preserve token separation. * Valid UTF-8 scalars outside UCS-2 are accepted inside comments and rejected only if they remain in program text after comment removal. * Added regression coverage for -dD, comment-only whitespace and non-UCS-2 characters inside versus outside comments. mcpu-cpp 0.0.13 =============== Implement macro stringification (#). * Function-like macro replacement lists now support #parameter stringification. * Stringification uses the raw, unexpanded actual argument, trims leading and trailing whitespace, folds internal whitespace outside quoted tokens, and escapes quotes/backslashes in the generated string literal. * Ordinary argument expansion is now lazy, matching the established raw-vs-expanded argument semantics and preserving nested calls of the same macro. * Empty actual arguments are represented correctly; zero-argument macros keep their established behavior. * Invalid # uses are diagnosed at definition time. ## remains deliberately rejected for the next separate token-concatenation port. * Added regression coverage for raw-vs-expanded stringification, whitespace, quoted text, empty arguments, diff apostrophe semantics, diagnostics and -dM. mcpu-cpp 0.0.12 =============== Correct integer DECIMAL_DIG semantics. * Replaced direct use of LibMPU _int_digs() for predefined integer precision metadata with mcpu-cpp integer-only helpers based on the known type width. * __INT_DECIMAL_DIG__ now counts decimal digits of INT_MAX only; it excludes both the sign and any terminating NUL. * __UINT_DECIMAL_DIG__ now counts decimal digits of UINT_MAX only; it excludes any terminating NUL. * Added exact regression values for every integer family width from 8 through 65536 bits. mcpu-cpp 0.0.11 =============== Complete predefined precision metadata and MCPU byte/word-order naming. * Added __INT_DECIMAL_DIG__ and __UINT_DECIMAL_DIG__ from LibMPU _int_digs() for every configured integer width through NB_I_MAX * 8; MAX values remain capped at 256 bits. * Added __REAL_DECIMAL_DIG__ and __REAL_MANT_DIG__ for every Real width through MPU_REAL_IO_LIMIT; large numeric MAX/MIN/EPSILON/exponent values remain capped at 256 bits. * Replaced __FLOAT_WORD_ORDER__ with __MCPU_BYTE_ORDER__ and __MCPU_WORD_ORDER__; __BYTE_ORDER__ remains as an alias to __MCPU_BYTE_ORDER__. * Added __MCPU_INT_MAX_WIDTH__, __MCPU_REAL_MAX_WIDTH__ and __MCPU_COMPLEX_MAX_WIDTH__ capability macros. * Renamed __SIZEOF_PTRDIFF_T__ to language-native __SIZEOF_PTRDIFF__. * Extended predefined ABI/range regression coverage for the complete integer and Real families. mcpu-cpp 0.0.10 =============== Predefined ABI naming cleanup and complete Real text-buffer metadata. * Replaced the C-style public size family with __MCPU_SIZE_TYPE__, WIDTH, SIZEOF_SIZE and MAX; renamed __MCPU_SIZEOF_SSIZE_T__ to __MCPU_SIZEOF_SSIZE__. * Renamed __SIZEOF_CHAR8_T__/__SIZEOF_CHAR16_T__ to the language-native __SIZEOF_CHAR8__/__SIZEOF_CHAR16__. * Added __SIZEOF_REAL_EXP__ from LibMPU _sizeof_exp() for every Real width through MPU_REAL_IO_LIMIT. * Added __REAL_MAX_STRLEN__ from _real_max_string() for every Real width; the value is a character count, not a byte count. * Extended -dM regression coverage to verify the new names and the largest configured Real family. mcpu-cpp 0.0.9 ============== Complete structural predefined metadata across LibMPU type ranges. * Corrected MCPU ptrdiff to signed int64 with max 0x7fffffffffffffff. * Added the MCPU-specific signed-size family: __MCPU_SSIZE_TYPE__, WIDTH, SIZEOF and MAX from the configured LibMPU __mpu_ssize_t profile. * Integer TYPE/WIDTH/SIZEOF families now extend through NB_I_MAX * 8; numeric MAX/DECIMAL_DIG values remain capped at 256 bits. * Real/Complex TYPE/WIDTH/SIZEOF families now extend through MPU_REAL_IO_LIMIT; numeric Real characteristics remain capped at 256 bits. * Corrected __COMPLEX_WIDTH__ to the language type parameter ; __SIZEOF_COMPLEX__ remains twice the corresponding Real storage. * Added exhaustive -dM regression coverage across all advertised integer, Real and Complex structural families. mcpu-cpp 0.0.8 ============== Predefined ABI refinement and derived system language include paths. * Renamed __VERSION__ to __MCPU_CPP_VERSION__ and report the mcpu-cpp version. * Renamed LibMPU-profile predefines to the __MCPU_* namespace. * Character type spellings are now char8 and char16. * MCPU pointer and ptrdiff contracts are fixed at 64 bits independently of host; ptrdiff is currently uint64 by ABI decision. * Integer/Real textual value constants are emitted only through 256 bits. Wider families retain only type and width macros. * Removed computed integer MIN predefines. * Added integer DECIMAL_DIG values from _int_digs(). * Replaced REAL_DIG with REAL_DECIMAL_DIG from _real_digs(); MANT_DIG comes from _real_mant_digs(). * Configured system include roots automatically add active-language subdirectories such as /usr/include/mcpu/diff without extra config variables. * Added regression coverage for the refined predefined environment and derived system language include search. mcpu-cpp 0.0.7 ============== Predefined ABI/environment layer and inspection tools. * GNU GCC is now an explicit mandatory build compiler. * Ported the LibMPU/LibMPUIO GCC type-size, endian and machine-register probes into mcpu-cpp acsite.m4 under project-specific macro names. * Configure reads and verifies the installed LibMPU real-I/O/math limits, byte/word order, addressable-unit width, size_t and ptrdiff_t profile. * Added _ARCH_MCPU and GCC-compatible byte-order, pointer, size_t/ptrdiff_t and assembler-prefix predefined macros. * Added fixed-width int/uint predefined families through 65536 bits. * Added Real/Complex type families through 65536 bits; Real numeric limits are generated with LibMPU and real_to_ascii up to MPU_REAL_IO_LIMIT. * Large Real numeric predefined values are generated lazily so ordinary preprocessing remains fast. * __VERSION__ is now the future high-level compiler version placeholder 0.0.0. * Added `-dM` for deterministic macro-table dumps and `-dconfig` for effective configuration dumps; neither requires an input file. * Added ABI, dump-macro and dump-config regression tests. mcpu-cpp 0.0.6 ============== Implement predefined macros. * Added the dynamic predefined macros __FILE__, __LINE__, __BASE_FILE__, __INCLUDE_LEVEL__, __DATE__, __TIME__ and __VERSION__. * __FILE__/__LINE__/__INCLUDE_LEVEL__ follow nested #include processing; __BASE_FILE__ remains the original translation-unit input file. * __DATE__ and __TIME__ are fixed once at preprocessing startup, matching the translation-unit timestamp model. * __VERSION__ expands to the mcpu-cpp package version, as preprocessor used its own package version for the corresponding macro. * Predefined expansions are emitted without rescanning, following the established special-symbol behavior. * Built-ins share the normal macro table and can therefore be undefined or explicitly redefined. * K-specific legacy built-ins (__STDK__, __K__, __kxLab__, and related names) are not carried into the MCPU language family. mcpu-cpp 0.0.5 ============== Extend the macro engine. * Moved project-owned Autoconf macros from m4/ to the root acsite.m4; m4/ is reserved for external/vendor macros. * Documented the future developer-only Bison workflow: make parser, make tests, then make dist. Normal release builds do not require Bison. * Added function-like #define macros with zero or more formal parameters. * Added nested argument parsing with defined parenthesis/comma rules. * Actual arguments are macro-expanded before ordinary substitution, including nested calls such as min(min(a,b),c). * Added diagnostics for duplicate parameters, malformed definitions, incomplete calls and wrong argument counts. * # and ## are explicitly rejected until their semantics are implemented, avoiding silent partial preprocessing. mcpu-cpp 0.0.4 ============== Implement the first macro-processing layer. * Added doc/mcpu-cpp.md as a living implementation-order manual as the normative MCPU preprocessing manual. * Added the preprocessing phase needed before directive and macro processing: backslash-newline splicing and comment removal with preserved source lines. * Added object-like #define and #undef. * Added recursive/cascaded object-macro expansion with recursion blocking. * Macro names are not expanded inside quoted strings; the historical diff apostrophe rule remains in force. * Added computed #include through macro expansion. * Preserved literal #include <...> lexical behavior for comment-like text. * Began reusing macro regression cases; the self-referential macro case is now part of the mcpu-cpp test suite. mcpu-cpp 0.0.3 ============== Include-root and configuration-layout correction. * MCPU_CPP_INCLUDE_PATH is now a common user include root visible in every language state. * Active language-specific include directories are additional search paths and precede the common configured root. * Explicit names such as can therefore be used through the common root regardless of the current #lang state. * The system configuration moved to /etc/mcpu/mcpu-cpp.conf. * The per-user configuration moved to $HOME/.mcpu/mcpu-cpp.conf. mcpu-cpp 0.0.2 ============== Language-contract cleanup before macro-engine development. * Establish initial language state 0. * Language 0 is active at startup and cannot be named by #lang. * Canonical #lang set is: diff, dift, alg, as, avm, ACS. * Historical vasm was replaced by as for the real MCPU assembler. * MCPU_CPP_VASM_INCLUDE_PATH became MCPU_CPP_AS_INCLUDE_PATH. * Removed the temporary MCPU_CPP_C_INCLUDE_PATH. The root MCPU_CPP_INCLUDE_PATH is the main include directory of the unnamed base base MCPU language (state 0) and is selected only in that state. * Added the public `make tests` target. mcpu-cpp 0.0.1 ============== Initial architectural release. * New UTF-8 external / UCS-2 internal source model with strict NUL rejection. * No legacy code-page machinery. * Hand-written preprocessing scanner; flex is not used. * Scanner honors quoted strings and the diff apostrophe rule. * Source/include stack with #include support. * #lang/#endlang language stack defined for the MCPU language stack. * Configuration-file and command-line include search paths. * Initial language set: c, diff, dift, alg, vasm, avm, ACS.