1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
|
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 `<root>/include` and
`<root>/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
`<root>/<lang>` 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 <root>/<lang>
directory internally and then search <root>; 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 <file>.
* 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 "<command-line>"` before command-line definitions instead of
incorrectly reporting them as `# 0 "<built-in>"`.
* Predefined/builtin macros retain the `# 0 "<built-in>"` 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 <built-in> 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<bits>_DECIMAL_DIG__ now counts decimal digits of INT<bits>_MAX only;
it excludes both the sign and any terminating NUL.
* __UINT<bits>_DECIMAL_DIG__ now counts decimal digits of UINT<bits>_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<bits>_DECIMAL_DIG__ and __UINT<bits>_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<bits>_DECIMAL_DIG__ and __REAL<bits>_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<bits>_EXP__ from LibMPU _sizeof_exp() for every Real
width through MPU_REAL_IO_LIMIT.
* Added __REAL<bits>_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<bits>_WIDTH__ to the language type parameter <bits>;
__SIZEOF_COMPLEX<bits>__ 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<bits>_DIG with REAL<bits>_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 <diff/a.h> 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.
|