From 9cef856478cebe4bfe00e1d39c9e2d49015dd0e4 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 9 Jan 2024 21:47:33 +0100 Subject: MP-UX/hCore Assembler for 64x0, Release I. Signed-off-by: Amlal El Mahrouss --- 32x0-Drivers/.gitkeep | 0 32x0/.gitkeep | 0 64x0-Drivers/.gitignore | 30 + 64x0-Drivers/64asm.cc | 999 + 64x0-Drivers/64ld.cc | 587 + 64x0-Drivers/bccl.cc | 1572 + 64x0-Drivers/bin/.gitkeep | 0 64x0-Drivers/bin/README.txt | 2 + 64x0-Drivers/bin/SourceUnitTest/.gitkeep | 0 64x0-Drivers/bpp.cc | 1119 + 64x0-Drivers/ccplus.cc | 758 + 64x0-Drivers/makefile | 59 + 64x0/.gitignore | 28 - 64x0/64asm.cc | 999 - 64x0/bccl.cc | 1572 - 64x0/bin/.gitkeep | 0 64x0/bin/README.txt | 2 - 64x0/bin/SourceUnitTest/.gitkeep | 0 64x0/bpp.cc | 1119 - 64x0/cc2/LICENSE | 11 - 64x0/cc2/include/cpp2util.h | 1999 - 64x0/cc2/passthrough-tests/all-std.cxx | 126 - .../cc2/passthrough-tests/clang-12-libstdc++-e.cpp | 149788 -------------- .../passthrough-tests/clang-12-libstdc++-e.cpp2 | 149788 -------------- 64x0/cc2/passthrough-tests/gcc-10-libstdc++-e.cpp | 150933 -------------- 64x0/cc2/passthrough-tests/gcc-10-libstdc++-e.cpp2 | 150933 -------------- 64x0/cc2/passthrough-tests/msvc-msstl-e.cpp | 191001 ------------------ 64x0/cc2/passthrough-tests/msvc-msstl-e.cpp2 | 191001 ------------------ 64x0/cc2/passthrough-tests/readme.md | 32 - 64x0/cc2/passthrough-tests/run-diffs.sh | 8 - 64x0/cc2/regression-tests/mixed-allcpp1-hello.cpp2 | 15 - .../mixed-as-for-variant-20-types.cpp2 | 75 - 64x0/cc2/regression-tests/mixed-bounds-check.cpp2 | 10 - .../mixed-bounds-safety-with-assert-2.cpp2 | 26 - .../mixed-bounds-safety-with-assert.cpp2 | 24 - ...ixed-bugfix-for-cpp2-comment-cpp1-sequence.cpp2 | 2 - .../mixed-bugfix-for-literal-as-nttp.cpp2 | 7 - .../mixed-bugfix-for-ufcs-non-local.cpp2 | 49 - ...captures-in-expressions-and-postconditions.cpp2 | 24 - .../regression-tests/mixed-fixed-type-aliases.cpp2 | 30 - .../cc2/regression-tests/mixed-float-literals.cpp2 | 117 - 64x0/cc2/regression-tests/mixed-forwarding.cpp2 | 35 - ...mixed-function-expression-and-std-for-each.cpp2 | 27 - ...ssion-and-std-ranges-for-each-with-capture.cpp2 | 21 - ...unction-expression-and-std-ranges-for-each.cpp2 | 20 - ...d-function-expression-with-pointer-capture.cpp2 | 22 - ...-function-expression-with-repeated-capture.cpp2 | 21 - 64x0/cc2/regression-tests/mixed-hello.cpp2 | 18 - .../mixed-increment-decrement.cpp2 | 55 - .../mixed-initialization-safety-1-error.cpp2 | 45 - .../mixed-initialization-safety-2-error.cpp2 | 45 - ...initialization-safety-3-contract-violation.cpp2 | 35 - .../mixed-initialization-safety-3.cpp2 | 30 - .../regression-tests/mixed-inspect-templates.cpp2 | 41 - .../regression-tests/mixed-inspect-values-2.cpp2 | 45 - .../cc2/regression-tests/mixed-inspect-values.cpp2 | 42 - ...d-inspect-with-typeof-of-template-arg-list.cpp2 | 16 - .../mixed-intro-example-three-loops.cpp2 | 37 - .../mixed-intro-for-with-counter-include-last.cpp2 | 13 - .../mixed-lifetime-safety-and-null-contracts.cpp2 | 26 - ...mixed-lifetime-safety-pointer-init-1-error.cpp2 | 23 - ...mixed-lifetime-safety-pointer-init-2-error.cpp2 | 23 - ...mixed-lifetime-safety-pointer-init-3-error.cpp2 | 23 - .../mixed-lifetime-safety-pointer-init-4.cpp2 | 28 - .../mixed-multiple-return-values.cpp2 | 35 - .../regression-tests/mixed-out-destruction.cpp2 | 38 - .../mixed-parameter-passing-generic-out.cpp2 | 23 - .../mixed-parameter-passing-with-forward.cpp2 | 42 - .../regression-tests/mixed-parameter-passing.cpp2 | 40 - .../mixed-postexpression-with-capture.cpp2 | 38 - ...mixed-postfix-expression-custom-formatting.cpp2 | 15 - .../mixed-string-interpolation.cpp2 | 53 - 64x0/cc2/regression-tests/mixed-test-parens.cpp2 | 13 - 64x0/cc2/regression-tests/mixed-type-safety-1.cpp2 | 36 - .../mixed-ufcs-multiple-template-arguments.cpp2 | 24 - ...re2-bounds-safety-pointer-arithmetic-error.cpp2 | 21 - .../regression-tests/pure2-bounds-safety-span.cpp2 | 17 - .../cc2/regression-tests/pure2-break-continue.cpp2 | 226 - .../pure2-bugfix-for-assign-expression-list.cpp2 | 10 - .../pure2-bugfix-for-declaration-equal-error.cpp2 | 1 - .../pure2-bugfix-for-discard-precedence.cpp2 | 11 - .../pure2-bugfix-for-max-munch.cpp2 | 2 - ...ure2-bugfix-for-memberwise-base-assignment.cpp2 | 18 - ...ugfix-for-name-lookup-and-value-decoration.cpp2 | 9 - ...2-bugfix-for-non-local-function-expression.cpp2 | 13 - .../pure2-bugfix-for-non-local-initialization.cpp2 | 8 - ...bugfix-for-optional-template-argument-list.cpp2 | 2 - ...pure2-bugfix-for-parameter-decl-list-error.cpp2 | 1 - ...for-requires-clause-in-forward-declaration.cpp2 | 5 - ...uires-clause-unbraced-function-initializer.cpp2 | 2 - .../pure2-bugfix-for-template-argument.cpp2 | 2 - .../pure2-bugfix-for-ufcs-arguments.cpp2 | 71 - .../pure2-bugfix-for-ufcs-name-lookup.cpp2 | 111 - .../pure2-bugfix-for-ufcs-noexcept.cpp2 | 6 - .../pure2-bugfix-for-ufcs-sfinae.cpp2 | 8 - ...e2-bugfix-for-unbraced-function-expression.cpp2 | 15 - .../pure2-bugfix-for-variable-template.cpp2 | 2 - .../pure2-chained-comparisons.cpp2 | 15 - .../regression-tests/pure2-concept-definition.cpp2 | 5 - 64x0/cc2/regression-tests/pure2-contracts.cpp2 | 29 - ...e2-cpp1-multitoken-fundamental-types-error.cpp2 | 9 - .../pure2-cpp1-prefix-expression-error.cpp2 | 5 - .../pure2-deducing-pointers-error.cpp2 | 47 - ...ure2-defaulted-comparisons-and-final-types.cpp2 | 22 - 64x0/cc2/regression-tests/pure2-enum.cpp2 | 120 - .../pure2-for-loop-range-with-lambda.cpp2 | 30 - .../pure2-forward-return-diagnostics-error.cpp2 | 53 - .../cc2/regression-tests/pure2-forward-return.cpp2 | 15 - .../pure2-function-multiple-forward-arguments.cpp2 | 10 - 64x0/cc2/regression-tests/pure2-hello.cpp2 | 14 - .../pure2-initialization-safety-with-else-if.cpp2 | 25 - ...ression-in-generic-function-multiple-types.cpp2 | 30 - ...ect-expression-with-as-in-generic-function.cpp2 | 16 - ...inspect-fallback-with-variant-any-optional.cpp2 | 25 - ...neric-void-empty-with-variant-any-optional.cpp2 | 26 - 64x0/cc2/regression-tests/pure2-interpolation.cpp2 | 31 - .../pure2-intro-example-hello-2022.cpp2 | 20 - .../pure2-intro-example-three-loops.cpp2 | 30 - ...pure2-lifetime-safety-pointer-init-1-error.cpp2 | 20 - .../pure2-lifetime-safety-reject-null-error.cpp2 | 19 - ...-look-up-parameter-across-unnamed-function.cpp2 | 19 - 64x0/cc2/regression-tests/pure2-main-args.cpp2 | 5 - .../cc2/regression-tests/pure2-more-wildcards.cpp2 | 18 - 64x0/cc2/regression-tests/pure2-print.cpp2 | 106 - ...pure2-raw-string-literal-and-interpolation.cpp2 | 34 - 64x0/cc2/regression-tests/pure2-repeated-call.cpp2 | 5 - .../regression-tests/pure2-requires-clauses.cpp2 | 23 - .../pure2-return-tuple-no-identifier-error.cpp2 | 3 - .../pure2-return-tuple-no-type-error.cpp2 | 3 - .../pure2-statement-parse-error.cpp2 | 5 - .../pure2-statement-scope-parameters.cpp2 | 15 - .../regression-tests/pure2-stdio-with-raii.cpp2 | 8 - 64x0/cc2/regression-tests/pure2-stdio.cpp2 | 10 - ...re2-synthesize-rightshift-and-rightshifteq.cpp2 | 9 - .../pure2-template-parameter-lists.cpp2 | 12 - .../pure2-type-and-namespace-aliases.cpp2 | 35 - 64x0/cc2/regression-tests/pure2-type-safety-1.cpp2 | 35 - ...ure2-type-safety-2-with-inspect-expression.cpp2 | 29 - 64x0/cc2/regression-tests/pure2-types-basics.cpp2 | 85 - .../regression-tests/pure2-types-down-upcast.cpp2 | 85 - .../regression-tests/pure2-types-inheritance.cpp2 | 53 - ...pure2-types-order-independence-and-nesting.cpp2 | 80 - .../pure2-types-ordering-via-meta-functions.cpp2 | 50 - ...e2-types-smf-and-that-1-provide-everything.cpp2 | 63 - ...nd-that-2-provide-mvconstruct-and-cpassign.cpp2 | 63 - ...nd-that-3-provide-mvconstruct-and-mvassign.cpp2 | 63 - ...f-and-that-4-provide-cpassign-and-mvassign.cpp2 | 63 - ...nd-that-5-provide-nothing-but-general-case.cpp2 | 63 - .../pure2-types-that-parameters.cpp2 | 38 - ...pure2-types-value-types-via-meta-functions.cpp2 | 35 - .../pure2-ufcs-member-access-and-chaining.cpp2 | 43 - 64x0/cc2/regression-tests/pure2-union.cpp2 | 43 - 64x0/cc2/regression-tests/pure2-variadics.cpp2 | 32 - .../pure2-various-string-literals.cpp2 | 20 - .../apple-clang-14/clang-version.output | 4 - .../mixed-allcpp1-hello.cpp.execution | 1 - .../apple-clang-14/mixed-allcpp1-hello.cpp.output | 0 .../mixed-as-for-variant-20-types.cpp.execution | 60 - .../mixed-as-for-variant-20-types.cpp.output | 0 .../mixed-bounds-check.cpp.execution | 1 - .../apple-clang-14/mixed-bounds-check.cpp.output | 0 ...mixed-bounds-safety-with-assert-2.cpp.execution | 5 - .../mixed-bounds-safety-with-assert-2.cpp.output | 0 .../mixed-bounds-safety-with-assert.cpp.execution | 1 - .../mixed-bounds-safety-with-assert.cpp.output | 0 ...ix-for-cpp2-comment-cpp1-sequence.cpp.execution | 0 ...ugfix-for-cpp2-comment-cpp1-sequence.cpp.output | 0 .../mixed-bugfix-for-literal-as-nttp.cpp.execution | 0 .../mixed-bugfix-for-literal-as-nttp.cpp.output | 0 .../mixed-bugfix-for-ufcs-non-local.cpp.execution | 0 .../mixed-bugfix-for-ufcs-non-local.cpp.output | 0 ...in-expressions-and-postconditions.cpp.execution | 4 - ...es-in-expressions-and-postconditions.cpp.output | 7 - .../mixed-fixed-type-aliases.cpp.execution | 4 - .../mixed-fixed-type-aliases.cpp.output | 0 .../mixed-float-literals.cpp.execution | 72 - .../apple-clang-14/mixed-float-literals.cpp.output | 0 .../apple-clang-14/mixed-forwarding.cpp.execution | 12 - .../apple-clang-14/mixed-forwarding.cpp.output | 0 ...ction-expression-and-std-for-each.cpp.execution | 2 - ...function-expression-and-std-for-each.cpp.output | 7 - ...-std-ranges-for-each-with-capture.cpp.execution | 4 - ...and-std-ranges-for-each-with-capture.cpp.output | 7 - ...xpression-and-std-ranges-for-each.cpp.execution | 4 - ...n-expression-and-std-ranges-for-each.cpp.output | 7 - ...n-expression-with-pointer-capture.cpp.execution | 6 - ...tion-expression-with-pointer-capture.cpp.output | 7 - ...-expression-with-repeated-capture.cpp.execution | 6 - ...ion-expression-with-repeated-capture.cpp.output | 7 - .../apple-clang-14/mixed-hello.cpp.execution | 1 - .../apple-clang-14/mixed-hello.cpp.output | 0 .../mixed-increment-decrement.cpp.execution | 2 - .../mixed-increment-decrement.cpp.output | 0 ...ation-safety-3-contract-violation.cpp.execution | 1 - ...lization-safety-3-contract-violation.cpp.output | 0 .../mixed-initialization-safety-3.cpp.execution | 1 - .../mixed-initialization-safety-3.cpp.output | 0 .../mixed-inspect-templates.cpp.execution | 8 - .../mixed-inspect-templates.cpp.output | 0 .../mixed-inspect-values-2.cpp.execution | 5 - .../mixed-inspect-values-2.cpp.output | 0 .../mixed-inspect-values.cpp.execution | 12 - .../apple-clang-14/mixed-inspect-values.cpp.output | 0 ...-with-typeof-of-template-arg-list.cpp.execution | 0 ...ect-with-typeof-of-template-arg-list.cpp.output | 0 .../mixed-intro-example-three-loops.cpp.execution | 7 - .../mixed-intro-example-three-loops.cpp.output | 0 ...tro-for-with-counter-include-last.cpp.execution | 5 - ...-intro-for-with-counter-include-last.cpp.output | 0 ...ifetime-safety-and-null-contracts.cpp.execution | 1 - ...d-lifetime-safety-and-null-contracts.cpp.output | 0 ...ed-lifetime-safety-pointer-init-4.cpp.execution | 1 - ...mixed-lifetime-safety-pointer-init-4.cpp.output | 0 .../mixed-multiple-return-values.cpp.execution | 2 - .../mixed-multiple-return-values.cpp.output | 0 .../mixed-out-destruction.cpp.execution | 21 - .../mixed-out-destruction.cpp.output | 0 ...xed-parameter-passing-generic-out.cpp.execution | 2 - .../mixed-parameter-passing-generic-out.cpp.output | 0 ...ed-parameter-passing-with-forward.cpp.execution | 0 ...mixed-parameter-passing-with-forward.cpp.output | 0 .../mixed-parameter-passing.cpp.execution | 0 .../mixed-parameter-passing.cpp.output | 0 ...mixed-postexpression-with-capture.cpp.execution | 2 - .../mixed-postexpression-with-capture.cpp.output | 0 ...tfix-expression-custom-formatting.cpp.execution | 0 ...postfix-expression-custom-formatting.cpp.output | 0 .../mixed-string-interpolation.cpp.execution | 17 - .../mixed-string-interpolation.cpp.output | 0 .../apple-clang-14/mixed-test-parens.cpp.execution | 1 - .../apple-clang-14/mixed-test-parens.cpp.output | 0 .../mixed-type-safety-1.cpp.execution | 6 - .../apple-clang-14/mixed-type-safety-1.cpp.output | 0 ...-ufcs-multiple-template-arguments.cpp.execution | 2 - ...xed-ufcs-multiple-template-arguments.cpp.output | 0 .../pure2-bounds-safety-span.cpp.execution | 3 - .../pure2-bounds-safety-span.cpp.output | 0 .../pure2-break-continue.cpp.execution | 26 - .../apple-clang-14/pure2-break-continue.cpp.output | 0 ...bugfix-for-assign-expression-list.cpp.execution | 0 ...e2-bugfix-for-assign-expression-list.cpp.output | 0 ...re2-bugfix-for-discard-precedence.cpp.execution | 0 .../pure2-bugfix-for-discard-precedence.cpp.output | 0 .../pure2-bugfix-for-max-munch.cpp.execution | 0 .../pure2-bugfix-for-max-munch.cpp.output | 0 ...ix-for-memberwise-base-assignment.cpp.execution | 2 - ...ugfix-for-memberwise-base-assignment.cpp.output | 0 ...-name-lookup-and-value-decoration.cpp.execution | 0 ...for-name-lookup-and-value-decoration.cpp.output | 0 ...for-non-local-function-expression.cpp.execution | 0 ...ix-for-non-local-function-expression.cpp.output | 0 ...gfix-for-non-local-initialization.cpp.execution | 0 ...-bugfix-for-non-local-initialization.cpp.output | 0 ...r-optional-template-argument-list.cpp.execution | 0 ...-for-optional-template-argument-list.cpp.output | 0 ...res-clause-in-forward-declaration.cpp.execution | 0 ...quires-clause-in-forward-declaration.cpp.output | 0 ...use-unbraced-function-initializer.cpp.execution | 0 ...clause-unbraced-function-initializer.cpp.output | 0 ...ure2-bugfix-for-template-argument.cpp.execution | 1 - .../pure2-bugfix-for-template-argument.cpp.output | 0 .../pure2-bugfix-for-ufcs-arguments.cpp.execution | 4 - .../pure2-bugfix-for-ufcs-arguments.cpp.output | 0 ...pure2-bugfix-for-ufcs-name-lookup.cpp.execution | 0 .../pure2-bugfix-for-ufcs-name-lookup.cpp.output | 0 .../pure2-bugfix-for-ufcs-noexcept.cpp.execution | 0 .../pure2-bugfix-for-ufcs-noexcept.cpp.output | 0 .../pure2-bugfix-for-ufcs-sfinae.cpp.execution | 0 .../pure2-bugfix-for-ufcs-sfinae.cpp.output | 0 ...-for-unbraced-function-expression.cpp.execution | 0 ...fix-for-unbraced-function-expression.cpp.output | 0 ...ure2-bugfix-for-variable-template.cpp.execution | 0 .../pure2-bugfix-for-variable-template.cpp.output | 0 .../pure2-chained-comparisons.cpp.execution | 27 - .../pure2-chained-comparisons.cpp.output | 0 .../pure2-concept-definition.cpp.execution | 0 .../pure2-concept-definition.cpp.output | 0 .../apple-clang-14/pure2-contracts.cpp.execution | 3 - .../apple-clang-14/pure2-contracts.cpp.output | 0 ...ulted-comparisons-and-final-types.cpp.execution | 1 - ...efaulted-comparisons-and-final-types.cpp.output | 0 .../apple-clang-14/pure2-enum.cpp.execution | 29 - .../apple-clang-14/pure2-enum.cpp.output | 0 .../pure2-for-loop-range-with-lambda.cpp.execution | 1 - .../pure2-for-loop-range-with-lambda.cpp.output | 0 .../pure2-forward-return.cpp.execution | 2 - .../apple-clang-14/pure2-forward-return.cpp.output | 0 ...nction-multiple-forward-arguments.cpp.execution | 1 - ...-function-multiple-forward-arguments.cpp.output | 0 .../apple-clang-14/pure2-hello.cpp.execution | 1 - .../apple-clang-14/pure2-hello.cpp.output | 0 ...nitialization-safety-with-else-if.cpp.execution | 1 - ...2-initialization-safety-with-else-if.cpp.output | 0 ...n-generic-function-multiple-types.cpp.execution | 8 - ...n-in-generic-function-multiple-types.cpp.output | 0 ...ssion-with-as-in-generic-function.cpp.execution | 3 - ...pression-with-as-in-generic-function.cpp.output | 0 ...allback-with-variant-any-optional.cpp.execution | 11 - ...t-fallback-with-variant-any-optional.cpp.output | 0 ...d-empty-with-variant-any-optional.cpp.execution | 17 - ...void-empty-with-variant-any-optional.cpp.output | 0 .../pure2-interpolation.cpp.execution | 12 - .../apple-clang-14/pure2-interpolation.cpp.output | 0 .../pure2-intro-example-hello-2022.cpp.execution | 2 - .../pure2-intro-example-hello-2022.cpp.output | 0 .../pure2-intro-example-three-loops.cpp.execution | 8 - .../pure2-intro-example-three-loops.cpp.output | 0 ...parameter-across-unnamed-function.cpp.execution | 1 - ...up-parameter-across-unnamed-function.cpp.output | 0 .../apple-clang-14/pure2-main-args.cpp.execution | 2 - .../apple-clang-14/pure2-main-args.cpp.output | 0 .../pure2-more-wildcards.cpp.execution | 2 - .../apple-clang-14/pure2-more-wildcards.cpp.output | 0 .../apple-clang-14/pure2-print.cpp.execution | 2 - .../apple-clang-14/pure2-print.cpp.output | 0 ...-string-literal-and-interpolation.cpp.execution | 17 - ...raw-string-literal-and-interpolation.cpp.output | 0 .../pure2-repeated-call.cpp.execution | 1 - .../apple-clang-14/pure2-repeated-call.cpp.output | 0 .../pure2-requires-clauses.cpp.execution | 1 - .../pure2-requires-clauses.cpp.output | 0 .../pure2-statement-scope-parameters.cpp.execution | 2 - .../pure2-statement-scope-parameters.cpp.output | 0 .../pure2-stdio-with-raii.cpp.execution | 0 .../pure2-stdio-with-raii.cpp.output | 0 .../apple-clang-14/pure2-stdio.cpp.execution | 0 .../apple-clang-14/pure2-stdio.cpp.output | 0 ...esize-rightshift-and-rightshifteq.cpp.execution | 1 - ...nthesize-rightshift-and-rightshifteq.cpp.output | 0 .../pure2-template-parameter-lists.cpp.execution | 4 - .../pure2-template-parameter-lists.cpp.output | 0 .../pure2-type-and-namespace-aliases.cpp.output | 26 - .../pure2-type-safety-1.cpp.execution | 9 - .../apple-clang-14/pure2-type-safety-1.cpp.output | 0 ...-safety-2-with-inspect-expression.cpp.execution | 8 - ...ype-safety-2-with-inspect-expression.cpp.output | 0 .../pure2-types-basics.cpp.execution | 27 - .../apple-clang-14/pure2-types-basics.cpp.output | 0 .../pure2-types-down-upcast.cpp.execution | 24 - .../pure2-types-down-upcast.cpp.output | 0 .../pure2-types-inheritance.cpp.execution | 5 - .../pure2-types-inheritance.cpp.output | 0 ...es-order-independence-and-nesting.cpp.execution | 5 - ...types-order-independence-and-nesting.cpp.output | 0 ...types-ordering-via-meta-functions.cpp.execution | 1 - ...e2-types-ordering-via-meta-functions.cpp.output | 0 ...smf-and-that-1-provide-everything.cpp.execution | 8 - ...es-smf-and-that-1-provide-everything.cpp.output | 0 ...-provide-mvconstruct-and-cpassign.cpp.execution | 8 - ...t-2-provide-mvconstruct-and-cpassign.cpp.output | 0 ...-provide-mvconstruct-and-mvassign.cpp.execution | 8 - ...t-3-provide-mvconstruct-and-mvassign.cpp.output | 0 ...t-4-provide-cpassign-and-mvassign.cpp.execution | 8 - ...that-4-provide-cpassign-and-mvassign.cpp.output | 0 ...-provide-nothing-but-general-case.cpp.execution | 8 - ...t-5-provide-nothing-but-general-case.cpp.output | 0 .../pure2-types-that-parameters.cpp.execution | 7 - .../pure2-types-that-parameters.cpp.output | 0 ...es-value-types-via-meta-functions.cpp.execution | 1 - ...types-value-types-via-meta-functions.cpp.output | 0 ...2-ufcs-member-access-and-chaining.cpp.execution | 0 ...ure2-ufcs-member-access-and-chaining.cpp.output | 0 .../apple-clang-14/pure2-union.cpp.execution | 4 - .../apple-clang-14/pure2-union.cpp.output | 0 .../apple-clang-14/pure2-variadics.cpp.execution | 6 - .../apple-clang-14/pure2-variadics.cpp.output | 0 .../pure2-various-string-literals.cpp.execution | 0 .../pure2-various-string-literals.cpp.output | 0 .../apple-clang-14/run-tests-apple-clang.sh | 24 - .../test-results/apple-clang-14/xyzzy | 1 - .../test-results/clang-12/clang-version.output | 4 - .../clang-12/mixed-allcpp1-hello.cpp.execution | 1 - .../clang-12/mixed-allcpp1-hello.cpp.output | 0 .../mixed-as-for-variant-20-types.cpp.execution | 60 - .../mixed-as-for-variant-20-types.cpp.output | 0 .../clang-12/mixed-bounds-check.cpp.execution | 1 - .../clang-12/mixed-bounds-check.cpp.output | 0 ...mixed-bounds-safety-with-assert-2.cpp.execution | 5 - .../mixed-bounds-safety-with-assert-2.cpp.output | 0 .../mixed-bounds-safety-with-assert.cpp.execution | 1 - .../mixed-bounds-safety-with-assert.cpp.output | 0 ...ix-for-cpp2-comment-cpp1-sequence.cpp.execution | 0 ...ugfix-for-cpp2-comment-cpp1-sequence.cpp.output | 0 .../mixed-bugfix-for-literal-as-nttp.cpp.execution | 0 .../mixed-bugfix-for-literal-as-nttp.cpp.output | 0 .../mixed-bugfix-for-ufcs-non-local.cpp.output | 118 - ...in-expressions-and-postconditions.cpp.execution | 4 - ...es-in-expressions-and-postconditions.cpp.output | 0 .../mixed-fixed-type-aliases.cpp.execution | 4 - .../clang-12/mixed-fixed-type-aliases.cpp.output | 0 .../clang-12/mixed-float-literals.cpp.execution | 72 - .../clang-12/mixed-float-literals.cpp.output | 0 .../clang-12/mixed-forwarding.cpp.execution | 12 - .../clang-12/mixed-forwarding.cpp.output | 0 ...ction-expression-and-std-for-each.cpp.execution | 2 - ...function-expression-and-std-for-each.cpp.output | 0 ...-std-ranges-for-each-with-capture.cpp.execution | 4 - ...and-std-ranges-for-each-with-capture.cpp.output | 0 ...xpression-and-std-ranges-for-each.cpp.execution | 4 - ...n-expression-and-std-ranges-for-each.cpp.output | 0 ...n-expression-with-pointer-capture.cpp.execution | 6 - ...tion-expression-with-pointer-capture.cpp.output | 0 ...-expression-with-repeated-capture.cpp.execution | 6 - ...ion-expression-with-repeated-capture.cpp.output | 0 .../clang-12/mixed-hello.cpp.execution | 1 - .../test-results/clang-12/mixed-hello.cpp.output | 0 .../mixed-increment-decrement.cpp.execution | 2 - .../clang-12/mixed-increment-decrement.cpp.output | 0 ...ation-safety-3-contract-violation.cpp.execution | 1 - ...lization-safety-3-contract-violation.cpp.output | 0 .../mixed-initialization-safety-3.cpp.execution | 1 - .../mixed-initialization-safety-3.cpp.output | 0 .../clang-12/mixed-inspect-templates.cpp.execution | 8 - .../clang-12/mixed-inspect-templates.cpp.output | 0 .../clang-12/mixed-inspect-values-2.cpp.execution | 5 - .../clang-12/mixed-inspect-values-2.cpp.output | 0 .../clang-12/mixed-inspect-values.cpp.execution | 12 - .../clang-12/mixed-inspect-values.cpp.output | 0 ...-with-typeof-of-template-arg-list.cpp.execution | 0 ...ect-with-typeof-of-template-arg-list.cpp.output | 0 .../mixed-intro-example-three-loops.cpp.execution | 7 - .../mixed-intro-example-three-loops.cpp.output | 0 ...tro-for-with-counter-include-last.cpp.execution | 5 - ...-intro-for-with-counter-include-last.cpp.output | 0 ...ifetime-safety-and-null-contracts.cpp.execution | 1 - ...d-lifetime-safety-and-null-contracts.cpp.output | 0 ...ed-lifetime-safety-pointer-init-4.cpp.execution | 1 - ...mixed-lifetime-safety-pointer-init-4.cpp.output | 0 .../mixed-multiple-return-values.cpp.execution | 2 - .../mixed-multiple-return-values.cpp.output | 0 .../clang-12/mixed-out-destruction.cpp.execution | 21 - .../clang-12/mixed-out-destruction.cpp.output | 0 ...xed-parameter-passing-generic-out.cpp.execution | 2 - .../mixed-parameter-passing-generic-out.cpp.output | 0 ...ed-parameter-passing-with-forward.cpp.execution | 0 ...mixed-parameter-passing-with-forward.cpp.output | 0 .../clang-12/mixed-parameter-passing.cpp.execution | 0 .../clang-12/mixed-parameter-passing.cpp.output | 0 ...mixed-postexpression-with-capture.cpp.execution | 2 - .../mixed-postexpression-with-capture.cpp.output | 0 ...tfix-expression-custom-formatting.cpp.execution | 0 ...postfix-expression-custom-formatting.cpp.output | 0 .../mixed-string-interpolation.cpp.execution | 17 - .../clang-12/mixed-string-interpolation.cpp.output | 0 .../clang-12/mixed-test-parens.cpp.execution | 1 - .../clang-12/mixed-test-parens.cpp.output | 0 .../clang-12/mixed-type-safety-1.cpp.execution | 6 - .../clang-12/mixed-type-safety-1.cpp.output | 0 ...-ufcs-multiple-template-arguments.cpp.execution | 2 - ...xed-ufcs-multiple-template-arguments.cpp.output | 0 .../pure2-bounds-safety-span.cpp.execution | 3 - .../clang-12/pure2-bounds-safety-span.cpp.output | 0 .../clang-12/pure2-break-continue.cpp.execution | 26 - .../clang-12/pure2-break-continue.cpp.output | 0 ...bugfix-for-assign-expression-list.cpp.execution | 0 ...e2-bugfix-for-assign-expression-list.cpp.output | 0 ...re2-bugfix-for-discard-precedence.cpp.execution | 0 .../pure2-bugfix-for-discard-precedence.cpp.output | 0 .../pure2-bugfix-for-max-munch.cpp.execution | 0 .../clang-12/pure2-bugfix-for-max-munch.cpp.output | 0 ...ix-for-memberwise-base-assignment.cpp.execution | 2 - ...ugfix-for-memberwise-base-assignment.cpp.output | 0 ...-name-lookup-and-value-decoration.cpp.execution | 0 ...for-name-lookup-and-value-decoration.cpp.output | 0 ...ix-for-non-local-function-expression.cpp.output | 10 - ...gfix-for-non-local-initialization.cpp.execution | 0 ...-bugfix-for-non-local-initialization.cpp.output | 0 ...r-optional-template-argument-list.cpp.execution | 0 ...-for-optional-template-argument-list.cpp.output | 0 ...res-clause-in-forward-declaration.cpp.execution | 0 ...quires-clause-in-forward-declaration.cpp.output | 0 ...use-unbraced-function-initializer.cpp.execution | 0 ...clause-unbraced-function-initializer.cpp.output | 0 ...ure2-bugfix-for-template-argument.cpp.execution | 1 - .../pure2-bugfix-for-template-argument.cpp.output | 0 .../pure2-bugfix-for-ufcs-arguments.cpp.execution | 4 - .../pure2-bugfix-for-ufcs-arguments.cpp.output | 0 ...pure2-bugfix-for-ufcs-name-lookup.cpp.execution | 0 .../pure2-bugfix-for-ufcs-name-lookup.cpp.output | 0 .../pure2-bugfix-for-ufcs-noexcept.cpp.output | 10 - .../pure2-bugfix-for-ufcs-sfinae.cpp.output | 19 - ...-for-unbraced-function-expression.cpp.execution | 0 ...fix-for-unbraced-function-expression.cpp.output | 0 ...ure2-bugfix-for-variable-template.cpp.execution | 0 .../pure2-bugfix-for-variable-template.cpp.output | 0 .../pure2-chained-comparisons.cpp.execution | 27 - .../clang-12/pure2-chained-comparisons.cpp.output | 0 .../pure2-concept-definition.cpp.execution | 0 .../clang-12/pure2-concept-definition.cpp.output | 0 .../clang-12/pure2-contracts.cpp.execution | 3 - .../clang-12/pure2-contracts.cpp.output | 0 ...ulted-comparisons-and-final-types.cpp.execution | 1 - ...efaulted-comparisons-and-final-types.cpp.output | 0 .../test-results/clang-12/pure2-enum.cpp.execution | 29 - .../test-results/clang-12/pure2-enum.cpp.output | 0 .../pure2-for-loop-range-with-lambda.cpp.execution | 1 - .../pure2-for-loop-range-with-lambda.cpp.output | 0 .../clang-12/pure2-forward-return.cpp.execution | 2 - .../clang-12/pure2-forward-return.cpp.output | 0 ...nction-multiple-forward-arguments.cpp.execution | 1 - ...-function-multiple-forward-arguments.cpp.output | 0 .../clang-12/pure2-hello.cpp.execution | 1 - .../test-results/clang-12/pure2-hello.cpp.output | 0 ...nitialization-safety-with-else-if.cpp.execution | 1 - ...2-initialization-safety-with-else-if.cpp.output | 0 ...n-generic-function-multiple-types.cpp.execution | 8 - ...n-in-generic-function-multiple-types.cpp.output | 0 ...ssion-with-as-in-generic-function.cpp.execution | 3 - ...pression-with-as-in-generic-function.cpp.output | 0 ...allback-with-variant-any-optional.cpp.execution | 11 - ...t-fallback-with-variant-any-optional.cpp.output | 0 ...d-empty-with-variant-any-optional.cpp.execution | 17 - ...void-empty-with-variant-any-optional.cpp.output | 0 .../clang-12/pure2-interpolation.cpp.execution | 12 - .../clang-12/pure2-interpolation.cpp.output | 0 .../pure2-intro-example-hello-2022.cpp.execution | 2 - .../pure2-intro-example-hello-2022.cpp.output | 0 .../pure2-intro-example-three-loops.cpp.execution | 8 - .../pure2-intro-example-three-loops.cpp.output | 0 ...parameter-across-unnamed-function.cpp.execution | 1 - ...up-parameter-across-unnamed-function.cpp.output | 0 .../clang-12/pure2-main-args.cpp.execution | 2 - .../clang-12/pure2-main-args.cpp.output | 0 .../clang-12/pure2-more-wildcards.cpp.execution | 2 - .../clang-12/pure2-more-wildcards.cpp.output | 0 .../clang-12/pure2-print.cpp.execution | 2 - .../test-results/clang-12/pure2-print.cpp.output | 0 ...-string-literal-and-interpolation.cpp.execution | 17 - ...raw-string-literal-and-interpolation.cpp.output | 0 .../clang-12/pure2-repeated-call.cpp.execution | 1 - .../clang-12/pure2-repeated-call.cpp.output | 0 .../clang-12/pure2-requires-clauses.cpp.execution | 1 - .../clang-12/pure2-requires-clauses.cpp.output | 0 .../pure2-statement-scope-parameters.cpp.execution | 2 - .../pure2-statement-scope-parameters.cpp.output | 0 .../clang-12/pure2-stdio-with-raii.cpp.execution | 0 .../clang-12/pure2-stdio-with-raii.cpp.output | 0 .../clang-12/pure2-stdio.cpp.execution | 0 .../test-results/clang-12/pure2-stdio.cpp.output | 0 ...esize-rightshift-and-rightshifteq.cpp.execution | 1 - ...nthesize-rightshift-and-rightshifteq.cpp.output | 0 .../pure2-template-parameter-lists.cpp.execution | 4 - .../pure2-template-parameter-lists.cpp.output | 0 .../pure2-type-and-namespace-aliases.cpp.execution | 2 - .../pure2-type-and-namespace-aliases.cpp.output | 0 .../clang-12/pure2-type-safety-1.cpp.execution | 9 - .../clang-12/pure2-type-safety-1.cpp.output | 0 ...-safety-2-with-inspect-expression.cpp.execution | 8 - ...ype-safety-2-with-inspect-expression.cpp.output | 0 .../clang-12/pure2-types-basics.cpp.execution | 27 - .../clang-12/pure2-types-basics.cpp.output | 0 .../clang-12/pure2-types-down-upcast.cpp.execution | 24 - .../clang-12/pure2-types-down-upcast.cpp.output | 0 .../clang-12/pure2-types-inheritance.cpp.execution | 5 - .../clang-12/pure2-types-inheritance.cpp.output | 0 ...es-order-independence-and-nesting.cpp.execution | 5 - ...types-order-independence-and-nesting.cpp.output | 0 ...types-ordering-via-meta-functions.cpp.execution | 1 - ...e2-types-ordering-via-meta-functions.cpp.output | 0 ...smf-and-that-1-provide-everything.cpp.execution | 8 - ...es-smf-and-that-1-provide-everything.cpp.output | 0 ...-provide-mvconstruct-and-cpassign.cpp.execution | 8 - ...t-2-provide-mvconstruct-and-cpassign.cpp.output | 0 ...-provide-mvconstruct-and-mvassign.cpp.execution | 8 - ...t-3-provide-mvconstruct-and-mvassign.cpp.output | 0 ...t-4-provide-cpassign-and-mvassign.cpp.execution | 8 - ...that-4-provide-cpassign-and-mvassign.cpp.output | 0 ...-provide-nothing-but-general-case.cpp.execution | 8 - ...t-5-provide-nothing-but-general-case.cpp.output | 0 .../pure2-types-that-parameters.cpp.execution | 7 - .../pure2-types-that-parameters.cpp.output | 0 ...es-value-types-via-meta-functions.cpp.execution | 1 - ...types-value-types-via-meta-functions.cpp.output | 0 ...2-ufcs-member-access-and-chaining.cpp.execution | 0 ...ure2-ufcs-member-access-and-chaining.cpp.output | 0 .../clang-12/pure2-union.cpp.execution | 4 - .../test-results/clang-12/pure2-union.cpp.output | 0 .../clang-12/pure2-variadics.cpp.execution | 6 - .../clang-12/pure2-variadics.cpp.output | 0 .../pure2-various-string-literals.cpp.execution | 0 .../pure2-various-string-literals.cpp.output | 0 .../test-results/clang-12/run-tests-clang-12.sh | 24 - .../regression-tests/test-results/clang-12/xyzzy | 1 - .../mixed-bugfix-for-ufcs-non-local.cpp.execution | 0 .../mixed-bugfix-for-ufcs-non-local.cpp.output | 0 .../pure2-bugfix-for-ufcs-arguments.cpp.execution | 4 - .../pure2-bugfix-for-ufcs-arguments.cpp.output | 0 ...pure2-bugfix-for-ufcs-name-lookup.cpp.execution | 0 .../pure2-bugfix-for-ufcs-name-lookup.cpp.output | 0 .../pure2-bugfix-for-ufcs-noexcept.cpp.execution | 0 .../pure2-bugfix-for-ufcs-noexcept.cpp.output | 0 .../pure2-bugfix-for-ufcs-sfinae.cpp.execution | 0 .../pure2-bugfix-for-ufcs-sfinae.cpp.output | 0 .../test-results/gcc-10/gcc-version.output | 5 - .../gcc-10/mixed-allcpp1-hello.cpp.execution | 1 - .../gcc-10/mixed-allcpp1-hello.cpp.output | 0 .../mixed-as-for-variant-20-types.cpp.execution | 60 - .../mixed-as-for-variant-20-types.cpp.output | 0 .../gcc-10/mixed-bounds-check.cpp.execution | 1 - .../gcc-10/mixed-bounds-check.cpp.output | 0 ...mixed-bounds-safety-with-assert-2.cpp.execution | 5 - .../mixed-bounds-safety-with-assert-2.cpp.output | 0 .../mixed-bounds-safety-with-assert.cpp.execution | 1 - .../mixed-bounds-safety-with-assert.cpp.output | 0 ...ix-for-cpp2-comment-cpp1-sequence.cpp.execution | 0 ...ugfix-for-cpp2-comment-cpp1-sequence.cpp.output | 0 .../mixed-bugfix-for-literal-as-nttp.cpp.execution | 0 .../mixed-bugfix-for-literal-as-nttp.cpp.output | 0 .../mixed-bugfix-for-ufcs-non-local.cpp.execution | 0 .../mixed-bugfix-for-ufcs-non-local.cpp.output | 0 ...in-expressions-and-postconditions.cpp.execution | 4 - ...es-in-expressions-and-postconditions.cpp.output | 0 .../gcc-10/mixed-fixed-type-aliases.cpp.execution | 4 - .../gcc-10/mixed-fixed-type-aliases.cpp.output | 0 .../gcc-10/mixed-float-literals.cpp.execution | 72 - .../gcc-10/mixed-float-literals.cpp.output | 0 .../gcc-10/mixed-forwarding.cpp.execution | 12 - .../gcc-10/mixed-forwarding.cpp.output | 0 ...ction-expression-and-std-for-each.cpp.execution | 2 - ...function-expression-and-std-for-each.cpp.output | 0 ...-std-ranges-for-each-with-capture.cpp.execution | 4 - ...and-std-ranges-for-each-with-capture.cpp.output | 0 ...xpression-and-std-ranges-for-each.cpp.execution | 4 - ...n-expression-and-std-ranges-for-each.cpp.output | 0 ...n-expression-with-pointer-capture.cpp.execution | 6 - ...tion-expression-with-pointer-capture.cpp.output | 0 ...-expression-with-repeated-capture.cpp.execution | 6 - ...ion-expression-with-repeated-capture.cpp.output | 0 .../test-results/gcc-10/mixed-hello.cpp.execution | 1 - .../test-results/gcc-10/mixed-hello.cpp.output | 0 .../gcc-10/mixed-increment-decrement.cpp.output | 16 - ...ation-safety-3-contract-violation.cpp.execution | 1 - ...lization-safety-3-contract-violation.cpp.output | 0 .../mixed-initialization-safety-3.cpp.execution | 1 - .../mixed-initialization-safety-3.cpp.output | 0 .../gcc-10/mixed-inspect-templates.cpp.execution | 8 - .../gcc-10/mixed-inspect-templates.cpp.output | 0 .../gcc-10/mixed-inspect-values-2.cpp.execution | 5 - .../gcc-10/mixed-inspect-values-2.cpp.output | 0 .../gcc-10/mixed-inspect-values.cpp.execution | 12 - .../gcc-10/mixed-inspect-values.cpp.output | 0 ...-with-typeof-of-template-arg-list.cpp.execution | 0 ...ect-with-typeof-of-template-arg-list.cpp.output | 0 .../mixed-intro-example-three-loops.cpp.execution | 7 - .../mixed-intro-example-three-loops.cpp.output | 0 ...tro-for-with-counter-include-last.cpp.execution | 5 - ...-intro-for-with-counter-include-last.cpp.output | 0 ...ifetime-safety-and-null-contracts.cpp.execution | 1 - ...d-lifetime-safety-and-null-contracts.cpp.output | 0 ...ed-lifetime-safety-pointer-init-4.cpp.execution | 1 - ...mixed-lifetime-safety-pointer-init-4.cpp.output | 0 .../mixed-multiple-return-values.cpp.execution | 2 - .../gcc-10/mixed-multiple-return-values.cpp.output | 0 .../gcc-10/mixed-out-destruction.cpp.execution | 21 - .../gcc-10/mixed-out-destruction.cpp.output | 0 ...xed-parameter-passing-generic-out.cpp.execution | 2 - .../mixed-parameter-passing-generic-out.cpp.output | 0 ...ed-parameter-passing-with-forward.cpp.execution | 0 ...mixed-parameter-passing-with-forward.cpp.output | 0 .../gcc-10/mixed-parameter-passing.cpp.execution | 0 .../gcc-10/mixed-parameter-passing.cpp.output | 0 ...mixed-postexpression-with-capture.cpp.execution | 2 - .../mixed-postexpression-with-capture.cpp.output | 0 ...tfix-expression-custom-formatting.cpp.execution | 0 ...postfix-expression-custom-formatting.cpp.output | 0 .../mixed-string-interpolation.cpp.execution | 17 - .../gcc-10/mixed-string-interpolation.cpp.output | 0 .../gcc-10/mixed-test-parens.cpp.execution | 1 - .../gcc-10/mixed-test-parens.cpp.output | 0 .../gcc-10/mixed-type-safety-1.cpp.execution | 6 - .../gcc-10/mixed-type-safety-1.cpp.output | 0 ...-ufcs-multiple-template-arguments.cpp.execution | 2 - ...xed-ufcs-multiple-template-arguments.cpp.output | 0 .../gcc-10/pure2-bounds-safety-span.cpp.execution | 3 - .../gcc-10/pure2-bounds-safety-span.cpp.output | 0 .../gcc-10/pure2-break-continue.cpp.execution | 26 - .../gcc-10/pure2-break-continue.cpp.output | 0 ...bugfix-for-assign-expression-list.cpp.execution | 0 ...e2-bugfix-for-assign-expression-list.cpp.output | 0 ...re2-bugfix-for-discard-precedence.cpp.execution | 0 .../pure2-bugfix-for-discard-precedence.cpp.output | 0 .../pure2-bugfix-for-max-munch.cpp.execution | 0 .../gcc-10/pure2-bugfix-for-max-munch.cpp.output | 0 ...ix-for-memberwise-base-assignment.cpp.execution | 2 - ...ugfix-for-memberwise-base-assignment.cpp.output | 0 ...-name-lookup-and-value-decoration.cpp.execution | 0 ...for-name-lookup-and-value-decoration.cpp.output | 0 ...for-non-local-function-expression.cpp.execution | 0 ...ix-for-non-local-function-expression.cpp.output | 1 - ...gfix-for-non-local-initialization.cpp.execution | 0 ...-bugfix-for-non-local-initialization.cpp.output | 0 ...r-optional-template-argument-list.cpp.execution | 0 ...-for-optional-template-argument-list.cpp.output | 0 ...quires-clause-in-forward-declaration.cpp.output | 17 - ...use-unbraced-function-initializer.cpp.execution | 0 ...clause-unbraced-function-initializer.cpp.output | 0 ...ure2-bugfix-for-template-argument.cpp.execution | 1 - .../pure2-bugfix-for-template-argument.cpp.output | 0 .../pure2-bugfix-for-ufcs-arguments.cpp.execution | 4 - .../pure2-bugfix-for-ufcs-arguments.cpp.output | 0 ...pure2-bugfix-for-ufcs-name-lookup.cpp.execution | 0 .../pure2-bugfix-for-ufcs-name-lookup.cpp.output | 0 .../pure2-bugfix-for-ufcs-noexcept.cpp.output | 2 - .../pure2-bugfix-for-ufcs-sfinae.cpp.execution | 0 .../gcc-10/pure2-bugfix-for-ufcs-sfinae.cpp.output | 0 ...-for-unbraced-function-expression.cpp.execution | 0 ...fix-for-unbraced-function-expression.cpp.output | 0 ...ure2-bugfix-for-variable-template.cpp.execution | 0 .../pure2-bugfix-for-variable-template.cpp.output | 0 .../gcc-10/pure2-chained-comparisons.cpp.execution | 27 - .../gcc-10/pure2-chained-comparisons.cpp.output | 0 .../gcc-10/pure2-concept-definition.cpp.execution | 0 .../gcc-10/pure2-concept-definition.cpp.output | 0 .../gcc-10/pure2-contracts.cpp.execution | 3 - .../test-results/gcc-10/pure2-contracts.cpp.output | 0 ...ulted-comparisons-and-final-types.cpp.execution | 1 - ...efaulted-comparisons-and-final-types.cpp.output | 0 .../test-results/gcc-10/pure2-enum.cpp.execution | 29 - .../test-results/gcc-10/pure2-enum.cpp.output | 0 .../pure2-for-loop-range-with-lambda.cpp.execution | 1 - .../pure2-for-loop-range-with-lambda.cpp.output | 0 .../gcc-10/pure2-forward-return.cpp.execution | 2 - .../gcc-10/pure2-forward-return.cpp.output | 0 ...nction-multiple-forward-arguments.cpp.execution | 1 - ...-function-multiple-forward-arguments.cpp.output | 0 .../test-results/gcc-10/pure2-hello.cpp.execution | 1 - .../test-results/gcc-10/pure2-hello.cpp.output | 0 ...nitialization-safety-with-else-if.cpp.execution | 1 - ...2-initialization-safety-with-else-if.cpp.output | 0 ...n-generic-function-multiple-types.cpp.execution | 8 - ...n-in-generic-function-multiple-types.cpp.output | 0 ...ssion-with-as-in-generic-function.cpp.execution | 3 - ...pression-with-as-in-generic-function.cpp.output | 0 ...allback-with-variant-any-optional.cpp.execution | 11 - ...t-fallback-with-variant-any-optional.cpp.output | 0 ...d-empty-with-variant-any-optional.cpp.execution | 17 - ...void-empty-with-variant-any-optional.cpp.output | 0 .../gcc-10/pure2-interpolation.cpp.execution | 12 - .../gcc-10/pure2-interpolation.cpp.output | 0 .../pure2-intro-example-hello-2022.cpp.execution | 2 - .../pure2-intro-example-hello-2022.cpp.output | 0 .../pure2-intro-example-three-loops.cpp.execution | 8 - .../pure2-intro-example-three-loops.cpp.output | 0 ...parameter-across-unnamed-function.cpp.execution | 1 - ...up-parameter-across-unnamed-function.cpp.output | 0 .../gcc-10/pure2-main-args.cpp.execution | 2 - .../test-results/gcc-10/pure2-main-args.cpp.output | 0 .../gcc-10/pure2-more-wildcards.cpp.execution | 2 - .../gcc-10/pure2-more-wildcards.cpp.output | 0 .../test-results/gcc-10/pure2-print.cpp.output | 17 - ...-string-literal-and-interpolation.cpp.execution | 17 - ...raw-string-literal-and-interpolation.cpp.output | 0 .../gcc-10/pure2-repeated-call.cpp.execution | 1 - .../gcc-10/pure2-repeated-call.cpp.output | 0 .../gcc-10/pure2-requires-clauses.cpp.execution | 1 - .../gcc-10/pure2-requires-clauses.cpp.output | 3 - .../pure2-statement-scope-parameters.cpp.execution | 2 - .../pure2-statement-scope-parameters.cpp.output | 0 .../gcc-10/pure2-stdio-with-raii.cpp.execution | 0 .../gcc-10/pure2-stdio-with-raii.cpp.output | 0 .../test-results/gcc-10/pure2-stdio.cpp.execution | 0 .../test-results/gcc-10/pure2-stdio.cpp.output | 0 ...esize-rightshift-and-rightshifteq.cpp.execution | 1 - ...nthesize-rightshift-and-rightshifteq.cpp.output | 0 .../pure2-template-parameter-lists.cpp.execution | 4 - .../pure2-template-parameter-lists.cpp.output | 0 .../pure2-type-and-namespace-aliases.cpp.execution | 2 - .../pure2-type-and-namespace-aliases.cpp.output | 0 .../gcc-10/pure2-type-safety-1.cpp.execution | 9 - .../gcc-10/pure2-type-safety-1.cpp.output | 0 ...-safety-2-with-inspect-expression.cpp.execution | 8 - ...ype-safety-2-with-inspect-expression.cpp.output | 0 .../gcc-10/pure2-types-basics.cpp.execution | 27 - .../gcc-10/pure2-types-basics.cpp.output | 0 .../gcc-10/pure2-types-down-upcast.cpp.execution | 24 - .../gcc-10/pure2-types-down-upcast.cpp.output | 0 .../gcc-10/pure2-types-inheritance.cpp.execution | 5 - .../gcc-10/pure2-types-inheritance.cpp.output | 0 ...es-order-independence-and-nesting.cpp.execution | 5 - ...types-order-independence-and-nesting.cpp.output | 0 ...types-ordering-via-meta-functions.cpp.execution | 1 - ...e2-types-ordering-via-meta-functions.cpp.output | 0 ...smf-and-that-1-provide-everything.cpp.execution | 8 - ...es-smf-and-that-1-provide-everything.cpp.output | 0 ...-provide-mvconstruct-and-cpassign.cpp.execution | 8 - ...t-2-provide-mvconstruct-and-cpassign.cpp.output | 0 ...-provide-mvconstruct-and-mvassign.cpp.execution | 8 - ...t-3-provide-mvconstruct-and-mvassign.cpp.output | 0 ...t-4-provide-cpassign-and-mvassign.cpp.execution | 8 - ...that-4-provide-cpassign-and-mvassign.cpp.output | 0 ...-provide-nothing-but-general-case.cpp.execution | 8 - ...t-5-provide-nothing-but-general-case.cpp.output | 0 .../pure2-types-that-parameters.cpp.execution | 7 - .../gcc-10/pure2-types-that-parameters.cpp.output | 0 ...es-value-types-via-meta-functions.cpp.execution | 1 - ...types-value-types-via-meta-functions.cpp.output | 0 ...2-ufcs-member-access-and-chaining.cpp.execution | 0 ...ure2-ufcs-member-access-and-chaining.cpp.output | 0 .../test-results/gcc-10/pure2-union.cpp.execution | 4 - .../test-results/gcc-10/pure2-union.cpp.output | 0 .../gcc-10/pure2-variadics.cpp.execution | 6 - .../test-results/gcc-10/pure2-variadics.cpp.output | 0 .../pure2-various-string-literals.cpp.execution | 0 .../pure2-various-string-literals.cpp.output | 0 .../test-results/gcc-10/run-tests-gcc-10.sh | 24 - .../cc2/regression-tests/test-results/gcc-10/xyzzy | 1 - .../test-results/gcc-13/gcc-version.output | 5 - .../gcc-13/mixed-allcpp1-hello.cpp.execution | 1 - .../gcc-13/mixed-allcpp1-hello.cpp.output | 0 .../mixed-as-for-variant-20-types.cpp.execution | 60 - .../mixed-as-for-variant-20-types.cpp.output | 0 .../gcc-13/mixed-bounds-check.cpp.execution | 1 - .../gcc-13/mixed-bounds-check.cpp.output | 0 ...mixed-bounds-safety-with-assert-2.cpp.execution | 5 - .../mixed-bounds-safety-with-assert-2.cpp.output | 0 .../mixed-bounds-safety-with-assert.cpp.execution | 1 - .../mixed-bounds-safety-with-assert.cpp.output | 0 ...ix-for-cpp2-comment-cpp1-sequence.cpp.execution | 0 ...ugfix-for-cpp2-comment-cpp1-sequence.cpp.output | 0 .../mixed-bugfix-for-literal-as-nttp.cpp.execution | 0 .../mixed-bugfix-for-literal-as-nttp.cpp.output | 0 .../mixed-bugfix-for-ufcs-non-local.cpp.output | 41 - ...in-expressions-and-postconditions.cpp.execution | 4 - ...es-in-expressions-and-postconditions.cpp.output | 0 .../gcc-13/mixed-fixed-type-aliases.cpp.execution | 4 - .../gcc-13/mixed-fixed-type-aliases.cpp.output | 0 .../gcc-13/mixed-float-literals.cpp.execution | 72 - .../gcc-13/mixed-float-literals.cpp.output | 0 .../gcc-13/mixed-forwarding.cpp.execution | 12 - .../gcc-13/mixed-forwarding.cpp.output | 0 ...ction-expression-and-std-for-each.cpp.execution | 2 - ...function-expression-and-std-for-each.cpp.output | 0 ...-std-ranges-for-each-with-capture.cpp.execution | 4 - ...and-std-ranges-for-each-with-capture.cpp.output | 0 ...xpression-and-std-ranges-for-each.cpp.execution | 4 - ...n-expression-and-std-ranges-for-each.cpp.output | 0 ...n-expression-with-pointer-capture.cpp.execution | 6 - ...tion-expression-with-pointer-capture.cpp.output | 0 ...-expression-with-repeated-capture.cpp.execution | 6 - ...ion-expression-with-repeated-capture.cpp.output | 0 .../test-results/gcc-13/mixed-hello.cpp.execution | 1 - .../test-results/gcc-13/mixed-hello.cpp.output | 0 .../gcc-13/mixed-increment-decrement.cpp.execution | 2 - .../gcc-13/mixed-increment-decrement.cpp.output | 0 ...ation-safety-3-contract-violation.cpp.execution | 1 - ...lization-safety-3-contract-violation.cpp.output | 0 .../mixed-initialization-safety-3.cpp.execution | 1 - .../mixed-initialization-safety-3.cpp.output | 0 .../gcc-13/mixed-inspect-templates.cpp.execution | 8 - .../gcc-13/mixed-inspect-templates.cpp.output | 0 .../gcc-13/mixed-inspect-values-2.cpp.execution | 5 - .../gcc-13/mixed-inspect-values-2.cpp.output | 0 .../gcc-13/mixed-inspect-values.cpp.execution | 12 - .../gcc-13/mixed-inspect-values.cpp.output | 0 ...-with-typeof-of-template-arg-list.cpp.execution | 0 ...ect-with-typeof-of-template-arg-list.cpp.output | 0 .../mixed-intro-example-three-loops.cpp.execution | 7 - .../mixed-intro-example-three-loops.cpp.output | 0 ...tro-for-with-counter-include-last.cpp.execution | 5 - ...-intro-for-with-counter-include-last.cpp.output | 0 ...ifetime-safety-and-null-contracts.cpp.execution | 1 - ...d-lifetime-safety-and-null-contracts.cpp.output | 0 ...ed-lifetime-safety-pointer-init-4.cpp.execution | 1 - ...mixed-lifetime-safety-pointer-init-4.cpp.output | 0 .../mixed-multiple-return-values.cpp.execution | 2 - .../gcc-13/mixed-multiple-return-values.cpp.output | 0 .../gcc-13/mixed-out-destruction.cpp.execution | 21 - .../gcc-13/mixed-out-destruction.cpp.output | 0 ...xed-parameter-passing-generic-out.cpp.execution | 2 - .../mixed-parameter-passing-generic-out.cpp.output | 0 ...ed-parameter-passing-with-forward.cpp.execution | 0 ...mixed-parameter-passing-with-forward.cpp.output | 0 .../gcc-13/mixed-parameter-passing.cpp.execution | 0 .../gcc-13/mixed-parameter-passing.cpp.output | 0 ...mixed-postexpression-with-capture.cpp.execution | 2 - .../mixed-postexpression-with-capture.cpp.output | 0 ...tfix-expression-custom-formatting.cpp.execution | 0 ...postfix-expression-custom-formatting.cpp.output | 0 .../mixed-string-interpolation.cpp.execution | 17 - .../gcc-13/mixed-string-interpolation.cpp.output | 0 .../gcc-13/mixed-test-parens.cpp.execution | 1 - .../gcc-13/mixed-test-parens.cpp.output | 0 .../gcc-13/mixed-type-safety-1.cpp.execution | 6 - .../gcc-13/mixed-type-safety-1.cpp.output | 0 ...-ufcs-multiple-template-arguments.cpp.execution | 2 - ...xed-ufcs-multiple-template-arguments.cpp.output | 0 .../gcc-13/pure2-bounds-safety-span.cpp.execution | 3 - .../gcc-13/pure2-bounds-safety-span.cpp.output | 0 .../gcc-13/pure2-break-continue.cpp.execution | 26 - .../gcc-13/pure2-break-continue.cpp.output | 0 ...bugfix-for-assign-expression-list.cpp.execution | 0 ...e2-bugfix-for-assign-expression-list.cpp.output | 0 ...re2-bugfix-for-discard-precedence.cpp.execution | 0 .../pure2-bugfix-for-discard-precedence.cpp.output | 0 .../pure2-bugfix-for-empty-index.cpp.execution | 0 .../pure2-bugfix-for-max-munch.cpp.execution | 0 .../gcc-13/pure2-bugfix-for-max-munch.cpp.output | 0 ...ix-for-memberwise-base-assignment.cpp.execution | 2 - ...ugfix-for-memberwise-base-assignment.cpp.output | 0 ...-name-lookup-and-value-decoration.cpp.execution | 0 ...for-name-lookup-and-value-decoration.cpp.output | 0 ...for-non-local-function-expression.cpp.execution | 0 ...ix-for-non-local-function-expression.cpp.output | 1 - ...gfix-for-non-local-initialization.cpp.execution | 0 ...-bugfix-for-non-local-initialization.cpp.output | 0 ...r-optional-template-argument-list.cpp.execution | 0 ...-for-optional-template-argument-list.cpp.output | 0 ...res-clause-in-forward-declaration.cpp.execution | 0 ...quires-clause-in-forward-declaration.cpp.output | 0 ...use-unbraced-function-initializer.cpp.execution | 0 ...clause-unbraced-function-initializer.cpp.output | 0 ...ure2-bugfix-for-template-argument.cpp.execution | 1 - .../pure2-bugfix-for-template-argument.cpp.output | 0 .../pure2-bugfix-for-ufcs-arguments.cpp.execution | 4 - .../pure2-bugfix-for-ufcs-arguments.cpp.output | 0 ...pure2-bugfix-for-ufcs-name-lookup.cpp.execution | 0 .../pure2-bugfix-for-ufcs-name-lookup.cpp.output | 0 .../pure2-bugfix-for-ufcs-noexcept.cpp.execution | 0 .../pure2-bugfix-for-ufcs-noexcept.cpp.output | 0 .../pure2-bugfix-for-ufcs-sfinae.cpp.execution | 0 .../gcc-13/pure2-bugfix-for-ufcs-sfinae.cpp.output | 0 ...-for-unbraced-function-expression.cpp.execution | 0 ...fix-for-unbraced-function-expression.cpp.output | 0 ...ure2-bugfix-for-variable-template.cpp.execution | 0 .../pure2-bugfix-for-variable-template.cpp.output | 0 .../gcc-13/pure2-chained-comparisons.cpp.execution | 27 - .../gcc-13/pure2-chained-comparisons.cpp.output | 0 .../gcc-13/pure2-concept-definition.cpp.execution | 0 .../gcc-13/pure2-concept-definition.cpp.output | 0 .../gcc-13/pure2-contracts.cpp.execution | 3 - .../test-results/gcc-13/pure2-contracts.cpp.output | 0 ...ulted-comparisons-and-final-types.cpp.execution | 1 - ...efaulted-comparisons-and-final-types.cpp.output | 0 .../test-results/gcc-13/pure2-enum.cpp.execution | 29 - .../test-results/gcc-13/pure2-enum.cpp.output | 0 .../pure2-for-loop-range-with-lambda.cpp.execution | 1 - .../pure2-for-loop-range-with-lambda.cpp.output | 0 .../gcc-13/pure2-forward-return.cpp.execution | 2 - .../gcc-13/pure2-forward-return.cpp.output | 0 ...nction-multiple-forward-arguments.cpp.execution | 1 - ...-function-multiple-forward-arguments.cpp.output | 0 .../test-results/gcc-13/pure2-hello.cpp.execution | 1 - .../test-results/gcc-13/pure2-hello.cpp.output | 0 ...nitialization-safety-with-else-if.cpp.execution | 1 - ...2-initialization-safety-with-else-if.cpp.output | 0 ...n-generic-function-multiple-types.cpp.execution | 8 - ...n-in-generic-function-multiple-types.cpp.output | 0 ...ssion-with-as-in-generic-function.cpp.execution | 3 - ...pression-with-as-in-generic-function.cpp.output | 0 ...allback-with-variant-any-optional.cpp.execution | 11 - ...t-fallback-with-variant-any-optional.cpp.output | 0 ...d-empty-with-variant-any-optional.cpp.execution | 17 - ...void-empty-with-variant-any-optional.cpp.output | 0 .../gcc-13/pure2-interpolation.cpp.execution | 12 - .../gcc-13/pure2-interpolation.cpp.output | 0 .../pure2-intro-example-hello-2022.cpp.execution | 2 - .../pure2-intro-example-hello-2022.cpp.output | 0 .../pure2-intro-example-three-loops.cpp.execution | 8 - .../pure2-intro-example-three-loops.cpp.output | 0 ...parameter-across-unnamed-function.cpp.execution | 1 - ...up-parameter-across-unnamed-function.cpp.output | 0 .../gcc-13/pure2-main-args.cpp.execution | 2 - .../test-results/gcc-13/pure2-main-args.cpp.output | 0 .../gcc-13/pure2-more-wildcards.cpp.execution | 2 - .../gcc-13/pure2-more-wildcards.cpp.output | 0 .../test-results/gcc-13/pure2-print.cpp.execution | 2 - .../test-results/gcc-13/pure2-print.cpp.output | 0 ...-string-literal-and-interpolation.cpp.execution | 17 - ...raw-string-literal-and-interpolation.cpp.output | 0 .../gcc-13/pure2-repeated-call.cpp.execution | 1 - .../gcc-13/pure2-repeated-call.cpp.output | 0 .../gcc-13/pure2-requires-clauses.cpp.execution | 1 - .../gcc-13/pure2-requires-clauses.cpp.output | 0 .../pure2-statement-scope-parameters.cpp.execution | 2 - .../pure2-statement-scope-parameters.cpp.output | 0 .../gcc-13/pure2-stdio-with-raii.cpp.execution | 0 .../gcc-13/pure2-stdio-with-raii.cpp.output | 0 .../test-results/gcc-13/pure2-stdio.cpp.execution | 0 .../test-results/gcc-13/pure2-stdio.cpp.output | 0 ...esize-rightshift-and-rightshifteq.cpp.execution | 1 - ...nthesize-rightshift-and-rightshifteq.cpp.output | 0 .../pure2-template-parameter-lists.cpp.execution | 4 - .../pure2-template-parameter-lists.cpp.output | 0 .../pure2-type-and-namespace-aliases.cpp.execution | 2 - .../pure2-type-and-namespace-aliases.cpp.output | 0 .../gcc-13/pure2-type-safety-1.cpp.execution | 9 - .../gcc-13/pure2-type-safety-1.cpp.output | 0 ...-safety-2-with-inspect-expression.cpp.execution | 8 - ...ype-safety-2-with-inspect-expression.cpp.output | 0 .../gcc-13/pure2-types-basics.cpp.execution | 27 - .../gcc-13/pure2-types-basics.cpp.output | 0 .../gcc-13/pure2-types-down-upcast.cpp.execution | 24 - .../gcc-13/pure2-types-down-upcast.cpp.output | 0 .../gcc-13/pure2-types-inheritance.cpp.execution | 5 - .../gcc-13/pure2-types-inheritance.cpp.output | 0 ...es-order-independence-and-nesting.cpp.execution | 5 - ...types-order-independence-and-nesting.cpp.output | 0 ...types-ordering-via-meta-functions.cpp.execution | 1 - ...e2-types-ordering-via-meta-functions.cpp.output | 0 ...smf-and-that-1-provide-everything.cpp.execution | 8 - ...es-smf-and-that-1-provide-everything.cpp.output | 0 ...-provide-mvconstruct-and-cpassign.cpp.execution | 8 - ...t-2-provide-mvconstruct-and-cpassign.cpp.output | 0 ...-provide-mvconstruct-and-mvassign.cpp.execution | 8 - ...t-3-provide-mvconstruct-and-mvassign.cpp.output | 0 ...t-4-provide-cpassign-and-mvassign.cpp.execution | 8 - ...that-4-provide-cpassign-and-mvassign.cpp.output | 0 ...-provide-nothing-but-general-case.cpp.execution | 8 - ...t-5-provide-nothing-but-general-case.cpp.output | 0 .../pure2-types-that-parameters.cpp.execution | 7 - .../gcc-13/pure2-types-that-parameters.cpp.output | 0 ...es-value-types-via-meta-functions.cpp.execution | 1 - ...types-value-types-via-meta-functions.cpp.output | 0 ...2-ufcs-member-access-and-chaining.cpp.execution | 0 ...ure2-ufcs-member-access-and-chaining.cpp.output | 0 .../test-results/gcc-13/pure2-union.cpp.execution | 4 - .../test-results/gcc-13/pure2-union.cpp.output | 0 .../gcc-13/pure2-variadics.cpp.execution | 6 - .../test-results/gcc-13/pure2-variadics.cpp.output | 0 .../pure2-various-string-literals.cpp.execution | 0 .../pure2-various-string-literals.cpp.output | 0 .../test-results/gcc-13/run-tests-gcc-13.sh | 24 - .../cc2/regression-tests/test-results/gcc-13/xyzzy | 1 - .../test-results/mixed-allcpp1-hello.cpp | 15 - .../test-results/mixed-allcpp1-hello.cpp2.output | 2 - .../test-results/mixed-as-for-variant-20-types.cpp | 97 - .../mixed-as-for-variant-20-types.cpp2.output | 2 - .../test-results/mixed-bounds-check.cpp | 32 - .../test-results/mixed-bounds-check.cpp2.output | 2 - .../mixed-bounds-safety-with-assert-2.cpp | 53 - .../mixed-bounds-safety-with-assert-2.cpp2.output | 2 - .../mixed-bounds-safety-with-assert.cpp | 51 - .../mixed-bounds-safety-with-assert.cpp2.output | 2 - ...mixed-bugfix-for-cpp2-comment-cpp1-sequence.cpp | 22 - ...gfix-for-cpp2-comment-cpp1-sequence.cpp2.output | 2 - .../mixed-bugfix-for-literal-as-nttp.cpp | 28 - .../mixed-bugfix-for-literal-as-nttp.cpp2.output | 2 - .../mixed-bugfix-for-ufcs-non-local.cpp | 104 - .../mixed-bugfix-for-ufcs-non-local.cpp2.output | 2 - ...-captures-in-expressions-and-postconditions.cpp | 55 - ...s-in-expressions-and-postconditions.cpp2.output | 2 - .../test-results/mixed-fixed-type-aliases.cpp | 64 - .../mixed-fixed-type-aliases.cpp2.output | 2 - .../test-results/mixed-float-literals.cpp | 142 - .../test-results/mixed-float-literals.cpp2.output | 2 - .../test-results/mixed-forwarding.cpp | 74 - .../test-results/mixed-forwarding.cpp2.output | 2 - .../mixed-function-expression-and-std-for-each.cpp | 49 - ...unction-expression-and-std-for-each.cpp2.output | 2 - ...ession-and-std-ranges-for-each-with-capture.cpp | 43 - ...nd-std-ranges-for-each-with-capture.cpp2.output | 2 - ...function-expression-and-std-ranges-for-each.cpp | 42 - ...-expression-and-std-ranges-for-each.cpp2.output | 2 - ...ed-function-expression-with-pointer-capture.cpp | 44 - ...ion-expression-with-pointer-capture.cpp2.output | 2 - ...d-function-expression-with-repeated-capture.cpp | 43 - ...on-expression-with-repeated-capture.cpp2.output | 2 - .../regression-tests/test-results/mixed-hello.cpp | 45 - .../test-results/mixed-hello.cpp2.output | 2 - .../test-results/mixed-increment-decrement.cpp | 201 - .../mixed-increment-decrement.cpp2.output | 2 - ...mixed-initialization-safety-1-error.cpp2.output | 4 - ...mixed-initialization-safety-2-error.cpp2.output | 8 - ...-initialization-safety-3-contract-violation.cpp | 70 - ...ization-safety-3-contract-violation.cpp2.output | 2 - .../test-results/mixed-initialization-safety-3.cpp | 67 - .../mixed-initialization-safety-3.cpp2.output | 2 - .../test-results/mixed-inspect-templates.cpp | 69 - .../mixed-inspect-templates.cpp2.output | 2 - .../test-results/mixed-inspect-values-2.cpp | 67 - .../mixed-inspect-values-2.cpp2.output | 2 - .../test-results/mixed-inspect-values.cpp | 69 - .../test-results/mixed-inspect-values.cpp2.output | 2 - ...ed-inspect-with-typeof-of-template-arg-list.cpp | 41 - ...ct-with-typeof-of-template-arg-list.cpp2.output | 2 - .../mixed-intro-example-three-loops.cpp | 37 - .../mixed-intro-example-three-loops.cpp2.output | 2 - .../mixed-intro-for-with-counter-include-last.cpp | 37 - ...intro-for-with-counter-include-last.cpp2.output | 2 - .../mixed-lifetime-safety-and-null-contracts.cpp | 55 - ...-lifetime-safety-and-null-contracts.cpp2.output | 2 - ...ifetime-safety-pointer-init-1-error.cpp2.output | 4 - ...ifetime-safety-pointer-init-2-error.cpp2.output | 8 - ...ifetime-safety-pointer-init-3-error.cpp2.output | 4 - .../mixed-lifetime-safety-pointer-init-4.cpp | 55 - ...ixed-lifetime-safety-pointer-init-4.cpp2.output | 2 - .../test-results/mixed-multiple-return-values.cpp | 67 - .../mixed-multiple-return-values.cpp2.output | 2 - .../test-results/mixed-out-destruction.cpp | 69 - .../test-results/mixed-out-destruction.cpp2.output | 2 - .../mixed-parameter-passing-generic-out.cpp | 50 - ...mixed-parameter-passing-generic-out.cpp2.output | 2 - .../mixed-parameter-passing-with-forward.cpp | 80 - ...ixed-parameter-passing-with-forward.cpp2.output | 2 - .../test-results/mixed-parameter-passing.cpp | 72 - .../mixed-parameter-passing.cpp2.output | 2 - .../mixed-postexpression-with-capture.cpp | 91 - .../mixed-postexpression-with-capture.cpp2.output | 2 - .../mixed-postfix-expression-custom-formatting.cpp | 42 - ...ostfix-expression-custom-formatting.cpp2.output | 2 - .../test-results/mixed-string-interpolation.cpp | 75 - .../mixed-string-interpolation.cpp2.output | 2 - .../test-results/mixed-test-parens.cpp | 35 - .../test-results/mixed-test-parens.cpp2.output | 2 - .../test-results/mixed-type-safety-1.cpp | 65 - .../test-results/mixed-type-safety-1.cpp2.output | 2 - .../mixed-ufcs-multiple-template-arguments.cpp | 46 - ...ed-ufcs-multiple-template-arguments.cpp2.output | 2 - .../test-results/msvc-2022/MSVC-version.output | 3 - .../msvc-2022/mixed-allcpp1-hello.cpp.execution | 1 - .../msvc-2022/mixed-allcpp1-hello.cpp.output | 1 - .../mixed-as-for-variant-20-types.cpp.execution | 60 - .../mixed-as-for-variant-20-types.cpp.output | 1 - .../msvc-2022/mixed-bounds-check.cpp.execution | 1 - .../msvc-2022/mixed-bounds-check.cpp.output | 1 - ...mixed-bounds-safety-with-assert-2.cpp.execution | 5 - .../mixed-bounds-safety-with-assert-2.cpp.output | 1 - .../mixed-bounds-safety-with-assert.cpp.execution | 1 - .../mixed-bounds-safety-with-assert.cpp.output | 1 - ...ix-for-cpp2-comment-cpp1-sequence.cpp.execution | 0 ...ugfix-for-cpp2-comment-cpp1-sequence.cpp.output | 1 - .../mixed-bugfix-for-literal-as-nttp.cpp.execution | 0 .../mixed-bugfix-for-literal-as-nttp.cpp.output | 1 - .../mixed-bugfix-for-ufcs-non-local.cpp.execution | 0 .../mixed-bugfix-for-ufcs-non-local.cpp.output | 1 - ...in-expressions-and-postconditions.cpp.execution | 4 - ...es-in-expressions-and-postconditions.cpp.output | 1 - .../mixed-fixed-type-aliases.cpp.execution | 4 - .../msvc-2022/mixed-fixed-type-aliases.cpp.output | 1 - .../msvc-2022/mixed-float-literals.cpp.execution | 72 - .../msvc-2022/mixed-float-literals.cpp.output | 1 - .../msvc-2022/mixed-forwarding.cpp.execution | 12 - .../msvc-2022/mixed-forwarding.cpp.output | 1 - ...ction-expression-and-std-for-each.cpp.execution | 2 - ...function-expression-and-std-for-each.cpp.output | 1 - ...-std-ranges-for-each-with-capture.cpp.execution | 4 - ...and-std-ranges-for-each-with-capture.cpp.output | 1 - ...xpression-and-std-ranges-for-each.cpp.execution | 4 - ...n-expression-and-std-ranges-for-each.cpp.output | 1 - ...n-expression-with-pointer-capture.cpp.execution | 6 - ...tion-expression-with-pointer-capture.cpp.output | 1 - ...-expression-with-repeated-capture.cpp.execution | 6 - ...ion-expression-with-repeated-capture.cpp.output | 1 - .../msvc-2022/mixed-hello.cpp.execution | 1 - .../test-results/msvc-2022/mixed-hello.cpp.output | 1 - .../mixed-increment-decrement.cpp.execution | 2 - .../msvc-2022/mixed-increment-decrement.cpp.output | 1 - ...ation-safety-3-contract-violation.cpp.execution | 1 - ...lization-safety-3-contract-violation.cpp.output | 1 - .../mixed-initialization-safety-3.cpp.execution | 1 - .../mixed-initialization-safety-3.cpp.output | 1 - .../mixed-inspect-templates.cpp.execution | 8 - .../msvc-2022/mixed-inspect-templates.cpp.output | 1 - .../msvc-2022/mixed-inspect-values-2.cpp.execution | 5 - .../msvc-2022/mixed-inspect-values-2.cpp.output | 1 - .../msvc-2022/mixed-inspect-values.cpp.execution | 12 - .../msvc-2022/mixed-inspect-values.cpp.output | 1 - ...-with-typeof-of-template-arg-list.cpp.execution | 0 ...ect-with-typeof-of-template-arg-list.cpp.output | 1 - .../mixed-intro-example-three-loops.cpp.execution | 7 - .../mixed-intro-example-three-loops.cpp.output | 1 - ...tro-for-with-counter-include-last.cpp.execution | 5 - ...-intro-for-with-counter-include-last.cpp.output | 1 - ...ifetime-safety-and-null-contracts.cpp.execution | 1 - ...d-lifetime-safety-and-null-contracts.cpp.output | 1 - ...ed-lifetime-safety-pointer-init-4.cpp.execution | 1 - ...mixed-lifetime-safety-pointer-init-4.cpp.output | 1 - .../mixed-multiple-return-values.cpp.execution | 2 - .../mixed-multiple-return-values.cpp.output | 1 - .../msvc-2022/mixed-out-destruction.cpp.execution | 21 - .../msvc-2022/mixed-out-destruction.cpp.output | 1 - ...xed-parameter-passing-generic-out.cpp.execution | 2 - .../mixed-parameter-passing-generic-out.cpp.output | 1 - ...ed-parameter-passing-with-forward.cpp.execution | 0 ...mixed-parameter-passing-with-forward.cpp.output | 1 - .../mixed-parameter-passing.cpp.execution | 0 .../msvc-2022/mixed-parameter-passing.cpp.output | 1 - ...mixed-postexpression-with-capture.cpp.execution | 2 - .../mixed-postexpression-with-capture.cpp.output | 1 - ...tfix-expression-custom-formatting.cpp.execution | 0 ...postfix-expression-custom-formatting.cpp.output | 1 - .../mixed-string-interpolation.cpp.execution | 17 - .../mixed-string-interpolation.cpp.output | 1 - .../msvc-2022/mixed-test-parens.cpp.execution | 1 - .../msvc-2022/mixed-test-parens.cpp.output | 1 - .../msvc-2022/mixed-type-safety-1.cpp.execution | 6 - .../msvc-2022/mixed-type-safety-1.cpp.output | 1 - ...-ufcs-multiple-template-arguments.cpp.execution | 2 - ...xed-ufcs-multiple-template-arguments.cpp.output | 1 - .../pure2-bounds-safety-span.cpp.execution | 3 - .../msvc-2022/pure2-bounds-safety-span.cpp.output | 1 - .../msvc-2022/pure2-break-continue.cpp.execution | 26 - .../msvc-2022/pure2-break-continue.cpp.output | 1 - ...bugfix-for-assign-expression-list.cpp.execution | 0 ...e2-bugfix-for-assign-expression-list.cpp.output | 1 - ...re2-bugfix-for-discard-precedence.cpp.execution | 0 .../pure2-bugfix-for-discard-precedence.cpp.output | 1 - .../pure2-bugfix-for-max-munch.cpp.execution | 0 .../pure2-bugfix-for-max-munch.cpp.output | 1 - ...ix-for-memberwise-base-assignment.cpp.execution | 2 - ...ugfix-for-memberwise-base-assignment.cpp.output | 1 - ...-name-lookup-and-value-decoration.cpp.execution | 0 ...for-name-lookup-and-value-decoration.cpp.output | 1 - ...for-non-local-function-expression.cpp.execution | 0 ...ix-for-non-local-function-expression.cpp.output | 1 - ...gfix-for-non-local-initialization.cpp.execution | 0 ...-bugfix-for-non-local-initialization.cpp.output | 1 - ...r-optional-template-argument-list.cpp.execution | 0 ...-for-optional-template-argument-list.cpp.output | 1 - ...res-clause-in-forward-declaration.cpp.execution | 0 ...quires-clause-in-forward-declaration.cpp.output | 1 - ...use-unbraced-function-initializer.cpp.execution | 0 ...clause-unbraced-function-initializer.cpp.output | 1 - ...ure2-bugfix-for-template-argument.cpp.execution | 1 - .../pure2-bugfix-for-template-argument.cpp.output | 1 - .../pure2-bugfix-for-ufcs-arguments.cpp.execution | 4 - .../pure2-bugfix-for-ufcs-arguments.cpp.output | 1 - ...pure2-bugfix-for-ufcs-name-lookup.cpp.execution | 0 .../pure2-bugfix-for-ufcs-name-lookup.cpp.output | 1 - .../pure2-bugfix-for-ufcs-noexcept.cpp.execution | 0 .../pure2-bugfix-for-ufcs-noexcept.cpp.output | 1 - .../pure2-bugfix-for-ufcs-sfinae.cpp.execution | 0 .../pure2-bugfix-for-ufcs-sfinae.cpp.output | 1 - ...-for-unbraced-function-expression.cpp.execution | 0 ...fix-for-unbraced-function-expression.cpp.output | 1 - ...ure2-bugfix-for-variable-template.cpp.execution | 0 .../pure2-bugfix-for-variable-template.cpp.output | 1 - .../pure2-chained-comparisons.cpp.execution | 27 - .../msvc-2022/pure2-chained-comparisons.cpp.output | 1 - .../pure2-concept-definition.cpp.execution | 0 .../msvc-2022/pure2-concept-definition.cpp.output | 1 - .../msvc-2022/pure2-contracts.cpp.execution | 3 - .../msvc-2022/pure2-contracts.cpp.output | 1 - ...ulted-comparisons-and-final-types.cpp.execution | 1 - ...efaulted-comparisons-and-final-types.cpp.output | 1 - .../msvc-2022/pure2-enum.cpp.execution | 29 - .../test-results/msvc-2022/pure2-enum.cpp.output | 1 - .../pure2-for-loop-range-with-lambda.cpp.execution | 1 - .../pure2-for-loop-range-with-lambda.cpp.output | 1 - .../msvc-2022/pure2-forward-return.cpp.execution | 2 - .../msvc-2022/pure2-forward-return.cpp.output | 1 - ...nction-multiple-forward-arguments.cpp.execution | 1 - ...-function-multiple-forward-arguments.cpp.output | 1 - .../msvc-2022/pure2-hello.cpp.execution | 1 - .../test-results/msvc-2022/pure2-hello.cpp.output | 1 - ...nitialization-safety-with-else-if.cpp.execution | 1 - ...2-initialization-safety-with-else-if.cpp.output | 1 - ...n-generic-function-multiple-types.cpp.execution | 8 - ...n-in-generic-function-multiple-types.cpp.output | 1 - ...ssion-with-as-in-generic-function.cpp.execution | 3 - ...pression-with-as-in-generic-function.cpp.output | 1 - ...allback-with-variant-any-optional.cpp.execution | 11 - ...t-fallback-with-variant-any-optional.cpp.output | 1 - ...d-empty-with-variant-any-optional.cpp.execution | 17 - ...void-empty-with-variant-any-optional.cpp.output | 1 - .../msvc-2022/pure2-interpolation.cpp.execution | 12 - .../msvc-2022/pure2-interpolation.cpp.output | 1 - .../pure2-intro-example-hello-2022.cpp.execution | 2 - .../pure2-intro-example-hello-2022.cpp.output | 1 - .../pure2-intro-example-three-loops.cpp.execution | 8 - .../pure2-intro-example-three-loops.cpp.output | 1 - ...parameter-across-unnamed-function.cpp.execution | 1 - ...up-parameter-across-unnamed-function.cpp.output | 1 - .../msvc-2022/pure2-main-args.cpp.execution | 2 - .../msvc-2022/pure2-main-args.cpp.output | 1 - .../msvc-2022/pure2-more-wildcards.cpp.execution | 2 - .../msvc-2022/pure2-more-wildcards.cpp.output | 1 - .../msvc-2022/pure2-print.cpp.execution | 2 - .../test-results/msvc-2022/pure2-print.cpp.output | 1 - ...-string-literal-and-interpolation.cpp.execution | 17 - ...raw-string-literal-and-interpolation.cpp.output | 1 - .../msvc-2022/pure2-repeated-call.cpp.execution | 1 - .../msvc-2022/pure2-repeated-call.cpp.output | 1 - .../msvc-2022/pure2-requires-clauses.cpp.execution | 1 - .../msvc-2022/pure2-requires-clauses.cpp.output | 1 - .../pure2-statement-scope-parameters.cpp.execution | 2 - .../pure2-statement-scope-parameters.cpp.output | 1 - .../msvc-2022/pure2-stdio-with-raii.cpp.execution | 0 .../msvc-2022/pure2-stdio-with-raii.cpp.output | 1 - .../msvc-2022/pure2-stdio.cpp.execution | 0 .../test-results/msvc-2022/pure2-stdio.cpp.output | 1 - ...esize-rightshift-and-rightshifteq.cpp.execution | 1 - ...nthesize-rightshift-and-rightshifteq.cpp.output | 1 - .../pure2-template-parameter-lists.cpp.execution | 4 - .../pure2-template-parameter-lists.cpp.output | 1 - .../pure2-type-and-namespace-aliases.cpp.execution | 2 - .../pure2-type-and-namespace-aliases.cpp.output | 1 - .../msvc-2022/pure2-type-safety-1.cpp.execution | 9 - .../msvc-2022/pure2-type-safety-1.cpp.output | 1 - ...-safety-2-with-inspect-expression.cpp.execution | 8 - ...ype-safety-2-with-inspect-expression.cpp.output | 1 - .../msvc-2022/pure2-types-basics.cpp.execution | 27 - .../msvc-2022/pure2-types-basics.cpp.output | 1 - .../pure2-types-down-upcast.cpp.execution | 24 - .../msvc-2022/pure2-types-down-upcast.cpp.output | 1 - .../pure2-types-inheritance.cpp.execution | 5 - .../msvc-2022/pure2-types-inheritance.cpp.output | 1 - ...es-order-independence-and-nesting.cpp.execution | 5 - ...types-order-independence-and-nesting.cpp.output | 1 - ...types-ordering-via-meta-functions.cpp.execution | 1 - ...e2-types-ordering-via-meta-functions.cpp.output | 1 - ...smf-and-that-1-provide-everything.cpp.execution | 8 - ...es-smf-and-that-1-provide-everything.cpp.output | 1 - ...-provide-mvconstruct-and-cpassign.cpp.execution | 8 - ...t-2-provide-mvconstruct-and-cpassign.cpp.output | 1 - ...-provide-mvconstruct-and-mvassign.cpp.execution | 8 - ...t-3-provide-mvconstruct-and-mvassign.cpp.output | 1 - ...t-4-provide-cpassign-and-mvassign.cpp.execution | 8 - ...that-4-provide-cpassign-and-mvassign.cpp.output | 1 - ...-provide-nothing-but-general-case.cpp.execution | 8 - ...t-5-provide-nothing-but-general-case.cpp.output | 1 - .../pure2-types-that-parameters.cpp.execution | 7 - .../pure2-types-that-parameters.cpp.output | 1 - ...es-value-types-via-meta-functions.cpp.execution | 1 - ...types-value-types-via-meta-functions.cpp.output | 1 - ...2-ufcs-member-access-and-chaining.cpp.execution | 0 ...ure2-ufcs-member-access-and-chaining.cpp.output | 1 - .../msvc-2022/pure2-union.cpp.execution | 4 - .../test-results/msvc-2022/pure2-union.cpp.output | 1 - .../msvc-2022/pure2-variadics.cpp.execution | 6 - .../msvc-2022/pure2-variadics.cpp.output | 1 - .../pure2-various-string-literals.cpp.execution | 0 .../pure2-various-string-literals.cpp.output | 1 - .../test-results/msvc-2022/run-tests-msvc-2022.bat | 27 - .../regression-tests/test-results/msvc-2022/xyzzy | 1 - ...nds-safety-pointer-arithmetic-error.cpp2.output | 3 - .../test-results/pure2-bounds-safety-span.cpp | 45 - .../pure2-bounds-safety-span.cpp2.output | 2 - .../test-results/pure2-break-continue.cpp | 321 - .../test-results/pure2-break-continue.cpp2.output | 2 - .../pure2-bugfix-for-assign-expression-list.cpp | 31 - ...2-bugfix-for-assign-expression-list.cpp2.output | 2 - ...-bugfix-for-declaration-equal-error.cpp2.output | 5 - .../pure2-bugfix-for-discard-precedence.cpp | 54 - ...pure2-bugfix-for-discard-precedence.cpp2.output | 2 - .../test-results/pure2-bugfix-for-max-munch.cpp | 25 - .../pure2-bugfix-for-max-munch.cpp2.output | 2 - ...pure2-bugfix-for-memberwise-base-assignment.cpp | 83 - ...gfix-for-memberwise-base-assignment.cpp2.output | 2 - ...bugfix-for-name-lookup-and-value-decoration.cpp | 36 - ...or-name-lookup-and-value-decoration.cpp2.output | 2 - ...e2-bugfix-for-non-local-function-expression.cpp | 39 - ...x-for-non-local-function-expression.cpp2.output | 2 - .../pure2-bugfix-for-non-local-initialization.cpp | 34 - ...bugfix-for-non-local-initialization.cpp2.output | 2 - ...-bugfix-for-optional-template-argument-list.cpp | 25 - ...for-optional-template-argument-list.cpp2.output | 2 - ...ugfix-for-parameter-decl-list-error.cpp2.output | 3 - ...-for-requires-clause-in-forward-declaration.cpp | 48 - ...uires-clause-in-forward-declaration.cpp2.output | 2 - ...quires-clause-unbraced-function-initializer.cpp | 27 - ...lause-unbraced-function-initializer.cpp2.output | 2 - .../pure2-bugfix-for-template-argument.cpp | 23 - .../pure2-bugfix-for-template-argument.cpp2.output | 2 - .../pure2-bugfix-for-ufcs-arguments.cpp | 159 - .../pure2-bugfix-for-ufcs-arguments.cpp2.output | 2 - .../pure2-bugfix-for-ufcs-name-lookup.cpp | 177 - .../pure2-bugfix-for-ufcs-name-lookup.cpp2.output | 2 - .../pure2-bugfix-for-ufcs-noexcept.cpp | 38 - .../pure2-bugfix-for-ufcs-noexcept.cpp2.output | 2 - .../test-results/pure2-bugfix-for-ufcs-sfinae.cpp | 40 - .../pure2-bugfix-for-ufcs-sfinae.cpp2.output | 2 - ...re2-bugfix-for-unbraced-function-expression.cpp | 61 - ...ix-for-unbraced-function-expression.cpp2.output | 2 - .../pure2-bugfix-for-variable-template.cpp | 25 - .../pure2-bugfix-for-variable-template.cpp2.output | 2 - .../test-results/pure2-chained-comparisons.cpp | 36 - .../pure2-chained-comparisons.cpp2.output | 2 - .../test-results/pure2-concept-definition.cpp | 28 - .../pure2-concept-definition.cpp2.output | 2 - .../test-results/pure2-contracts.cpp | 55 - .../test-results/pure2-contracts.cpp2.output | 2 - ...-multitoken-fundamental-types-error.cpp2.output | 32 - .../pure2-cpp1-prefix-expression-error.cpp2.output | 3 - .../pure2-deducing-pointers-error.cpp2.output | 9 - ...pure2-defaulted-comparisons-and-final-types.cpp | 62 - ...faulted-comparisons-and-final-types.cpp2.output | 2 - .../regression-tests/test-results/pure2-enum.cpp | 337 - .../test-results/pure2-enum.cpp2.output | 2 - .../pure2-for-loop-range-with-lambda.cpp | 56 - .../pure2-for-loop-range-with-lambda.cpp2.output | 2 - ...e2-forward-return-diagnostics-error.cpp2.output | 24 - .../test-results/pure2-forward-return.cpp | 45 - .../test-results/pure2-forward-return.cpp2.output | 2 - .../pure2-function-multiple-forward-arguments.cpp | 36 - ...function-multiple-forward-arguments.cpp2.output | 2 - .../regression-tests/test-results/pure2-hello.cpp | 43 - .../test-results/pure2-hello.cpp2.output | 2 - .../pure2-initialization-safety-with-else-if.cpp | 47 - ...-initialization-safety-with-else-if.cpp2.output | 2 - ...pression-in-generic-function-multiple-types.cpp | 54 - ...-in-generic-function-multiple-types.cpp2.output | 2 - ...pect-expression-with-as-in-generic-function.cpp | 40 - ...ression-with-as-in-generic-function.cpp2.output | 2 - ...-inspect-fallback-with-variant-any-optional.cpp | 51 - ...-fallback-with-variant-any-optional.cpp2.output | 2 - ...eneric-void-empty-with-variant-any-optional.cpp | 52 - ...oid-empty-with-variant-any-optional.cpp2.output | 2 - .../test-results/pure2-interpolation.cpp | 72 - .../test-results/pure2-interpolation.cpp2.output | 2 - .../pure2-intro-example-hello-2022.cpp | 47 - .../pure2-intro-example-hello-2022.cpp2.output | 2 - .../pure2-intro-example-three-loops.cpp | 61 - .../pure2-intro-example-three-loops.cpp2.output | 2 - ...ifetime-safety-pointer-init-1-error.cpp2.output | 4 - ...2-lifetime-safety-reject-null-error.cpp2.output | 5 - ...2-look-up-parameter-across-unnamed-function.cpp | 55 - ...p-parameter-across-unnamed-function.cpp2.output | 2 - .../test-results/pure2-main-args.cpp | 26 - .../test-results/pure2-main-args.cpp2.output | 2 - .../test-results/pure2-more-wildcards.cpp | 43 - .../test-results/pure2-more-wildcards.cpp2.output | 2 - .../regression-tests/test-results/pure2-print.cpp | 197 - .../test-results/pure2-print.cpp2.output | 150 - .../pure2-raw-string-literal-and-interpolation.cpp | 55 - ...aw-string-literal-and-interpolation.cpp2.output | 2 - .../test-results/pure2-repeated-call.cpp | 28 - .../test-results/pure2-repeated-call.cpp2.output | 2 - .../test-results/pure2-requires-clauses.cpp | 72 - .../pure2-requires-clauses.cpp2.output | 2 - ...e2-return-tuple-no-identifier-error.cpp2.output | 4 - .../pure2-return-tuple-no-type-error.cpp2.output | 4 - .../pure2-statement-parse-error.cpp2.output | 3 - .../pure2-statement-scope-parameters.cpp | 49 - .../pure2-statement-scope-parameters.cpp2.output | 2 - .../test-results/pure2-stdio-with-raii.cpp | 31 - .../test-results/pure2-stdio-with-raii.cpp2.output | 2 - .../regression-tests/test-results/pure2-stdio.cpp | 35 - .../test-results/pure2-stdio.cpp2.output | 2 - ...ure2-synthesize-rightshift-and-rightshifteq.cpp | 33 - ...thesize-rightshift-and-rightshifteq.cpp2.output | 2 - .../pure2-template-parameter-lists.cpp | 40 - .../pure2-template-parameter-lists.cpp2.output | 2 - .../pure2-type-and-namespace-aliases.cpp | 96 - .../pure2-type-and-namespace-aliases.cpp2.output | 2 - .../test-results/pure2-type-safety-1.cpp | 66 - .../test-results/pure2-type-safety-1.cpp2.output | 2 - ...pure2-type-safety-2-with-inspect-expression.cpp | 53 - ...pe-safety-2-with-inspect-expression.cpp2.output | 2 - .../test-results/pure2-types-basics.cpp | 198 - .../test-results/pure2-types-basics.cpp2.output | 2 - .../test-results/pure2-types-down-upcast.cpp | 145 - .../pure2-types-down-upcast.cpp2.output | 2 - .../test-results/pure2-types-inheritance.cpp | 145 - .../pure2-types-inheritance.cpp2.output | 2 - .../pure2-types-order-independence-and-nesting.cpp | 194 - ...ypes-order-independence-and-nesting.cpp2.output | 2 - .../pure2-types-ordering-via-meta-functions.cpp | 139 - ...2-types-ordering-via-meta-functions.cpp2.output | 2 - ...re2-types-smf-and-that-1-provide-everything.cpp | 143 - ...s-smf-and-that-1-provide-everything.cpp2.output | 2 - ...and-that-2-provide-mvconstruct-and-cpassign.cpp | 148 - ...-2-provide-mvconstruct-and-cpassign.cpp2.output | 2 - ...and-that-3-provide-mvconstruct-and-mvassign.cpp | 147 - ...-3-provide-mvconstruct-and-mvassign.cpp2.output | 2 - ...mf-and-that-4-provide-cpassign-and-mvassign.cpp | 147 - ...hat-4-provide-cpassign-and-mvassign.cpp2.output | 2 - ...and-that-5-provide-nothing-but-general-case.cpp | 153 - ...-5-provide-nothing-but-general-case.cpp2.output | 2 - .../test-results/pure2-types-that-parameters.cpp | 100 - .../pure2-types-that-parameters.cpp2.output | 2 - .../pure2-types-value-types-via-meta-functions.cpp | 168 - ...ypes-value-types-via-meta-functions.cpp2.output | 2 - .../pure2-ufcs-member-access-and-chaining.cpp | 84 - ...re2-ufcs-member-access-and-chaining.cpp2.output | 2 - .../regression-tests/test-results/pure2-union.cpp | 215 - .../test-results/pure2-union.cpp2.output | 2 - .../test-results/pure2-variadics.cpp | 73 - .../test-results/pure2-variadics.cpp2.output | 2 - .../test-results/pure2-various-string-literals.cpp | 41 - .../pure2-various-string-literals.cpp2.output | 2 - .../regression-tests/test-results/run-tests.bat | 31 - 64x0/cc2/regression-tests/test-results/version | 11 - 64x0/cc2/source/build.info | 1 - 64x0/cc2/source/common.h | 968 - 64x0/cc2/source/cpp2util.h | 1 - 64x0/cc2/source/cppfront.cpp | 115 - 64x0/cc2/source/io.h | 1079 - 64x0/cc2/source/lex.h | 1989 - 64x0/cc2/source/parse.h | 9263 - 64x0/cc2/source/reflect.h | 1965 - 64x0/cc2/source/reflect.h2 | 1447 - 64x0/cc2/source/sema.h | 1892 - 64x0/cc2/source/to_cpp1.h | 6750 - 64x0/cc2/source/version.info | 1 - 64x0/ccplus.cc | 758 - 64x0/ld.cc | 599 - 64x0/makefile | 63 - CompilerFrontend/.gitkeep | 0 CompilerFrontend/cl/.gitignore | 17 - CompilerFrontend/cl/.gitkeep | 0 CompilerFrontend/cl/bin/.gitkeep | 0 CompilerFrontend/cl/compiler.d | 137 - CompilerFrontend/cl/main.d | 112 - CompilerFrontend/cl/makefile | 13 - CompilerFrontend/cl/man/mpcc.8 | 11 - CompilerFrontend/cl/test/.gitkeep | 0 CompilerTools/.gitignore | 1 - CompilerTools/install.d | 35 - CompilerTools/makefile | 13 - CompilerTools/test/.gitkeep | 0 Frontend/.gitkeep | 0 Frontend/Compiler/.gitignore | 17 + Frontend/Compiler/.gitkeep | 0 Frontend/Compiler/bin/.gitkeep | 0 Frontend/Compiler/compiler.d | 137 + Frontend/Compiler/main.d | 112 + Frontend/Compiler/makefile | 13 + Frontend/Compiler/man/mpcc.8 | 11 + Frontend/Compiler/test/.gitkeep | 0 Tools/.gitignore | 1 + Tools/install.d | 35 + Tools/makefile | 13 + Tools/test/.gitkeep | 0 1514 files changed, 5465 insertions(+), 1032600 deletions(-) create mode 100644 32x0-Drivers/.gitkeep delete mode 100644 32x0/.gitkeep create mode 100644 64x0-Drivers/.gitignore create mode 100644 64x0-Drivers/64asm.cc create mode 100644 64x0-Drivers/64ld.cc create mode 100644 64x0-Drivers/bccl.cc create mode 100644 64x0-Drivers/bin/.gitkeep create mode 100644 64x0-Drivers/bin/README.txt create mode 100644 64x0-Drivers/bin/SourceUnitTest/.gitkeep create mode 100644 64x0-Drivers/bpp.cc create mode 100644 64x0-Drivers/ccplus.cc create mode 100644 64x0-Drivers/makefile delete mode 100644 64x0/.gitignore delete mode 100644 64x0/64asm.cc delete mode 100644 64x0/bccl.cc delete mode 100644 64x0/bin/.gitkeep delete mode 100644 64x0/bin/README.txt delete mode 100644 64x0/bin/SourceUnitTest/.gitkeep delete mode 100644 64x0/bpp.cc delete mode 100644 64x0/cc2/LICENSE delete mode 100644 64x0/cc2/include/cpp2util.h delete mode 100644 64x0/cc2/passthrough-tests/all-std.cxx delete mode 100644 64x0/cc2/passthrough-tests/clang-12-libstdc++-e.cpp delete mode 100644 64x0/cc2/passthrough-tests/clang-12-libstdc++-e.cpp2 delete mode 100644 64x0/cc2/passthrough-tests/gcc-10-libstdc++-e.cpp delete mode 100644 64x0/cc2/passthrough-tests/gcc-10-libstdc++-e.cpp2 delete mode 100644 64x0/cc2/passthrough-tests/msvc-msstl-e.cpp delete mode 100644 64x0/cc2/passthrough-tests/msvc-msstl-e.cpp2 delete mode 100644 64x0/cc2/passthrough-tests/readme.md delete mode 100644 64x0/cc2/passthrough-tests/run-diffs.sh delete mode 100644 64x0/cc2/regression-tests/mixed-allcpp1-hello.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-as-for-variant-20-types.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-bounds-check.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-bounds-safety-with-assert-2.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-bounds-safety-with-assert.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-bugfix-for-cpp2-comment-cpp1-sequence.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-bugfix-for-literal-as-nttp.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-bugfix-for-ufcs-non-local.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-captures-in-expressions-and-postconditions.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-fixed-type-aliases.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-float-literals.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-forwarding.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-function-expression-and-std-for-each.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-function-expression-and-std-ranges-for-each-with-capture.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-function-expression-and-std-ranges-for-each.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-function-expression-with-pointer-capture.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-function-expression-with-repeated-capture.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-hello.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-increment-decrement.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-initialization-safety-1-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-initialization-safety-2-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-initialization-safety-3-contract-violation.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-initialization-safety-3.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-inspect-templates.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-inspect-values-2.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-inspect-values.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-inspect-with-typeof-of-template-arg-list.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-intro-example-three-loops.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-intro-for-with-counter-include-last.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-lifetime-safety-and-null-contracts.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-lifetime-safety-pointer-init-1-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-lifetime-safety-pointer-init-2-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-lifetime-safety-pointer-init-3-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-lifetime-safety-pointer-init-4.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-multiple-return-values.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-out-destruction.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-parameter-passing-generic-out.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-parameter-passing-with-forward.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-parameter-passing.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-postexpression-with-capture.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-postfix-expression-custom-formatting.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-string-interpolation.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-test-parens.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-type-safety-1.cpp2 delete mode 100644 64x0/cc2/regression-tests/mixed-ufcs-multiple-template-arguments.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bounds-safety-pointer-arithmetic-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bounds-safety-span.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-break-continue.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-assign-expression-list.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-declaration-equal-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-discard-precedence.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-max-munch.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-memberwise-base-assignment.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-name-lookup-and-value-decoration.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-non-local-function-expression.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-non-local-initialization.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-optional-template-argument-list.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-parameter-decl-list-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-requires-clause-in-forward-declaration.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-requires-clause-unbraced-function-initializer.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-template-argument.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-ufcs-arguments.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-ufcs-name-lookup.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-ufcs-noexcept.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-ufcs-sfinae.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-unbraced-function-expression.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-bugfix-for-variable-template.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-chained-comparisons.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-concept-definition.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-contracts.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-cpp1-multitoken-fundamental-types-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-cpp1-prefix-expression-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-deducing-pointers-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-defaulted-comparisons-and-final-types.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-enum.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-for-loop-range-with-lambda.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-forward-return-diagnostics-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-forward-return.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-function-multiple-forward-arguments.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-hello.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-initialization-safety-with-else-if.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-inspect-expression-in-generic-function-multiple-types.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-inspect-expression-with-as-in-generic-function.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-inspect-fallback-with-variant-any-optional.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-inspect-generic-void-empty-with-variant-any-optional.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-interpolation.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-intro-example-hello-2022.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-intro-example-three-loops.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-lifetime-safety-pointer-init-1-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-lifetime-safety-reject-null-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-look-up-parameter-across-unnamed-function.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-main-args.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-more-wildcards.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-print.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-raw-string-literal-and-interpolation.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-repeated-call.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-requires-clauses.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-return-tuple-no-identifier-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-return-tuple-no-type-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-statement-parse-error.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-statement-scope-parameters.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-stdio-with-raii.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-stdio.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-synthesize-rightshift-and-rightshifteq.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-template-parameter-lists.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-type-and-namespace-aliases.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-type-safety-1.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-type-safety-2-with-inspect-expression.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-types-basics.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-types-down-upcast.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-types-inheritance.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-types-order-independence-and-nesting.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-types-ordering-via-meta-functions.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-types-smf-and-that-1-provide-everything.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-types-smf-and-that-2-provide-mvconstruct-and-cpassign.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-types-smf-and-that-3-provide-mvconstruct-and-mvassign.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-types-smf-and-that-4-provide-cpassign-and-mvassign.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-types-smf-and-that-5-provide-nothing-but-general-case.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-types-that-parameters.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-types-value-types-via-meta-functions.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-ufcs-member-access-and-chaining.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-union.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-variadics.cpp2 delete mode 100644 64x0/cc2/regression-tests/pure2-various-string-literals.cpp2 delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/clang-version.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-allcpp1-hello.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-allcpp1-hello.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-as-for-variant-20-types.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-as-for-variant-20-types.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-bounds-check.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-bounds-check.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-bounds-safety-with-assert-2.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-bounds-safety-with-assert-2.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-bounds-safety-with-assert.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-bounds-safety-with-assert.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-bugfix-for-cpp2-comment-cpp1-sequence.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-bugfix-for-cpp2-comment-cpp1-sequence.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-bugfix-for-literal-as-nttp.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-bugfix-for-literal-as-nttp.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-bugfix-for-ufcs-non-local.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-bugfix-for-ufcs-non-local.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-captures-in-expressions-and-postconditions.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-captures-in-expressions-and-postconditions.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-fixed-type-aliases.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-fixed-type-aliases.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-float-literals.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-float-literals.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-forwarding.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-forwarding.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-function-expression-and-std-for-each.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-function-expression-and-std-for-each.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-function-expression-and-std-ranges-for-each-with-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-function-expression-and-std-ranges-for-each-with-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-function-expression-and-std-ranges-for-each.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-function-expression-and-std-ranges-for-each.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-function-expression-with-pointer-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-function-expression-with-pointer-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-function-expression-with-repeated-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-function-expression-with-repeated-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-hello.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-hello.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-increment-decrement.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-increment-decrement.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-initialization-safety-3-contract-violation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-initialization-safety-3-contract-violation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-initialization-safety-3.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-initialization-safety-3.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-inspect-templates.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-inspect-templates.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-inspect-values-2.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-inspect-values-2.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-inspect-values.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-inspect-values.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-inspect-with-typeof-of-template-arg-list.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-inspect-with-typeof-of-template-arg-list.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-intro-example-three-loops.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-intro-example-three-loops.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-intro-for-with-counter-include-last.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-intro-for-with-counter-include-last.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-lifetime-safety-and-null-contracts.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-lifetime-safety-and-null-contracts.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-lifetime-safety-pointer-init-4.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-lifetime-safety-pointer-init-4.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-multiple-return-values.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-multiple-return-values.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-out-destruction.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-out-destruction.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-parameter-passing-generic-out.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-parameter-passing-generic-out.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-parameter-passing-with-forward.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-parameter-passing-with-forward.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-parameter-passing.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-parameter-passing.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-postexpression-with-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-postexpression-with-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-postfix-expression-custom-formatting.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-postfix-expression-custom-formatting.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-string-interpolation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-string-interpolation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-test-parens.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-test-parens.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-type-safety-1.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-type-safety-1.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-ufcs-multiple-template-arguments.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/mixed-ufcs-multiple-template-arguments.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bounds-safety-span.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bounds-safety-span.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-break-continue.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-break-continue.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-assign-expression-list.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-assign-expression-list.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-discard-precedence.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-discard-precedence.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-max-munch.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-max-munch.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-memberwise-base-assignment.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-memberwise-base-assignment.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-name-lookup-and-value-decoration.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-name-lookup-and-value-decoration.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-non-local-function-expression.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-non-local-function-expression.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-non-local-initialization.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-non-local-initialization.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-optional-template-argument-list.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-optional-template-argument-list.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-requires-clause-in-forward-declaration.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-requires-clause-in-forward-declaration.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-requires-clause-unbraced-function-initializer.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-requires-clause-unbraced-function-initializer.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-template-argument.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-template-argument.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-ufcs-arguments.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-ufcs-arguments.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-ufcs-name-lookup.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-ufcs-name-lookup.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-ufcs-noexcept.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-ufcs-noexcept.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-ufcs-sfinae.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-ufcs-sfinae.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-unbraced-function-expression.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-unbraced-function-expression.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-variable-template.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-bugfix-for-variable-template.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-chained-comparisons.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-chained-comparisons.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-concept-definition.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-concept-definition.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-contracts.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-contracts.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-defaulted-comparisons-and-final-types.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-defaulted-comparisons-and-final-types.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-enum.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-enum.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-for-loop-range-with-lambda.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-for-loop-range-with-lambda.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-forward-return.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-forward-return.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-function-multiple-forward-arguments.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-function-multiple-forward-arguments.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-hello.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-hello.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-initialization-safety-with-else-if.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-initialization-safety-with-else-if.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-inspect-expression-in-generic-function-multiple-types.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-inspect-expression-in-generic-function-multiple-types.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-inspect-expression-with-as-in-generic-function.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-inspect-expression-with-as-in-generic-function.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-inspect-fallback-with-variant-any-optional.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-inspect-fallback-with-variant-any-optional.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-inspect-generic-void-empty-with-variant-any-optional.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-inspect-generic-void-empty-with-variant-any-optional.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-interpolation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-interpolation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-intro-example-hello-2022.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-intro-example-hello-2022.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-intro-example-three-loops.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-intro-example-three-loops.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-look-up-parameter-across-unnamed-function.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-look-up-parameter-across-unnamed-function.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-main-args.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-main-args.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-more-wildcards.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-more-wildcards.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-print.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-print.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-raw-string-literal-and-interpolation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-raw-string-literal-and-interpolation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-repeated-call.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-repeated-call.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-requires-clauses.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-requires-clauses.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-statement-scope-parameters.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-statement-scope-parameters.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-stdio-with-raii.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-stdio-with-raii.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-stdio.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-stdio.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-synthesize-rightshift-and-rightshifteq.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-synthesize-rightshift-and-rightshifteq.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-template-parameter-lists.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-template-parameter-lists.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-type-and-namespace-aliases.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-type-safety-1.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-type-safety-1.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-type-safety-2-with-inspect-expression.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-type-safety-2-with-inspect-expression.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-basics.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-basics.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-down-upcast.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-down-upcast.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-inheritance.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-inheritance.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-order-independence-and-nesting.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-order-independence-and-nesting.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-ordering-via-meta-functions.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-ordering-via-meta-functions.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-smf-and-that-1-provide-everything.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-smf-and-that-1-provide-everything.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-smf-and-that-2-provide-mvconstruct-and-cpassign.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-smf-and-that-2-provide-mvconstruct-and-cpassign.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-smf-and-that-3-provide-mvconstruct-and-mvassign.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-smf-and-that-3-provide-mvconstruct-and-mvassign.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-smf-and-that-4-provide-cpassign-and-mvassign.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-smf-and-that-4-provide-cpassign-and-mvassign.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-smf-and-that-5-provide-nothing-but-general-case.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-smf-and-that-5-provide-nothing-but-general-case.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-that-parameters.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-that-parameters.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-value-types-via-meta-functions.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-types-value-types-via-meta-functions.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-ufcs-member-access-and-chaining.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-ufcs-member-access-and-chaining.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-union.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-union.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-variadics.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-variadics.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-various-string-literals.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/pure2-various-string-literals.cpp.output delete mode 100755 64x0/cc2/regression-tests/test-results/apple-clang-14/run-tests-apple-clang.sh delete mode 100644 64x0/cc2/regression-tests/test-results/apple-clang-14/xyzzy delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/clang-version.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-allcpp1-hello.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-allcpp1-hello.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-as-for-variant-20-types.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-as-for-variant-20-types.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-bounds-check.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-bounds-check.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-bounds-safety-with-assert-2.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-bounds-safety-with-assert-2.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-bounds-safety-with-assert.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-bounds-safety-with-assert.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-bugfix-for-cpp2-comment-cpp1-sequence.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-bugfix-for-cpp2-comment-cpp1-sequence.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-bugfix-for-literal-as-nttp.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-bugfix-for-literal-as-nttp.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-bugfix-for-ufcs-non-local.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-captures-in-expressions-and-postconditions.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-captures-in-expressions-and-postconditions.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-fixed-type-aliases.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-fixed-type-aliases.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-float-literals.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-float-literals.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-forwarding.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-forwarding.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-function-expression-and-std-for-each.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-function-expression-and-std-for-each.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-function-expression-and-std-ranges-for-each-with-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-function-expression-and-std-ranges-for-each-with-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-function-expression-and-std-ranges-for-each.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-function-expression-and-std-ranges-for-each.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-function-expression-with-pointer-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-function-expression-with-pointer-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-function-expression-with-repeated-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-function-expression-with-repeated-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-hello.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-hello.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-increment-decrement.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-increment-decrement.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-initialization-safety-3-contract-violation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-initialization-safety-3-contract-violation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-initialization-safety-3.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-initialization-safety-3.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-inspect-templates.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-inspect-templates.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-inspect-values-2.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-inspect-values-2.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-inspect-values.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-inspect-values.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-inspect-with-typeof-of-template-arg-list.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-inspect-with-typeof-of-template-arg-list.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-intro-example-three-loops.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-intro-example-three-loops.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-intro-for-with-counter-include-last.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-intro-for-with-counter-include-last.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-lifetime-safety-and-null-contracts.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-lifetime-safety-and-null-contracts.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-lifetime-safety-pointer-init-4.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-lifetime-safety-pointer-init-4.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-multiple-return-values.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-multiple-return-values.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-out-destruction.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-out-destruction.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-parameter-passing-generic-out.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-parameter-passing-generic-out.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-parameter-passing-with-forward.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-parameter-passing-with-forward.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-parameter-passing.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-parameter-passing.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-postexpression-with-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-postexpression-with-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-postfix-expression-custom-formatting.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-postfix-expression-custom-formatting.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-string-interpolation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-string-interpolation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-test-parens.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-test-parens.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-type-safety-1.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-type-safety-1.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-ufcs-multiple-template-arguments.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/mixed-ufcs-multiple-template-arguments.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bounds-safety-span.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bounds-safety-span.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-break-continue.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-break-continue.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-assign-expression-list.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-assign-expression-list.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-discard-precedence.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-discard-precedence.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-max-munch.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-max-munch.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-memberwise-base-assignment.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-memberwise-base-assignment.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-name-lookup-and-value-decoration.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-name-lookup-and-value-decoration.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-non-local-function-expression.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-non-local-initialization.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-non-local-initialization.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-optional-template-argument-list.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-optional-template-argument-list.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-requires-clause-in-forward-declaration.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-requires-clause-in-forward-declaration.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-requires-clause-unbraced-function-initializer.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-requires-clause-unbraced-function-initializer.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-template-argument.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-template-argument.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-ufcs-arguments.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-ufcs-arguments.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-ufcs-name-lookup.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-ufcs-name-lookup.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-ufcs-noexcept.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-ufcs-sfinae.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-unbraced-function-expression.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-unbraced-function-expression.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-variable-template.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-bugfix-for-variable-template.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-chained-comparisons.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-chained-comparisons.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-concept-definition.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-concept-definition.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-contracts.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-contracts.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-defaulted-comparisons-and-final-types.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-defaulted-comparisons-and-final-types.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-enum.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-enum.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-for-loop-range-with-lambda.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-for-loop-range-with-lambda.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-forward-return.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-forward-return.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-function-multiple-forward-arguments.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-function-multiple-forward-arguments.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-hello.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-hello.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-initialization-safety-with-else-if.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-initialization-safety-with-else-if.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-inspect-expression-in-generic-function-multiple-types.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-inspect-expression-in-generic-function-multiple-types.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-inspect-expression-with-as-in-generic-function.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-inspect-expression-with-as-in-generic-function.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-inspect-fallback-with-variant-any-optional.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-inspect-fallback-with-variant-any-optional.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-inspect-generic-void-empty-with-variant-any-optional.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-inspect-generic-void-empty-with-variant-any-optional.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-interpolation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-interpolation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-intro-example-hello-2022.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-intro-example-hello-2022.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-intro-example-three-loops.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-intro-example-three-loops.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-look-up-parameter-across-unnamed-function.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-look-up-parameter-across-unnamed-function.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-main-args.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-main-args.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-more-wildcards.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-more-wildcards.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-print.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-print.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-raw-string-literal-and-interpolation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-raw-string-literal-and-interpolation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-repeated-call.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-repeated-call.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-requires-clauses.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-requires-clauses.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-statement-scope-parameters.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-statement-scope-parameters.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-stdio-with-raii.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-stdio-with-raii.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-stdio.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-stdio.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-synthesize-rightshift-and-rightshifteq.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-synthesize-rightshift-and-rightshifteq.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-template-parameter-lists.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-template-parameter-lists.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-type-and-namespace-aliases.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-type-and-namespace-aliases.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-type-safety-1.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-type-safety-1.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-type-safety-2-with-inspect-expression.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-type-safety-2-with-inspect-expression.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-basics.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-basics.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-down-upcast.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-down-upcast.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-inheritance.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-inheritance.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-order-independence-and-nesting.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-order-independence-and-nesting.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-ordering-via-meta-functions.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-ordering-via-meta-functions.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-smf-and-that-1-provide-everything.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-smf-and-that-1-provide-everything.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-smf-and-that-2-provide-mvconstruct-and-cpassign.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-smf-and-that-2-provide-mvconstruct-and-cpassign.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-smf-and-that-3-provide-mvconstruct-and-mvassign.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-smf-and-that-3-provide-mvconstruct-and-mvassign.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-smf-and-that-4-provide-cpassign-and-mvassign.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-smf-and-that-4-provide-cpassign-and-mvassign.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-smf-and-that-5-provide-nothing-but-general-case.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-smf-and-that-5-provide-nothing-but-general-case.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-that-parameters.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-that-parameters.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-value-types-via-meta-functions.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-types-value-types-via-meta-functions.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-ufcs-member-access-and-chaining.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-ufcs-member-access-and-chaining.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-union.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-union.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-variadics.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-variadics.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-various-string-literals.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/pure2-various-string-literals.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/run-tests-clang-12.sh delete mode 100644 64x0/cc2/regression-tests/test-results/clang-12/xyzzy delete mode 100644 64x0/cc2/regression-tests/test-results/clang-18/mixed-bugfix-for-ufcs-non-local.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-18/mixed-bugfix-for-ufcs-non-local.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-18/pure2-bugfix-for-ufcs-arguments.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-18/pure2-bugfix-for-ufcs-arguments.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-18/pure2-bugfix-for-ufcs-name-lookup.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-18/pure2-bugfix-for-ufcs-name-lookup.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-18/pure2-bugfix-for-ufcs-noexcept.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-18/pure2-bugfix-for-ufcs-noexcept.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/clang-18/pure2-bugfix-for-ufcs-sfinae.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/clang-18/pure2-bugfix-for-ufcs-sfinae.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/gcc-version.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-allcpp1-hello.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-allcpp1-hello.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-as-for-variant-20-types.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-as-for-variant-20-types.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-bounds-check.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-bounds-check.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-bounds-safety-with-assert-2.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-bounds-safety-with-assert-2.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-bounds-safety-with-assert.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-bounds-safety-with-assert.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-bugfix-for-cpp2-comment-cpp1-sequence.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-bugfix-for-cpp2-comment-cpp1-sequence.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-bugfix-for-literal-as-nttp.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-bugfix-for-literal-as-nttp.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-bugfix-for-ufcs-non-local.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-bugfix-for-ufcs-non-local.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-captures-in-expressions-and-postconditions.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-captures-in-expressions-and-postconditions.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-fixed-type-aliases.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-fixed-type-aliases.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-float-literals.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-float-literals.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-forwarding.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-forwarding.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-function-expression-and-std-for-each.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-function-expression-and-std-for-each.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-function-expression-and-std-ranges-for-each-with-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-function-expression-and-std-ranges-for-each-with-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-function-expression-and-std-ranges-for-each.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-function-expression-and-std-ranges-for-each.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-function-expression-with-pointer-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-function-expression-with-pointer-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-function-expression-with-repeated-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-function-expression-with-repeated-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-hello.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-hello.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-increment-decrement.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-initialization-safety-3-contract-violation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-initialization-safety-3-contract-violation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-initialization-safety-3.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-initialization-safety-3.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-inspect-templates.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-inspect-templates.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-inspect-values-2.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-inspect-values-2.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-inspect-values.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-inspect-values.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-inspect-with-typeof-of-template-arg-list.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-inspect-with-typeof-of-template-arg-list.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-intro-example-three-loops.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-intro-example-three-loops.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-intro-for-with-counter-include-last.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-intro-for-with-counter-include-last.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-lifetime-safety-and-null-contracts.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-lifetime-safety-and-null-contracts.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-lifetime-safety-pointer-init-4.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-lifetime-safety-pointer-init-4.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-multiple-return-values.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-multiple-return-values.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-out-destruction.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-out-destruction.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-parameter-passing-generic-out.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-parameter-passing-generic-out.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-parameter-passing-with-forward.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-parameter-passing-with-forward.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-parameter-passing.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-parameter-passing.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-postexpression-with-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-postexpression-with-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-postfix-expression-custom-formatting.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-postfix-expression-custom-formatting.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-string-interpolation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-string-interpolation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-test-parens.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-test-parens.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-type-safety-1.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-type-safety-1.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-ufcs-multiple-template-arguments.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/mixed-ufcs-multiple-template-arguments.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bounds-safety-span.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bounds-safety-span.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-break-continue.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-break-continue.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-assign-expression-list.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-assign-expression-list.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-discard-precedence.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-discard-precedence.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-max-munch.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-max-munch.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-memberwise-base-assignment.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-memberwise-base-assignment.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-name-lookup-and-value-decoration.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-name-lookup-and-value-decoration.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-non-local-function-expression.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-non-local-function-expression.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-non-local-initialization.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-non-local-initialization.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-optional-template-argument-list.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-optional-template-argument-list.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-requires-clause-in-forward-declaration.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-requires-clause-unbraced-function-initializer.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-requires-clause-unbraced-function-initializer.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-template-argument.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-template-argument.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-ufcs-arguments.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-ufcs-arguments.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-ufcs-name-lookup.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-ufcs-name-lookup.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-ufcs-noexcept.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-ufcs-sfinae.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-ufcs-sfinae.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-unbraced-function-expression.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-unbraced-function-expression.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-variable-template.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-bugfix-for-variable-template.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-chained-comparisons.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-chained-comparisons.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-concept-definition.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-concept-definition.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-contracts.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-contracts.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-defaulted-comparisons-and-final-types.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-defaulted-comparisons-and-final-types.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-enum.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-enum.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-for-loop-range-with-lambda.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-for-loop-range-with-lambda.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-forward-return.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-forward-return.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-function-multiple-forward-arguments.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-function-multiple-forward-arguments.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-hello.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-hello.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-initialization-safety-with-else-if.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-initialization-safety-with-else-if.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-inspect-expression-in-generic-function-multiple-types.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-inspect-expression-in-generic-function-multiple-types.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-inspect-expression-with-as-in-generic-function.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-inspect-expression-with-as-in-generic-function.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-inspect-fallback-with-variant-any-optional.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-inspect-fallback-with-variant-any-optional.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-inspect-generic-void-empty-with-variant-any-optional.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-inspect-generic-void-empty-with-variant-any-optional.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-interpolation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-interpolation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-intro-example-hello-2022.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-intro-example-hello-2022.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-intro-example-three-loops.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-intro-example-three-loops.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-look-up-parameter-across-unnamed-function.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-look-up-parameter-across-unnamed-function.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-main-args.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-main-args.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-more-wildcards.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-more-wildcards.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-print.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-raw-string-literal-and-interpolation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-raw-string-literal-and-interpolation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-repeated-call.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-repeated-call.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-requires-clauses.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-requires-clauses.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-statement-scope-parameters.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-statement-scope-parameters.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-stdio-with-raii.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-stdio-with-raii.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-stdio.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-stdio.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-synthesize-rightshift-and-rightshifteq.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-synthesize-rightshift-and-rightshifteq.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-template-parameter-lists.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-template-parameter-lists.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-type-and-namespace-aliases.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-type-and-namespace-aliases.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-type-safety-1.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-type-safety-1.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-type-safety-2-with-inspect-expression.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-type-safety-2-with-inspect-expression.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-basics.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-basics.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-down-upcast.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-down-upcast.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-inheritance.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-inheritance.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-order-independence-and-nesting.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-order-independence-and-nesting.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-ordering-via-meta-functions.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-ordering-via-meta-functions.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-smf-and-that-1-provide-everything.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-smf-and-that-1-provide-everything.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-smf-and-that-2-provide-mvconstruct-and-cpassign.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-smf-and-that-2-provide-mvconstruct-and-cpassign.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-smf-and-that-3-provide-mvconstruct-and-mvassign.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-smf-and-that-3-provide-mvconstruct-and-mvassign.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-smf-and-that-4-provide-cpassign-and-mvassign.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-smf-and-that-4-provide-cpassign-and-mvassign.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-smf-and-that-5-provide-nothing-but-general-case.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-smf-and-that-5-provide-nothing-but-general-case.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-that-parameters.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-that-parameters.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-value-types-via-meta-functions.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-types-value-types-via-meta-functions.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-ufcs-member-access-and-chaining.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-ufcs-member-access-and-chaining.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-union.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-union.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-variadics.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-variadics.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-various-string-literals.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/pure2-various-string-literals.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/run-tests-gcc-10.sh delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-10/xyzzy delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/gcc-version.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-allcpp1-hello.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-allcpp1-hello.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-as-for-variant-20-types.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-as-for-variant-20-types.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-bounds-check.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-bounds-check.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-bounds-safety-with-assert-2.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-bounds-safety-with-assert-2.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-bounds-safety-with-assert.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-bounds-safety-with-assert.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-bugfix-for-cpp2-comment-cpp1-sequence.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-bugfix-for-cpp2-comment-cpp1-sequence.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-bugfix-for-literal-as-nttp.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-bugfix-for-literal-as-nttp.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-bugfix-for-ufcs-non-local.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-captures-in-expressions-and-postconditions.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-captures-in-expressions-and-postconditions.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-fixed-type-aliases.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-fixed-type-aliases.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-float-literals.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-float-literals.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-forwarding.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-forwarding.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-function-expression-and-std-for-each.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-function-expression-and-std-for-each.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-function-expression-and-std-ranges-for-each-with-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-function-expression-and-std-ranges-for-each-with-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-function-expression-and-std-ranges-for-each.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-function-expression-and-std-ranges-for-each.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-function-expression-with-pointer-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-function-expression-with-pointer-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-function-expression-with-repeated-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-function-expression-with-repeated-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-hello.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-hello.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-increment-decrement.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-increment-decrement.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-initialization-safety-3-contract-violation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-initialization-safety-3-contract-violation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-initialization-safety-3.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-initialization-safety-3.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-inspect-templates.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-inspect-templates.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-inspect-values-2.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-inspect-values-2.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-inspect-values.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-inspect-values.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-inspect-with-typeof-of-template-arg-list.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-inspect-with-typeof-of-template-arg-list.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-intro-example-three-loops.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-intro-example-three-loops.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-intro-for-with-counter-include-last.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-intro-for-with-counter-include-last.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-lifetime-safety-and-null-contracts.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-lifetime-safety-and-null-contracts.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-lifetime-safety-pointer-init-4.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-lifetime-safety-pointer-init-4.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-multiple-return-values.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-multiple-return-values.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-out-destruction.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-out-destruction.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-parameter-passing-generic-out.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-parameter-passing-generic-out.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-parameter-passing-with-forward.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-parameter-passing-with-forward.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-parameter-passing.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-parameter-passing.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-postexpression-with-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-postexpression-with-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-postfix-expression-custom-formatting.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-postfix-expression-custom-formatting.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-string-interpolation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-string-interpolation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-test-parens.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-test-parens.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-type-safety-1.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-type-safety-1.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-ufcs-multiple-template-arguments.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/mixed-ufcs-multiple-template-arguments.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bounds-safety-span.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bounds-safety-span.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-break-continue.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-break-continue.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-assign-expression-list.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-assign-expression-list.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-discard-precedence.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-discard-precedence.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-empty-index.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-max-munch.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-max-munch.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-memberwise-base-assignment.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-memberwise-base-assignment.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-name-lookup-and-value-decoration.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-name-lookup-and-value-decoration.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-non-local-function-expression.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-non-local-function-expression.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-non-local-initialization.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-non-local-initialization.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-optional-template-argument-list.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-optional-template-argument-list.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-requires-clause-in-forward-declaration.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-requires-clause-in-forward-declaration.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-requires-clause-unbraced-function-initializer.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-requires-clause-unbraced-function-initializer.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-template-argument.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-template-argument.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-ufcs-arguments.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-ufcs-arguments.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-ufcs-name-lookup.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-ufcs-name-lookup.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-ufcs-noexcept.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-ufcs-noexcept.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-ufcs-sfinae.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-ufcs-sfinae.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-unbraced-function-expression.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-unbraced-function-expression.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-variable-template.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-bugfix-for-variable-template.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-chained-comparisons.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-chained-comparisons.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-concept-definition.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-concept-definition.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-contracts.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-contracts.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-defaulted-comparisons-and-final-types.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-defaulted-comparisons-and-final-types.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-enum.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-enum.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-for-loop-range-with-lambda.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-for-loop-range-with-lambda.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-forward-return.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-forward-return.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-function-multiple-forward-arguments.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-function-multiple-forward-arguments.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-hello.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-hello.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-initialization-safety-with-else-if.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-initialization-safety-with-else-if.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-inspect-expression-in-generic-function-multiple-types.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-inspect-expression-in-generic-function-multiple-types.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-inspect-expression-with-as-in-generic-function.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-inspect-expression-with-as-in-generic-function.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-inspect-fallback-with-variant-any-optional.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-inspect-fallback-with-variant-any-optional.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-inspect-generic-void-empty-with-variant-any-optional.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-inspect-generic-void-empty-with-variant-any-optional.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-interpolation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-interpolation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-intro-example-hello-2022.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-intro-example-hello-2022.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-intro-example-three-loops.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-intro-example-three-loops.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-look-up-parameter-across-unnamed-function.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-look-up-parameter-across-unnamed-function.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-main-args.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-main-args.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-more-wildcards.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-more-wildcards.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-print.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-print.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-raw-string-literal-and-interpolation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-raw-string-literal-and-interpolation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-repeated-call.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-repeated-call.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-requires-clauses.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-requires-clauses.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-statement-scope-parameters.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-statement-scope-parameters.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-stdio-with-raii.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-stdio-with-raii.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-stdio.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-stdio.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-synthesize-rightshift-and-rightshifteq.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-synthesize-rightshift-and-rightshifteq.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-template-parameter-lists.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-template-parameter-lists.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-type-and-namespace-aliases.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-type-and-namespace-aliases.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-type-safety-1.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-type-safety-1.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-type-safety-2-with-inspect-expression.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-type-safety-2-with-inspect-expression.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-basics.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-basics.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-down-upcast.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-down-upcast.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-inheritance.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-inheritance.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-order-independence-and-nesting.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-order-independence-and-nesting.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-ordering-via-meta-functions.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-ordering-via-meta-functions.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-smf-and-that-1-provide-everything.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-smf-and-that-1-provide-everything.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-smf-and-that-2-provide-mvconstruct-and-cpassign.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-smf-and-that-2-provide-mvconstruct-and-cpassign.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-smf-and-that-3-provide-mvconstruct-and-mvassign.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-smf-and-that-3-provide-mvconstruct-and-mvassign.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-smf-and-that-4-provide-cpassign-and-mvassign.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-smf-and-that-4-provide-cpassign-and-mvassign.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-smf-and-that-5-provide-nothing-but-general-case.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-smf-and-that-5-provide-nothing-but-general-case.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-that-parameters.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-that-parameters.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-value-types-via-meta-functions.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-types-value-types-via-meta-functions.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-ufcs-member-access-and-chaining.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-ufcs-member-access-and-chaining.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-union.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-union.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-variadics.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-variadics.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-various-string-literals.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/pure2-various-string-literals.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/run-tests-gcc-13.sh delete mode 100644 64x0/cc2/regression-tests/test-results/gcc-13/xyzzy delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-allcpp1-hello.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-allcpp1-hello.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-as-for-variant-20-types.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-as-for-variant-20-types.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-bounds-check.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-bounds-check.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-bounds-safety-with-assert-2.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-bounds-safety-with-assert-2.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-bounds-safety-with-assert.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-bounds-safety-with-assert.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-bugfix-for-cpp2-comment-cpp1-sequence.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-bugfix-for-cpp2-comment-cpp1-sequence.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-bugfix-for-literal-as-nttp.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-bugfix-for-literal-as-nttp.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-bugfix-for-ufcs-non-local.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-bugfix-for-ufcs-non-local.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-captures-in-expressions-and-postconditions.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-captures-in-expressions-and-postconditions.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-fixed-type-aliases.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-fixed-type-aliases.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-float-literals.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-float-literals.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-forwarding.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-forwarding.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-function-expression-and-std-for-each.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-function-expression-and-std-for-each.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-function-expression-and-std-ranges-for-each-with-capture.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-function-expression-and-std-ranges-for-each-with-capture.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-function-expression-and-std-ranges-for-each.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-function-expression-and-std-ranges-for-each.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-function-expression-with-pointer-capture.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-function-expression-with-pointer-capture.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-function-expression-with-repeated-capture.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-function-expression-with-repeated-capture.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-hello.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-hello.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-increment-decrement.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-increment-decrement.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-initialization-safety-1-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-initialization-safety-2-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-initialization-safety-3-contract-violation.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-initialization-safety-3-contract-violation.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-initialization-safety-3.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-initialization-safety-3.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-inspect-templates.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-inspect-templates.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-inspect-values-2.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-inspect-values-2.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-inspect-values.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-inspect-values.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-inspect-with-typeof-of-template-arg-list.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-inspect-with-typeof-of-template-arg-list.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-intro-example-three-loops.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-intro-example-three-loops.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-intro-for-with-counter-include-last.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-intro-for-with-counter-include-last.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-lifetime-safety-and-null-contracts.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-lifetime-safety-and-null-contracts.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-lifetime-safety-pointer-init-1-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-lifetime-safety-pointer-init-2-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-lifetime-safety-pointer-init-3-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-lifetime-safety-pointer-init-4.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-lifetime-safety-pointer-init-4.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-multiple-return-values.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-multiple-return-values.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-out-destruction.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-out-destruction.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-parameter-passing-generic-out.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-parameter-passing-generic-out.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-parameter-passing-with-forward.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-parameter-passing-with-forward.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-parameter-passing.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-parameter-passing.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-postexpression-with-capture.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-postexpression-with-capture.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-postfix-expression-custom-formatting.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-postfix-expression-custom-formatting.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-string-interpolation.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-string-interpolation.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-test-parens.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-test-parens.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-type-safety-1.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-type-safety-1.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-ufcs-multiple-template-arguments.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/mixed-ufcs-multiple-template-arguments.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/MSVC-version.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-allcpp1-hello.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-allcpp1-hello.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-as-for-variant-20-types.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-as-for-variant-20-types.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-bounds-check.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-bounds-check.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-bounds-safety-with-assert-2.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-bounds-safety-with-assert-2.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-bounds-safety-with-assert.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-bounds-safety-with-assert.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-bugfix-for-cpp2-comment-cpp1-sequence.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-bugfix-for-cpp2-comment-cpp1-sequence.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-bugfix-for-literal-as-nttp.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-bugfix-for-literal-as-nttp.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-bugfix-for-ufcs-non-local.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-bugfix-for-ufcs-non-local.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-captures-in-expressions-and-postconditions.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-captures-in-expressions-and-postconditions.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-fixed-type-aliases.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-fixed-type-aliases.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-float-literals.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-float-literals.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-forwarding.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-forwarding.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-function-expression-and-std-for-each.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-function-expression-and-std-for-each.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-function-expression-and-std-ranges-for-each-with-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-function-expression-and-std-ranges-for-each-with-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-function-expression-and-std-ranges-for-each.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-function-expression-and-std-ranges-for-each.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-function-expression-with-pointer-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-function-expression-with-pointer-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-function-expression-with-repeated-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-function-expression-with-repeated-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-hello.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-hello.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-increment-decrement.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-increment-decrement.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-initialization-safety-3-contract-violation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-initialization-safety-3-contract-violation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-initialization-safety-3.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-initialization-safety-3.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-inspect-templates.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-inspect-templates.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-inspect-values-2.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-inspect-values-2.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-inspect-values.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-inspect-values.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-inspect-with-typeof-of-template-arg-list.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-inspect-with-typeof-of-template-arg-list.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-intro-example-three-loops.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-intro-example-three-loops.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-intro-for-with-counter-include-last.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-intro-for-with-counter-include-last.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-lifetime-safety-and-null-contracts.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-lifetime-safety-and-null-contracts.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-lifetime-safety-pointer-init-4.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-lifetime-safety-pointer-init-4.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-multiple-return-values.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-multiple-return-values.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-out-destruction.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-out-destruction.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-parameter-passing-generic-out.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-parameter-passing-generic-out.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-parameter-passing-with-forward.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-parameter-passing-with-forward.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-parameter-passing.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-parameter-passing.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-postexpression-with-capture.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-postexpression-with-capture.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-postfix-expression-custom-formatting.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-postfix-expression-custom-formatting.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-string-interpolation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-string-interpolation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-test-parens.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-test-parens.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-type-safety-1.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-type-safety-1.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-ufcs-multiple-template-arguments.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/mixed-ufcs-multiple-template-arguments.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bounds-safety-span.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bounds-safety-span.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-break-continue.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-break-continue.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-assign-expression-list.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-assign-expression-list.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-discard-precedence.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-discard-precedence.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-max-munch.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-max-munch.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-memberwise-base-assignment.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-memberwise-base-assignment.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-name-lookup-and-value-decoration.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-name-lookup-and-value-decoration.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-non-local-function-expression.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-non-local-function-expression.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-non-local-initialization.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-non-local-initialization.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-optional-template-argument-list.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-optional-template-argument-list.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-requires-clause-in-forward-declaration.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-requires-clause-in-forward-declaration.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-requires-clause-unbraced-function-initializer.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-requires-clause-unbraced-function-initializer.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-template-argument.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-template-argument.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-ufcs-arguments.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-ufcs-arguments.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-ufcs-name-lookup.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-ufcs-name-lookup.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-ufcs-noexcept.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-ufcs-noexcept.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-ufcs-sfinae.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-ufcs-sfinae.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-unbraced-function-expression.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-unbraced-function-expression.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-variable-template.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-bugfix-for-variable-template.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-chained-comparisons.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-chained-comparisons.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-concept-definition.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-concept-definition.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-contracts.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-contracts.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-defaulted-comparisons-and-final-types.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-defaulted-comparisons-and-final-types.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-enum.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-enum.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-for-loop-range-with-lambda.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-for-loop-range-with-lambda.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-forward-return.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-forward-return.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-function-multiple-forward-arguments.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-function-multiple-forward-arguments.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-hello.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-hello.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-initialization-safety-with-else-if.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-initialization-safety-with-else-if.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-inspect-expression-in-generic-function-multiple-types.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-inspect-expression-in-generic-function-multiple-types.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-inspect-expression-with-as-in-generic-function.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-inspect-expression-with-as-in-generic-function.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-inspect-fallback-with-variant-any-optional.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-inspect-fallback-with-variant-any-optional.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-inspect-generic-void-empty-with-variant-any-optional.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-inspect-generic-void-empty-with-variant-any-optional.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-interpolation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-interpolation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-intro-example-hello-2022.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-intro-example-hello-2022.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-intro-example-three-loops.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-intro-example-three-loops.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-look-up-parameter-across-unnamed-function.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-look-up-parameter-across-unnamed-function.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-main-args.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-main-args.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-more-wildcards.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-more-wildcards.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-print.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-print.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-raw-string-literal-and-interpolation.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-raw-string-literal-and-interpolation.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-repeated-call.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-repeated-call.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-requires-clauses.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-requires-clauses.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-statement-scope-parameters.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-statement-scope-parameters.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-stdio-with-raii.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-stdio-with-raii.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-stdio.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-stdio.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-synthesize-rightshift-and-rightshifteq.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-synthesize-rightshift-and-rightshifteq.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-template-parameter-lists.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-template-parameter-lists.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-type-and-namespace-aliases.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-type-and-namespace-aliases.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-type-safety-1.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-type-safety-1.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-type-safety-2-with-inspect-expression.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-type-safety-2-with-inspect-expression.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-basics.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-basics.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-down-upcast.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-down-upcast.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-inheritance.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-inheritance.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-order-independence-and-nesting.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-order-independence-and-nesting.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-ordering-via-meta-functions.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-ordering-via-meta-functions.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-smf-and-that-1-provide-everything.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-smf-and-that-1-provide-everything.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-smf-and-that-2-provide-mvconstruct-and-cpassign.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-smf-and-that-2-provide-mvconstruct-and-cpassign.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-smf-and-that-3-provide-mvconstruct-and-mvassign.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-smf-and-that-3-provide-mvconstruct-and-mvassign.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-smf-and-that-4-provide-cpassign-and-mvassign.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-smf-and-that-4-provide-cpassign-and-mvassign.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-smf-and-that-5-provide-nothing-but-general-case.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-smf-and-that-5-provide-nothing-but-general-case.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-that-parameters.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-that-parameters.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-value-types-via-meta-functions.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-types-value-types-via-meta-functions.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-ufcs-member-access-and-chaining.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-ufcs-member-access-and-chaining.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-union.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-union.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-variadics.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-variadics.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-various-string-literals.cpp.execution delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/pure2-various-string-literals.cpp.output delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/run-tests-msvc-2022.bat delete mode 100644 64x0/cc2/regression-tests/test-results/msvc-2022/xyzzy delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bounds-safety-pointer-arithmetic-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bounds-safety-span.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bounds-safety-span.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-break-continue.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-break-continue.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-assign-expression-list.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-assign-expression-list.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-declaration-equal-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-discard-precedence.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-discard-precedence.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-max-munch.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-max-munch.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-memberwise-base-assignment.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-memberwise-base-assignment.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-name-lookup-and-value-decoration.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-name-lookup-and-value-decoration.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-non-local-function-expression.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-non-local-function-expression.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-non-local-initialization.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-non-local-initialization.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-optional-template-argument-list.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-optional-template-argument-list.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-parameter-decl-list-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-requires-clause-in-forward-declaration.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-requires-clause-in-forward-declaration.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-requires-clause-unbraced-function-initializer.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-requires-clause-unbraced-function-initializer.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-template-argument.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-template-argument.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-ufcs-arguments.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-ufcs-arguments.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-ufcs-name-lookup.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-ufcs-name-lookup.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-ufcs-noexcept.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-ufcs-noexcept.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-ufcs-sfinae.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-ufcs-sfinae.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-unbraced-function-expression.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-unbraced-function-expression.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-variable-template.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-bugfix-for-variable-template.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-chained-comparisons.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-chained-comparisons.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-concept-definition.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-concept-definition.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-contracts.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-contracts.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-cpp1-multitoken-fundamental-types-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-cpp1-prefix-expression-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-deducing-pointers-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-defaulted-comparisons-and-final-types.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-defaulted-comparisons-and-final-types.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-enum.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-enum.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-for-loop-range-with-lambda.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-for-loop-range-with-lambda.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-forward-return-diagnostics-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-forward-return.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-forward-return.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-function-multiple-forward-arguments.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-function-multiple-forward-arguments.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-hello.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-hello.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-initialization-safety-with-else-if.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-initialization-safety-with-else-if.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-inspect-expression-in-generic-function-multiple-types.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-inspect-expression-in-generic-function-multiple-types.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-inspect-expression-with-as-in-generic-function.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-inspect-expression-with-as-in-generic-function.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-inspect-fallback-with-variant-any-optional.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-inspect-fallback-with-variant-any-optional.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-inspect-generic-void-empty-with-variant-any-optional.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-inspect-generic-void-empty-with-variant-any-optional.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-interpolation.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-interpolation.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-intro-example-hello-2022.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-intro-example-hello-2022.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-intro-example-three-loops.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-intro-example-three-loops.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-lifetime-safety-pointer-init-1-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-lifetime-safety-reject-null-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-look-up-parameter-across-unnamed-function.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-look-up-parameter-across-unnamed-function.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-main-args.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-main-args.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-more-wildcards.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-more-wildcards.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-print.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-print.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-raw-string-literal-and-interpolation.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-raw-string-literal-and-interpolation.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-repeated-call.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-repeated-call.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-requires-clauses.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-requires-clauses.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-return-tuple-no-identifier-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-return-tuple-no-type-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-statement-parse-error.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-statement-scope-parameters.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-statement-scope-parameters.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-stdio-with-raii.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-stdio-with-raii.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-stdio.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-stdio.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-synthesize-rightshift-and-rightshifteq.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-synthesize-rightshift-and-rightshifteq.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-template-parameter-lists.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-template-parameter-lists.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-type-and-namespace-aliases.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-type-and-namespace-aliases.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-type-safety-1.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-type-safety-1.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-type-safety-2-with-inspect-expression.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-type-safety-2-with-inspect-expression.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-basics.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-basics.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-down-upcast.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-down-upcast.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-inheritance.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-inheritance.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-order-independence-and-nesting.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-order-independence-and-nesting.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-ordering-via-meta-functions.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-ordering-via-meta-functions.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-smf-and-that-1-provide-everything.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-smf-and-that-1-provide-everything.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-smf-and-that-2-provide-mvconstruct-and-cpassign.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-smf-and-that-2-provide-mvconstruct-and-cpassign.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-smf-and-that-3-provide-mvconstruct-and-mvassign.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-smf-and-that-3-provide-mvconstruct-and-mvassign.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-smf-and-that-4-provide-cpassign-and-mvassign.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-smf-and-that-4-provide-cpassign-and-mvassign.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-smf-and-that-5-provide-nothing-but-general-case.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-smf-and-that-5-provide-nothing-but-general-case.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-that-parameters.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-that-parameters.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-value-types-via-meta-functions.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-types-value-types-via-meta-functions.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-ufcs-member-access-and-chaining.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-ufcs-member-access-and-chaining.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-union.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-union.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-variadics.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-variadics.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-various-string-literals.cpp delete mode 100644 64x0/cc2/regression-tests/test-results/pure2-various-string-literals.cpp2.output delete mode 100644 64x0/cc2/regression-tests/test-results/run-tests.bat delete mode 100644 64x0/cc2/regression-tests/test-results/version delete mode 100644 64x0/cc2/source/build.info delete mode 100644 64x0/cc2/source/common.h delete mode 100644 64x0/cc2/source/cpp2util.h delete mode 100644 64x0/cc2/source/cppfront.cpp delete mode 100644 64x0/cc2/source/io.h delete mode 100644 64x0/cc2/source/lex.h delete mode 100644 64x0/cc2/source/parse.h delete mode 100644 64x0/cc2/source/reflect.h delete mode 100644 64x0/cc2/source/reflect.h2 delete mode 100644 64x0/cc2/source/sema.h delete mode 100644 64x0/cc2/source/to_cpp1.h delete mode 100644 64x0/cc2/source/version.info delete mode 100644 64x0/ccplus.cc delete mode 100644 64x0/ld.cc delete mode 100644 64x0/makefile delete mode 100644 CompilerFrontend/.gitkeep delete mode 100644 CompilerFrontend/cl/.gitignore delete mode 100644 CompilerFrontend/cl/.gitkeep delete mode 100644 CompilerFrontend/cl/bin/.gitkeep delete mode 100644 CompilerFrontend/cl/compiler.d delete mode 100644 CompilerFrontend/cl/main.d delete mode 100644 CompilerFrontend/cl/makefile delete mode 100644 CompilerFrontend/cl/man/mpcc.8 delete mode 100644 CompilerFrontend/cl/test/.gitkeep delete mode 100644 CompilerTools/.gitignore delete mode 100644 CompilerTools/install.d delete mode 100644 CompilerTools/makefile delete mode 100644 CompilerTools/test/.gitkeep create mode 100644 Frontend/.gitkeep create mode 100644 Frontend/Compiler/.gitignore create mode 100644 Frontend/Compiler/.gitkeep create mode 100644 Frontend/Compiler/bin/.gitkeep create mode 100644 Frontend/Compiler/compiler.d create mode 100644 Frontend/Compiler/main.d create mode 100644 Frontend/Compiler/makefile create mode 100644 Frontend/Compiler/man/mpcc.8 create mode 100644 Frontend/Compiler/test/.gitkeep create mode 100644 Tools/.gitignore create mode 100644 Tools/install.d create mode 100644 Tools/makefile create mode 100644 Tools/test/.gitkeep diff --git a/32x0-Drivers/.gitkeep b/32x0-Drivers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/32x0/.gitkeep b/32x0/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/64x0-Drivers/.gitignore b/64x0-Drivers/.gitignore new file mode 100644 index 0000000..49b6abe --- /dev/null +++ b/64x0-Drivers/.gitignore @@ -0,0 +1,30 @@ +bin/ld +bin/mld +bin/cpp +bin/bpp +bin/cc +bin/masm +bin/64ld +bin/64asm +bin/mkcdfs +bin/ccplus +bin/cppfront +bin/bccl + +bin/Assembly.* + +bin/SourceUnitTest/*.c.pp +bin/SourceUnitTest/*.c +bin/SourceUnitTest/*.bccl +bin/SourceUnitTest/*.bccl.pp +bin/SourceUnitTest/*.cc.pp +bin/SourceUnitTest/*.cc +bin/SourceUnitTest/*.cpp.pp +bin/SourceUnitTest/*.cpp +bin/SourceUnitTest/*.cxx.pp +bin/SourceUnitTest/*.cxx +bin/SourceUnitTest/*.masm +bin/SourceUnitTest/*.h +bin/SourceUnitTest/*.64x + +*.cxx.pp \ No newline at end of file diff --git a/64x0-Drivers/64asm.cc b/64x0-Drivers/64asm.cc new file mode 100644 index 0000000..8c13007 --- /dev/null +++ b/64x0-Drivers/64asm.cc @@ -0,0 +1,999 @@ +/* + * ======================================================== + * + * C++Kit + * Copyright Mahrouss Logic, all rights reserved. + * + * ======================================================== + */ + +///////////////////////////////////////////////////////////////////////////////////////// + +// @file masm.cxx +// @author Amlal El Mahrouss +// @brief MP-UX 64x0 Assembler. + +// REMINDER: when dealing with an undefined symbol use (string size):LinkerFindSymbol:(string) +// so that ld will look for it. + +///////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include + +///////////////////// + +// ANSI ESCAPE CODES + +///////////////////// + +#define kBlank "\e[0;30m" +#define kRed "\e[0;31m" +#define kWhite "\e[0;97m" +#define kYellow "\e[0;33m" + +#define kStdOut (std::cout << kWhite) + +static char kOutputArch = CompilerKit::kPefArch64000; + +//! base relocation address for every mp-ux app. +static UInt32 kErrorLimit = 10; +static UInt32 kAcceptableErrors = 0; + +static std::size_t kCounter = 1UL; + +static bool kVerbose = false; + +static std::vector kBytes; +static CompilerKit::AERecordHeader kCurrentRecord{ .fName = "", .fKind = CompilerKit::kPefCode, .fSize = 0, .fOffset = 0 }; + +static std::vector kRecords; +static std::vector kUndefinedSymbols; + +static const std::string kUndefinedSymbol = ":64ld:"; +static const std::string kRelocSymbol = ":mld:"; + +// \brief forward decl. +static std::string masm_check_line(std::string& line, const std::string& file); +static bool masm_read_attributes(std::string& line); +static void masm_read_instruction(std::string& line, const std::string& file); + +namespace detail +{ + void print_error(std::string reason, const std::string& file) noexcept + { + if (reason[0] == '\n') + reason.erase(0, 1); + + kStdOut << kRed << "[ masm ] " << kWhite << ((file == "masm") ? "internal assembler error " : ("in file, " + file)) << kBlank << std::endl; + kStdOut << kRed << "[ masm ] " << kWhite << reason << kBlank << std::endl; + + if (kAcceptableErrors > kErrorLimit) + std::exit(3); + + ++kAcceptableErrors; + } + + void print_warning(std::string reason, const std::string& file) noexcept + { + if (reason[0] == '\n') + reason.erase(0, 1); + + if (!file.empty()) + { + kStdOut << kYellow << "[ file ] " << kWhite << file << kBlank << std::endl; + } + + kStdOut << kYellow << "[ masm ] " << kWhite << reason << kBlank << std::endl; + } +} + +// provide operator<< for AE + +std::ofstream& operator<<(std::ofstream& fp, CompilerKit::AEHeader& container) +{ + fp.write((char*)&container, sizeof(CompilerKit::AEHeader)); + + return fp; +} + +std::ofstream& operator<<(std::ofstream& fp, CompilerKit::AERecordHeader& container) +{ + fp.write((char*)&container, sizeof(CompilerKit::AERecordHeader)); + + return fp; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +// @brief Main entrypoint. + +///////////////////////////////////////////////////////////////////////////////////////// + +int main(int argc, char** argv) +{ + for (size_t i = 1; i < argc; ++i) + { + if (argv[i][0] == '-') + { + if (strcmp(argv[i], "-v") == 0) + { + kStdOut << "64asm: The MP-UX 64x0 Assembler.\n64asm: v1.10\n64asm: Copyright (c) 2023 Mahrouss Logic.\n"; + return 0; + } + + if (strcmp(argv[i], "-h") == 0) + { + kStdOut << "64asm: The MP-UX 64x0 Assembler.\n64asm: Copyright (c) 2023 Mahrouss Logic.\n"; + kStdOut << "-v: Print program version.\n"; + kStdOut << "-verbose: Print verbose output.\n"; + kStdOut << "-m64000: Compile for the X64000 instruction set.\n"; + + return 0; + } + else if (strcmp(argv[i], "-verbose") == 0) + { + kVerbose = true; + continue; + } + + kStdOut << "64asm: ignore " << argv[i] << "\n"; + continue; + } + + if (!std::filesystem::exists(argv[i])) + continue; + + std::string object_output(argv[i]); + + if (object_output.find(kAsmFileExt64x0) != std::string::npos) + { + object_output.erase(object_output.find(kAsmFileExt64x0), std::size(kAsmFileExt64x0)); + } + + object_output += kObjectFileExt; + + std::ifstream file_ptr(argv[i]); + std::ofstream file_ptr_out(object_output, + std::ofstream::binary); + + if (file_ptr_out.bad()) + { + if (kVerbose) + { + kStdOut << "64asm: error: " << strerror(errno) << "\n"; + } + } + + std::string line; + + CompilerKit::AEHeader hdr{ 0 }; + + memset(hdr.fPad, kAEInvalidOpcode, kAEPad); + + hdr.fMagic[0] = kAEMag0; + hdr.fMagic[1] = kAEMag1; + hdr.fSize = sizeof(CompilerKit::AEHeader); + hdr.fArch = kOutputArch; + + ///////////////////////////////////////////////////////////////////////////////////////// + + // COMPILATION LOOP + + ///////////////////////////////////////////////////////////////////////////////////////// + + while (std::getline(file_ptr, line)) + { + if (auto ln = masm_check_line(line, argv[i]); + !ln.empty()) + { + detail::print_error(ln, argv[i]); + continue; + } + + try + { + masm_read_attributes(line); + masm_read_instruction(line, argv[i]); + } + catch(const std::exception& e) + { + if (kVerbose) + { + std::string what = e.what(); + detail::print_warning("exit because of: " + what, "masm"); + } + + std::filesystem::remove(object_output); + goto masm_fail_exit; + } + + } + + if (kVerbose) + kStdOut << "64asm: writing to file...\n"; + + // this is the final step, write everything to the file. + + auto pos = file_ptr_out.tellp(); + + hdr.fCount = kRecords.size() + kUndefinedSymbols.size(); + + file_ptr_out << hdr; + + if (kRecords.empty()) + { + std::filesystem::remove(object_output); + return -1; + } + + kRecords[kRecords.size() - 1].fSize = kBytes.size(); + + std::size_t record_count = 0UL; + + for (auto& rec : kRecords) + { + if (kVerbose) + kStdOut << "64asm: wrote record " << rec.fName << " to file...\n"; + + rec.fFlags |= CompilerKit::kKindRelocationAtRuntime; + rec.fOffset = record_count; + ++record_count; + + file_ptr_out << rec; + } + + // increment once again, so that we won't lie about the kUndefinedSymbols. + ++record_count; + + for (auto& sym : kUndefinedSymbols) + { + CompilerKit::AERecordHeader _record_hdr{ 0 }; + + if (kVerbose) + kStdOut << "64asm: wrote symbol " << sym << " to file...\n"; + + _record_hdr.fKind = kAEInvalidOpcode; + _record_hdr.fSize = sym.size(); + _record_hdr.fOffset = record_count; + + ++record_count; + + memset(_record_hdr.fPad, kAEInvalidOpcode, kAEPad); + memcpy(_record_hdr.fName, sym.c_str(), sym.size()); + + file_ptr_out << _record_hdr; + + ++kCounter; + } + + auto pos_end = file_ptr_out.tellp(); + + file_ptr_out.seekp(pos); + + hdr.fStartCode = pos_end; + hdr.fCodeSize = kBytes.size(); + + file_ptr_out << hdr; + + file_ptr_out.seekp(pos_end); + + // byte from byte, we write this. + for (auto& byte : kBytes) + { + file_ptr_out.write(reinterpret_cast(&byte), sizeof(byte)); + } + + if (kVerbose) + kStdOut << "64asm: wrote program bytes to file...\n"; + + file_ptr_out.flush(); + file_ptr_out.close(); + + if (kVerbose) + kStdOut << "64asm: exit succeeded with code 0.\n"; + + return 0; + } + +masm_fail_exit: + + if (kVerbose) + kStdOut << "64asm: exit failed with code -1.\n"; + + return -1; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +// @brief Check for attributes +// returns true if any was found. + +///////////////////////////////////////////////////////////////////////////////////////// + +static bool masm_read_attributes(std::string& line) +{ + // import is the opposite of export, it signals to the ld + // that we need this symbol. + if (ParserKit::find_word(line, "import ")) + { + auto name = line.substr(line.find("import ") + strlen("import ")); + + std::string result = std::to_string(name.size()); + result += kUndefinedSymbol; + + // mangle this + for (char & j : name) + { + if (j == ' ' || + j == ',') + j = '$'; + + } + + result += name; + + if (name.find(".text") != std::string::npos) + { + // data is treated as code. + kCurrentRecord.fKind = CompilerKit::kPefCode; + } + else if (name.find(".data") != std::string::npos) + { + // no code will be executed from here. + kCurrentRecord.fKind = CompilerKit::kPefData; + } + else if (name.find(".page_zero") != std::string::npos) + { + // this is a bss section. + kCurrentRecord.fKind = CompilerKit::kPefZero; + } + + // this is a special case for the start stub. + // we want this so that ld can find it. + + if (name == "__start") + { + kCurrentRecord.fKind = CompilerKit::kPefCode; + } + + // now we can tell the code size of the previous kCurrentRecord. + + if (!kRecords.empty()) + kRecords[kRecords.size() - 1].fSize = kBytes.size(); + + memset(kCurrentRecord.fName, 0, kAESymbolLen); + memcpy(kCurrentRecord.fName, result.c_str(), result.size()); + + ++kCounter; + + memset(kCurrentRecord.fPad, kAEInvalidOpcode, kAEPad); + + kRecords.emplace_back(kCurrentRecord); + + return true; + } + + // export is a special keyword used by masm to tell the AE output stage to mark this section as a header. + // it currently supports .text, .data., page_zero + if (ParserKit::find_word(line, "export ")) + { + auto name = line.substr(line.find("export ") + strlen("export ")); + + for (char& j : name) + { + if (j == ' ') + j = '$'; + + } + + if (name.find(',') != std::string::npos) + name.erase(name.find(',')); + + if (name.find(".text") != std::string::npos) + { + // data is treated as code. + kCurrentRecord.fKind = CompilerKit::kPefCode; + } + else if (name.find(".data") != std::string::npos) + { + // no code will be executed from here. + kCurrentRecord.fKind = CompilerKit::kPefData; + } + else if (name.find(".page_zero") != std::string::npos) + { + // this is a bss section. + kCurrentRecord.fKind = CompilerKit::kPefZero; + } + + // this is a special case for the start stub. + // we want this so that ld can find it. + + if (name == "__start") + { + kCurrentRecord.fKind = CompilerKit::kPefCode; + } + + // now we can tell the code size of the previous kCurrentRecord. + + if (!kRecords.empty()) + kRecords[kRecords.size() - 1].fSize = kBytes.size(); + + memset(kCurrentRecord.fName, 0, kAESymbolLen); + memcpy(kCurrentRecord.fName, name.c_str(), name.size()); + + ++kCounter; + + memset(kCurrentRecord.fPad, kAEInvalidOpcode, kAEPad); + + kRecords.emplace_back(kCurrentRecord); + + return true; + } + + return false; +} + +// \brief algorithms and helpers. + +namespace detail::algorithm +{ + // \brief authorize a brief set of characters. + static inline bool is_not_alnum_space(char c) + { + return !(isalpha(c) || isdigit(c) || (c == ' ') || (c == '\t') || (c == ',') || + (c == '(') || (c == ')') || (c == '"') || (c == '\'') || (c == '[') || (c == ']') + || (c == '+') || (c == '_')); + } + + bool is_valid(const std::string &str) + { + if (ParserKit::find_word(str, "export ") || + ParserKit::find_word(str, "import ")) + return true; + + return find_if(str.begin(), str.end(), is_not_alnum_space) == str.end(); + } +} + +///////////////////////////////////////////////////////////////////////////////////////// + +// @brief Check for line (syntax check) + +///////////////////////////////////////////////////////////////////////////////////////// + +static std::string masm_check_line(std::string& line, const std::string& file) +{ + (void)file; + + std::string err_str; + + while (line.find('\t') != std::string::npos) + line.erase(line.find('\t'), 1); + + if (line.empty() || + ParserKit::find_word(line, "import ") || + ParserKit::find_word(line, "export ") || + ParserKit::find_word(line, "#") || + ParserKit::find_word(line, ";") || + ParserKit::find_word(line, "layout")) + { + if (line.find('#') != std::string::npos) + { + line.erase(line.find('#')); + } + + if (line.find(';') != std::string::npos) + { + line.erase(line.find(';')); + } + + return err_str; + } + + if (!detail::algorithm::is_valid(line)) + { + err_str = "Line contains non alphanumeric characters.\nhere -> "; + err_str += line; + + return err_str; + } + + // check for a valid instruction format. + + if (line.find(',') != std::string::npos) + { + if (line.find(',') + 1 == line.size()) + { + err_str += "\ninstruction lacks right register, here -> "; + err_str += line.substr(line.find(',')); + + return err_str; + } + else + { + bool nothing_on_right = true; + + if (line.find(',') + 1 > line.size()) + { + err_str += "\ninstruction not complete, here -> "; + err_str += line; + + return err_str; + } + + auto substr = line.substr(line.find(',') + 1); + + for (auto& ch : substr) + { + if (ch != ' ' && + ch != '\t') + { + nothing_on_right = false; + } + } + + // this means we found nothing after that ',' . + if (nothing_on_right) + { + err_str += "\ninstruction not complete, here -> "; + err_str += line; + + return err_str; + } + } + } + + // these do take an argument. + std::vector operands_inst = { "jb", "psh", "stw", "ldw", "lda", "sta" }; + + // these don't. + std::vector filter_inst = { "jlr", "jrl", "syscall" }; + + for (auto& opcode64x0 : kOpcodes64x0) + { + if (line.find(opcode64x0.fName) != std::string::npos) + { + for (auto& op : operands_inst) + { + // if only instruction found. + if (line == op) + { + err_str += "\nmalformed "; + err_str += op; + err_str += " instruction, here -> "; + err_str += line; + } + } + + // if it is like that -> addr1, 0x0 + if (auto it = std::find(filter_inst.begin(), filter_inst.end(), opcode64x0.fName); + it == filter_inst.cend()) + { + if (!isspace(line[line.find(opcode64x0.fName) + strlen(opcode64x0.fName)])) + { + err_str += "\nmissing space between "; + err_str += opcode64x0.fName; + err_str += " and operands.\nhere -> "; + err_str += line; + } + } + + return err_str; + } + } + + err_str += "unknown syntax: "; + err_str += line; + + return err_str; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +// @brief internal namespace + +///////////////////////////////////////////////////////////////////////////////////////// + +namespace detail +{ + union number_cast + { + explicit number_cast(UInt64 raw) + : raw(raw) + {} + + char number[8]; + UInt64 raw; + }; +} + +static bool masm_write_number(const std::size_t& pos, std::string& jump_label) +{ + if (!isdigit(jump_label[pos])) + return false; + + switch (jump_label[pos+1]) + { + case 'x': + { + if (auto res = strtoq(jump_label.substr(pos + 2).c_str(), + nullptr, 16); + !res) + { + if (errno != 0) + { + detail::print_error("invalid hex number: " + jump_label, "masm"); + throw std::runtime_error("invalid_hex"); + } + } + + detail::number_cast num(strtoq(jump_label.substr(pos + 2).c_str(), + nullptr, 16)); + + for (char& i : num.number) + { + kBytes.push_back(i); + } + + if (kVerbose) + { + kStdOut << "64asm: found a base 16 number here: " << jump_label.substr(pos) << "\n"; + } + + return true; + } + case 'b': + { + if (auto res = strtoq(jump_label.substr(pos + 2).c_str(), + nullptr, 2); + !res) + { + if (errno != 0) + { + detail::print_error("invalid binary number: " + jump_label, "masm"); + throw std::runtime_error("invalid_bin"); + } + } + + detail::number_cast num(strtoq(jump_label.substr(pos + 2).c_str(), + nullptr, 2)); + + if (kVerbose) + { + kStdOut << "64asm: found a base 2 number here: " << jump_label.substr(pos) << "\n"; + } + + for (char& i : num.number) + { + kBytes.push_back(i); + } + + return true; + } + case 'o': + { + if (auto res = strtoq(jump_label.substr(pos + 2).c_str(), + nullptr, 7); + !res) + { + if (errno != 0) + { + detail::print_error("invalid octal number: " + jump_label, "masm"); + throw std::runtime_error("invalid_octal"); + } + } + + detail::number_cast num(strtoq(jump_label.substr(pos + 2).c_str(), + nullptr, 7)); + + if (kVerbose) + { + kStdOut << "64asm: found a base 8 number here: " << jump_label.substr(pos) << "\n"; + } + + for (char& i : num.number) + { + kBytes.push_back(i); + } + + return true; + } + default: + { + break; + } + } + + /* check for errno and stuff like that */ + if (auto res = strtoq(jump_label.substr(pos).c_str(), + nullptr, 10); + !res) + { + if (errno != 0) + { + return false; + } + } + + detail::number_cast num(strtoq(jump_label.substr(pos).c_str(), + nullptr, 10)); + + for (char& i : num.number) + { + kBytes.push_back(i); + } + + if (kVerbose) + { + kStdOut << "64asm: found a base 10 number here: " << jump_label.substr(pos) << "\n"; + } + + return true; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +// @brief Read and write an instruction to the output array. + +///////////////////////////////////////////////////////////////////////////////////////// + +static void masm_read_instruction(std::string& line, const std::string& file) +{ + if (ParserKit::find_word(line, "export ")) + return; + + for (auto& opcode64x0 : kOpcodes64x0) + { + // strict check here + if (ParserKit::find_word(line, opcode64x0.fName) && + detail::algorithm::is_valid(line)) + { + std::string name(opcode64x0.fName); + std::string jump_label, cpy_jump_label; + + kBytes.emplace_back(opcode64x0.fOpcode); + kBytes.emplace_back(opcode64x0.fFunct3); + kBytes.emplace_back(opcode64x0.fFunct7); + + // check funct7 type. + switch (opcode64x0.fFunct7) + { + // reg to reg means register to register transfer operation. + case kAsmRegToReg: + case kAsmImmediate: + { + // \brief how many registers we found. + std::size_t found_some = 0UL; + + for (size_t line_index = 0UL; line_index < line.size(); line_index++) + { + if (line[line_index] == 'r' && + isdigit(line[line_index + 1])) + { + std::string register_syntax = kAsmRegisterPrefix; + register_syntax += line[line_index + 1]; + + if (isdigit(line[line_index + 2])) + register_syntax += line[line_index + 2]; + + std::string reg_str; + reg_str += line[line_index + 1]; + + if (isdigit(line[line_index + 2])) + reg_str += line[line_index + 2]; + + // it ranges from r0 to r19 + // something like r190 doesn't exist in the instruction set. + if (kOutputArch == CompilerKit::kPefArch64000) + { + if (isdigit(line[line_index + 3]) && + isdigit(line[line_index + 2])) + { + reg_str += line[line_index + 3]; + detail::print_error("invalid register index, r" + reg_str + "\nnote: 64x0 accepts registers from r0 to r20.", file); + throw std::runtime_error("invalid_register_index"); + } + } + + // finally cast to a size_t + std::size_t reg_index = strtoq( + reg_str.c_str(), + nullptr, + 10); + + if (reg_index > kAsmRegisterLimit) + { + detail::print_error("invalid register index, r" + reg_str, file); + throw std::runtime_error("invalid_register_index"); + } + + kBytes.emplace_back(reg_index); + ++found_some; + + if (kVerbose) + { + if (kOutputArch == CompilerKit::kPefArch64000) + kStdOut << "64asm: 64x0 register found: " << register_syntax << "\n"; + else + kStdOut << "64asm: register found: " << register_syntax << "\n"; + + kStdOut << "64asm: Number of registers: " << found_some << "\n"; + } + } + } + + // we're not in immediate addressing, reg to reg. + if (opcode64x0.fFunct7 != kAsmImmediate) + { + // remember! register to register! + if (found_some == 1) + { + detail::print_error("unrecognized register found.\ntip: each masm register starts with 'r'.\nline: " + line, file); + throw std::runtime_error("not_a_register"); + } + } + + if (found_some < 1 && + name != "psh" && + name != "ldw" && + name != "lda" && + name != "stw" && + name != "jb") + { + detail::print_error("invalid combination of opcode and registers.\nline: " + line, file); + throw std::runtime_error("invalid_comb_op_reg"); + } + else if (found_some == 1 && + name == "add" ) + { + detail::print_error("invalid combination of opcode and registers.\nline: " + line, file); + throw std::runtime_error("invalid_comb_op_reg"); + } + else if (found_some == 1 && + name == "dec") + { + detail::print_error("invalid combination of opcode and registers.\nline: " + line, file); + throw std::runtime_error("invalid_comb_op_reg"); + } + + if (found_some > 0 && + name == "pop") + { + detail::print_error("invalid combination for opcode 'pop'.\ntip: it expects nothing.\nline: " + line, file); + throw std::runtime_error("invalid_comb_op_pop"); + } + } + default: + break; + + } + + // try to fetch a number from the name + if (name == "psh" || + name == "jb" || + name == "stw" || + name == "ldw" || + name == "lda" || + name == "sta") + { + auto where_string = name; + + // if we load something, we'd need it's symbol/literal + if (name == "stw" || + name == "ldw" || + name == "lda" || + name == "sta") + where_string = ","; + + jump_label = line.substr(line.find(where_string) + where_string.size()); + cpy_jump_label = jump_label; + + // replace any spaces with $ + if (jump_label[0] == ' ') + { + while (jump_label.find(' ') != std::string::npos) + { + if (isalnum(jump_label[0]) || + isdigit(jump_label[0])) + break; + + jump_label.erase(jump_label.find(' '), 1); + } + } + + if (!masm_write_number(0, jump_label)) + { + // sta expects this: sta 0x000000, r0 + if (name == "sta") + { + detail::print_error("invalid combination of opcode and operands.\nhere ->" + line, file); + throw std::runtime_error("invalid_comb_op_ops"); + } + + goto masm_write_label; + } + else + { + if (name == "sta" && + cpy_jump_label.find("import ") != std::string::npos) + { + detail::print_error("invalid usage import on 'sta', here: " + line, file); + throw std::runtime_error("invalid_sta_usage"); + } + } + } + + // This is the case where we jump to a label, it is also used as a goto. + if (name == "jb") + { +masm_write_label: + if (cpy_jump_label.find('\n') != std::string::npos) + cpy_jump_label.erase(cpy_jump_label.find('\n'), 1); + + if (cpy_jump_label.find("import ") == std::string::npos && + name == "psh" || + cpy_jump_label.find("import ") == std::string::npos && + name == "jb") + { + detail::print_error("import not found on jump label, please add one.", file); + throw std::runtime_error("import_jmp_lbl"); + } + else if (cpy_jump_label.find("import ") != std::string::npos) + { + if (name == "sta") + { + detail::print_error("import is not allowed on a sta operation.", file); + throw std::runtime_error("import_sta_op"); + } + + cpy_jump_label.erase(cpy_jump_label.find("import "), strlen("import ")); + } + + while (cpy_jump_label.find(' ') != std::string::npos) + { + cpy_jump_label.erase(cpy_jump_label.find(' '), 1); + } + + if (cpy_jump_label.size() < 1) + { + detail::print_error("label is empty, can't jump on it.", file); + throw std::runtime_error("label_empty"); + } + + auto mld_reloc_str = std::to_string(cpy_jump_label.size()); + mld_reloc_str += kRelocSymbol; + mld_reloc_str += cpy_jump_label; + + bool ignore_back_slash = false; + + for (auto& reloc_chr : mld_reloc_str) + { + if (reloc_chr == '\\') + { + ignore_back_slash = true; + continue; + } + + if (ignore_back_slash) + { + ignore_back_slash = false; + continue; + } + + kBytes.push_back(reloc_chr); + } + } + + kBytes.push_back('\0'); + break; + } + } +} + +// Last rev 8-1-24 \ No newline at end of file diff --git a/64x0-Drivers/64ld.cc b/64x0-Drivers/64ld.cc new file mode 100644 index 0000000..ca43fc0 --- /dev/null +++ b/64x0-Drivers/64ld.cc @@ -0,0 +1,587 @@ +/* + * ======================================================== + * + * C++Kit + * Copyright Mahrouss Logic, all rights reserved. + * + * ======================================================== + */ + +// @file ld.cxx +// @author Amlal El Mahrouss (amlel) +// @brief MP-UX linker. + +// README: Do not look up for anything with .text/.data/.page_zero! +// It will be loaded when program will start up! +// Unlike $$dynamic$$ these containers will be loaded before CUS will do its job. + +#include + +//! Portable Executable Format +#include + +//! Advanced Executable Object Format +#include + +#include +#include +#include + +//! @brief standard PEF entry. +#define kPefStart "__start" + +#define kToolVersion "64ld v1.171, (c) Mahrouss Logic" + +#define StringCompare(DST, SRC) strcmp(DST, SRC) + +#define kPefNoCpu 0U +#define kPefNoSubCpu 0U + +#define kWhite "\e[0;97m" +#define kStdOut (std::cout << kWhite) + +#define kPefDeaultOrg (uint64_t)0x10000 +#define kPefLinkerNumId 0x5046FF +#define kPefAbiId "Container:Abi:64x0" + +enum { kAbiMpUx = 0x5046 /* PF */ }; + +std::ofstream& operator<<(std::ofstream& fp, CompilerKit::PEFContainer& container) +{ + fp.write((char*)&container, sizeof(CompilerKit::PEFContainer)); + return fp; +} + +std::ofstream& operator<<(std::ofstream& fp, CompilerKit::PEFCommandHeader& container) +{ + fp.write((char*)&container, sizeof(CompilerKit::PEFCommandHeader)); + return fp; +} + +static std::string kOutput = "a" kPefExt; +static Int32 kAbi = kAbiMpUx; +static Int32 kSubArch = kPefNoSubCpu; +static Int32 kArch = CompilerKit::kPefArch64000; +static Bool kFatBinaryEnable = false; +static Bool kStartFound = false; +static Bool kDuplicateSymbols = false; +static Bool kVerbose = false; + +/* ld is to be found, mld is to be found at runtime. */ +static const char* kLdDefineSymbol = ":64ld:"; +static const char* kLdDynamicSym = ":mld:"; + +/* object code and list. */ +static std::vector kObjectList; +static std::vector kObjectBytes; + +int main(int argc, char** argv) +{ + bool is_executable = true; + + for (size_t i = 1; i < argc; ++i) + { + if (StringCompare(argv[i], "-h") == 0) + { + kStdOut << kToolVersion << "\n"; + kStdOut << "-v: Print program version.\n"; + kStdOut << "-verbose: Print program backtrace (verbose mode).\n"; + kStdOut << "-shared: Output as a shared library.\n"; + kStdOut << "-fatbin: Output as FAT PEF.\n"; + kStdOut << "-o: Select output filename.\n"; + + // bye + return 0; + } + else if (StringCompare(argv[i], "-v") == 0 || + StringCompare(argv[i], "--version") == 0) + { + kStdOut << kToolVersion << std::endl; + // bye :D + return 0; + } + else if (StringCompare(argv[i], "-fatbin") == 0) + { + kFatBinaryEnable = true; + + continue; + } + else if (StringCompare(argv[i], "-verbose") == 0) + { + kVerbose = true; + continue; + } + else if (StringCompare(argv[i], "-shared") == 0) + { + if (kOutput.find(kPefExt) != std::string::npos) + kOutput.erase(kOutput.find(kPefExt), strlen(kPefExt)); + + kOutput += kPefDylibExt; + + is_executable = false; + + continue; + } + else if (StringCompare(argv[i], "-o") == 0) + { + kOutput = argv[i+1]; + ++i; + + continue; + } + else + { + if (argv[i][0] == '-') + { + kStdOut << "ld: unknown flag: " << argv[i] << "\n"; + return -CXXKIT_EXEC_ERROR; + } + + kObjectList.emplace_back(argv[i]); + + continue; + } + } + + // sanity check. + if (kObjectList.empty()) + { + kStdOut << "ld: no input files." << std::endl; + return CXXKIT_EXEC_ERROR; + } + else + { + // check for exisiting files. + for (auto& obj : kObjectList) + { + if (!std::filesystem::exists(obj)) + { + // if filesystem doesn't find file + // -> throw error. + kStdOut << "ld: no such file: " << obj << std::endl; + return CXXKIT_EXEC_ERROR; + } + } + } + + // PEF expects a valid architecture when outputing a binary. + if (kArch == 0) + { + kStdOut << "ld: no target architecture set, can't continue." << std::endl; + return CXXKIT_EXEC_ERROR; + } + + CompilerKit::PEFContainer pef_container{}; + + int32_t archs = kArch; + + pef_container.Count = 0UL; + pef_container.Kind = CompilerKit::kPefKindExec; + pef_container.SubCpu = kSubArch; + pef_container.Linker = kPefLinkerNumId; // Mahrouss Logic Linker + pef_container.Abi = kAbi; // Multi-Processor UX ABI + pef_container.Magic[0] = kPefMagic[kFatBinaryEnable ? 2 : 0]; + pef_container.Magic[1] = kPefMagic[1]; + pef_container.Magic[2] = kPefMagic[kFatBinaryEnable ? 0 : 2]; + pef_container.Version = kPefVersion; + + // specify the start address, can be 0x10000 + pef_container.Start = kPefDeaultOrg; + pef_container.HdrSz = sizeof(CompilerKit::PEFContainer); + + std::ofstream output_fc(kOutput, std::ofstream::binary); + + if (output_fc.bad()) + { + if (kVerbose) + { + kStdOut << "ld: error: " << strerror(errno) << "\n"; + } + + return -CXXKIT_FILE_NOT_FOUND; + } + + //! Read AE to convert as PEF. + + std::vector pef_command_hdrs; + + for (const auto& i : kObjectList) + { + if (!std::filesystem::exists(i)) + continue; + + CompilerKit::AEHeader hdr{}; + + std::ifstream input_object(i, std::ifstream::binary); + + input_object.read((char*)&hdr, sizeof(CompilerKit::AEHeader)); + + auto ae_header = hdr; + + if (ae_header.fArch != kArch) + { + if (kVerbose) + kStdOut << "ld: pef: is a fat binary? : "; + + if (!kFatBinaryEnable) + { + if (kVerbose) + kStdOut << "no.\n"; + + kStdOut << "ld: error: object " << i << " is a different kind of architecture and output isn't treated as FAT binary." << std::endl; + + std::remove(kOutput.c_str()); + return -CXXKIT_FAT_ERROR; + } + else + { + if (kVerbose) + { + kStdOut << "yes.\n"; + } + } + } + + if (ae_header.fMagic[0] == kAEMag0 && + ae_header.fMagic[1] == kAEMag1 && + ae_header.fSize == sizeof(CompilerKit::AEHeader)) + { + // append arch type to archs varaible. + archs |= ae_header.fArch; + std::size_t cnt = ae_header.fCount; + + if (kVerbose) + kStdOut << "ld: object header found, record count: " << cnt << "\n"; + + pef_container.Count = cnt; + + char* raw_ae_records = new char[cnt * sizeof(CompilerKit::AERecordHeader)]; + memset(raw_ae_records, 0, cnt * sizeof(CompilerKit::AERecordHeader)); + + input_object.read(raw_ae_records, std::streamsize(cnt * sizeof(CompilerKit::AERecordHeader))); + + auto* ae_records = (CompilerKit::AERecordHeader*)raw_ae_records; + + for (size_t ae_record_index = 0; ae_record_index < cnt; ++ae_record_index) + { + CompilerKit::PEFCommandHeader command_header{ 0 }; + + memcpy(command_header.Name, ae_records[ae_record_index].fName, kPefNameLen); + + // check this header if it's any valid. + if (std::string(command_header.Name).find(".text") == std::string::npos && + std::string(command_header.Name).find(".data") == std::string::npos && + std::string(command_header.Name).find(".page_zero") == std::string::npos) + { + if (std::string(command_header.Name).find(kPefStart) == std::string::npos && + *command_header.Name == 0) + { + if (std::string(command_header.Name).find(kLdDefineSymbol) != std::string::npos) + { + goto ld_mark_header; + } + else + { + continue; + } + } + } + + if (std::string(command_header.Name).find(kPefStart) != std::string::npos && + std::string(command_header.Name).find(".text") != std::string::npos) + { + kStartFound = true; + pef_container.Start = ae_records[ae_record_index].fOffset; + } + +ld_mark_header: + command_header.Offset = ae_records[ae_record_index].fOffset; + command_header.Kind = ae_records[ae_record_index].fKind; + command_header.Size = ae_records[ae_record_index].fSize; + + if (kVerbose) + kStdOut << "ld: object record: " << ae_records[ae_record_index].fName << " was marked.\n"; + + pef_command_hdrs.emplace_back(command_header); + } + + delete[] raw_ae_records; + + std::vector bytes; + bytes.resize(ae_header.fCodeSize); + + input_object.seekg(std::streamsize(ae_header.fStartCode)); + input_object.read(bytes.data(), std::streamsize(ae_header.fCodeSize)); + + for (auto& byte : bytes) + { + kObjectBytes.push_back(byte); + } + + continue; + } + + kStdOut << "ld: not an object: " << i << std::endl; + std::remove(kOutput.c_str()); + + // don't continue, it is a fatal error. + return -CXXKIT_EXEC_ERROR; + } + + pef_container.Cpu = archs; + + output_fc << pef_container; + + if (kVerbose) + { + kStdOut << "ld: pef: wrote container header.\n"; + } + + output_fc.seekp(std::streamsize(pef_container.HdrSz)); + + std::vector not_found; + std::vector symbols; + + // step 2: check for errors (multiple symbols, undefined ones) + + for (auto & pef_command_hdr : pef_command_hdrs) + { + // check if this symbol needs to be resolved. + if (std::string(pef_command_hdr.Name).find(kLdDefineSymbol) != + std::string::npos && + std::string(pef_command_hdr.Name).find(kLdDynamicSym) == + std::string::npos) + { + if (kVerbose) + kStdOut << "ld: found undefined symbol: " << pef_command_hdr.Name << "\n"; + + if (auto it = std::find(not_found.begin(), not_found.end(), std::string(pef_command_hdr.Name)); + it == not_found.end()) + { + not_found.emplace_back(pef_command_hdr.Name); + } + } + + symbols.emplace_back(pef_command_hdr.Name); + } + + // Now try to solve these symbols. + + for (size_t not_found_idx = 0; not_found_idx < pef_command_hdrs.size(); ++not_found_idx) + { + if (auto it = std::find(not_found.begin(), not_found.end(), std::string(pef_command_hdrs[not_found_idx].Name)); + it != not_found.end()) + { + std::string symbol_imp = *it; + + if (symbol_imp.find(kLdDefineSymbol) == std::string::npos) + continue; + + // erase the lookup prefix. + symbol_imp.erase(0, symbol_imp.find(kLdDefineSymbol) + strlen(kLdDefineSymbol)); + + // demangle everything. + while (symbol_imp.find('$') != std::string::npos) + symbol_imp.erase(symbol_imp.find('$'), 1); + + // the reason we do is because, this may not match the symbol, and we need + // to look for other matching symbols. + for (auto& pef_command_hdr : pef_command_hdrs) + { + if (std::string(pef_command_hdr.Name).find(symbol_imp) != std::string::npos && + std::string(pef_command_hdr.Name).find(kLdDefineSymbol) == std::string::npos) + { + std::string undefined_symbol = pef_command_hdr.Name; + auto result_of_sym = undefined_symbol.substr(undefined_symbol.find(symbol_imp)); + + for (int i = 0; result_of_sym[i] != 0; ++i) + { + if (result_of_sym[i] != symbol_imp[i]) + goto ld_continue_search; + + } + + not_found.erase(it); + + if (kVerbose) + kStdOut << "ld: found symbol: " << pef_command_hdr.Name << "\n"; + + break; + } + } + +ld_continue_search: + continue; + } + } + + // step 3: check for errors (recheck if we have those symbols.) + + if (!kStartFound && is_executable) + { + if (kVerbose) + kStdOut << "ld: undefined symbol: __start, you may have forget to link against your runtime library.\n"; + + kStdOut << "ld: undefined entrypoint " << kPefStart << " for executable " << kOutput << "\n"; + } + + // step 4: write some pef commands. + + CompilerKit::PEFCommandHeader date_header{}; + + time_t timestamp = time(nullptr); + + std::string timestamp_str = "ContainerDate:"; + timestamp_str += std::to_string(timestamp); + + strcpy(date_header.Name, timestamp_str.c_str()); + + date_header.Flags = 0; + date_header.Kind = CompilerKit::kPefData; + date_header.Offset = output_fc.tellp(); + date_header.Size = timestamp_str.size(); + + output_fc << date_header; + + CompilerKit::PEFCommandHeader abi_header{}; + + memcpy(abi_header.Name, kPefAbiId, strlen(kPefAbiId)); + + abi_header.Size = strlen(kPefAbiId); + abi_header.Offset = output_fc.tellp(); + abi_header.Flags = 0; + abi_header.Kind = CompilerKit::kPefLinkerID; + + output_fc << abi_header; + + CompilerKit::PEFCommandHeader uuid_header{}; + + uuid_t uuid{ 0 }; + uuid_generate_random(uuid); + + memcpy(uuid_header.Name, "UUID_TYPE:4:", strlen("UUID_TYPE:4:")); + memcpy(uuid_header.Name + strlen("UUID_TYPE:4:"), uuid, 16); + + uuid_header.Size = 16; + uuid_header.Offset = output_fc.tellp(); + uuid_header.Flags = 0; + uuid_header.Kind = 0; + + output_fc << uuid_header; + + // prepare a symbol vector. + std::vector undefined_symbols; + std::vector duplicate_symbols; + std::vector symbols_to_resolve; + + // Finally write down the command headers. + // And check for any duplications + for (size_t cmd_hdr = 0UL; cmd_hdr < pef_command_hdrs.size(); ++cmd_hdr) + { + if (std::string(pef_command_hdrs[cmd_hdr].Name).find(kLdDefineSymbol) != + std::string::npos && + std::string(pef_command_hdrs[cmd_hdr].Name).find(kLdDynamicSym) == + std::string::npos) + { + // ignore :64ld: headers, they do not contain code. + continue; + } + + std::string sym_name = pef_command_hdrs[cmd_hdr].Name; + + if (!sym_name.empty()) + { + undefined_symbols.emplace_back(sym_name); + } + + output_fc << pef_command_hdrs[cmd_hdr]; + + for (size_t cmd_hdr_sub = 0UL; cmd_hdr_sub < pef_command_hdrs.size(); ++cmd_hdr_sub) + { + if (cmd_hdr_sub == cmd_hdr) + continue; + + if (std::string(pef_command_hdrs[cmd_hdr_sub].Name).find(kLdDefineSymbol) != + std::string::npos && + std::string(pef_command_hdrs[cmd_hdr_sub].Name).find(kLdDynamicSym) == + std::string::npos) + { + // ignore :64ld: headers, they do not contain code. + continue; + } + + auto& pef_command_hdr = pef_command_hdrs[cmd_hdr_sub]; + + if (pef_command_hdr.Name == std::string(pef_command_hdrs[cmd_hdr].Name)) + { + if (std::find(duplicate_symbols.cbegin(), duplicate_symbols.cend(), pef_command_hdr.Name) == duplicate_symbols.cend()) + { + duplicate_symbols.emplace_back(pef_command_hdr.Name); + } + + if (kVerbose) + kStdOut << "ld: found duplicate symbol: " << pef_command_hdr.Name << "\n"; + + kDuplicateSymbols = true; + } + } + } + + if (!duplicate_symbols.empty()) + { + for (auto& symbol : duplicate_symbols) + { + kStdOut << "ld: multiple symbols of " << symbol << ".\n"; + } + + std::remove(kOutput.c_str()); + return -CXXKIT_EXEC_ERROR; + } + + // step 2.5: write program bytes. + + for (auto byte : kObjectBytes) + { + output_fc << byte; + } + + if (kVerbose) + kStdOut << "ld: wrote code for: " << kOutput << "\n"; + + // step 3: check if we have those symbols + + std::vector unreferenced_symbols; + + for (auto & pef_command_hdr : pef_command_hdrs) + { + if (auto it = std::find(not_found.begin(), not_found.end(), std::string(pef_command_hdr.Name)); + it != not_found.end()) + { + unreferenced_symbols.emplace_back(pef_command_hdr.Name); + } + } + + if (!unreferenced_symbols.empty()) + { + for (auto& unreferenced_symbol : unreferenced_symbols) + { + kStdOut << "ld: undefined symbol " << unreferenced_symbol << "\n"; + } + } + + if (!kStartFound || + kDuplicateSymbols && + std::filesystem::exists(kOutput) || + !unreferenced_symbols.empty()) + { + if (kVerbose) + kStdOut << "ld: code for: " << kOutput << ", is corrupt, removing file...\n"; + + std::remove(kOutput.c_str()); + return -CXXKIT_EXEC_ERROR; + } + + return 0; +} + +// Last rev 8-1-24 \ No newline at end of file diff --git a/64x0-Drivers/bccl.cc b/64x0-Drivers/bccl.cc new file mode 100644 index 0000000..a522c79 --- /dev/null +++ b/64x0-Drivers/bccl.cc @@ -0,0 +1,1572 @@ +/* + * ======================================================== + * + * bccl + * Copyright Mahrouss Logic, all rights reserved. + * + * ======================================================== + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define kOk 0 + +// TODO: support structs and ., -> + +/* BCCL driver */ +/* This is part of MP-UX BCCL SDK. */ +/* (c) Mahrouss Logic */ + +// @author Amlal El Mahrouss (amlel) +// @file bccl.bccl +// @brief BCCL Compiler. + +///////////////////// + +// ANSI ESCAPE CODES + +///////////////////// + +#define kBlank "\e[0;30m" +#define kRed "\e[0;31m" +#define kWhite "\e[0;97m" + +///////////////////////////////////// + +// INTERNAL STUFF OF THE BCCL COMPILER + +///////////////////////////////////// + +namespace detail +{ + // \brief name to register struct. + struct CompilerRegisterMap final + { + std::string fName; + std::string fReg; + }; + + // \brief Map for BCCL structs + // \author amlel + struct CompilerStructMap final + { + // 'my_foo' + std::string fName; + + // if instance: stores a valid register. + std::string fReg; + + // offset count + std::size_t fOffsetsCnt; + + // offset array. + std::vector> fOffsets; + }; + + struct CompilerState final + { + std::vector fSyntaxTreeList; + std::vector kStackFrame; + std::vector kStructMap; + ParserKit::SyntaxLeafList *fSyntaxTree{nullptr}; + std::unique_ptr fOutputAssembly; + std::string fLastFile; + std::string fLastError; + bool kVerbose; + }; +} + +static detail::CompilerState kState; +static SizeType kErrorLimit = 100; + +static Int32 kAcceptableErrors = 0; + +namespace detail +{ + void print_error(std::string reason, std::string file) noexcept + { + if (reason[0] == '\n') + reason.erase(0, 1); + + if (file.find(".pp") != std::string::npos) + { + file.erase(file.find(".pp"), 3); + } + + if (kState.fLastFile != file) + { + std::cout << kRed << "[ bccl ] " << kWhite << ((file == "bccl") ? "internal compiler error " : ("in file, " + file)) << kBlank << std::endl; + std::cout << kRed << "[ bccl ] " << kWhite << reason << kBlank << std::endl; + + kState.fLastFile = file; + } + else + { + std::cout << kRed << "[ bccl ] [ " << kState.fLastFile << " ] " << kWhite << reason << kBlank << std::endl; + } + + if (kAcceptableErrors > kErrorLimit) + std::exit(3); + + ++kAcceptableErrors; + } + + struct CompilerType final + { + std::string fName; + std::string fValue; + }; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +// Target architecture. +static int kMachine = 0; + +///////////////////////////////////////// + +// REGISTERS ACCORDING TO USED ASSEMBLER + +///////////////////////////////////////// + +static size_t kRegisterCnt = kAsmRegisterLimit; +static size_t kStartUsable = 2; +static size_t kUsableLimit = 15; +static size_t kRegisterCounter = kStartUsable; +static std::string kRegisterPrefix = kAsmRegisterPrefix; + +///////////////////////////////////////// + +// COMPILER PARSING UTILITIES/STATES. + +///////////////////////////////////////// + +static std::vector kFileList; +static CompilerKit::AssemblyFactory kFactory; +static bool kInStruct = false; +static bool kOnWhileLoop = false; +static bool kOnForLoop = false; +static bool kInBraces = false; +static size_t kBracesCount = 0UL; + +/* @brief BCCL compiler backend for BCCL */ +class CompilerBackendBccl final : public ParserKit::CompilerBackend +{ +public: + explicit CompilerBackendBccl() = default; + ~CompilerBackendBccl() override = default; + + CXXKIT_COPY_DEFAULT(CompilerBackendBccl); + + std::string Check(const char *text, const char *file); + bool Compile(const std::string &text, const char *file) override; + + const char *Language() override { return "MP-UX BCCL for 64x0/32x0"; } +}; + +static CompilerBackendBccl *kCompilerBackend = nullptr; +static std::vector kCompilerVariables; +static std::vector kCompilerFunctions; +static std::vector kCompilerTypes; + +namespace detail +{ + union number_cast final + { + public: + number_cast(UInt64 _Raw) : _Raw(_Raw) {} + + public: + char _Num[8]; + UInt64 _Raw; + + }; + + union double_cast final + { + public: + double_cast(float _Raw) : _Raw(_Raw) {} + + public: + char _Sign; + char _Lh[8]; + char _Rh[23]; + + float _Raw; + + }; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +// @name Compile +// @brief Generate MASM from a BCCL assignement. + +///////////////////////////////////////////////////////////////////////////////////////// + +bool CompilerBackendBccl::Compile(const std::string &text, const char *file) +{ + std::string _text = text; + + auto syntax_tree = ParserKit::SyntaxLeafList::SyntaxLeaf(); + bool type_found = false; + bool function_found = false; + + // start parsing + for (size_t text_index = 0; text_index < _text.size(); ++text_index) + { + uuid_t out{0}; + + uuid_generate_random(out); + detail::number_cast time_off = (UInt64)out; + + if (!type_found) + { + auto substr = _text.substr(text_index); + std::string match_type; + + for (size_t y = 0; y < substr.size(); ++y) + { + if (substr[y] == ' ') + { + while (match_type.find(' ') != std::string::npos) + { + match_type.erase(match_type.find(' ')); + } + + for (auto &clType : kCompilerTypes) + { + if (clType.fName == match_type) + { + match_type.clear(); + + std::string buf; + + buf += clType.fValue; + buf += ' '; + + if (substr.find('=') != std::string::npos) + { + break; + } + + if (_text.find('(') != std::string::npos) + { + syntax_tree.fUserValue = buf; + + kState.fSyntaxTree->fLeafList.push_back(syntax_tree); + } + + type_found = true; + break; + } + } + + break; + } + + match_type += substr[y]; + } + } + + if (_text[text_index] == '{') + { + if (kInStruct) + { + continue; + } + + kInBraces = true; + ++kBracesCount; + + kState.fSyntaxTree->fLeafList.push_back(syntax_tree); + } + + // return keyword handler + if (_text[text_index] == 'r') + { + std::string return_keyword; + return_keyword += "return"; + + std::size_t index = 0UL; + + std::string value; + + for (size_t return_index = text_index; return_index < _text.size(); ++return_index) + { + if (_text[return_index] != return_keyword[index]) + { + for (size_t value_index = return_index; value_index < _text.size(); ++value_index) + { + if (_text[value_index] == ';') + break; + + value += _text[value_index]; + } + + break; + } + + ++index; + } + + if (index == return_keyword.size()) + { + if (!value.empty()) + { + if (value.find('(') != std::string::npos) + { + value.erase(value.find('(')); + } + + if (!isdigit(value[value.find('(') + 2])) + { + std::string tmp = value; + bool reg_to_reg = false; + + value.clear(); + + value += " import"; + value += tmp; + } + + syntax_tree.fUserValue = "\tldw r19, "; + + // make it pretty. + if (value.find('\t') != std::string::npos) + value.erase(value.find('\t'), 1); + + syntax_tree.fUserValue += value + "\n"; + } + + syntax_tree.fUserValue += "\tjlr"; + + kState.fSyntaxTree->fLeafList.push_back(syntax_tree); + + break; + } + } + + // Parse expressions and instructions here. + // what does this mean? + // we encounter an assignment, or we reached the end of an expression. + if (_text[text_index] == '=' || + _text[text_index] == ';') + { + if (function_found) + continue; + + if (_text[text_index] == ';' && + kInStruct) + continue; + + if (_text.find("typedef ") != std::string::npos) + continue; + + if (_text[text_index] == '=' && + kInStruct) + { + detail::print_error("assignement of value in struct " + _text, file); + continue; + } + + if (_text[text_index] == ';' && + kInStruct) + { + bool space_found_ = false; + std::string sym; + + for (auto &ch : _text) + { + if (ch == ' ') + { + space_found_ = true; + } + + if (ch == ';') + break; + + if (space_found_) + sym.push_back(ch); + } + + kState.kStructMap[kState.kStructMap.size() - 1].fOffsets.push_back( + std::make_pair(kState.kStructMap[kState.kStructMap.size() - 1].fOffsetsCnt + 4, sym)); + + kState.kStructMap[kState.kStructMap.size() - 1].fOffsetsCnt = kState.kStructMap[kState.kStructMap.size() - 1].fOffsetsCnt + 4; + + continue; + } + + if (_text[text_index] == '=' && + kInStruct) + { + continue; + } + + if (_text[text_index + 1] == '=' || + _text[text_index - 1] == '!' || + _text[text_index - 1] == '<' || + _text[text_index - 1] == '>') + { + continue; + } + + std::string substr; + + if (_text.find('=') != std::string::npos && + kInBraces) + { + if (_text.find("*") != std::string::npos) + { + if (_text.find("=") > _text.find("*")) + substr += "\tlda "; + else + substr += "\tldw "; + } + else + { + substr += "\tldw "; + } + } + else if (_text.find('=') != std::string::npos && + !kInBraces) + { + substr += "stw export .data "; + } + + int first_encountered = 0; + + std::string str_name; + + for (size_t text_index_2 = 0; text_index_2 < _text.size(); ++text_index_2) + { + if (_text[text_index_2] == '\"') + { + ++text_index_2; + + // want to add this, so that the parser recognizes that this is a string. + substr += '"'; + + for (; text_index_2 < _text.size(); ++text_index_2) + { + if (_text[text_index_2] == '\"') + break; + + substr += _text[text_index_2]; + } + } + + if (_text[text_index_2] == '{' || + _text[text_index_2] == '}') + continue; + + if (_text[text_index_2] == ';') + { + break; + } + + if (_text[text_index_2] == ' ' || + _text[text_index_2] == '\t') + { + if (first_encountered != 2) + { + if (_text[text_index] != '=' && + substr.find("export .data") == std::string::npos && + !kInStruct) + substr += "export .data "; + } + + ++first_encountered; + + continue; + } + + if (_text[text_index_2] == '=') + { + if (!kInBraces) + { + substr.replace(substr.find("export .data"), strlen("export .data"), "export .page_zero "); + } + + substr += ","; + continue; + } + + substr += _text[text_index_2]; + } + + for (auto &clType : kCompilerTypes) + { + if (substr.find(clType.fName) != std::string::npos) + { + if (substr.find(clType.fName) > substr.find('"')) + continue; + + substr.erase(substr.find(clType.fName), clType.fName.size()); + } + else if (substr.find(clType.fValue) != std::string::npos) + { + if (substr.find(clType.fValue) > substr.find('"')) + continue; + + if (clType.fName == "const") + continue; + + substr.erase(substr.find(clType.fValue), clType.fValue.size()); + } + } + + if (substr.find("extern") != std::string::npos) + { + substr.replace(substr.find("extern"), strlen("extern"), "import "); + + if (substr.find("export .data") != std::string::npos) + substr.erase(substr.find("export .data"), strlen("export .data")); + } + + auto var_to_find = std::find_if(kCompilerVariables.cbegin(), kCompilerVariables.cend(), [&](detail::CompilerType type) + { return type.fName.find(substr) != std::string::npos; }); + + if (kRegisterCounter == 5 || + kRegisterCounter == 6) + ++kRegisterCounter; + + std::string reg = kAsmRegisterPrefix; + reg += std::to_string(kRegisterCounter); + + if (var_to_find == kCompilerVariables.cend()) + { + ++kRegisterCounter; + + kState.kStackFrame.push_back({.fName = substr, .fReg = reg}); + kCompilerVariables.push_back({.fName = substr}); + } + + syntax_tree.fUserValue += substr; + kState.fSyntaxTree->fLeafList.push_back(syntax_tree); + + if (_text[text_index] == '=') + break; + } + + // function handler. + + if (_text[text_index] == '(' && + !function_found) + { + std::string substr; + std::string args_buffer; + std::string args; + + bool type_crossed = false; + + for (size_t idx = _text.find('(') + 1; idx < _text.size(); ++idx) + { + if (_text[idx] == ',') + continue; + + if (_text[idx] == ' ') + continue; + + if (_text[idx] == ')') + break; + } + + for (char substr_first_index : _text) + { + args_buffer += substr_first_index; + + if (substr_first_index == ';') + { + args_buffer = args_buffer.erase(0, args_buffer.find('(')); + args_buffer = args_buffer.erase(args_buffer.find(';'), 1); + args_buffer = args_buffer.erase(args_buffer.find(')'), 1); + args_buffer = args_buffer.erase(args_buffer.find('('), 1); + + if (!args_buffer.empty()) + args += "\tldw r6, "; + + std::size_t index = 0UL; + + while (ParserKit::find_word(args_buffer, ",")) + { + std::string register_type = kRegisterPrefix; + register_type += std::to_string(index); + + args_buffer.replace(args_buffer.find(','), 1, "\n\tldw " + register_type + ","); + } + + args += args_buffer; + args += "\n\tjb import "; + } + } + + for (char _text_i : _text) + { + if (_text_i == '\t' || + _text_i == ' ') + { + if (!type_crossed) + { + substr.clear(); + type_crossed = true; + } + + continue; + } + + if (_text_i == '(') + break; + + substr += _text_i; + } + + if (kInBraces) + { + syntax_tree.fUserValue = args; + + syntax_tree.fUserValue += substr; + + kState.fSyntaxTree->fLeafList.push_back(syntax_tree); + + function_found = true; + } + else + { + syntax_tree.fUserValue.clear(); + + syntax_tree.fUserValue += "export .text "; + + syntax_tree.fUserValue += substr; + syntax_tree.fUserValue += "\n"; + + kState.fSyntaxTree->fLeafList.push_back(syntax_tree); + + function_found = true; + } + + kCompilerFunctions.push_back(_text); + } + + if (_text[text_index] == '-' && + _text[text_index + 1] == '-') + { + _text = _text.replace(_text.find("--"), strlen("--"), ""); + + for (int _text_i = 0; _text_i < _text.size(); ++_text_i) + { + if (_text[_text_i] == '\t' || + _text[_text_i] == ' ') + _text.erase(_text_i, 1); + } + + syntax_tree.fUserValue += "dec "; + syntax_tree.fUserValue += _text; + + kState.fSyntaxTree->fLeafList.push_back(syntax_tree); + break; + } + + if (_text[text_index] == '}') + { + kRegisterCounter = kStartUsable; + + --kBracesCount; + + if (kBracesCount < 1) + { + kInBraces = false; + kBracesCount = 0; + } + + if (kInStruct) + kInStruct = false; + + kState.fSyntaxTree->fLeafList.push_back(syntax_tree); + } + + syntax_tree.fUserValue.clear(); + } + + syntax_tree.fUserValue = "\n"; + kState.fSyntaxTree->fLeafList.push_back(syntax_tree); + + return true; +} + +static bool kShouldHaveBraces = false; +static std::string kFnName; + +std::string CompilerBackendBccl::Check(const char *text, const char *file) +{ + std::string err_str; + std::string ln = text; + + if (ln.empty()) + { + return err_str; + } + + bool non_ascii_found = false; + + for (int i = 0; i < ln.size(); ++i) + { + if (isalnum(ln[i])) + { + non_ascii_found = true; + break; + } + } + + if (kShouldHaveBraces && + ln.find('{') != std::string::npos) + { + kShouldHaveBraces = false; + } + + if (!non_ascii_found) + return err_str; + + size_t string_index = 1UL; + + if (ln.find('\'') != std::string::npos) + { + string_index = ln.find('\'') + 1; + + for (; string_index < ln.size(); ++string_index) + { + if (ln[string_index] == '\'') + { + if (ln[string_index + 1] != ';') + { + ln.erase(string_index, 1); + } + + return err_str; + } + } + } + else if (ln.find('"') != std::string::npos) + { + string_index = ln.find('"') + 1; + + for (; string_index < ln.size(); ++string_index) + { + if (ln[string_index] == '"') + { + if (ln[string_index + 1] != ';') + { + ln.erase(string_index, 1); + } + else + { + break; + } + } + } + } + else if (ln.find('"') == std::string::npos && + ln.find('\'') == std::string::npos) + { + std::vector forbidden_words; + + forbidden_words.push_back("\\"); + forbidden_words.push_back("?"); + forbidden_words.push_back("@"); + forbidden_words.push_back("~"); + forbidden_words.push_back("::"); + forbidden_words.push_back("/*"); + forbidden_words.push_back("*/"); + + // add them to avoid stupid mistakes. + forbidden_words.push_back("namespace"); + forbidden_words.push_back("struct"); + forbidden_words.push_back("union"); + forbidden_words.push_back("enum"); + forbidden_words.push_back("."); + forbidden_words.push_back("->"); + forbidden_words.push_back("class"); + forbidden_words.push_back("*"); + forbidden_words.push_back("extern \"C\""); + + for (auto &forbidden : forbidden_words) + { + if (ln.find(forbidden) != std::string::npos) + { + err_str += "\nForbidden character detected: "; + err_str += forbidden; + + return err_str; + } + } + } + + struct CompilerVariableRange final + { + std::string fBegin; + std::string fEnd; + }; + + const std::vector variables_list = { + {.fBegin = "static ", .fEnd = "="}, + {.fBegin = "=", .fEnd = ";"}, + {.fBegin = "if(", .fEnd = "="}, + {.fBegin = "if (", .fEnd = "="}, + {.fBegin = "if(", .fEnd = "<"}, + {.fBegin = "if (", .fEnd = "<"}, + {.fBegin = "if(", .fEnd = ">"}, + {.fBegin = "if (", .fEnd = ">"}, + {.fBegin = "if(", .fEnd = ")"}, + {.fBegin = "if (", .fEnd = ")"}, + + {.fBegin = "else(", .fEnd = "="}, + {.fBegin = "else (", .fEnd = "="}, + {.fBegin = "else(", .fEnd = "<"}, + {.fBegin = "else (", .fEnd = "<"}, + {.fBegin = "else(", .fEnd = ">"}, + {.fBegin = "else (", .fEnd = ">"}, + {.fBegin = "else(", .fEnd = ")"}, + {.fBegin = "else (", .fEnd = ")"}, + }; + + for (auto &variable : variables_list) + { + if (ln.find(variable.fBegin) != std::string::npos) + { + string_index = ln.find(variable.fBegin) + variable.fBegin.size(); + + while (ln[string_index] == ' ') + ++string_index; + + std::string keyword; + + for (; string_index < ln.size(); ++string_index) + { + if (ln[string_index] == variable.fEnd[0]) + { + std::string varname = ""; + + for (size_t index_keyword = ln.find(' '); ln[index_keyword] != variable.fBegin[0]; + ++index_keyword) + { + if (ln[index_keyword] == ' ') + { + continue; + } + + if (isdigit(ln[index_keyword])) + { + goto cc_next_loop; + } + + varname += ln[index_keyword]; + } + + if (varname.find(' ') != std::string::npos) + { + varname.erase(0, varname.find(' ')); + + if (variable.fBegin == "extern") + { + varname.erase(0, varname.find(' ')); + } + } + + if (kRegisterCounter == 5 || + kRegisterCounter == 6) + ++kRegisterCounter; + + std::string reg = kAsmRegisterPrefix; + reg += std::to_string(kRegisterCounter); + + kCompilerVariables.push_back({.fValue = varname}); + goto cc_check_done; + } + + keyword.push_back(ln[string_index]); + } + + goto cc_next_loop; + + cc_check_done: + + // skip digit value. + if (isdigit(keyword[0]) || + keyword[0] == '"') + { + goto cc_next_loop; + } + + while (keyword.find(' ') != std::string::npos) + keyword.erase(keyword.find(' '), 1); + + for (auto &var : kCompilerVariables) + { + if (var.fValue.find(keyword) != std::string::npos) + { + err_str.clear(); + goto cc_next; + } + } + + for (auto &fn : kCompilerFunctions) + { + if (fn.find(keyword[0]) != std::string::npos) + { + auto where_begin = fn.find(keyword[0]); + auto keyword_begin = 0UL; + auto failed = false; + + for (; where_begin < keyword.size(); ++where_begin) + { + if (fn[where_begin] == '(' && + keyword[keyword_begin] == '(') + break; + + if (fn[where_begin] != keyword[keyword_begin]) + { + failed = true; + break; + } + + ++keyword_begin; + } + + if (!failed) + { + err_str.clear(); + goto cc_next; + } + else + { + continue; + } + } + } + + cc_error_value: + if (keyword.find("->") != std::string::npos) + return err_str; + + if (keyword.find(".") != std::string::npos) + return err_str; + + if (isalnum(keyword[0])) + err_str += "\nUndefined value: " + keyword; + + return err_str; + } + + cc_next_loop: + continue; + } + +cc_next: + + // extern does not declare anything, it imports a variable. + // so that's why it's not declare upper. + if (ParserKit::find_word(ln, "extern")) + { + auto substr = ln.substr(ln.find("extern") + strlen("extern")); + kCompilerVariables.push_back({.fValue = substr}); + } + + if (kShouldHaveBraces && + ln.find('{') == std::string::npos) + { + err_str += "Missing '{' for function "; + err_str += kFnName; + err_str += "\n"; + + kShouldHaveBraces = false; + kFnName.clear(); + } + else if (kShouldHaveBraces && + ln.find('{') != std::string::npos) + { + kShouldHaveBraces = false; + kFnName.clear(); + } + + bool type_not_found = true; + + if (ln.find('\'') != std::string::npos) + { + ln.replace(ln.find('\''), 3, "0"); + } + + auto first = ln.find('"'); + if (first != std::string::npos) + { + auto second = 0UL; + bool found_second_quote = false; + + for (size_t i = first + 1; i < ln.size(); ++i) + { + if (ln[i] == '\"') + { + found_second_quote = true; + second = i; + + break; + } + } + + if (!found_second_quote) + { + err_str += "Missing terminating \"."; + err_str += " here -> " + ln.substr(ln.find('"'), second); + } + } + + if (ln.find(')') != std::string::npos && + ln.find(';') == std::string::npos) + { + if (ln.find('{') == std::string::npos) + { + kFnName = ln; + kShouldHaveBraces = true; + + goto skip_braces_check; + } + else if (ln.find('{') != std::string::npos) + { + kShouldHaveBraces = false; + } + } + +skip_braces_check: + + for (auto &key : kCompilerTypes) + { + if (ParserKit::find_word(ln, key.fName)) + { + if (isdigit(ln[ln.find(key.fName) + key.fName.size() + 1])) + { + err_str += "\nNumber cannot be set for "; + err_str += key.fName; + err_str += "'s name. here -> "; + err_str += ln; + } + + if (ln.find(key.fName) == 0 || + ln[ln.find(key.fName) - 1] == ' ' || + ln[ln.find(key.fName) - 1] == '\t') + { + type_not_found = false; + + if (ln[ln.find(key.fName) + key.fName.size()] != ' ') + { + type_not_found = true; + + if (ln[ln.find(key.fName) + key.fName.size()] == '\t') + type_not_found = false; + + goto next; + } + else if (ln[ln.find(key.fName) + key.fName.size()] != '\t') + { + type_not_found = true; + + if (ln[ln.find(key.fName) + key.fName.size()] == ' ') + type_not_found = false; + } + } + + next: + + if (ln.find(';') == std::string::npos) + { + if (ln.find('(') != std::string::npos) + { + if (ln.find('=') == std::string::npos) + continue; + } + + err_str += "\nMissing ';', here -> "; + err_str += ln; + } + else + { + continue; + } + + if (ln.find('=') != std::string::npos) + { + if (ln.find('(') != std::string::npos) + { + if (ln.find(')') == std::string::npos) + { + err_str += "\nMissing ')', after '(' here -> "; + err_str += ln.substr(ln.find('(')); + } + } + } + } + } + + if (kInBraces && + ln.find("struct") != std::string::npos && + ln.find("union") != std::string::npos && + ln.find("enum") != std::string::npos && + ln.find('=') != std::string::npos) + { + if (ln.find(';') == std::string::npos) + { + err_str += "\nMissing ';' after struct/union/enum declaration, here -> "; + err_str += ln; + } + } + + if (ln.find(';') != std::string::npos && + ln.find("for") == std::string::npos) + { + if (ln.find(';') + 1 != ln.size()) + { + for (int i = 0; i < ln.substr(ln.find(';') + 1).size(); ++i) + { + if ((ln.substr(ln.find(';') + 1)[i] != ' ') || + (ln.substr(ln.find(';') + 1)[i] != '\t')) + { + if (auto err = this->Check(ln.substr(ln.find(';') + 1).c_str(), file); + !err.empty()) + { + err_str += "\nUnexpected text after ';' -> "; + err_str += ln.substr(ln.find(';')); + err_str += err; + } + } + } + } + } + + if (ln.find('(') != std::string::npos) + { + if (ln.find(';') == std::string::npos && + !ParserKit::find_word(ln, "|") && + !ParserKit::find_word(ln, "||") && + !ParserKit::find_word(ln, "&") && + !ParserKit::find_word(ln, "&&") && + !ParserKit::find_word(ln, "~")) + { + bool found_func = false; + size_t i = ln.find('('); + std::vector opens; + std::vector closes; + + for (; i < ln.size(); ++i) + { + if (ln[i] == ')') + { + closes.push_back(1); + } + + if (ln[i] == '(') + { + opens.push_back(1); + } + } + + if (closes.size() != opens.size()) + err_str += "Unterminated (), here -> " + ln; + + bool space_found = false; + + for (int i = 0; i < ln.size(); ++i) + { + if (ln[i] == ')' && + !space_found) + { + space_found = true; + continue; + } + + if (space_found) + { + if (ln[i] == ' ' && + isalnum(ln[i + 1])) + { + err_str += "\nBad function format here -> "; + err_str += ln; + } + } + } + } + + if (ln.find('(') < 1) + { + err_str += "\nMissing identifier before '(' here -> "; + err_str += ln; + } + else + { + if (type_not_found && + ln.find(';') == std::string::npos && + ln.find("if") == std::string::npos && + ln.find("|") == std::string::npos && + ln.find("&") == std::string::npos && + ln.find("(") == std::string::npos && + ln.find(")") == std::string::npos) + { + err_str += "\n Missing ';' or type, here -> "; + err_str += ln; + } + } + + if (ln.find(')') == std::string::npos) + { + err_str += "\nMissing ')', after '(' here -> "; + err_str += ln.substr(ln.find('(')); + } + } + else + { + if (ln.find("for") != std::string::npos || + ln.find("while") != std::string::npos) + { + err_str += "\nMissing '(', after \"for\", here -> "; + err_str += ln; + } + } + + if (ln.find('}') != std::string::npos && + !kInBraces) + { + if (!kInStruct && + ln.find(';') == std::string::npos) + { + err_str += "\nMismatched '}', here -> "; + err_str += ln; + } + } + + if (!ln.empty()) + { + if (ln.find(';') == std::string::npos && + ln.find('{') == std::string::npos && + ln.find('}') == std::string::npos && + ln.find(')') == std::string::npos && + ln.find('(') == std::string::npos && + ln.find(',') == std::string::npos) + { + if (ln.size() <= 2) + return err_str; + + err_str += "\nMissing ';', here -> "; + err_str += ln; + } + } + + return err_str; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +/** + * @brief BCCL To Assembly mount-point. + */ + +///////////////////////////////////////////////////////////////////////////////////////// + +class AssemblyMountpointBccl final : public CompilerKit::AssemblyMountpoint +{ +public: + explicit AssemblyMountpointBccl() = default; + ~AssemblyMountpointBccl() override = default; + + CXXKIT_COPY_DEFAULT(AssemblyMountpointBccl); + + [[maybe_unused]] static Int32 Arch() noexcept { return CompilerKit::AssemblyFactory::kArchRISCV; } + + Int32 CompileToFormat(CompilerKit::StringView &src, Int32 arch) override + { + if (arch != AssemblyMountpointBccl::Arch()) + return -1; + + if (kCompilerBackend == nullptr) + return -1; + + /* @brief copy contents wihtout extension */ + std::string src_file = src.CData(); + std::ifstream src_fp = std::ifstream(src_file, std::ios::in); + std::string dest; + + for (auto &ch : src_file) + { + if (ch == '.') + { + break; + } + + dest += ch; + } + + /* According to pef abi. */ + dest += kAsmFileExt64x0; + + kState.fOutputAssembly = std::make_unique(dest); + + auto fmt = CompilerKit::current_date(); + + (*kState.fOutputAssembly) << "# Path: " << src_file << "\n"; + (*kState.fOutputAssembly) << "# Language: MP-UX Assembly\n"; + (*kState.fOutputAssembly) << "# Build Date: " << fmt << "\n\n"; + + ParserKit::SyntaxLeafList syntax; + + kState.fSyntaxTreeList.push_back(syntax); + kState.fSyntaxTree = &kState.fSyntaxTreeList[kState.fSyntaxTreeList.size() - 1]; + + std::string line_src; + + while (std::getline(src_fp, line_src)) + { + if (auto err = kCompilerBackend->Check(line_src.c_str(), src.CData()); + err.empty()) + { + kCompilerBackend->Compile(line_src, src.CData()); + } + else + { + detail::print_error(err, src.CData()); + } + } + + if (kAcceptableErrors > 0) + return -1; + + std::vector keywords = {"ldw", "stw", "lda", "sta", "add", "dec", "mv"}; + + /// + /// Replace, optimize, fix assembly output. + /// + + for (auto &leaf : kState.fSyntaxTree->fLeafList) + { + std::vector access_keywords = {"->", "."}; + + for (auto &access_ident : access_keywords) + { + if (ParserKit::find_word(leaf.fUserValue, access_ident)) + { + for (auto &struc : kState.kStructMap) + { + } + } + } + + for (auto &keyword : keywords) + { + if (ParserKit::find_word(leaf.fUserValue, keyword)) + { + std::size_t cnt = 0UL; + + for (auto ® : kState.kStackFrame) + { + std::string needle; + + for (size_t i = 0; i < reg.fName.size(); i++) + { + if (reg.fName[i] == ' ') + { + ++i; + + for (; i < reg.fName.size(); i++) + { + if (reg.fName[i] == ',') + { + break; + } + + if (reg.fName[i] == ' ') + continue; + + needle += reg.fName[i]; + } + + break; + } + } + + if (ParserKit::find_word(leaf.fUserValue, needle)) + { + if (leaf.fUserValue.find("ldw r6") != std::string::npos) + { + std::string::difference_type n = std::count(leaf.fUserValue.begin(), + leaf.fUserValue.end(), ','); + + if (n == 1) + { + leaf.fUserValue.replace(leaf.fUserValue.find("ldw"), strlen("ldw"), "mv"); + } + } + + leaf.fUserValue.replace(leaf.fUserValue.find(needle), + needle.size(), reg.fReg); + + ++cnt; + } + } + + if (cnt > 1 && keyword != "mv" && keyword != "add" && keyword != "dec") + { + leaf.fUserValue.replace(leaf.fUserValue.find(keyword), keyword.size(), "mv"); + } + } + } + } + + for (auto &leaf : kState.fSyntaxTree->fLeafList) + { + (*kState.fOutputAssembly) << leaf.fUserValue; + } + + kState.fSyntaxTree = nullptr; + + kState.fOutputAssembly->flush(); + kState.fOutputAssembly.reset(); + + return kOk; + } +}; + +///////////////////////////////////////////////////////////////////////////////////////// + +#define kPrintF printf +#define kSplashCxx() kPrintF(kWhite "%s\n", "bccl, v1.15, (c) Mahrouss Logic") + +static void cc_print_help() +{ + kSplashCxx(); + + kPrintF(kWhite "--asm={MACHINE}: %s\n", "Compile with a specific syntax. (64x0, 32x0)"); + kPrintF(kWhite "--compiler={COMPILER}: %s\n", "Select compiler engine (builtin -> dolvik)."); +} + +///////////////////////////////////////////////////////////////////////////////////////// + +#define kExt ".bccl" + +int main(int argc, char **argv) +{ + kCompilerTypes.push_back({.fName = "void", .fValue = "void"}); + kCompilerTypes.push_back({.fName = "char", .fValue = "byte"}); + kCompilerTypes.push_back({.fName = "short", .fValue = "hword"}); + kCompilerTypes.push_back({.fName = "int", .fValue = "dword"}); + kCompilerTypes.push_back({.fName = "long", .fValue = "qword"}); + + bool skip = false; + + for (auto index = 1UL; index < argc; ++index) + { + if (skip) + { + skip = false; + continue; + } + + if (argv[index][0] == '-') + { + if (strcmp(argv[index], "-v") == 0 || + strcmp(argv[index], "--version") == 0) + { + kSplashCxx(); + return kOk; + } + + if (strcmp(argv[index], "-verbose") == 0) + { + kState.kVerbose = true; + + continue; + } + + if (strcmp(argv[index], "-h") == 0 || + strcmp(argv[index], "--help") == 0) + { + cc_print_help(); + + return kOk; + } + + if (strcmp(argv[index], "--dialect") == 0) + { + if (kCompilerBackend) + std::cout << kCompilerBackend->Language() << "\n"; + + return kOk; + } + + if (strcmp(argv[index], "--asm=masm") == 0) + { + delete kFactory.Unmount(); + + kFactory.Mount(new AssemblyMountpointBccl()); + kMachine = CompilerKit::AssemblyFactory::kArchRISCV; + + continue; + } + + if (strcmp(argv[index], "--compiler=dolvik") == 0) + { + if (!kCompilerBackend) + kCompilerBackend = new CompilerBackendBccl(); + + continue; + } + + if (strcmp(argv[index], "-fmax-exceptions") == 0) + { + try + { + kErrorLimit = std::strtol(argv[index + 1], nullptr, 10); + } + // catch anything here + catch (...) + { + kErrorLimit = 0; + } + + skip = true; + + continue; + } + + std::string err = "Unknown command: "; + err += argv[index]; + + detail::print_error(err, "bccl"); + + continue; + } + + kFileList.emplace_back(argv[index]); + + CompilerKit::StringView srcFile = CompilerKit::StringBuilder::Construct(argv[index]); + + if (strstr(argv[index], kExt) == nullptr) + { + if (kState.kVerbose) + { + std::cerr << argv[index] << " is not a valid BCCL source.\n"; + } + + return -1; + } + + if (kFactory.Compile(srcFile, kMachine) != kOk) + return -1; + } + + return kOk; +} + +// Last rev 8-1-24 \ No newline at end of file diff --git a/64x0-Drivers/bin/.gitkeep b/64x0-Drivers/bin/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/64x0-Drivers/bin/README.txt b/64x0-Drivers/bin/README.txt new file mode 100644 index 0000000..7530e5e --- /dev/null +++ b/64x0-Drivers/bin/README.txt @@ -0,0 +1,2 @@ +The C compilers (ccplus, cc) are work in progress. +Use it at your own risk. \ No newline at end of file diff --git a/64x0-Drivers/bin/SourceUnitTest/.gitkeep b/64x0-Drivers/bin/SourceUnitTest/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/64x0-Drivers/bpp.cc b/64x0-Drivers/bpp.cc new file mode 100644 index 0000000..80b92ed --- /dev/null +++ b/64x0-Drivers/bpp.cc @@ -0,0 +1,1119 @@ +/* + * ======================================================== + * + * cpp + * Copyright Mahrouss Logic, all rights reserved. + * + * ======================================================== + */ + +#include +#include +#include +#include +#include + +#define kMacroPrefix '%' + +// @author Amlal El Mahrouss (amlel) +// @file cpp.cc +// @brief MASM preprocessor. + +typedef Int32(*cpp_parser_fn_t)(std::string& line, std::ifstream& hdr_file, std::ofstream& pp_out); + +///////////////////////////////////////////////////////////////////////////////////////// + +// @brief Preprocessor internal types. + +///////////////////////////////////////////////////////////////////////////////////////// + +namespace details +{ + enum + { + kEqual, + kGreaterEqThan, + kLesserEqThan, + kGreaterThan, + kLesserThan, + kNotEqual, + }; + + struct cpp_macro_condition final + { + int32_t fType; + std::string fTypeName; + }; + + struct cpp_macro final + { + std::vector fArgs; + std::string fName; + std::string fValue; + }; + + class cpp_pragma final + { + public: + explicit cpp_pragma() = default; + ~cpp_pragma() = default; + + CXXKIT_COPY_DEFAULT(cpp_pragma); + + std::string fMacroName; + cpp_parser_fn_t fParse; + + }; +} + +static std::vector kFiles; +static std::vector kMacros; +static std::vector kIncludes; + +static std::string kWoringDir; + +static std::vector kKeywords = { + "include", + "if", + "pragma", + "def", + "elif", + "ifdef", + "ifndef", + "else", + "warning", + "error" +}; + +#define kKeywordCxxCnt kKeywords.size() + +///////////////////////////////////////////////////////////////////////////////////////// + +// @name cpp_parse_if_condition +// @brief parse #if condition + +///////////////////////////////////////////////////////////////////////////////////////// + +int32_t cpp_parse_if_condition(details::cpp_macro_condition& cond, + details::cpp_macro& macro, + bool& inactive_code, bool& defined, + std::string& macro_str) +{ + if (cond.fType == details::kEqual) + { + auto substr_macro = macro_str.substr(macro_str.find(macro.fName) + macro.fName.size()); + + if (substr_macro.find(macro.fValue) != std::string::npos) + { + if (macro.fValue == "0") + { + defined = false; + inactive_code = true; + + return 1; + } + + defined = true; + inactive_code = false; + + return 1; + } + } + else if (cond.fType == details::kNotEqual) + { + auto substr_macro = macro_str.substr(macro_str.find(macro.fName) + macro.fName.size()); + + if (substr_macro.find(macro.fName) != std::string::npos) + { + if (substr_macro.find(macro.fValue) != std::string::npos) + { + defined = false; + inactive_code = true; + + return 1; + } + + defined = true; + inactive_code = false; + + return 1; + } + + return 0; + } + + auto substr_macro = macro_str.substr(macro_str.find(macro.fName) + macro.fName.size()); + + std::string number; + + for (auto& macro_num : kMacros) + { + if (substr_macro.find(macro_num.fName) != std::string::npos) + { + for (size_t i = 0; i < macro_num.fName.size(); ++i) + { + if (isdigit(macro_num.fValue[i])) + { + number += macro_num.fValue[i]; + } + else + { + number.clear(); + break; + } + } + + break; + } + } + + size_t y = 2; + + /* last try */ + for (; y < macro_str.size(); y++) + { + if (isdigit(macro_str[y])) + { + for (size_t x = y; x < macro_str.size(); x++) + { + if (macro_str[x] == ' ') + break; + + number += macro_str[x]; + } + + break; + } + } + + size_t rhs = atol(macro.fValue.c_str()); + size_t lhs = atol(number.c_str()); + + if (lhs == 0) + { + number.clear(); + ++y; + + for (; y < macro_str.size(); y++) + { + if (isdigit(macro_str[y])) + { + for (size_t x = y; x < macro_str.size(); x++) + { + if (macro_str[x] == ' ') + break; + + number += macro_str[x]; + } + + break; + } + } + + lhs = atol(number.c_str()); + } + + if (cond.fType == details::kGreaterThan) + { + if (lhs < rhs) + { + defined = true; + inactive_code = false; + + return 1; + } + + return 0; + } + + if (cond.fType == details::kGreaterEqThan) + { + if (lhs <= rhs) + { + defined = true; + inactive_code = false; + + return 1; + } + + return 0; + } + + if (cond.fType == details::kLesserEqThan) + { + if (lhs >= rhs) + { + defined = true; + inactive_code = false; + + return 1; + } + + return 0; + } + + if (cond.fType == details::kLesserThan) + { + if (lhs > rhs) + { + defined = true; + inactive_code = false; + + return 1; + } + + return 0; + } + + return 0; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +// @brief stores every included file here. + +///////////////////////////////////////////////////////////////////////////////////////// + +std::vector kAllIncludes; + +///////////////////////////////////////////////////////////////////////////////////////// + +// @name cpp_parse_file +// @brief parse file to preprocess it. + +///////////////////////////////////////////////////////////////////////////////////////// + +void cpp_parse_file(std::ifstream& hdr_file, std::ofstream& pp_out) +{ + std::string hdr_line; + std::string line_after_include; + + bool inactive_code = false; + bool defined = false; + + try + { + while (std::getline(hdr_file, hdr_line)) + { + // make cc, ccplus life easier + if (hdr_line.find("//") != std::string::npos) + { + hdr_line.erase(hdr_line.find("//")); + } + + if (hdr_line[0] == kMacroPrefix && + hdr_line.find("endif") != std::string::npos) + { + if (!defined && + inactive_code) + { + inactive_code = false; + defined = false; + + continue; + } + + continue; + } + + if (!defined && + inactive_code) + { + continue; + } + + if (defined && + inactive_code) + { + continue; + } + + for (auto macro : kMacros) + { + if (ParserKit::find_word(hdr_line, macro.fName) && + hdr_line.find("#define") == std::string::npos) + { + auto substr = hdr_line.substr(hdr_line.find(macro.fName) + macro.fName.size() + 1); + + std::vector sym_vec; + std::string sym_str; + + for (auto& subc : substr) + { + if (subc == ',' || + subc == ')') + { + if (sym_str.empty()) + continue; + + sym_vec.push_back(sym_str); + sym_str.clear(); + + continue; + } + + if (isalnum(subc)) + sym_str.push_back(subc); + } + + if (macro.fArgs.size() > 0) + { + + for (auto& item : sym_vec) + { + std::size_t cnt = 0; + + for (auto& arg : macro.fArgs) + { + if (item == arg) + ++cnt; + } + + if (cnt > 1) + { + auto it = std::find(macro.fArgs.begin(), macro.fArgs.end(), item); + + while (it != macro.fArgs.end()) + { + macro.fArgs.erase(it); + it = std::find(macro.fArgs.begin(), macro.fArgs.end(), item); + } + } + } + + if (sym_vec.size() != macro.fArgs.size()) + { + throw std::runtime_error("cpp: arguments count mismatch, except " + std::to_string(sym_vec.size()) + ", got: " + std::to_string(macro.fArgs.size())); + return; + } + + substr = macro.fValue; + + std::size_t cnt = 0UL; + + for (auto& val : macro.fArgs) + { + substr.replace(substr.find(val), val.size(), sym_vec[cnt]); + ++cnt; + } + + hdr_line = hdr_line.replace(hdr_line.find(macro.fName), macro.fName.size() + macro.fValue.size(), substr); + } + else + { + hdr_line = hdr_line.replace(hdr_line.find(macro.fName), macro.fName.size(), macro.fValue); + } + } + } + + if (hdr_line[0] == kMacroPrefix && + hdr_line.find("def") != std::string::npos) + { + auto line_after_define = hdr_line.substr(hdr_line.find("def") + strlen("def") + 1); + + std::string macro_value; + std::string macro_key; + + std::size_t pos = 0UL; + + std::vector args; + bool on_args = false; + + for (auto& ch : line_after_define) + { + ++pos; + + if (ch == '(') + { + on_args = true; + continue; + } + + if (ch == ')') + { + on_args = false; + continue; + } + + if (ch == '\\') + continue; + + if (on_args) + continue; + + if (ch == ' ') + { + for (size_t i = pos; i < line_after_define.size(); i++) + { + macro_value += line_after_define[i]; + } + + break; + } + + macro_key += ch; + } + + std::vector dupls; + std::string str; + + line_after_define.erase(0, line_after_define.find("(") + 1); + + for (auto& subc : line_after_define) + { + if (subc == ',' || + subc == ')') + { + if (str.empty()) + continue; + + dupls.push_back(str); + args.push_back(str); + + str.clear(); + + continue; + } + + if (isalnum(subc)) + str.push_back(subc); + } + + for (auto& dupl : dupls) + { + std::size_t cnt = 0; + + for (auto& arg : args) + { + if (dupl == arg) + ++cnt; + } + + if (cnt > 1) + { + auto it = std::find(args.begin(), args.end(), dupl); + + while (it != args.end()) + { + args.erase(it); + it = std::find(args.begin(), args.end(), dupl); + } + } + } + + details::cpp_macro macro; + + macro.fArgs = args; + macro.fName = macro_key; + macro.fValue = macro_value; + + kMacros.emplace_back(macro); + + continue; + } + + if (hdr_line[0] != kMacroPrefix) + { + if (inactive_code) + { + continue; + } + + for (auto& macro : kMacros) + { + if (hdr_line.find(macro.fName) != std::string::npos) + { + std::vector arg_values; + + if (macro.fArgs.size() > 0) + { + for (size_t i = 0; i < hdr_line.size(); ++i) + { + if (hdr_line[i] == '(') + { + std::string tmp_arg; + + for (size_t x = i; x < hdr_line.size(); x++) + { + if (hdr_line[x] == ')') + break; + + if (hdr_line[x] == ' ') + continue; + + if (hdr_line[i] == '\\') + continue; + + if (hdr_line[x] == ',') + { + arg_values.push_back(tmp_arg); + tmp_arg.clear(); + continue; + } + + tmp_arg += hdr_line[x]; + } + + break; + } + } + + std::string symbol; + + for (char i : macro.fValue) + { + if (i == '(') + break; + + if (i == '\\') + continue; + + symbol += i; + } + + hdr_line.replace(hdr_line.find(macro.fName), macro.fName.size(), symbol); + + size_t x_arg_indx = 0; + + for (size_t i = hdr_line.find(macro.fValue); i < hdr_line.size(); ++i) + { + if (hdr_line.find(macro.fArgs[x_arg_indx]) == i) + { + hdr_line.replace(i, macro.fArgs[x_arg_indx].size(), arg_values[x_arg_indx]); + ++x_arg_indx; + } + } + + } + else + { + std::string symbol; + + for (size_t i = 0; i < macro.fValue.size(); i++) + { + if (macro.fValue[i] == ' ') + continue; + + if (macro.fValue[i] == '\\') + continue; + + symbol += macro.fValue[i]; + } + + hdr_line.replace(hdr_line.find(macro.fName), macro.fName.size(), symbol); + } + + break; + } + } + + pp_out << hdr_line << std::endl; + + continue; + } + + if (hdr_line[0] == kMacroPrefix && + hdr_line.find("ifndef") != std::string::npos) + { + auto line_after_ifndef = hdr_line.substr(hdr_line.find("ifndef") + strlen("ifndef") + 1); + std::string macro; + + for (auto& ch : line_after_ifndef) + { + if (ch == ' ') + { + break; + } + + macro += ch; + } + + if (macro == "0") + { + defined = true; + inactive_code = false; + continue; + } + + if (macro == "1") + { + defined = false; + inactive_code = true; + + continue; + } + + bool found = false; + + defined = true; + inactive_code = false; + + for (auto& macro_ref : kMacros) + { + if (hdr_line.find(macro_ref.fName) != std::string::npos) + { + found = true; + break; + } + } + + if (found) + { + defined = false; + inactive_code = true; + + continue; + } + } + else if (hdr_line[0] == kMacroPrefix && + hdr_line.find("else") != std::string::npos) + { + if (!defined && + inactive_code) + { + inactive_code = false; + defined = true; + + continue; + } + else + { + defined = false; + inactive_code = true; + + continue; + } + } + else if (hdr_line[0] == kMacroPrefix && + hdr_line.find("ifdef") != std::string::npos) + { + auto line_after_ifdef = hdr_line.substr(hdr_line.find("ifdef") + strlen("ifdef") + 1); + std::string macro; + + for (auto& ch : line_after_ifdef) + { + if (ch == ' ') + { + break; + } + + macro += ch; + } + + if (macro == "0") + { + defined = false; + inactive_code = true; + + continue; + } + + if (macro == "1") + { + defined = true; + inactive_code = false; + + continue; + } + + defined = false; + inactive_code = true; + + for (auto& macro_ref : kMacros) + { + if (hdr_line.find(macro_ref.fName) != std::string::npos) + { + defined = true; + inactive_code = false; + + break; + } + } + } + else if (hdr_line[0] == kMacroPrefix && + hdr_line.find("pragma") != std::string::npos) + { + line_after_include = hdr_line.substr(hdr_line.find("pragma once")); + + // search for this file + auto it = std::find(kAllIncludes.cbegin(), + kAllIncludes.cend(), line_after_include); + + if (it == kAllIncludes.cend()) + { + goto kIncludeFile; + } + } + else if (hdr_line[0] == kMacroPrefix && + hdr_line.find("if") != std::string::npos) + { + inactive_code = true; + + std::vector cpp_macro_condition_list = { + { + .fType = details::kEqual, + .fTypeName = "==", + }, + { + .fType = details::kNotEqual, + .fTypeName = "!=", + }, + { + .fType = details::kLesserThan, + .fTypeName = "<", + }, + { + .fType = details::kGreaterThan, + .fTypeName = ">", + }, + { + .fType = details::kLesserEqThan, + .fTypeName = "<=", + }, + { + .fType = details::kGreaterEqThan, + .fTypeName = ">=", + }, + }; + + int32_t good_to_go = 0; + + for (auto& macro_condition : cpp_macro_condition_list) + { + if (hdr_line.find(macro_condition.fTypeName) != std::string::npos) + { + for (auto& found_macro : kMacros) + { + if (hdr_line.find(found_macro.fName) != std::string::npos) + { + good_to_go = cpp_parse_if_condition(macro_condition, found_macro, + inactive_code, defined, + hdr_line); + + break; + } + } + } + } + + if (good_to_go) + continue; + + auto line_after_if = hdr_line.substr(hdr_line.find("if") + strlen("if") + 1); + std::string macro; + + for (auto& ch : line_after_if) + { + if (ch == ' ') + { + break; + } + + macro += ch; + } + + if (macro == "0") + { + defined = false; + inactive_code = true; + continue; + } + + if (macro == "1") + { + defined = true; + inactive_code = false; + + continue; + } + + // last try, is it defined to be one? + for (auto& macro_ref : kMacros) + { + if (macro_ref.fName.find(macro) != std::string::npos && + macro_ref.fValue == "1") + { + inactive_code = false; + defined = true; + + break; + } + } + } + else if (hdr_line[0] == kMacroPrefix && + hdr_line.find("warning") != std::string::npos) + { + auto line_after_warning = hdr_line.substr(hdr_line.find("warning") + strlen("warning") + 1); + std::string message; + + for (auto& ch : line_after_warning) + { + if (ch == '\r' || + ch == '\n') + { + break; + } + + message += ch; + } + + std::cout << "Warning: " << message << std::endl; + } + else if (hdr_line[0] == kMacroPrefix && + hdr_line.find("error") != std::string::npos) + { + auto line_after_warning = hdr_line.substr(hdr_line.find("error") + strlen("error") + 1); + std::string message; + + for (auto& ch : line_after_warning) + { + if (ch == '\r' || + ch == '\n') + { + break; + } + + message += ch; + } + + throw std::runtime_error("Error: " + message); + } + else if (hdr_line[0] == kMacroPrefix && + hdr_line.find("include") != std::string::npos) + { + line_after_include = hdr_line.substr(hdr_line.find("include")); + +kIncludeFile: + auto it = std::find(kAllIncludes.cbegin(), + kAllIncludes.cend(), line_after_include); + + if (it != kAllIncludes.cend()) + { + continue; + } + + std::string path; + + kAllIncludes.push_back(line_after_include); + + bool enable = false; + bool not_local = false; + + for (auto& ch : line_after_include) + { + if (ch == ' ') + continue; + + if (ch == '<') + not_local = true; + + if (ch == '\"' || + ch == '<') + { + enable = true; + continue; + } + + if (enable) + { + if (ch == '>' || + ch == '\"') + break; + + path += ch; + } + } + + if (not_local) + { + bool open = false; + + for (auto& include : kIncludes) + { + std::string header_path = include; + header_path.push_back('/'); + header_path += path; + + std::ifstream header(header_path); + + if (!header.is_open()) + continue; + + open = true; + + cpp_parse_file(header, pp_out); + + break; + } + + if (!open) + { + throw std::runtime_error("cpp: no such include file: " + path); + } + } + else + { + std::ifstream header(kWoringDir + path); + + if (!header.is_open()) + throw std::runtime_error("cpp: no such include file: " + path); + + cpp_parse_file(header, pp_out); + } + } + else + { + std::cerr << ("cpp: unknown pre-processor directive, " + hdr_line) << "\n"; + continue; + } + } + } + catch (std::out_of_range& oor) + { + return; + } +} + +///////////////////////////////////////////////////////////////////////////////////////// + +// @brief main entrypoint of app. + +///////////////////////////////////////////////////////////////////////////////////////// + +int main(int argc, char** argv) +{ + try + { + bool skip = false; + bool double_skip = false; + + details::cpp_macro macro_1; + macro_1.fName = "__true"; + macro_1.fValue = "1"; + + kMacros.push_back(macro_1); + + details::cpp_macro macro_0; + macro_0.fName = "__false"; + macro_0.fValue = "0"; + + kMacros.push_back(macro_0); + + for (auto index = 1UL; index < argc; ++index) + { + if (skip) + { + skip = false; + continue; + } + + if (double_skip) + { + ++index; + double_skip = false; + continue; + } + + if (argv[index][0] == '-') + { + if (strcmp(argv[index], "-v") == 0 || + strcmp(argv[index], "--version") == 0) + { + printf("%s\n", "bpp v1.11, (c) Mahrouss Logic"); + return 0; + } + + if (strcmp(argv[index], "-h") == 0 || + strcmp(argv[index], "--help") == 0) + { + printf("%s\n", "cpp v1.11, (c) Mahrouss Logic"); + printf("%s\n", "--working-dir: set directory to working path."); + printf("%s\n", "--include-dir: add directory to include path."); + printf("%s\n", "--define: define macro."); + + return 0; + } + + if (strcmp(argv[index], "--include-dir") == 0) + { + std::string inc = argv[index+1]; + + skip = true; + + kIncludes.push_back(inc); + } + + if (strcmp(argv[index], "--working-dir") == 0) + { + std::string inc = argv[index+1]; + skip = true; + kWoringDir = inc; + } + + if (strcmp(argv[index], "--define") == 0 && + argv[index + 1] != nullptr && + argv[index + 2] != nullptr) + { + std::string macro_key = argv[index + 1]; + + std::string macro_value; + bool is_string = false; + + for (int argv_find_len = 0; + argv_find_len < strlen(argv[index]); + ++argv_find_len) + { + if (!isdigit(argv[index][argv_find_len])) + { + is_string = true; + macro_value += "\""; + + break; + } + } + + macro_value += argv[index + 2]; + + if (is_string) + macro_value += "\""; + + details::cpp_macro macro; + macro.fName = macro_key; + macro.fValue = macro_value; + + kMacros.push_back(macro); + + double_skip = true; + } + + continue; + } + + kFiles.emplace_back(argv[index]); + } + + if (kFiles.empty()) + return CXXKIT_EXEC_ERROR; + + for (auto& file : kFiles) + { + if (!std::filesystem::exists(file)) + continue; + + std::ifstream file_descriptor(file); + std::ofstream file_descriptor_pp(file + ".pp"); + + cpp_parse_file(file_descriptor, file_descriptor_pp); + } + + return 0; + } + catch(const std::runtime_error& e) + { + std::cout << e.what() << '\n'; + } + + return 0; +} + +// Last rev 8-1-24 \ No newline at end of file diff --git a/64x0-Drivers/ccplus.cc b/64x0-Drivers/ccplus.cc new file mode 100644 index 0000000..8309145 --- /dev/null +++ b/64x0-Drivers/ccplus.cc @@ -0,0 +1,758 @@ +/* + * ======================================================== + * + * ccplus + * Copyright Mahrouss Logic, all rights reserved. + * + * ======================================================== + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define kOk 0 + +/* Mahrouss Logic C++ driver */ +/* This is part of MP-UX C++ SDK. */ +/* (c) Mahrouss Logic */ + +// @author Amlal El Mahrouss (amlel) +// @file cc.cc +// @brief Optimized C++ Compiler. + +///////////////////// + +// ANSI ESCAPE CODES + +///////////////////// + +#define kBlank "\e[0;30m" +#define kRed "\e[0;31m" +#define kWhite "\e[0;97m" + +///////////////////////////////////// + +// INTERNAL STUFF OF THE C COMPILER + +///////////////////////////////////// + +namespace detail +{ + struct CompilerRegisterMap final + { + std::string fName; + std::string fReg; + }; + + // \brief Offset based struct/class + struct CompilerStructMap final + { + std::string fName; + std::string fReg; + + // offset counter + std::size_t fOffsetsCnt; + + // offset array + std::vector> fOffsets; + }; + + struct CompilerState final + { + std::vector fSyntaxTreeList; + std::vector kStackFrame; + std::vector kStructMap; + ParserKit::SyntaxLeafList* fSyntaxTree{ nullptr }; + std::unique_ptr fOutputAssembly; + std::string fLastFile; + std::string fLastError; + bool kVerbose; + }; +} + +static detail::CompilerState kState; +static SizeType kErrorLimit = 100; + +static Int32 kAcceptableErrors = 0; + +namespace detail +{ + void print_error(std::string reason, std::string file) noexcept + { + if (reason[0] == '\n') + reason.erase(0, 1); + + if (file.find(".pp") != std::string::npos) + { + file.erase(file.find(".pp"), 3); + } + + if (kState.fLastFile != file) + { + std::cout << kRed << "[ ccplus ] " << kWhite << ((file == "ccplus") ? "internal compiler error " : ("in file, " + file)) << kBlank << std::endl; + std::cout << kRed << "[ ccplus ] " << kWhite << reason << kBlank << std::endl; + + kState.fLastFile = file; + } + else + { + std::cout << kRed << "[ ccplus ] [ " << kState.fLastFile << " ] " << kWhite << reason << kBlank << std::endl; + } + + if (kAcceptableErrors > kErrorLimit) + std::exit(3); + + ++kAcceptableErrors; + } + + struct CompilerType + { + std::string fName; + std::string fValue; + }; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +// Target architecture. +static int kMachine = 0; + +///////////////////////////////////////// + +// REGISTERS ACCORDING TO USED ASSEMBLER + +///////////////////////////////////////// + +static size_t kRegisterCnt = kAsmRegisterLimit; +static size_t kStartUsable = 2; +static size_t kUsableLimit = 14; +static size_t kRegisterCounter = kStartUsable; +static std::string kRegisterPrefix = kAsmRegisterPrefix; +static std::vector kKeywords; + +///////////////////////////////////////// + +// COMPILER PARSING UTILITIES/STATES. + +///////////////////////////////////////// + +static std::vector kFileList; +static CompilerKit::AssemblyFactory kFactory; +static bool kInStruct = false; +static bool kOnWhileLoop = false; +static bool kOnForLoop = false; +static bool kInBraces = false; +static size_t kBracesCount = 0UL; + +/* @brief C compiler backend for Mahrouss Logic C */ +class CompilerBackendClang final : public ParserKit::CompilerBackend +{ +public: + explicit CompilerBackendClang() = default; + ~CompilerBackendClang() override = default; + + CXXKIT_COPY_DEFAULT(CompilerBackendClang); + + bool Compile(const std::string& text, const char* file) override; + + const char* Language() override { return "64x0/32x0 C++"; } + +}; + +static CompilerBackendClang* kCompilerBackend = nullptr; +static std::vector kCompilerVariables; +static std::vector kCompilerFunctions; + +namespace detail +{ + union number_cast + { + number_cast(UInt64 raw) + : raw(raw) + {} + + char number[8]; + UInt64 raw; + + }; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +// @name Compile +// @brief Generate MASM from a C++ source. + +///////////////////////////////////////////////////////////////////////////////////////// + +bool CompilerBackendClang::Compile(const std::string& text, const char* file) +{ + if (text.empty()) + return false; + + // if (expr) + // int name = expr; + // expr; + + std::size_t index = 0UL; + + auto syntax_tree = ParserKit::SyntaxLeafList::SyntaxLeaf(); + + syntax_tree.fUserData = text; + kState.fSyntaxTree->fLeafList.emplace_back(syntax_tree); + + std::string text_cpy = text; + + std::vector> keywords_list; + + for (auto& keyword : kKeywords) + { + while (text_cpy.find(keyword) != std::string::npos) + { + keywords_list.emplace_back(std::make_pair(keyword, index)); + ++index; + + text_cpy.erase(text_cpy.find(keyword), keyword.size()); + } + } + + // TODO: sort keywords + + for (auto& keyword : keywords_list) + { + syntax_tree.fUserData = keyword.first; + kState.fSyntaxTree->fLeafList.emplace_back(syntax_tree); + } + + return true; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +/** + * @brief C To Assembly mount-point. + */ + +///////////////////////////////////////////////////////////////////////////////////////// + +class AssemblyMountpointClang final : public CompilerKit::AssemblyMountpoint +{ +public: + explicit AssemblyMountpointClang() = default; + ~AssemblyMountpointClang() override = default; + + CXXKIT_COPY_DEFAULT(AssemblyMountpointClang); + + [[maybe_unused]] static Int32 Arch() noexcept { return CompilerKit::AssemblyFactory::kArchRISCV; } + + Int32 CompileToFormat(CompilerKit::StringView& src, Int32 arch) override + { + if (arch != AssemblyMountpointClang::Arch()) + return -1; + + if (kCompilerBackend == nullptr) + return -1; + + /* @brief copy contents wihtout extension */ + std::string src_file = src.CData(); + std::ifstream src_fp = std::ifstream(src_file, std::ios::in); + std::string dest; + + for (auto& ch : src_file) + { + if (ch == '.') + { + break; + } + + dest += ch; + } + + /* According to pef abi. */ + dest += kAsmFileExt64x0; + + kState.fOutputAssembly = std::make_unique(dest); + + auto fmt = CompilerKit::current_date(); + + (*kState.fOutputAssembly) << "# Path: " << src_file << "\n"; + (*kState.fOutputAssembly) << "# Language: MP-UX Assembly (Generated from C++)\n"; + (*kState.fOutputAssembly) << "# Build Date: " << fmt << "\n\n"; + + ParserKit::SyntaxLeafList syntax; + + kState.fSyntaxTreeList.emplace_back(syntax); + kState.fSyntaxTree = &kState.fSyntaxTreeList[kState.fSyntaxTreeList.size() - 1]; + + std::string source; + + while (std::getline(src_fp, source)) + { + // compile into AST. + kCompilerBackend->Compile(source.c_str(), src.CData()); + } + + if (kAcceptableErrors > 0) + return -1; + + std::vector lines; + + // \brief compiler scope type. + struct scope_type + { + std::vector vals; + std::size_t reg_cnt{ kRegisterCounter }; + std::size_t id{ 0 }; + + bool operator==(const scope_type& typ) const { return typ.id == id; } + }; + + std::vector scope; + scope.emplace_back(); + + bool found_type = false; + bool is_pointer = false; + bool found_expr = false; + bool found_func = false; + std::string type; + + for (auto& leaf : kState.fSyntaxTree->fLeafList) + { + if (leaf.fUserData == "{") + { + scope.emplace_back(); + } + + if (leaf.fUserData == "{") + { + kRegisterCounter = kStartUsable; + scope.pop_back(); + } + + if (leaf.fUserData == "int" || + leaf.fUserData == "long" || + leaf.fUserData == "unsigned" || + leaf.fUserData == "short" || + leaf.fUserData == "char" || + leaf.fUserData == "struct" || + leaf.fUserData == "class") + { + type += leaf.fUserData; + found_type = true; + } + + if (leaf.fUserData == "(") + { + if (found_type) + { + found_expr = true; + found_type = false; + is_pointer = false; + } + } + + if (leaf.fUserData == ")") + { + if (found_expr) + { + found_expr = false; + is_pointer = false; + } + else + { + leaf.fUserValue = "export .text _CppZ_ELMH_"; + + for (auto& line : lines) + { + if (line.find(type) != std::string::npos && + line.find("(") != std::string::npos) + { + auto fn_name = line.substr(line.find(type), line.find("(")); + + while (fn_name.find(' ') != std::string::npos) + fn_name.replace(fn_name.find(' '), 1, "@"); + + leaf.fUserValue += fn_name; + + break; + } + } + + leaf.fUserValue += "\n"; + + found_func = true; + } + } + + if (leaf.fUserData == ",") + { + if (is_pointer) + { + is_pointer = false; + } + + auto& front = scope.front(); + + std::string reg = "r"; + reg += std::to_string(front.reg_cnt); + ++front.reg_cnt; + + front.vals.push_back(reg); + } + + if (leaf.fUserData == "*") + { + if (found_type && !found_expr) + is_pointer = true; + } + + if (leaf.fUserData == "=") + { + if (found_type) + { + auto& front = scope.front(); + + std::string reg = "r"; + reg += std::to_string(front.reg_cnt); + ++front.reg_cnt; + + front.vals.push_back(reg); + + leaf.fUserValue = !is_pointer ? "ldw %s, %s1\n" : "lda %s, %s1\n"; + + for (auto& ln : lines) + { + if (ln.find(leaf.fUserData) != std::string::npos && + ln.find(";") != std::string::npos) + { + auto val = ln.substr(ln.find(leaf.fUserData) + leaf.fUserData.size()); + + if (val.find(";") != std::string::npos) + val.erase(val.find(";"), 1); + + while (val.find(" ") != std::string::npos) + val.erase(val.find(" "), 1); + + if (isalnum(val[0]) && + !isdigit(val[0])) + val.insert(0, "import "); + + leaf.fUserValue.replace(leaf.fUserValue.find("%s1"), strlen("%s1"), val); + } + } + + leaf.fUserValue.replace(leaf.fUserValue.find("%s"), strlen("%s"), reg); + + found_type = false; + } + else + { + leaf.fUserValue = !is_pointer ? "ldw %s, %s1\n" : "lda 0(%s), %s1\n"; + + for (auto& ln : lines) + { + if (ln.find(leaf.fUserData) != std::string::npos && + ln.find(";") != std::string::npos) + { + std::string nm; + for (auto i = ln.find('=') + 1; i < ln.size(); ++i) + { + if (ln[i] == ';') + break; + + nm.push_back(ln[i]); + } + + if (!nm.empty()) + { + leaf.fUserValue.replace(leaf.fUserValue.find("%s1"), strlen("%s1"), nm); + break; + } + } + } + + auto& front = scope.front(); + + std::string reg = "r"; + reg += std::to_string(front.reg_cnt); + ++front.reg_cnt; + + leaf.fUserValue.replace(leaf.fUserValue.find("%s"), strlen("%s"), reg); + + front.vals.push_back(reg); + + if (is_pointer) + { + is_pointer = false; + } + } + } + + if (leaf.fUserData == "return") + { + leaf.fUserValue = "mv r19, %s\njlr"; + + if (!lines.empty()) + { + for (auto& ln : lines) + { + if (ln.find(leaf.fUserData) != std::string::npos && + ln.find(";") != std::string::npos) + { + auto val = ln.substr(ln.find(leaf.fUserData) + leaf.fUserData.size()); + val.erase(val.find(";"), 1); + + std::string val_reg; + std::size_t reg_cnt = kRegisterCounter; + + for (int i = ln.find(leaf.fUserData) + leaf.fUserData.size(); i < ln.size(); ++i) + { + try + { + if (ln[i] == ',' || + ln[i] == '+' || + ln[i] == '/' || + ln[i] == '-' || + ln[i] == '*' || + ln[i] == '|' || + ln[i] == '&' || + ln[i] == '&' || + ln[i] == '|' || + ln[i] == ';') + { + val.replace(val.find(val_reg), val_reg.size(), "r" + std::to_string(reg_cnt)); + val_reg.clear(); + ++reg_cnt; + + continue; + } + } + catch (...) + { + + } + + if (isalnum(ln[i])) + val_reg += ln[i]; + } + + while (val.find(" ") != std::string::npos) + val.erase(val.find(" "), 1); + + leaf.fUserValue.replace(leaf.fUserValue.find("%s"), strlen("%s"), val); + } + } + } + else + { + leaf.fUserValue.replace(leaf.fUserValue.find("%s"), strlen("%s"), "0"); + } + + continue; + } + + lines.emplace_back(leaf.fUserData); + } + + for (auto& leaf : kState.fSyntaxTree->fLeafList) + { + (*kState.fOutputAssembly) << leaf.fUserValue; + } + + kState.fSyntaxTree = nullptr; + + kState.fOutputAssembly->flush(); + kState.fOutputAssembly.reset(); + + return kOk; + } + +}; + +///////////////////////////////////////////////////////////////////////////////////////// + +#define kPrintF printf +#define kSplashCxx() kPrintF(kWhite "%s\n", "ccplus, v1.15, (c) Mahrouss Logic.") + +static void cxx_print_help() +{ + kSplashCxx(); + kPrintF(kWhite "--asm={ASSEMBLER}: %s\n", "Compile with a specific syntax. (64x0, 32x0)"); + kPrintF(kWhite "--compiler={COMPILER}: %s\n", "Select compiler engine (builtin -> vanhalen)."); +} + +///////////////////////////////////////////////////////////////////////////////////////// + +#define kExt ".cpp" + +int main(int argc, char** argv) +{ + kKeywords.emplace_back("auto"); + kKeywords.emplace_back("else"); + kKeywords.emplace_back("break"); + kKeywords.emplace_back("switch"); + kKeywords.emplace_back("enum"); + kKeywords.emplace_back("register"); + kKeywords.emplace_back("do"); + kKeywords.emplace_back("return"); + kKeywords.emplace_back("if"); + kKeywords.emplace_back("default"); + kKeywords.emplace_back("struct"); + kKeywords.emplace_back("_Packed"); + kKeywords.emplace_back("extern"); + kKeywords.emplace_back("volatile"); + kKeywords.emplace_back("static"); + kKeywords.emplace_back("for"); + kKeywords.emplace_back("class"); + kKeywords.emplace_back("{"); + kKeywords.emplace_back("}"); + kKeywords.emplace_back("("); + kKeywords.emplace_back(")"); + kKeywords.emplace_back("char"); + kKeywords.emplace_back("int"); + kKeywords.emplace_back("short"); + kKeywords.emplace_back("long"); + kKeywords.emplace_back("float"); + kKeywords.emplace_back("double"); + kKeywords.emplace_back("unsigned"); + kKeywords.emplace_back("__export__"); + kKeywords.emplace_back("__import__"); + kKeywords.emplace_back("__packed__"); + kKeywords.emplace_back("namespace"); + kKeywords.emplace_back("while"); + kKeywords.emplace_back("sizeof"); + kKeywords.emplace_back("private"); + kKeywords.emplace_back("->"); + kKeywords.emplace_back("."); + kKeywords.emplace_back("::"); + kKeywords.emplace_back("*"); + kKeywords.emplace_back("+"); + kKeywords.emplace_back("-"); + kKeywords.emplace_back("/"); + kKeywords.emplace_back("="); + kKeywords.emplace_back("=="); + kKeywords.emplace_back("!="); + kKeywords.emplace_back(">="); + kKeywords.emplace_back("<="); + kKeywords.emplace_back(">"); + kKeywords.emplace_back("<"); + kKeywords.emplace_back(":"); + kKeywords.emplace_back(","); + kKeywords.emplace_back(";"); + kKeywords.emplace_back("public"); + kKeywords.emplace_back("protected"); + + bool skip = false; + + for (auto index = 1UL; index < argc; ++index) + { + if (skip) + { + skip = false; + continue; + } + + if (argv[index][0] == '-') + { + if (strcmp(argv[index], "-v") == 0 || + strcmp(argv[index], "--version") == 0) + { + kSplashCxx(); + return kOk; + } + + if (strcmp(argv[index], "-verbose") == 0) + { + kState.kVerbose = true; + + continue; + } + + if (strcmp(argv[index], "-h") == 0 || + strcmp(argv[index], "--help") == 0) + { + cxx_print_help(); + + return kOk; + } + + if (strcmp(argv[index], "--dialect") == 0) + { + if (kCompilerBackend) + std::cout << kCompilerBackend->Language() << "\n"; + + return kOk; + } + + if (strcmp(argv[index], "--asm=masm") == 0) + { + delete kFactory.Unmount(); + + kFactory.Mount(new AssemblyMountpointClang()); + kMachine = CompilerKit::AssemblyFactory::kArchRISCV; + + continue; + } + + if (strcmp(argv[index], "--compiler=vanhalen") == 0) + { + if (!kCompilerBackend) + kCompilerBackend = new CompilerBackendClang(); + + continue; + } + + if (strcmp(argv[index], "-fmax-exceptions") == 0) + { + try + { + kErrorLimit = std::strtol(argv[index + 1], nullptr, 10); + } + // catch anything here + catch (...) + { + kErrorLimit = 0; + } + + skip = true; + + continue; + } + + std::string err = "Unknown command: "; + err += argv[index]; + + detail::print_error(err, "ccplus"); + + continue; + } + + kFileList.emplace_back(argv[index]); + + CompilerKit::StringView srcFile = CompilerKit::StringBuilder::Construct(argv[index]); + + if (strstr(argv[index], kExt) == nullptr) + { + if (kState.kVerbose) + { + std::cerr << argv[index] << " is not a valid C source.\n"; + } + + return -1; + } + + if (kFactory.Compile(srcFile, kMachine) != kOk) + return -1; + } + + return kOk; +} + +// Last rev 8-1-24 \ No newline at end of file diff --git a/64x0-Drivers/makefile b/64x0-Drivers/makefile new file mode 100644 index 0000000..cff42ae --- /dev/null +++ b/64x0-Drivers/makefile @@ -0,0 +1,59 @@ + # + # ======================================================== + # + # C++Kit + # Copyright Mahrouss Logic, all rights reserved. + # + # ======================================================== + # + +LINK_CC=g++ -std=c++20 +LINK_INC=-I../ -I../CompilerKit +LINK_SRC=64ld.cc +LINK_OUTPUT=bin/ld +LINK_ALT_OUTPUT=bin/64ld + +PP_SRC=bpp.cc +PP_OUTPUT=bin/bpp + +# BC Compiler +CC_SRC=bccl.cc ../CompilerKit/StdKit/*.cc ../CompilerKit/AsmKit/*.cc +CC_OUTPUT=bin/bccl + +# C++ Compiler +CXX_SRC=ccplus.cc ../CompilerKit/StdKit/*.cc ../CompilerKit/AsmKit/*.cc +CXX_OUTPUT=bin/ccplus + +# MP-UX Assembly +MASM_SRC=64asm.cc ../CompilerKit/StdKit/*.cc ../CompilerKit/AsmKit/*.cc +MASM_OUTPUT=bin/64asm + +.PHONY: all +all: cxx + @echo "[make] done build." + +.PHONY: cxx +cxx: ld + $(LINK_CC) $(LINK_INC) $(PP_SRC) -o $(PP_OUTPUT) + $(LINK_CC) $(LINK_INC) $(CC_SRC) -o $(CC_OUTPUT) + $(LINK_CC) $(LINK_INC) $(CXX_SRC) -o $(CXX_OUTPUT) + $(LINK_CC) $(LINK_INC) $(MASM_SRC) -o $(MASM_OUTPUT) + +.PHONY: ld +ld: + $(LINK_CC) $(LINK_INC) $(LINK_SRC) -o $(LINK_OUTPUT) + cp $(LINK_OUTPUT) $(LINK_ALT_OUTPUT) + +.PHONY: help +help: + @echo "cxx - C compiler driver" + @echo "ld - Linker" + +.PHONY: clean +clean: + rm bin/$(MKCDFS_OUTPUT) + rm bin/$(CC_OUTPUT) + rm bin/$(PP_OUTPUT) + rm bin/$(LINK_OUTPUT) + +# Last rev 8-1-24 \ No newline at end of file diff --git a/64x0/.gitignore b/64x0/.gitignore deleted file mode 100644 index 5f2e93d..0000000 --- a/64x0/.gitignore +++ /dev/null @@ -1,28 +0,0 @@ -bin/ld -bin/mld -bin/cpp -bin/bpp -bin/cc -bin/masm -bin/64ld -bin/64asm -bin/mkcdfs -bin/ccplus -bin/cppfront -bin/bccl - -bin/SourceUnitTest/*.c.pp -bin/SourceUnitTest/*.c -bin/SourceUnitTest/*.bccl -bin/SourceUnitTest/*.bccl.pp -bin/SourceUnitTest/*.cc.pp -bin/SourceUnitTest/*.cc -bin/SourceUnitTest/*.cpp.pp -bin/SourceUnitTest/*.cpp -bin/SourceUnitTest/*.cxx.pp -bin/SourceUnitTest/*.cxx -bin/SourceUnitTest/*.masm -bin/SourceUnitTest/*.h -bin/SourceUnitTest/*.64x - -*.cxx.pp \ No newline at end of file diff --git a/64x0/64asm.cc b/64x0/64asm.cc deleted file mode 100644 index 45db820..0000000 --- a/64x0/64asm.cc +++ /dev/null @@ -1,999 +0,0 @@ -/* - * ======================================================== - * - * C++Kit - * Copyright Mahrouss Logic, all rights reserved. - * - * ======================================================== - */ - -///////////////////////////////////////////////////////////////////////////////////////// - -// @file masm.cxx -// @author Amlal El Mahrouss -// @brief MP-UX 64x0 Assembler. - -// REMINDER: when dealing with an undefined symbol use (string size):ld:(string) -// so that ld will look for it. - -///////////////////////////////////////////////////////////////////////////////////////// - -#include -#include -#include -#include -#include -#include -#include - -///////////////////// - -// ANSI ESCAPE CODES - -///////////////////// - -#define kBlank "\e[0;30m" -#define kRed "\e[0;31m" -#define kWhite "\e[0;97m" -#define kYellow "\e[0;33m" - -#define kStdOut (std::cout << kWhite) - -static char kOutputArch = CompilerKit::kPefArch64000; - -//! base relocation address for every mp-ux app. -static UInt32 kErrorLimit = 10; -static UInt32 kAcceptableErrors = 0; - -static std::size_t kCounter = 1UL; - -static bool kVerbose = false; - -static std::vector kBytes; -static CompilerKit::AERecordHeader kCurrentRecord{ .fName = "", .fKind = CompilerKit::kPefCode, .fSize = 0, .fOffset = 0 }; - -static std::vector kRecords; -static std::vector kUndefinedSymbols; - -static const std::string kUndefinedSymbol = ":ld:"; -static const std::string kRelocSymbol = ":mld:"; - -// \brief forward decl. -static std::string masm_check_line(std::string& line, const std::string& file); -static bool masm_read_attributes(std::string& line); -static void masm_read_instruction(std::string& line, const std::string& file); - -namespace detail -{ - void print_error(std::string reason, const std::string& file) noexcept - { - if (reason[0] == '\n') - reason.erase(0, 1); - - kStdOut << kRed << "[ masm ] " << kWhite << ((file == "masm") ? "internal assembler error " : ("in file, " + file)) << kBlank << std::endl; - kStdOut << kRed << "[ masm ] " << kWhite << reason << kBlank << std::endl; - - if (kAcceptableErrors > kErrorLimit) - std::exit(3); - - ++kAcceptableErrors; - } - - void print_warning(std::string reason, const std::string& file) noexcept - { - if (reason[0] == '\n') - reason.erase(0, 1); - - if (!file.empty()) - { - kStdOut << kYellow << "[ file ] " << kWhite << file << kBlank << std::endl; - } - - kStdOut << kYellow << "[ masm ] " << kWhite << reason << kBlank << std::endl; - } -} - -// provide operator<< for AE - -std::ofstream& operator<<(std::ofstream& fp, CompilerKit::AEHeader& container) -{ - fp.write((char*)&container, sizeof(CompilerKit::AEHeader)); - - return fp; -} - -std::ofstream& operator<<(std::ofstream& fp, CompilerKit::AERecordHeader& container) -{ - fp.write((char*)&container, sizeof(CompilerKit::AERecordHeader)); - - return fp; -} - -///////////////////////////////////////////////////////////////////////////////////////// - -// @brief Main entrypoint. - -///////////////////////////////////////////////////////////////////////////////////////// - -int main(int argc, char** argv) -{ - for (size_t i = 1; i < argc; ++i) - { - if (argv[i][0] == '-') - { - if (strcmp(argv[i], "-v") == 0) - { - kStdOut << "64asm: The MP-UX 64x0 Assembler.\n64asm: v1.10\n64asm: Copyright (c) 2023 Mahrouss Logic.\n"; - return 0; - } - - if (strcmp(argv[i], "-h") == 0) - { - kStdOut << "64asm: The MP-UX 64x0 Assembler.\n64asm: Copyright (c) 2023 Mahrouss Logic.\n"; - kStdOut << "-v: Print program version.\n"; - kStdOut << "-verbose: Print verbose output.\n"; - kStdOut << "-m64000: Compile for the X64000 instruction set.\n"; - - return 0; - } - else if (strcmp(argv[i], "-verbose") == 0) - { - kVerbose = true; - continue; - } - - kStdOut << "64asm: ignore " << argv[i] << "\n"; - continue; - } - - if (!std::filesystem::exists(argv[i])) - continue; - - std::string object_output(argv[i]); - - if (object_output.find(kAsmFileExt64x0) != std::string::npos) - { - object_output.erase(object_output.find(kAsmFileExt64x0), std::size(kAsmFileExt64x0)); - } - - object_output += kObjectFileExt; - - std::ifstream file_ptr(argv[i]); - std::ofstream file_ptr_out(object_output, - std::ofstream::binary); - - if (file_ptr_out.bad()) - { - if (kVerbose) - { - kStdOut << "64asm: error: " << strerror(errno) << "\n"; - } - } - - std::string line; - - CompilerKit::AEHeader hdr{ 0 }; - - memset(hdr.fPad, kAEInvalidOpcode, kAEPad); - - hdr.fMagic[0] = kAEMag0; - hdr.fMagic[1] = kAEMag1; - hdr.fSize = sizeof(CompilerKit::AEHeader); - hdr.fArch = kOutputArch; - - ///////////////////////////////////////////////////////////////////////////////////////// - - // COMPILATION LOOP - - ///////////////////////////////////////////////////////////////////////////////////////// - - while (std::getline(file_ptr, line)) - { - if (auto ln = masm_check_line(line, argv[i]); - !ln.empty()) - { - detail::print_error(ln, argv[i]); - continue; - } - - try - { - masm_read_attributes(line); - masm_read_instruction(line, argv[i]); - } - catch(const std::exception& e) - { - if (kVerbose) - { - std::string what = e.what(); - detail::print_warning("exit because of: " + what, "masm"); - } - - std::filesystem::remove(object_output); - goto masm_fail_exit; - } - - } - - if (kVerbose) - kStdOut << "64asm: writing to file...\n"; - - // this is the final step, write everything to the file. - - auto pos = file_ptr_out.tellp(); - - hdr.fCount = kRecords.size() + kUndefinedSymbols.size(); - - file_ptr_out << hdr; - - if (kRecords.empty()) - { - std::filesystem::remove(object_output); - return -1; - } - - kRecords[kRecords.size() - 1].fSize = kBytes.size(); - - std::size_t record_count = 0UL; - - for (auto& rec : kRecords) - { - if (kVerbose) - kStdOut << "64asm: wrote record " << rec.fName << " to file...\n"; - - rec.fFlags |= CompilerKit::kKindRelocationAtRuntime; - rec.fOffset = record_count; - ++record_count; - - file_ptr_out << rec; - } - - // increment once again, so that we won't lie about the kUndefinedSymbols. - ++record_count; - - for (auto& sym : kUndefinedSymbols) - { - CompilerKit::AERecordHeader _record_hdr{ 0 }; - - if (kVerbose) - kStdOut << "64asm: wrote symbol " << sym << " to file...\n"; - - _record_hdr.fKind = kAEInvalidOpcode; - _record_hdr.fSize = sym.size(); - _record_hdr.fOffset = record_count; - - ++record_count; - - memset(_record_hdr.fPad, kAEInvalidOpcode, kAEPad); - memcpy(_record_hdr.fName, sym.c_str(), sym.size()); - - file_ptr_out << _record_hdr; - - ++kCounter; - } - - auto pos_end = file_ptr_out.tellp(); - - file_ptr_out.seekp(pos); - - hdr.fStartCode = pos_end; - hdr.fCodeSize = kBytes.size(); - - file_ptr_out << hdr; - - file_ptr_out.seekp(pos_end); - - // byte from byte, we write this. - for (auto& byte : kBytes) - { - file_ptr_out.write(reinterpret_cast(&byte), sizeof(byte)); - } - - if (kVerbose) - kStdOut << "64asm: wrote program bytes to file...\n"; - - file_ptr_out.flush(); - file_ptr_out.close(); - - if (kVerbose) - kStdOut << "64asm: exit succeeded with code 0.\n"; - - return 0; - } - -masm_fail_exit: - - if (kVerbose) - kStdOut << "64asm: exit failed with code -1.\n"; - - return -1; -} - -///////////////////////////////////////////////////////////////////////////////////////// - -// @brief Check for attributes -// returns true if any was found. - -///////////////////////////////////////////////////////////////////////////////////////// - -static bool masm_read_attributes(std::string& line) -{ - // import is the opposite of export, it signals to the ld - // that we need this symbol. - if (ParserKit::find_word(line, "import ")) - { - auto name = line.substr(line.find("import ") + strlen("import ")); - - std::string result = std::to_string(name.size()); - result += kUndefinedSymbol; - - // mangle this - for (char & j : name) - { - if (j == ' ' || - j == ',') - j = '$'; - - } - - result += name; - - if (name.find(".text") != std::string::npos) - { - // data is treated as code. - kCurrentRecord.fKind = CompilerKit::kPefCode; - } - else if (name.find(".data") != std::string::npos) - { - // no code will be executed from here. - kCurrentRecord.fKind = CompilerKit::kPefData; - } - else if (name.find(".page_zero") != std::string::npos) - { - // this is a bss section. - kCurrentRecord.fKind = CompilerKit::kPefZero; - } - - // this is a special case for the start stub. - // we want this so that ld can find it. - - if (name == "__start") - { - kCurrentRecord.fKind = CompilerKit::kPefCode; - } - - // now we can tell the code size of the previous kCurrentRecord. - - if (!kRecords.empty()) - kRecords[kRecords.size() - 1].fSize = kBytes.size(); - - memset(kCurrentRecord.fName, 0, kAESymbolLen); - memcpy(kCurrentRecord.fName, result.c_str(), result.size()); - - ++kCounter; - - memset(kCurrentRecord.fPad, kAEInvalidOpcode, kAEPad); - - kRecords.emplace_back(kCurrentRecord); - - return true; - } - - // export is a special keyword used by masm to tell the AE output stage to mark this section as a header. - // it currently supports .text, .data., page_zero - if (ParserKit::find_word(line, "export ")) - { - auto name = line.substr(line.find("export ") + strlen("export ")); - - for (char& j : name) - { - if (j == ' ') - j = '$'; - - } - - if (name.find(',') != std::string::npos) - name.erase(name.find(',')); - - if (name.find(".text") != std::string::npos) - { - // data is treated as code. - kCurrentRecord.fKind = CompilerKit::kPefCode; - } - else if (name.find(".data") != std::string::npos) - { - // no code will be executed from here. - kCurrentRecord.fKind = CompilerKit::kPefData; - } - else if (name.find(".page_zero") != std::string::npos) - { - // this is a bss section. - kCurrentRecord.fKind = CompilerKit::kPefZero; - } - - // this is a special case for the start stub. - // we want this so that ld can find it. - - if (name == "__start") - { - kCurrentRecord.fKind = CompilerKit::kPefCode; - } - - // now we can tell the code size of the previous kCurrentRecord. - - if (!kRecords.empty()) - kRecords[kRecords.size() - 1].fSize = kBytes.size(); - - memset(kCurrentRecord.fName, 0, kAESymbolLen); - memcpy(kCurrentRecord.fName, name.c_str(), name.size()); - - ++kCounter; - - memset(kCurrentRecord.fPad, kAEInvalidOpcode, kAEPad); - - kRecords.emplace_back(kCurrentRecord); - - return true; - } - - return false; -} - -// \brief algorithms and helpers. - -namespace detail::algorithm -{ - // \brief authorize a brief set of characters. - static inline bool is_not_alnum_space(char c) - { - return !(isalpha(c) || isdigit(c) || (c == ' ') || (c == '\t') || (c == ',') || - (c == '(') || (c == ')') || (c == '"') || (c == '\'') || (c == '[') || (c == ']') - || (c == '+') || (c == '_')); - } - - bool is_valid(const std::string &str) - { - if (ParserKit::find_word(str, "export ") || - ParserKit::find_word(str, "import ")) - return true; - - return find_if(str.begin(), str.end(), is_not_alnum_space) == str.end(); - } -} - -///////////////////////////////////////////////////////////////////////////////////////// - -// @brief Check for line (syntax check) - -///////////////////////////////////////////////////////////////////////////////////////// - -static std::string masm_check_line(std::string& line, const std::string& file) -{ - (void)file; - - std::string err_str; - - while (line.find('\t') != std::string::npos) - line.erase(line.find('\t'), 1); - - if (line.empty() || - ParserKit::find_word(line, "import ") || - ParserKit::find_word(line, "export ") || - ParserKit::find_word(line, "#") || - ParserKit::find_word(line, ";") || - ParserKit::find_word(line, "layout")) - { - if (line.find('#') != std::string::npos) - { - line.erase(line.find('#')); - } - - if (line.find(';') != std::string::npos) - { - line.erase(line.find(';')); - } - - return err_str; - } - - if (!detail::algorithm::is_valid(line)) - { - err_str = "Line contains non alphanumeric characters.\nhere -> "; - err_str += line; - - return err_str; - } - - // check for a valid instruction format. - - if (line.find(',') != std::string::npos) - { - if (line.find(',') + 1 == line.size()) - { - err_str += "\ninstruction lacks right register, here -> "; - err_str += line.substr(line.find(',')); - - return err_str; - } - else - { - bool nothing_on_right = true; - - if (line.find(',') + 1 > line.size()) - { - err_str += "\ninstruction not complete, here -> "; - err_str += line; - - return err_str; - } - - auto substr = line.substr(line.find(',') + 1); - - for (auto& ch : substr) - { - if (ch != ' ' && - ch != '\t') - { - nothing_on_right = false; - } - } - - // this means we found nothing after that ',' . - if (nothing_on_right) - { - err_str += "\ninstruction not complete, here -> "; - err_str += line; - - return err_str; - } - } - } - - // these do take an argument. - std::vector operands_inst = { "jb", "psh", "stw", "ldw", "lda", "sta" }; - - // these don't. - std::vector filter_inst = { "jlr", "jrl", "syscall" }; - - for (auto& opcode64x0 : kOpcodes64x0) - { - if (line.find(opcode64x0.fName) != std::string::npos) - { - for (auto& op : operands_inst) - { - // if only instruction found. - if (line == op) - { - err_str += "\nmalformed "; - err_str += op; - err_str += " instruction, here -> "; - err_str += line; - } - } - - // if it is like that -> addr1, 0x0 - if (auto it = std::find(filter_inst.begin(), filter_inst.end(), opcode64x0.fName); - it == filter_inst.cend()) - { - if (!isspace(line[line.find(opcode64x0.fName) + strlen(opcode64x0.fName)])) - { - err_str += "\nmissing space between "; - err_str += opcode64x0.fName; - err_str += " and operands.\nhere -> "; - err_str += line; - } - } - - return err_str; - } - } - - err_str += "unknown syntax: "; - err_str += line; - - return err_str; -} - -///////////////////////////////////////////////////////////////////////////////////////// - -// @brief internal namespace - -///////////////////////////////////////////////////////////////////////////////////////// - -namespace detail -{ - union number_cast - { - explicit number_cast(UInt64 raw) - : raw(raw) - {} - - char number[8]; - UInt64 raw; - }; -} - -static bool masm_write_number(const std::size_t& pos, std::string& jump_label) -{ - if (!isdigit(jump_label[pos])) - return false; - - switch (jump_label[pos+1]) - { - case 'x': - { - if (auto res = strtoq(jump_label.substr(pos + 2).c_str(), - nullptr, 16); - !res) - { - if (errno != 0) - { - detail::print_error("invalid hex number: " + jump_label, "masm"); - throw std::runtime_error("invalid_hex"); - } - } - - detail::number_cast num(strtoq(jump_label.substr(pos + 2).c_str(), - nullptr, 16)); - - for (char& i : num.number) - { - kBytes.push_back(i); - } - - if (kVerbose) - { - kStdOut << "64asm: found a base 16 number here: " << jump_label.substr(pos) << "\n"; - } - - return true; - } - case 'b': - { - if (auto res = strtoq(jump_label.substr(pos + 2).c_str(), - nullptr, 2); - !res) - { - if (errno != 0) - { - detail::print_error("invalid binary number: " + jump_label, "masm"); - throw std::runtime_error("invalid_bin"); - } - } - - detail::number_cast num(strtoq(jump_label.substr(pos + 2).c_str(), - nullptr, 2)); - - if (kVerbose) - { - kStdOut << "64asm: found a base 2 number here: " << jump_label.substr(pos) << "\n"; - } - - for (char& i : num.number) - { - kBytes.push_back(i); - } - - return true; - } - case 'o': - { - if (auto res = strtoq(jump_label.substr(pos + 2).c_str(), - nullptr, 7); - !res) - { - if (errno != 0) - { - detail::print_error("invalid octal number: " + jump_label, "masm"); - throw std::runtime_error("invalid_octal"); - } - } - - detail::number_cast num(strtoq(jump_label.substr(pos + 2).c_str(), - nullptr, 7)); - - if (kVerbose) - { - kStdOut << "64asm: found a base 8 number here: " << jump_label.substr(pos) << "\n"; - } - - for (char& i : num.number) - { - kBytes.push_back(i); - } - - return true; - } - default: - { - break; - } - } - - /* check for errno and stuff like that */ - if (auto res = strtoq(jump_label.substr(pos).c_str(), - nullptr, 10); - !res) - { - if (errno != 0) - { - return false; - } - } - - detail::number_cast num(strtoq(jump_label.substr(pos).c_str(), - nullptr, 10)); - - for (char& i : num.number) - { - kBytes.push_back(i); - } - - if (kVerbose) - { - kStdOut << "64asm: found a base 10 number here: " << jump_label.substr(pos) << "\n"; - } - - return true; -} - -///////////////////////////////////////////////////////////////////////////////////////// - -// @brief Read and write an instruction to the output array. - -///////////////////////////////////////////////////////////////////////////////////////// - -static void masm_read_instruction(std::string& line, const std::string& file) -{ - if (ParserKit::find_word(line, "export ")) - return; - - for (auto& opcode64x0 : kOpcodes64x0) - { - // strict check here - if (ParserKit::find_word(line, opcode64x0.fName) && - detail::algorithm::is_valid(line)) - { - std::string name(opcode64x0.fName); - std::string jump_label, cpy_jump_label; - - kBytes.emplace_back(opcode64x0.fOpcode); - kBytes.emplace_back(opcode64x0.fFunct3); - kBytes.emplace_back(opcode64x0.fFunct7); - - // check funct7 type. - switch (opcode64x0.fFunct7) - { - // reg to reg means register to register transfer operation. - case kAsmRegToReg: - case kAsmImmediate: - { - // \brief how many registers we found. - std::size_t found_some = 0UL; - - for (size_t line_index = 0UL; line_index < line.size(); line_index++) - { - if (line[line_index] == 'r' && - isdigit(line[line_index + 1])) - { - std::string register_syntax = kAsmRegisterPrefix; - register_syntax += line[line_index + 1]; - - if (isdigit(line[line_index + 2])) - register_syntax += line[line_index + 2]; - - std::string reg_str; - reg_str += line[line_index + 1]; - - if (isdigit(line[line_index + 2])) - reg_str += line[line_index + 2]; - - // it ranges from r0 to r19 - // something like r190 doesn't exist in the instruction set. - if (kOutputArch == CompilerKit::kPefArch64000) - { - if (isdigit(line[line_index + 3]) && - isdigit(line[line_index + 2])) - { - reg_str += line[line_index + 3]; - detail::print_error("invalid register index, r" + reg_str + "\nnote: 64x0 accepts registers from r0 to r20.", file); - throw std::runtime_error("invalid_register_index"); - } - } - - // finally cast to a size_t - std::size_t reg_index = strtoq( - reg_str.c_str(), - nullptr, - 10); - - if (reg_index > kAsmRegisterLimit) - { - detail::print_error("invalid register index, r" + reg_str, file); - throw std::runtime_error("invalid_register_index"); - } - - kBytes.emplace_back(reg_index); - ++found_some; - - if (kVerbose) - { - if (kOutputArch == CompilerKit::kPefArch64000) - kStdOut << "64asm: 64x0 register found: " << register_syntax << "\n"; - else - kStdOut << "64asm: register found: " << register_syntax << "\n"; - - kStdOut << "64asm: Number of registers: " << found_some << "\n"; - } - } - } - - // we're not in immediate addressing, reg to reg. - if (opcode64x0.fFunct7 != kAsmImmediate) - { - // remember! register to register! - if (found_some == 1) - { - detail::print_error("unrecognized register found.\ntip: each masm register starts with 'r'.\nline: " + line, file); - throw std::runtime_error("not_a_register"); - } - } - - if (found_some < 1 && - name != "psh" && - name != "ldw" && - name != "lda" && - name != "stw" && - name != "jb") - { - detail::print_error("invalid combination of opcode and registers.\nline: " + line, file); - throw std::runtime_error("invalid_comb_op_reg"); - } - else if (found_some == 1 && - name == "add" ) - { - detail::print_error("invalid combination of opcode and registers.\nline: " + line, file); - throw std::runtime_error("invalid_comb_op_reg"); - } - else if (found_some == 1 && - name == "dec") - { - detail::print_error("invalid combination of opcode and registers.\nline: " + line, file); - throw std::runtime_error("invalid_comb_op_reg"); - } - - if (found_some > 0 && - name == "pop") - { - detail::print_error("invalid combination for opcode 'pop'.\ntip: it expects nothing.\nline: " + line, file); - throw std::runtime_error("invalid_comb_op_pop"); - } - } - default: - break; - - } - - // try to fetch a number from the name - if (name == "psh" || - name == "jb" || - name == "stw" || - name == "ldw" || - name == "lda" || - name == "sta") - { - auto where_string = name; - - // if we load something, we'd need it's symbol/literal - if (name == "stw" || - name == "ldw" || - name == "lda" || - name == "sta") - where_string = ","; - - jump_label = line.substr(line.find(where_string) + where_string.size()); - cpy_jump_label = jump_label; - - // replace any spaces with $ - if (jump_label[0] == ' ') - { - while (jump_label.find(' ') != std::string::npos) - { - if (isalnum(jump_label[0]) || - isdigit(jump_label[0])) - break; - - jump_label.erase(jump_label.find(' '), 1); - } - } - - if (!masm_write_number(0, jump_label)) - { - // sta expects this: sta 0x000000, r0 - if (name == "sta") - { - detail::print_error("invalid combination of opcode and operands.\nhere ->" + line, file); - throw std::runtime_error("invalid_comb_op_ops"); - } - - goto masm_write_label; - } - else - { - if (name == "sta" && - cpy_jump_label.find("import ") != std::string::npos) - { - detail::print_error("invalid usage import on 'sta', here: " + line, file); - throw std::runtime_error("invalid_sta_usage"); - } - } - } - - // This is the case where we jump to a label, it is also used as a goto. - if (name == "jb") - { -masm_write_label: - if (cpy_jump_label.find('\n') != std::string::npos) - cpy_jump_label.erase(cpy_jump_label.find('\n'), 1); - - if (cpy_jump_label.find("import ") == std::string::npos && - name == "psh" || - cpy_jump_label.find("import ") == std::string::npos && - name == "jb") - { - detail::print_error("import not found on jump label, please add one.", file); - throw std::runtime_error("import_jmp_lbl"); - } - else if (cpy_jump_label.find("import ") != std::string::npos) - { - if (name == "sta") - { - detail::print_error("import is not allowed on a sta operation.", file); - throw std::runtime_error("import_sta_op"); - } - - cpy_jump_label.erase(cpy_jump_label.find("import "), strlen("import ")); - } - - while (cpy_jump_label.find(' ') != std::string::npos) - { - cpy_jump_label.erase(cpy_jump_label.find(' '), 1); - } - - if (cpy_jump_label.size() < 1) - { - detail::print_error("label is empty, can't jump on it.", file); - throw std::runtime_error("label_empty"); - } - - auto mld_reloc_str = std::to_string(cpy_jump_label.size()); - mld_reloc_str += kRelocSymbol; - mld_reloc_str += cpy_jump_label; - - bool ignore_back_slash = false; - - for (auto& reloc_chr : mld_reloc_str) - { - if (reloc_chr == '\\') - { - ignore_back_slash = true; - continue; - } - - if (ignore_back_slash) - { - ignore_back_slash = false; - continue; - } - - kBytes.push_back(reloc_chr); - } - } - - kBytes.push_back('\0'); - break; - } - } -} - -// Last rev 8-1-24 \ No newline at end of file diff --git a/64x0/bccl.cc b/64x0/bccl.cc deleted file mode 100644 index a522c79..0000000 --- a/64x0/bccl.cc +++ /dev/null @@ -1,1572 +0,0 @@ -/* - * ======================================================== - * - * bccl - * Copyright Mahrouss Logic, all rights reserved. - * - * ======================================================== - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#define kOk 0 - -// TODO: support structs and ., -> - -/* BCCL driver */ -/* This is part of MP-UX BCCL SDK. */ -/* (c) Mahrouss Logic */ - -// @author Amlal El Mahrouss (amlel) -// @file bccl.bccl -// @brief BCCL Compiler. - -///////////////////// - -// ANSI ESCAPE CODES - -///////////////////// - -#define kBlank "\e[0;30m" -#define kRed "\e[0;31m" -#define kWhite "\e[0;97m" - -///////////////////////////////////// - -// INTERNAL STUFF OF THE BCCL COMPILER - -///////////////////////////////////// - -namespace detail -{ - // \brief name to register struct. - struct CompilerRegisterMap final - { - std::string fName; - std::string fReg; - }; - - // \brief Map for BCCL structs - // \author amlel - struct CompilerStructMap final - { - // 'my_foo' - std::string fName; - - // if instance: stores a valid register. - std::string fReg; - - // offset count - std::size_t fOffsetsCnt; - - // offset array. - std::vector> fOffsets; - }; - - struct CompilerState final - { - std::vector fSyntaxTreeList; - std::vector kStackFrame; - std::vector kStructMap; - ParserKit::SyntaxLeafList *fSyntaxTree{nullptr}; - std::unique_ptr fOutputAssembly; - std::string fLastFile; - std::string fLastError; - bool kVerbose; - }; -} - -static detail::CompilerState kState; -static SizeType kErrorLimit = 100; - -static Int32 kAcceptableErrors = 0; - -namespace detail -{ - void print_error(std::string reason, std::string file) noexcept - { - if (reason[0] == '\n') - reason.erase(0, 1); - - if (file.find(".pp") != std::string::npos) - { - file.erase(file.find(".pp"), 3); - } - - if (kState.fLastFile != file) - { - std::cout << kRed << "[ bccl ] " << kWhite << ((file == "bccl") ? "internal compiler error " : ("in file, " + file)) << kBlank << std::endl; - std::cout << kRed << "[ bccl ] " << kWhite << reason << kBlank << std::endl; - - kState.fLastFile = file; - } - else - { - std::cout << kRed << "[ bccl ] [ " << kState.fLastFile << " ] " << kWhite << reason << kBlank << std::endl; - } - - if (kAcceptableErrors > kErrorLimit) - std::exit(3); - - ++kAcceptableErrors; - } - - struct CompilerType final - { - std::string fName; - std::string fValue; - }; -} - -///////////////////////////////////////////////////////////////////////////////////////// - -// Target architecture. -static int kMachine = 0; - -///////////////////////////////////////// - -// REGISTERS ACCORDING TO USED ASSEMBLER - -///////////////////////////////////////// - -static size_t kRegisterCnt = kAsmRegisterLimit; -static size_t kStartUsable = 2; -static size_t kUsableLimit = 15; -static size_t kRegisterCounter = kStartUsable; -static std::string kRegisterPrefix = kAsmRegisterPrefix; - -///////////////////////////////////////// - -// COMPILER PARSING UTILITIES/STATES. - -///////////////////////////////////////// - -static std::vector kFileList; -static CompilerKit::AssemblyFactory kFactory; -static bool kInStruct = false; -static bool kOnWhileLoop = false; -static bool kOnForLoop = false; -static bool kInBraces = false; -static size_t kBracesCount = 0UL; - -/* @brief BCCL compiler backend for BCCL */ -class CompilerBackendBccl final : public ParserKit::CompilerBackend -{ -public: - explicit CompilerBackendBccl() = default; - ~CompilerBackendBccl() override = default; - - CXXKIT_COPY_DEFAULT(CompilerBackendBccl); - - std::string Check(const char *text, const char *file); - bool Compile(const std::string &text, const char *file) override; - - const char *Language() override { return "MP-UX BCCL for 64x0/32x0"; } -}; - -static CompilerBackendBccl *kCompilerBackend = nullptr; -static std::vector kCompilerVariables; -static std::vector kCompilerFunctions; -static std::vector kCompilerTypes; - -namespace detail -{ - union number_cast final - { - public: - number_cast(UInt64 _Raw) : _Raw(_Raw) {} - - public: - char _Num[8]; - UInt64 _Raw; - - }; - - union double_cast final - { - public: - double_cast(float _Raw) : _Raw(_Raw) {} - - public: - char _Sign; - char _Lh[8]; - char _Rh[23]; - - float _Raw; - - }; -} - -///////////////////////////////////////////////////////////////////////////////////////// - -// @name Compile -// @brief Generate MASM from a BCCL assignement. - -///////////////////////////////////////////////////////////////////////////////////////// - -bool CompilerBackendBccl::Compile(const std::string &text, const char *file) -{ - std::string _text = text; - - auto syntax_tree = ParserKit::SyntaxLeafList::SyntaxLeaf(); - bool type_found = false; - bool function_found = false; - - // start parsing - for (size_t text_index = 0; text_index < _text.size(); ++text_index) - { - uuid_t out{0}; - - uuid_generate_random(out); - detail::number_cast time_off = (UInt64)out; - - if (!type_found) - { - auto substr = _text.substr(text_index); - std::string match_type; - - for (size_t y = 0; y < substr.size(); ++y) - { - if (substr[y] == ' ') - { - while (match_type.find(' ') != std::string::npos) - { - match_type.erase(match_type.find(' ')); - } - - for (auto &clType : kCompilerTypes) - { - if (clType.fName == match_type) - { - match_type.clear(); - - std::string buf; - - buf += clType.fValue; - buf += ' '; - - if (substr.find('=') != std::string::npos) - { - break; - } - - if (_text.find('(') != std::string::npos) - { - syntax_tree.fUserValue = buf; - - kState.fSyntaxTree->fLeafList.push_back(syntax_tree); - } - - type_found = true; - break; - } - } - - break; - } - - match_type += substr[y]; - } - } - - if (_text[text_index] == '{') - { - if (kInStruct) - { - continue; - } - - kInBraces = true; - ++kBracesCount; - - kState.fSyntaxTree->fLeafList.push_back(syntax_tree); - } - - // return keyword handler - if (_text[text_index] == 'r') - { - std::string return_keyword; - return_keyword += "return"; - - std::size_t index = 0UL; - - std::string value; - - for (size_t return_index = text_index; return_index < _text.size(); ++return_index) - { - if (_text[return_index] != return_keyword[index]) - { - for (size_t value_index = return_index; value_index < _text.size(); ++value_index) - { - if (_text[value_index] == ';') - break; - - value += _text[value_index]; - } - - break; - } - - ++index; - } - - if (index == return_keyword.size()) - { - if (!value.empty()) - { - if (value.find('(') != std::string::npos) - { - value.erase(value.find('(')); - } - - if (!isdigit(value[value.find('(') + 2])) - { - std::string tmp = value; - bool reg_to_reg = false; - - value.clear(); - - value += " import"; - value += tmp; - } - - syntax_tree.fUserValue = "\tldw r19, "; - - // make it pretty. - if (value.find('\t') != std::string::npos) - value.erase(value.find('\t'), 1); - - syntax_tree.fUserValue += value + "\n"; - } - - syntax_tree.fUserValue += "\tjlr"; - - kState.fSyntaxTree->fLeafList.push_back(syntax_tree); - - break; - } - } - - // Parse expressions and instructions here. - // what does this mean? - // we encounter an assignment, or we reached the end of an expression. - if (_text[text_index] == '=' || - _text[text_index] == ';') - { - if (function_found) - continue; - - if (_text[text_index] == ';' && - kInStruct) - continue; - - if (_text.find("typedef ") != std::string::npos) - continue; - - if (_text[text_index] == '=' && - kInStruct) - { - detail::print_error("assignement of value in struct " + _text, file); - continue; - } - - if (_text[text_index] == ';' && - kInStruct) - { - bool space_found_ = false; - std::string sym; - - for (auto &ch : _text) - { - if (ch == ' ') - { - space_found_ = true; - } - - if (ch == ';') - break; - - if (space_found_) - sym.push_back(ch); - } - - kState.kStructMap[kState.kStructMap.size() - 1].fOffsets.push_back( - std::make_pair(kState.kStructMap[kState.kStructMap.size() - 1].fOffsetsCnt + 4, sym)); - - kState.kStructMap[kState.kStructMap.size() - 1].fOffsetsCnt = kState.kStructMap[kState.kStructMap.size() - 1].fOffsetsCnt + 4; - - continue; - } - - if (_text[text_index] == '=' && - kInStruct) - { - continue; - } - - if (_text[text_index + 1] == '=' || - _text[text_index - 1] == '!' || - _text[text_index - 1] == '<' || - _text[text_index - 1] == '>') - { - continue; - } - - std::string substr; - - if (_text.find('=') != std::string::npos && - kInBraces) - { - if (_text.find("*") != std::string::npos) - { - if (_text.find("=") > _text.find("*")) - substr += "\tlda "; - else - substr += "\tldw "; - } - else - { - substr += "\tldw "; - } - } - else if (_text.find('=') != std::string::npos && - !kInBraces) - { - substr += "stw export .data "; - } - - int first_encountered = 0; - - std::string str_name; - - for (size_t text_index_2 = 0; text_index_2 < _text.size(); ++text_index_2) - { - if (_text[text_index_2] == '\"') - { - ++text_index_2; - - // want to add this, so that the parser recognizes that this is a string. - substr += '"'; - - for (; text_index_2 < _text.size(); ++text_index_2) - { - if (_text[text_index_2] == '\"') - break; - - substr += _text[text_index_2]; - } - } - - if (_text[text_index_2] == '{' || - _text[text_index_2] == '}') - continue; - - if (_text[text_index_2] == ';') - { - break; - } - - if (_text[text_index_2] == ' ' || - _text[text_index_2] == '\t') - { - if (first_encountered != 2) - { - if (_text[text_index] != '=' && - substr.find("export .data") == std::string::npos && - !kInStruct) - substr += "export .data "; - } - - ++first_encountered; - - continue; - } - - if (_text[text_index_2] == '=') - { - if (!kInBraces) - { - substr.replace(substr.find("export .data"), strlen("export .data"), "export .page_zero "); - } - - substr += ","; - continue; - } - - substr += _text[text_index_2]; - } - - for (auto &clType : kCompilerTypes) - { - if (substr.find(clType.fName) != std::string::npos) - { - if (substr.find(clType.fName) > substr.find('"')) - continue; - - substr.erase(substr.find(clType.fName), clType.fName.size()); - } - else if (substr.find(clType.fValue) != std::string::npos) - { - if (substr.find(clType.fValue) > substr.find('"')) - continue; - - if (clType.fName == "const") - continue; - - substr.erase(substr.find(clType.fValue), clType.fValue.size()); - } - } - - if (substr.find("extern") != std::string::npos) - { - substr.replace(substr.find("extern"), strlen("extern"), "import "); - - if (substr.find("export .data") != std::string::npos) - substr.erase(substr.find("export .data"), strlen("export .data")); - } - - auto var_to_find = std::find_if(kCompilerVariables.cbegin(), kCompilerVariables.cend(), [&](detail::CompilerType type) - { return type.fName.find(substr) != std::string::npos; }); - - if (kRegisterCounter == 5 || - kRegisterCounter == 6) - ++kRegisterCounter; - - std::string reg = kAsmRegisterPrefix; - reg += std::to_string(kRegisterCounter); - - if (var_to_find == kCompilerVariables.cend()) - { - ++kRegisterCounter; - - kState.kStackFrame.push_back({.fName = substr, .fReg = reg}); - kCompilerVariables.push_back({.fName = substr}); - } - - syntax_tree.fUserValue += substr; - kState.fSyntaxTree->fLeafList.push_back(syntax_tree); - - if (_text[text_index] == '=') - break; - } - - // function handler. - - if (_text[text_index] == '(' && - !function_found) - { - std::string substr; - std::string args_buffer; - std::string args; - - bool type_crossed = false; - - for (size_t idx = _text.find('(') + 1; idx < _text.size(); ++idx) - { - if (_text[idx] == ',') - continue; - - if (_text[idx] == ' ') - continue; - - if (_text[idx] == ')') - break; - } - - for (char substr_first_index : _text) - { - args_buffer += substr_first_index; - - if (substr_first_index == ';') - { - args_buffer = args_buffer.erase(0, args_buffer.find('(')); - args_buffer = args_buffer.erase(args_buffer.find(';'), 1); - args_buffer = args_buffer.erase(args_buffer.find(')'), 1); - args_buffer = args_buffer.erase(args_buffer.find('('), 1); - - if (!args_buffer.empty()) - args += "\tldw r6, "; - - std::size_t index = 0UL; - - while (ParserKit::find_word(args_buffer, ",")) - { - std::string register_type = kRegisterPrefix; - register_type += std::to_string(index); - - args_buffer.replace(args_buffer.find(','), 1, "\n\tldw " + register_type + ","); - } - - args += args_buffer; - args += "\n\tjb import "; - } - } - - for (char _text_i : _text) - { - if (_text_i == '\t' || - _text_i == ' ') - { - if (!type_crossed) - { - substr.clear(); - type_crossed = true; - } - - continue; - } - - if (_text_i == '(') - break; - - substr += _text_i; - } - - if (kInBraces) - { - syntax_tree.fUserValue = args; - - syntax_tree.fUserValue += substr; - - kState.fSyntaxTree->fLeafList.push_back(syntax_tree); - - function_found = true; - } - else - { - syntax_tree.fUserValue.clear(); - - syntax_tree.fUserValue += "export .text "; - - syntax_tree.fUserValue += substr; - syntax_tree.fUserValue += "\n"; - - kState.fSyntaxTree->fLeafList.push_back(syntax_tree); - - function_found = true; - } - - kCompilerFunctions.push_back(_text); - } - - if (_text[text_index] == '-' && - _text[text_index + 1] == '-') - { - _text = _text.replace(_text.find("--"), strlen("--"), ""); - - for (int _text_i = 0; _text_i < _text.size(); ++_text_i) - { - if (_text[_text_i] == '\t' || - _text[_text_i] == ' ') - _text.erase(_text_i, 1); - } - - syntax_tree.fUserValue += "dec "; - syntax_tree.fUserValue += _text; - - kState.fSyntaxTree->fLeafList.push_back(syntax_tree); - break; - } - - if (_text[text_index] == '}') - { - kRegisterCounter = kStartUsable; - - --kBracesCount; - - if (kBracesCount < 1) - { - kInBraces = false; - kBracesCount = 0; - } - - if (kInStruct) - kInStruct = false; - - kState.fSyntaxTree->fLeafList.push_back(syntax_tree); - } - - syntax_tree.fUserValue.clear(); - } - - syntax_tree.fUserValue = "\n"; - kState.fSyntaxTree->fLeafList.push_back(syntax_tree); - - return true; -} - -static bool kShouldHaveBraces = false; -static std::string kFnName; - -std::string CompilerBackendBccl::Check(const char *text, const char *file) -{ - std::string err_str; - std::string ln = text; - - if (ln.empty()) - { - return err_str; - } - - bool non_ascii_found = false; - - for (int i = 0; i < ln.size(); ++i) - { - if (isalnum(ln[i])) - { - non_ascii_found = true; - break; - } - } - - if (kShouldHaveBraces && - ln.find('{') != std::string::npos) - { - kShouldHaveBraces = false; - } - - if (!non_ascii_found) - return err_str; - - size_t string_index = 1UL; - - if (ln.find('\'') != std::string::npos) - { - string_index = ln.find('\'') + 1; - - for (; string_index < ln.size(); ++string_index) - { - if (ln[string_index] == '\'') - { - if (ln[string_index + 1] != ';') - { - ln.erase(string_index, 1); - } - - return err_str; - } - } - } - else if (ln.find('"') != std::string::npos) - { - string_index = ln.find('"') + 1; - - for (; string_index < ln.size(); ++string_index) - { - if (ln[string_index] == '"') - { - if (ln[string_index + 1] != ';') - { - ln.erase(string_index, 1); - } - else - { - break; - } - } - } - } - else if (ln.find('"') == std::string::npos && - ln.find('\'') == std::string::npos) - { - std::vector forbidden_words; - - forbidden_words.push_back("\\"); - forbidden_words.push_back("?"); - forbidden_words.push_back("@"); - forbidden_words.push_back("~"); - forbidden_words.push_back("::"); - forbidden_words.push_back("/*"); - forbidden_words.push_back("*/"); - - // add them to avoid stupid mistakes. - forbidden_words.push_back("namespace"); - forbidden_words.push_back("struct"); - forbidden_words.push_back("union"); - forbidden_words.push_back("enum"); - forbidden_words.push_back("."); - forbidden_words.push_back("->"); - forbidden_words.push_back("class"); - forbidden_words.push_back("*"); - forbidden_words.push_back("extern \"C\""); - - for (auto &forbidden : forbidden_words) - { - if (ln.find(forbidden) != std::string::npos) - { - err_str += "\nForbidden character detected: "; - err_str += forbidden; - - return err_str; - } - } - } - - struct CompilerVariableRange final - { - std::string fBegin; - std::string fEnd; - }; - - const std::vector variables_list = { - {.fBegin = "static ", .fEnd = "="}, - {.fBegin = "=", .fEnd = ";"}, - {.fBegin = "if(", .fEnd = "="}, - {.fBegin = "if (", .fEnd = "="}, - {.fBegin = "if(", .fEnd = "<"}, - {.fBegin = "if (", .fEnd = "<"}, - {.fBegin = "if(", .fEnd = ">"}, - {.fBegin = "if (", .fEnd = ">"}, - {.fBegin = "if(", .fEnd = ")"}, - {.fBegin = "if (", .fEnd = ")"}, - - {.fBegin = "else(", .fEnd = "="}, - {.fBegin = "else (", .fEnd = "="}, - {.fBegin = "else(", .fEnd = "<"}, - {.fBegin = "else (", .fEnd = "<"}, - {.fBegin = "else(", .fEnd = ">"}, - {.fBegin = "else (", .fEnd = ">"}, - {.fBegin = "else(", .fEnd = ")"}, - {.fBegin = "else (", .fEnd = ")"}, - }; - - for (auto &variable : variables_list) - { - if (ln.find(variable.fBegin) != std::string::npos) - { - string_index = ln.find(variable.fBegin) + variable.fBegin.size(); - - while (ln[string_index] == ' ') - ++string_index; - - std::string keyword; - - for (; string_index < ln.size(); ++string_index) - { - if (ln[string_index] == variable.fEnd[0]) - { - std::string varname = ""; - - for (size_t index_keyword = ln.find(' '); ln[index_keyword] != variable.fBegin[0]; - ++index_keyword) - { - if (ln[index_keyword] == ' ') - { - continue; - } - - if (isdigit(ln[index_keyword])) - { - goto cc_next_loop; - } - - varname += ln[index_keyword]; - } - - if (varname.find(' ') != std::string::npos) - { - varname.erase(0, varname.find(' ')); - - if (variable.fBegin == "extern") - { - varname.erase(0, varname.find(' ')); - } - } - - if (kRegisterCounter == 5 || - kRegisterCounter == 6) - ++kRegisterCounter; - - std::string reg = kAsmRegisterPrefix; - reg += std::to_string(kRegisterCounter); - - kCompilerVariables.push_back({.fValue = varname}); - goto cc_check_done; - } - - keyword.push_back(ln[string_index]); - } - - goto cc_next_loop; - - cc_check_done: - - // skip digit value. - if (isdigit(keyword[0]) || - keyword[0] == '"') - { - goto cc_next_loop; - } - - while (keyword.find(' ') != std::string::npos) - keyword.erase(keyword.find(' '), 1); - - for (auto &var : kCompilerVariables) - { - if (var.fValue.find(keyword) != std::string::npos) - { - err_str.clear(); - goto cc_next; - } - } - - for (auto &fn : kCompilerFunctions) - { - if (fn.find(keyword[0]) != std::string::npos) - { - auto where_begin = fn.find(keyword[0]); - auto keyword_begin = 0UL; - auto failed = false; - - for (; where_begin < keyword.size(); ++where_begin) - { - if (fn[where_begin] == '(' && - keyword[keyword_begin] == '(') - break; - - if (fn[where_begin] != keyword[keyword_begin]) - { - failed = true; - break; - } - - ++keyword_begin; - } - - if (!failed) - { - err_str.clear(); - goto cc_next; - } - else - { - continue; - } - } - } - - cc_error_value: - if (keyword.find("->") != std::string::npos) - return err_str; - - if (keyword.find(".") != std::string::npos) - return err_str; - - if (isalnum(keyword[0])) - err_str += "\nUndefined value: " + keyword; - - return err_str; - } - - cc_next_loop: - continue; - } - -cc_next: - - // extern does not declare anything, it imports a variable. - // so that's why it's not declare upper. - if (ParserKit::find_word(ln, "extern")) - { - auto substr = ln.substr(ln.find("extern") + strlen("extern")); - kCompilerVariables.push_back({.fValue = substr}); - } - - if (kShouldHaveBraces && - ln.find('{') == std::string::npos) - { - err_str += "Missing '{' for function "; - err_str += kFnName; - err_str += "\n"; - - kShouldHaveBraces = false; - kFnName.clear(); - } - else if (kShouldHaveBraces && - ln.find('{') != std::string::npos) - { - kShouldHaveBraces = false; - kFnName.clear(); - } - - bool type_not_found = true; - - if (ln.find('\'') != std::string::npos) - { - ln.replace(ln.find('\''), 3, "0"); - } - - auto first = ln.find('"'); - if (first != std::string::npos) - { - auto second = 0UL; - bool found_second_quote = false; - - for (size_t i = first + 1; i < ln.size(); ++i) - { - if (ln[i] == '\"') - { - found_second_quote = true; - second = i; - - break; - } - } - - if (!found_second_quote) - { - err_str += "Missing terminating \"."; - err_str += " here -> " + ln.substr(ln.find('"'), second); - } - } - - if (ln.find(')') != std::string::npos && - ln.find(';') == std::string::npos) - { - if (ln.find('{') == std::string::npos) - { - kFnName = ln; - kShouldHaveBraces = true; - - goto skip_braces_check; - } - else if (ln.find('{') != std::string::npos) - { - kShouldHaveBraces = false; - } - } - -skip_braces_check: - - for (auto &key : kCompilerTypes) - { - if (ParserKit::find_word(ln, key.fName)) - { - if (isdigit(ln[ln.find(key.fName) + key.fName.size() + 1])) - { - err_str += "\nNumber cannot be set for "; - err_str += key.fName; - err_str += "'s name. here -> "; - err_str += ln; - } - - if (ln.find(key.fName) == 0 || - ln[ln.find(key.fName) - 1] == ' ' || - ln[ln.find(key.fName) - 1] == '\t') - { - type_not_found = false; - - if (ln[ln.find(key.fName) + key.fName.size()] != ' ') - { - type_not_found = true; - - if (ln[ln.find(key.fName) + key.fName.size()] == '\t') - type_not_found = false; - - goto next; - } - else if (ln[ln.find(key.fName) + key.fName.size()] != '\t') - { - type_not_found = true; - - if (ln[ln.find(key.fName) + key.fName.size()] == ' ') - type_not_found = false; - } - } - - next: - - if (ln.find(';') == std::string::npos) - { - if (ln.find('(') != std::string::npos) - { - if (ln.find('=') == std::string::npos) - continue; - } - - err_str += "\nMissing ';', here -> "; - err_str += ln; - } - else - { - continue; - } - - if (ln.find('=') != std::string::npos) - { - if (ln.find('(') != std::string::npos) - { - if (ln.find(')') == std::string::npos) - { - err_str += "\nMissing ')', after '(' here -> "; - err_str += ln.substr(ln.find('(')); - } - } - } - } - } - - if (kInBraces && - ln.find("struct") != std::string::npos && - ln.find("union") != std::string::npos && - ln.find("enum") != std::string::npos && - ln.find('=') != std::string::npos) - { - if (ln.find(';') == std::string::npos) - { - err_str += "\nMissing ';' after struct/union/enum declaration, here -> "; - err_str += ln; - } - } - - if (ln.find(';') != std::string::npos && - ln.find("for") == std::string::npos) - { - if (ln.find(';') + 1 != ln.size()) - { - for (int i = 0; i < ln.substr(ln.find(';') + 1).size(); ++i) - { - if ((ln.substr(ln.find(';') + 1)[i] != ' ') || - (ln.substr(ln.find(';') + 1)[i] != '\t')) - { - if (auto err = this->Check(ln.substr(ln.find(';') + 1).c_str(), file); - !err.empty()) - { - err_str += "\nUnexpected text after ';' -> "; - err_str += ln.substr(ln.find(';')); - err_str += err; - } - } - } - } - } - - if (ln.find('(') != std::string::npos) - { - if (ln.find(';') == std::string::npos && - !ParserKit::find_word(ln, "|") && - !ParserKit::find_word(ln, "||") && - !ParserKit::find_word(ln, "&") && - !ParserKit::find_word(ln, "&&") && - !ParserKit::find_word(ln, "~")) - { - bool found_func = false; - size_t i = ln.find('('); - std::vector opens; - std::vector closes; - - for (; i < ln.size(); ++i) - { - if (ln[i] == ')') - { - closes.push_back(1); - } - - if (ln[i] == '(') - { - opens.push_back(1); - } - } - - if (closes.size() != opens.size()) - err_str += "Unterminated (), here -> " + ln; - - bool space_found = false; - - for (int i = 0; i < ln.size(); ++i) - { - if (ln[i] == ')' && - !space_found) - { - space_found = true; - continue; - } - - if (space_found) - { - if (ln[i] == ' ' && - isalnum(ln[i + 1])) - { - err_str += "\nBad function format here -> "; - err_str += ln; - } - } - } - } - - if (ln.find('(') < 1) - { - err_str += "\nMissing identifier before '(' here -> "; - err_str += ln; - } - else - { - if (type_not_found && - ln.find(';') == std::string::npos && - ln.find("if") == std::string::npos && - ln.find("|") == std::string::npos && - ln.find("&") == std::string::npos && - ln.find("(") == std::string::npos && - ln.find(")") == std::string::npos) - { - err_str += "\n Missing ';' or type, here -> "; - err_str += ln; - } - } - - if (ln.find(')') == std::string::npos) - { - err_str += "\nMissing ')', after '(' here -> "; - err_str += ln.substr(ln.find('(')); - } - } - else - { - if (ln.find("for") != std::string::npos || - ln.find("while") != std::string::npos) - { - err_str += "\nMissing '(', after \"for\", here -> "; - err_str += ln; - } - } - - if (ln.find('}') != std::string::npos && - !kInBraces) - { - if (!kInStruct && - ln.find(';') == std::string::npos) - { - err_str += "\nMismatched '}', here -> "; - err_str += ln; - } - } - - if (!ln.empty()) - { - if (ln.find(';') == std::string::npos && - ln.find('{') == std::string::npos && - ln.find('}') == std::string::npos && - ln.find(')') == std::string::npos && - ln.find('(') == std::string::npos && - ln.find(',') == std::string::npos) - { - if (ln.size() <= 2) - return err_str; - - err_str += "\nMissing ';', here -> "; - err_str += ln; - } - } - - return err_str; -} - -///////////////////////////////////////////////////////////////////////////////////////// - -/** - * @brief BCCL To Assembly mount-point. - */ - -///////////////////////////////////////////////////////////////////////////////////////// - -class AssemblyMountpointBccl final : public CompilerKit::AssemblyMountpoint -{ -public: - explicit AssemblyMountpointBccl() = default; - ~AssemblyMountpointBccl() override = default; - - CXXKIT_COPY_DEFAULT(AssemblyMountpointBccl); - - [[maybe_unused]] static Int32 Arch() noexcept { return CompilerKit::AssemblyFactory::kArchRISCV; } - - Int32 CompileToFormat(CompilerKit::StringView &src, Int32 arch) override - { - if (arch != AssemblyMountpointBccl::Arch()) - return -1; - - if (kCompilerBackend == nullptr) - return -1; - - /* @brief copy contents wihtout extension */ - std::string src_file = src.CData(); - std::ifstream src_fp = std::ifstream(src_file, std::ios::in); - std::string dest; - - for (auto &ch : src_file) - { - if (ch == '.') - { - break; - } - - dest += ch; - } - - /* According to pef abi. */ - dest += kAsmFileExt64x0; - - kState.fOutputAssembly = std::make_unique(dest); - - auto fmt = CompilerKit::current_date(); - - (*kState.fOutputAssembly) << "# Path: " << src_file << "\n"; - (*kState.fOutputAssembly) << "# Language: MP-UX Assembly\n"; - (*kState.fOutputAssembly) << "# Build Date: " << fmt << "\n\n"; - - ParserKit::SyntaxLeafList syntax; - - kState.fSyntaxTreeList.push_back(syntax); - kState.fSyntaxTree = &kState.fSyntaxTreeList[kState.fSyntaxTreeList.size() - 1]; - - std::string line_src; - - while (std::getline(src_fp, line_src)) - { - if (auto err = kCompilerBackend->Check(line_src.c_str(), src.CData()); - err.empty()) - { - kCompilerBackend->Compile(line_src, src.CData()); - } - else - { - detail::print_error(err, src.CData()); - } - } - - if (kAcceptableErrors > 0) - return -1; - - std::vector keywords = {"ldw", "stw", "lda", "sta", "add", "dec", "mv"}; - - /// - /// Replace, optimize, fix assembly output. - /// - - for (auto &leaf : kState.fSyntaxTree->fLeafList) - { - std::vector access_keywords = {"->", "."}; - - for (auto &access_ident : access_keywords) - { - if (ParserKit::find_word(leaf.fUserValue, access_ident)) - { - for (auto &struc : kState.kStructMap) - { - } - } - } - - for (auto &keyword : keywords) - { - if (ParserKit::find_word(leaf.fUserValue, keyword)) - { - std::size_t cnt = 0UL; - - for (auto ® : kState.kStackFrame) - { - std::string needle; - - for (size_t i = 0; i < reg.fName.size(); i++) - { - if (reg.fName[i] == ' ') - { - ++i; - - for (; i < reg.fName.size(); i++) - { - if (reg.fName[i] == ',') - { - break; - } - - if (reg.fName[i] == ' ') - continue; - - needle += reg.fName[i]; - } - - break; - } - } - - if (ParserKit::find_word(leaf.fUserValue, needle)) - { - if (leaf.fUserValue.find("ldw r6") != std::string::npos) - { - std::string::difference_type n = std::count(leaf.fUserValue.begin(), - leaf.fUserValue.end(), ','); - - if (n == 1) - { - leaf.fUserValue.replace(leaf.fUserValue.find("ldw"), strlen("ldw"), "mv"); - } - } - - leaf.fUserValue.replace(leaf.fUserValue.find(needle), - needle.size(), reg.fReg); - - ++cnt; - } - } - - if (cnt > 1 && keyword != "mv" && keyword != "add" && keyword != "dec") - { - leaf.fUserValue.replace(leaf.fUserValue.find(keyword), keyword.size(), "mv"); - } - } - } - } - - for (auto &leaf : kState.fSyntaxTree->fLeafList) - { - (*kState.fOutputAssembly) << leaf.fUserValue; - } - - kState.fSyntaxTree = nullptr; - - kState.fOutputAssembly->flush(); - kState.fOutputAssembly.reset(); - - return kOk; - } -}; - -///////////////////////////////////////////////////////////////////////////////////////// - -#define kPrintF printf -#define kSplashCxx() kPrintF(kWhite "%s\n", "bccl, v1.15, (c) Mahrouss Logic") - -static void cc_print_help() -{ - kSplashCxx(); - - kPrintF(kWhite "--asm={MACHINE}: %s\n", "Compile with a specific syntax. (64x0, 32x0)"); - kPrintF(kWhite "--compiler={COMPILER}: %s\n", "Select compiler engine (builtin -> dolvik)."); -} - -///////////////////////////////////////////////////////////////////////////////////////// - -#define kExt ".bccl" - -int main(int argc, char **argv) -{ - kCompilerTypes.push_back({.fName = "void", .fValue = "void"}); - kCompilerTypes.push_back({.fName = "char", .fValue = "byte"}); - kCompilerTypes.push_back({.fName = "short", .fValue = "hword"}); - kCompilerTypes.push_back({.fName = "int", .fValue = "dword"}); - kCompilerTypes.push_back({.fName = "long", .fValue = "qword"}); - - bool skip = false; - - for (auto index = 1UL; index < argc; ++index) - { - if (skip) - { - skip = false; - continue; - } - - if (argv[index][0] == '-') - { - if (strcmp(argv[index], "-v") == 0 || - strcmp(argv[index], "--version") == 0) - { - kSplashCxx(); - return kOk; - } - - if (strcmp(argv[index], "-verbose") == 0) - { - kState.kVerbose = true; - - continue; - } - - if (strcmp(argv[index], "-h") == 0 || - strcmp(argv[index], "--help") == 0) - { - cc_print_help(); - - return kOk; - } - - if (strcmp(argv[index], "--dialect") == 0) - { - if (kCompilerBackend) - std::cout << kCompilerBackend->Language() << "\n"; - - return kOk; - } - - if (strcmp(argv[index], "--asm=masm") == 0) - { - delete kFactory.Unmount(); - - kFactory.Mount(new AssemblyMountpointBccl()); - kMachine = CompilerKit::AssemblyFactory::kArchRISCV; - - continue; - } - - if (strcmp(argv[index], "--compiler=dolvik") == 0) - { - if (!kCompilerBackend) - kCompilerBackend = new CompilerBackendBccl(); - - continue; - } - - if (strcmp(argv[index], "-fmax-exceptions") == 0) - { - try - { - kErrorLimit = std::strtol(argv[index + 1], nullptr, 10); - } - // catch anything here - catch (...) - { - kErrorLimit = 0; - } - - skip = true; - - continue; - } - - std::string err = "Unknown command: "; - err += argv[index]; - - detail::print_error(err, "bccl"); - - continue; - } - - kFileList.emplace_back(argv[index]); - - CompilerKit::StringView srcFile = CompilerKit::StringBuilder::Construct(argv[index]); - - if (strstr(argv[index], kExt) == nullptr) - { - if (kState.kVerbose) - { - std::cerr << argv[index] << " is not a valid BCCL source.\n"; - } - - return -1; - } - - if (kFactory.Compile(srcFile, kMachine) != kOk) - return -1; - } - - return kOk; -} - -// Last rev 8-1-24 \ No newline at end of file diff --git a/64x0/bin/.gitkeep b/64x0/bin/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/64x0/bin/README.txt b/64x0/bin/README.txt deleted file mode 100644 index 7530e5e..0000000 --- a/64x0/bin/README.txt +++ /dev/null @@ -1,2 +0,0 @@ -The C compilers (ccplus, cc) are work in progress. -Use it at your own risk. \ No newline at end of file diff --git a/64x0/bin/SourceUnitTest/.gitkeep b/64x0/bin/SourceUnitTest/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/64x0/bpp.cc b/64x0/bpp.cc deleted file mode 100644 index 80b92ed..0000000 --- a/64x0/bpp.cc +++ /dev/null @@ -1,1119 +0,0 @@ -/* - * ======================================================== - * - * cpp - * Copyright Mahrouss Logic, all rights reserved. - * - * ======================================================== - */ - -#include -#include -#include -#include -#include - -#define kMacroPrefix '%' - -// @author Amlal El Mahrouss (amlel) -// @file cpp.cc -// @brief MASM preprocessor. - -typedef Int32(*cpp_parser_fn_t)(std::string& line, std::ifstream& hdr_file, std::ofstream& pp_out); - -///////////////////////////////////////////////////////////////////////////////////////// - -// @brief Preprocessor internal types. - -///////////////////////////////////////////////////////////////////////////////////////// - -namespace details -{ - enum - { - kEqual, - kGreaterEqThan, - kLesserEqThan, - kGreaterThan, - kLesserThan, - kNotEqual, - }; - - struct cpp_macro_condition final - { - int32_t fType; - std::string fTypeName; - }; - - struct cpp_macro final - { - std::vector fArgs; - std::string fName; - std::string fValue; - }; - - class cpp_pragma final - { - public: - explicit cpp_pragma() = default; - ~cpp_pragma() = default; - - CXXKIT_COPY_DEFAULT(cpp_pragma); - - std::string fMacroName; - cpp_parser_fn_t fParse; - - }; -} - -static std::vector kFiles; -static std::vector kMacros; -static std::vector kIncludes; - -static std::string kWoringDir; - -static std::vector kKeywords = { - "include", - "if", - "pragma", - "def", - "elif", - "ifdef", - "ifndef", - "else", - "warning", - "error" -}; - -#define kKeywordCxxCnt kKeywords.size() - -///////////////////////////////////////////////////////////////////////////////////////// - -// @name cpp_parse_if_condition -// @brief parse #if condition - -///////////////////////////////////////////////////////////////////////////////////////// - -int32_t cpp_parse_if_condition(details::cpp_macro_condition& cond, - details::cpp_macro& macro, - bool& inactive_code, bool& defined, - std::string& macro_str) -{ - if (cond.fType == details::kEqual) - { - auto substr_macro = macro_str.substr(macro_str.find(macro.fName) + macro.fName.size()); - - if (substr_macro.find(macro.fValue) != std::string::npos) - { - if (macro.fValue == "0") - { - defined = false; - inactive_code = true; - - return 1; - } - - defined = true; - inactive_code = false; - - return 1; - } - } - else if (cond.fType == details::kNotEqual) - { - auto substr_macro = macro_str.substr(macro_str.find(macro.fName) + macro.fName.size()); - - if (substr_macro.find(macro.fName) != std::string::npos) - { - if (substr_macro.find(macro.fValue) != std::string::npos) - { - defined = false; - inactive_code = true; - - return 1; - } - - defined = true; - inactive_code = false; - - return 1; - } - - return 0; - } - - auto substr_macro = macro_str.substr(macro_str.find(macro.fName) + macro.fName.size()); - - std::string number; - - for (auto& macro_num : kMacros) - { - if (substr_macro.find(macro_num.fName) != std::string::npos) - { - for (size_t i = 0; i < macro_num.fName.size(); ++i) - { - if (isdigit(macro_num.fValue[i])) - { - number += macro_num.fValue[i]; - } - else - { - number.clear(); - break; - } - } - - break; - } - } - - size_t y = 2; - - /* last try */ - for (; y < macro_str.size(); y++) - { - if (isdigit(macro_str[y])) - { - for (size_t x = y; x < macro_str.size(); x++) - { - if (macro_str[x] == ' ') - break; - - number += macro_str[x]; - } - - break; - } - } - - size_t rhs = atol(macro.fValue.c_str()); - size_t lhs = atol(number.c_str()); - - if (lhs == 0) - { - number.clear(); - ++y; - - for (; y < macro_str.size(); y++) - { - if (isdigit(macro_str[y])) - { - for (size_t x = y; x < macro_str.size(); x++) - { - if (macro_str[x] == ' ') - break; - - number += macro_str[x]; - } - - break; - } - } - - lhs = atol(number.c_str()); - } - - if (cond.fType == details::kGreaterThan) - { - if (lhs < rhs) - { - defined = true; - inactive_code = false; - - return 1; - } - - return 0; - } - - if (cond.fType == details::kGreaterEqThan) - { - if (lhs <= rhs) - { - defined = true; - inactive_code = false; - - return 1; - } - - return 0; - } - - if (cond.fType == details::kLesserEqThan) - { - if (lhs >= rhs) - { - defined = true; - inactive_code = false; - - return 1; - } - - return 0; - } - - if (cond.fType == details::kLesserThan) - { - if (lhs > rhs) - { - defined = true; - inactive_code = false; - - return 1; - } - - return 0; - } - - return 0; -} - -///////////////////////////////////////////////////////////////////////////////////////// - -// @brief stores every included file here. - -///////////////////////////////////////////////////////////////////////////////////////// - -std::vector kAllIncludes; - -///////////////////////////////////////////////////////////////////////////////////////// - -// @name cpp_parse_file -// @brief parse file to preprocess it. - -///////////////////////////////////////////////////////////////////////////////////////// - -void cpp_parse_file(std::ifstream& hdr_file, std::ofstream& pp_out) -{ - std::string hdr_line; - std::string line_after_include; - - bool inactive_code = false; - bool defined = false; - - try - { - while (std::getline(hdr_file, hdr_line)) - { - // make cc, ccplus life easier - if (hdr_line.find("//") != std::string::npos) - { - hdr_line.erase(hdr_line.find("//")); - } - - if (hdr_line[0] == kMacroPrefix && - hdr_line.find("endif") != std::string::npos) - { - if (!defined && - inactive_code) - { - inactive_code = false; - defined = false; - - continue; - } - - continue; - } - - if (!defined && - inactive_code) - { - continue; - } - - if (defined && - inactive_code) - { - continue; - } - - for (auto macro : kMacros) - { - if (ParserKit::find_word(hdr_line, macro.fName) && - hdr_line.find("#define") == std::string::npos) - { - auto substr = hdr_line.substr(hdr_line.find(macro.fName) + macro.fName.size() + 1); - - std::vector sym_vec; - std::string sym_str; - - for (auto& subc : substr) - { - if (subc == ',' || - subc == ')') - { - if (sym_str.empty()) - continue; - - sym_vec.push_back(sym_str); - sym_str.clear(); - - continue; - } - - if (isalnum(subc)) - sym_str.push_back(subc); - } - - if (macro.fArgs.size() > 0) - { - - for (auto& item : sym_vec) - { - std::size_t cnt = 0; - - for (auto& arg : macro.fArgs) - { - if (item == arg) - ++cnt; - } - - if (cnt > 1) - { - auto it = std::find(macro.fArgs.begin(), macro.fArgs.end(), item); - - while (it != macro.fArgs.end()) - { - macro.fArgs.erase(it); - it = std::find(macro.fArgs.begin(), macro.fArgs.end(), item); - } - } - } - - if (sym_vec.size() != macro.fArgs.size()) - { - throw std::runtime_error("cpp: arguments count mismatch, except " + std::to_string(sym_vec.size()) + ", got: " + std::to_string(macro.fArgs.size())); - return; - } - - substr = macro.fValue; - - std::size_t cnt = 0UL; - - for (auto& val : macro.fArgs) - { - substr.replace(substr.find(val), val.size(), sym_vec[cnt]); - ++cnt; - } - - hdr_line = hdr_line.replace(hdr_line.find(macro.fName), macro.fName.size() + macro.fValue.size(), substr); - } - else - { - hdr_line = hdr_line.replace(hdr_line.find(macro.fName), macro.fName.size(), macro.fValue); - } - } - } - - if (hdr_line[0] == kMacroPrefix && - hdr_line.find("def") != std::string::npos) - { - auto line_after_define = hdr_line.substr(hdr_line.find("def") + strlen("def") + 1); - - std::string macro_value; - std::string macro_key; - - std::size_t pos = 0UL; - - std::vector args; - bool on_args = false; - - for (auto& ch : line_after_define) - { - ++pos; - - if (ch == '(') - { - on_args = true; - continue; - } - - if (ch == ')') - { - on_args = false; - continue; - } - - if (ch == '\\') - continue; - - if (on_args) - continue; - - if (ch == ' ') - { - for (size_t i = pos; i < line_after_define.size(); i++) - { - macro_value += line_after_define[i]; - } - - break; - } - - macro_key += ch; - } - - std::vector dupls; - std::string str; - - line_after_define.erase(0, line_after_define.find("(") + 1); - - for (auto& subc : line_after_define) - { - if (subc == ',' || - subc == ')') - { - if (str.empty()) - continue; - - dupls.push_back(str); - args.push_back(str); - - str.clear(); - - continue; - } - - if (isalnum(subc)) - str.push_back(subc); - } - - for (auto& dupl : dupls) - { - std::size_t cnt = 0; - - for (auto& arg : args) - { - if (dupl == arg) - ++cnt; - } - - if (cnt > 1) - { - auto it = std::find(args.begin(), args.end(), dupl); - - while (it != args.end()) - { - args.erase(it); - it = std::find(args.begin(), args.end(), dupl); - } - } - } - - details::cpp_macro macro; - - macro.fArgs = args; - macro.fName = macro_key; - macro.fValue = macro_value; - - kMacros.emplace_back(macro); - - continue; - } - - if (hdr_line[0] != kMacroPrefix) - { - if (inactive_code) - { - continue; - } - - for (auto& macro : kMacros) - { - if (hdr_line.find(macro.fName) != std::string::npos) - { - std::vector arg_values; - - if (macro.fArgs.size() > 0) - { - for (size_t i = 0; i < hdr_line.size(); ++i) - { - if (hdr_line[i] == '(') - { - std::string tmp_arg; - - for (size_t x = i; x < hdr_line.size(); x++) - { - if (hdr_line[x] == ')') - break; - - if (hdr_line[x] == ' ') - continue; - - if (hdr_line[i] == '\\') - continue; - - if (hdr_line[x] == ',') - { - arg_values.push_back(tmp_arg); - tmp_arg.clear(); - continue; - } - - tmp_arg += hdr_line[x]; - } - - break; - } - } - - std::string symbol; - - for (char i : macro.fValue) - { - if (i == '(') - break; - - if (i == '\\') - continue; - - symbol += i; - } - - hdr_line.replace(hdr_line.find(macro.fName), macro.fName.size(), symbol); - - size_t x_arg_indx = 0; - - for (size_t i = hdr_line.find(macro.fValue); i < hdr_line.size(); ++i) - { - if (hdr_line.find(macro.fArgs[x_arg_indx]) == i) - { - hdr_line.replace(i, macro.fArgs[x_arg_indx].size(), arg_values[x_arg_indx]); - ++x_arg_indx; - } - } - - } - else - { - std::string symbol; - - for (size_t i = 0; i < macro.fValue.size(); i++) - { - if (macro.fValue[i] == ' ') - continue; - - if (macro.fValue[i] == '\\') - continue; - - symbol += macro.fValue[i]; - } - - hdr_line.replace(hdr_line.find(macro.fName), macro.fName.size(), symbol); - } - - break; - } - } - - pp_out << hdr_line << std::endl; - - continue; - } - - if (hdr_line[0] == kMacroPrefix && - hdr_line.find("ifndef") != std::string::npos) - { - auto line_after_ifndef = hdr_line.substr(hdr_line.find("ifndef") + strlen("ifndef") + 1); - std::string macro; - - for (auto& ch : line_after_ifndef) - { - if (ch == ' ') - { - break; - } - - macro += ch; - } - - if (macro == "0") - { - defined = true; - inactive_code = false; - continue; - } - - if (macro == "1") - { - defined = false; - inactive_code = true; - - continue; - } - - bool found = false; - - defined = true; - inactive_code = false; - - for (auto& macro_ref : kMacros) - { - if (hdr_line.find(macro_ref.fName) != std::string::npos) - { - found = true; - break; - } - } - - if (found) - { - defined = false; - inactive_code = true; - - continue; - } - } - else if (hdr_line[0] == kMacroPrefix && - hdr_line.find("else") != std::string::npos) - { - if (!defined && - inactive_code) - { - inactive_code = false; - defined = true; - - continue; - } - else - { - defined = false; - inactive_code = true; - - continue; - } - } - else if (hdr_line[0] == kMacroPrefix && - hdr_line.find("ifdef") != std::string::npos) - { - auto line_after_ifdef = hdr_line.substr(hdr_line.find("ifdef") + strlen("ifdef") + 1); - std::string macro; - - for (auto& ch : line_after_ifdef) - { - if (ch == ' ') - { - break; - } - - macro += ch; - } - - if (macro == "0") - { - defined = false; - inactive_code = true; - - continue; - } - - if (macro == "1") - { - defined = true; - inactive_code = false; - - continue; - } - - defined = false; - inactive_code = true; - - for (auto& macro_ref : kMacros) - { - if (hdr_line.find(macro_ref.fName) != std::string::npos) - { - defined = true; - inactive_code = false; - - break; - } - } - } - else if (hdr_line[0] == kMacroPrefix && - hdr_line.find("pragma") != std::string::npos) - { - line_after_include = hdr_line.substr(hdr_line.find("pragma once")); - - // search for this file - auto it = std::find(kAllIncludes.cbegin(), - kAllIncludes.cend(), line_after_include); - - if (it == kAllIncludes.cend()) - { - goto kIncludeFile; - } - } - else if (hdr_line[0] == kMacroPrefix && - hdr_line.find("if") != std::string::npos) - { - inactive_code = true; - - std::vector cpp_macro_condition_list = { - { - .fType = details::kEqual, - .fTypeName = "==", - }, - { - .fType = details::kNotEqual, - .fTypeName = "!=", - }, - { - .fType = details::kLesserThan, - .fTypeName = "<", - }, - { - .fType = details::kGreaterThan, - .fTypeName = ">", - }, - { - .fType = details::kLesserEqThan, - .fTypeName = "<=", - }, - { - .fType = details::kGreaterEqThan, - .fTypeName = ">=", - }, - }; - - int32_t good_to_go = 0; - - for (auto& macro_condition : cpp_macro_condition_list) - { - if (hdr_line.find(macro_condition.fTypeName) != std::string::npos) - { - for (auto& found_macro : kMacros) - { - if (hdr_line.find(found_macro.fName) != std::string::npos) - { - good_to_go = cpp_parse_if_condition(macro_condition, found_macro, - inactive_code, defined, - hdr_line); - - break; - } - } - } - } - - if (good_to_go) - continue; - - auto line_after_if = hdr_line.substr(hdr_line.find("if") + strlen("if") + 1); - std::string macro; - - for (auto& ch : line_after_if) - { - if (ch == ' ') - { - break; - } - - macro += ch; - } - - if (macro == "0") - { - defined = false; - inactive_code = true; - continue; - } - - if (macro == "1") - { - defined = true; - inactive_code = false; - - continue; - } - - // last try, is it defined to be one? - for (auto& macro_ref : kMacros) - { - if (macro_ref.fName.find(macro) != std::string::npos && - macro_ref.fValue == "1") - { - inactive_code = false; - defined = true; - - break; - } - } - } - else if (hdr_line[0] == kMacroPrefix && - hdr_line.find("warning") != std::string::npos) - { - auto line_after_warning = hdr_line.substr(hdr_line.find("warning") + strlen("warning") + 1); - std::string message; - - for (auto& ch : line_after_warning) - { - if (ch == '\r' || - ch == '\n') - { - break; - } - - message += ch; - } - - std::cout << "Warning: " << message << std::endl; - } - else if (hdr_line[0] == kMacroPrefix && - hdr_line.find("error") != std::string::npos) - { - auto line_after_warning = hdr_line.substr(hdr_line.find("error") + strlen("error") + 1); - std::string message; - - for (auto& ch : line_after_warning) - { - if (ch == '\r' || - ch == '\n') - { - break; - } - - message += ch; - } - - throw std::runtime_error("Error: " + message); - } - else if (hdr_line[0] == kMacroPrefix && - hdr_line.find("include") != std::string::npos) - { - line_after_include = hdr_line.substr(hdr_line.find("include")); - -kIncludeFile: - auto it = std::find(kAllIncludes.cbegin(), - kAllIncludes.cend(), line_after_include); - - if (it != kAllIncludes.cend()) - { - continue; - } - - std::string path; - - kAllIncludes.push_back(line_after_include); - - bool enable = false; - bool not_local = false; - - for (auto& ch : line_after_include) - { - if (ch == ' ') - continue; - - if (ch == '<') - not_local = true; - - if (ch == '\"' || - ch == '<') - { - enable = true; - continue; - } - - if (enable) - { - if (ch == '>' || - ch == '\"') - break; - - path += ch; - } - } - - if (not_local) - { - bool open = false; - - for (auto& include : kIncludes) - { - std::string header_path = include; - header_path.push_back('/'); - header_path += path; - - std::ifstream header(header_path); - - if (!header.is_open()) - continue; - - open = true; - - cpp_parse_file(header, pp_out); - - break; - } - - if (!open) - { - throw std::runtime_error("cpp: no such include file: " + path); - } - } - else - { - std::ifstream header(kWoringDir + path); - - if (!header.is_open()) - throw std::runtime_error("cpp: no such include file: " + path); - - cpp_parse_file(header, pp_out); - } - } - else - { - std::cerr << ("cpp: unknown pre-processor directive, " + hdr_line) << "\n"; - continue; - } - } - } - catch (std::out_of_range& oor) - { - return; - } -} - -///////////////////////////////////////////////////////////////////////////////////////// - -// @brief main entrypoint of app. - -///////////////////////////////////////////////////////////////////////////////////////// - -int main(int argc, char** argv) -{ - try - { - bool skip = false; - bool double_skip = false; - - details::cpp_macro macro_1; - macro_1.fName = "__true"; - macro_1.fValue = "1"; - - kMacros.push_back(macro_1); - - details::cpp_macro macro_0; - macro_0.fName = "__false"; - macro_0.fValue = "0"; - - kMacros.push_back(macro_0); - - for (auto index = 1UL; index < argc; ++index) - { - if (skip) - { - skip = false; - continue; - } - - if (double_skip) - { - ++index; - double_skip = false; - continue; - } - - if (argv[index][0] == '-') - { - if (strcmp(argv[index], "-v") == 0 || - strcmp(argv[index], "--version") == 0) - { - printf("%s\n", "bpp v1.11, (c) Mahrouss Logic"); - return 0; - } - - if (strcmp(argv[index], "-h") == 0 || - strcmp(argv[index], "--help") == 0) - { - printf("%s\n", "cpp v1.11, (c) Mahrouss Logic"); - printf("%s\n", "--working-dir: set directory to working path."); - printf("%s\n", "--include-dir: add directory to include path."); - printf("%s\n", "--define: define macro."); - - return 0; - } - - if (strcmp(argv[index], "--include-dir") == 0) - { - std::string inc = argv[index+1]; - - skip = true; - - kIncludes.push_back(inc); - } - - if (strcmp(argv[index], "--working-dir") == 0) - { - std::string inc = argv[index+1]; - skip = true; - kWoringDir = inc; - } - - if (strcmp(argv[index], "--define") == 0 && - argv[index + 1] != nullptr && - argv[index + 2] != nullptr) - { - std::string macro_key = argv[index + 1]; - - std::string macro_value; - bool is_string = false; - - for (int argv_find_len = 0; - argv_find_len < strlen(argv[index]); - ++argv_find_len) - { - if (!isdigit(argv[index][argv_find_len])) - { - is_string = true; - macro_value += "\""; - - break; - } - } - - macro_value += argv[index + 2]; - - if (is_string) - macro_value += "\""; - - details::cpp_macro macro; - macro.fName = macro_key; - macro.fValue = macro_value; - - kMacros.push_back(macro); - - double_skip = true; - } - - continue; - } - - kFiles.emplace_back(argv[index]); - } - - if (kFiles.empty()) - return CXXKIT_EXEC_ERROR; - - for (auto& file : kFiles) - { - if (!std::filesystem::exists(file)) - continue; - - std::ifstream file_descriptor(file); - std::ofstream file_descriptor_pp(file + ".pp"); - - cpp_parse_file(file_descriptor, file_descriptor_pp); - } - - return 0; - } - catch(const std::runtime_error& e) - { - std::cout << e.what() << '\n'; - } - - return 0; -} - -// Last rev 8-1-24 \ No newline at end of file diff --git a/64x0/cc2/LICENSE b/64x0/cc2/LICENSE deleted file mode 100644 index 1689a5e..0000000 --- a/64x0/cc2/LICENSE +++ /dev/null @@ -1,11 +0,0 @@ - -Copyright (c) Herb Sutter -SPDX-License-Identifier: CC-BY-NC-ND-4.0 - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/64x0/cc2/include/cpp2util.h b/64x0/cc2/include/cpp2util.h deleted file mode 100644 index 463dd99..0000000 --- a/64x0/cc2/include/cpp2util.h +++ /dev/null @@ -1,1999 +0,0 @@ - -// Copyright (c) Herb Sutter -// SPDX-License-Identifier: CC-BY-NC-ND-4.0 - -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - - -//=========================================================================== -// Cpp2 utilities: -// Language support implementations -// #include'd by generated Cpp1 code -//=========================================================================== - -#ifndef CPP2_UTIL_H -#define CPP2_UTIL_H - -// If this implementation doesn't support source_location yet, disable it -#include -#if !defined(_MSC_VER) && !defined(__cpp_lib_source_location) - #undef CPP2_USE_SOURCE_LOCATION -#endif - -// If the cppfront user requested making the entire C++ standard library -// available via module import or header include, do that -#if defined(CPP2_IMPORT_STD) || defined(CPP2_INCLUDE_STD) - - // If C++23 'import std;' was requested and is available, use that - #if defined(CPP2_IMPORT_STD) && defined(__cpp_lib_modules) - - #ifndef _MSC_VER - // This is the ideal -- note that we just voted "import std;" - // into draft C++23 in late July 2022, so implementers haven't - // had time to catch up yet - import std; - #else // MSVC - // Note: When C++23 "import std;" is available, we will switch to that here - // In the meantime, this is what works on MSVC which is the only compiler - // I've been able to get access to that implements modules enough to demo - // (but we'll have more full-C++20 compilers soon!) - #ifdef _MSC_VER - #include "intrin.h" - #endif - import std.core; - import std.filesystem; - import std.memory; - import std.regex; - import std.threading; - - // Suppress spurious MSVC modules warning - #pragma warning(disable:5050) - #endif - - // Otherwise, as a fallback if 'import std;' was requested, or else - // because 'include all std' was requested, include all the standard - // headers, with a feature test #ifdef for each header that - // isn't yet supported by all of { VS 2022, g++-10, clang++-12 } - #else - #ifdef _MSC_VER - #include "intrin.h" - #endif - #include - #include - #include - #include - #ifdef __cpp_lib_barrier - #include - #endif - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #ifdef __cpp_lib_coroutine - #include - #endif - #include - #include - #include - #include - #include - #include - #include - #include - #include - #if __has_include() - #include - #endif - #include - #include - #include - #ifndef CPP2_NO_EXCEPTIONS - #include - #endif - // libstdc++ currently has a dependency on linking TBB if is - // included, and TBB seems to be not automatically installed and linkable - // on some GCC installations, so let's not pull in that little-used header - // in our -pure-cpp2 "import std;" simulation mode... if you need this, - // use mixed mode (not -pure-cpp2) and #include all the headers you need - // including this one - // - // #include - #ifdef __cpp_lib_expected - #include - #endif - #include - #if defined(__cpp_lib_format) || (defined(_MSC_VER) && _MSC_VER >= 1929) - #include - #endif - #ifdef __cpp_lib_flat_map - #include - #endif - #ifdef __cpp_lib_flat_set - #include - #endif - #include - #include - #include - #include - #ifdef __cpp_lib_generator - #include - #endif - #include - #include - #include - #include - #include - #include - #include - #include - #ifdef __cpp_lib_latch - #include - #endif - #include - #include - #include - #include - #ifdef __cpp_lib_mdspan - #include - #endif - #include - #ifdef __cpp_lib_memory_resource - #include - #endif - #include - #include - #include - #include - #include - #include - #ifdef __cpp_lib_print - #include - #endif - #include - #include - #include - #include - #include - #include - #ifdef __cpp_lib_semaphore - #include - #endif - #include - #include - #ifdef __cpp_lib_source_location - #include - #endif - #include - #ifdef __cpp_lib_spanstream - #include - #endif - #include - #include - #ifdef __cpp_lib_stacktrace - #include - #endif - #ifdef __cpp_lib_stdatomic_h - #include - #endif - #include - #if __has_include() - #include - #endif - #ifdef __cpp_lib_jthread - #include - #endif - #include - #include - #include - #ifdef __cpp_lib_syncstream - #include - #endif - #include - #include - #include - #include - #include - #ifndef CPP2_NO_RTTI - #include - #endif - #include - #include - #include - #include - #include - #include - #endif - -// Otherwise, just #include the facilities used in this header -#else - #ifdef _MSC_VER - #include "intrin.h" - #endif - #include - #include - #include - #include - #include - #include - #include - #ifndef CPP2_NO_EXCEPTIONS - #include - #endif - #if defined(__cpp_lib_format) || (defined(_MSC_VER) && _MSC_VER >= 1929) - #include - #endif - #include - #include - #include - #include - #include - #include - #include - #include - #if defined(CPP2_USE_SOURCE_LOCATION) - #include - #endif - #include - #include - #include - #include - #include - #include - #ifndef CPP2_NO_RTTI - #include - #endif - #include - #include - #include -#endif - - -#define CPP2_TYPEOF(x) std::remove_cvref_t -#define CPP2_FORWARD(x) std::forward(x) -#define CPP2_PACK_EMPTY(x) (sizeof...(x) == 0) -#define CPP2_CONTINUE_BREAK(NAME) goto CONTINUE_##NAME; CONTINUE_##NAME: continue; goto BREAK_##NAME; BREAK_##NAME: break; - // these redundant goto's to avoid 'unused label' warnings - - -#if defined(_MSC_VER) - // MSVC can't handle 'inline constexpr' yet in all cases - #define CPP2_CONSTEXPR const -#else - #define CPP2_CONSTEXPR constexpr -#endif - - -namespace cpp2 { - - -//----------------------------------------------------------------------- -// -// Convenience names for fundamental types -// -// Note: De jure, some of these are optional per the C and C++ standards -// De facto, all of these are supported in all implementations I know of -// -//----------------------------------------------------------------------- -// - -// Encouraged by default: Fixed-precision names -using i8 = std::int8_t ; -using i16 = std::int16_t ; -using i32 = std::int32_t ; -using i64 = std::int64_t ; -using u8 = std::uint8_t ; -using u16 = std::uint16_t ; -using u32 = std::uint32_t ; -using u64 = std::uint64_t ; - -// Discouraged: Variable precision names -// short -using ushort = unsigned short; -// int -using uint = unsigned int; -// long -using ulong = unsigned long; -using longlong = long long; -using ulonglong = unsigned long long; -using longdouble = long double; - -// Strongly discouraged, for compatibility/interop only -using _schar = signed char; // normally use i8 instead -using _uchar = unsigned char; // normally use u8 instead - - -//----------------------------------------------------------------------- -// -// General helpers -// -//----------------------------------------------------------------------- -// - -inline constexpr auto max(auto... values) { - return std::max( { values... } ); -} - -template -inline constexpr auto is_any = std::disjunction_v...>; - -template -struct aligned_storage { - alignas(Align) unsigned char data[Len]; -}; - - -//----------------------------------------------------------------------- -// -// String: A helper workaround for passing a string literal as a -// template argument -// -//----------------------------------------------------------------------- -// -template -struct String -{ - constexpr String(const char (&str)[N]) - { - std::copy_n(str, N, value); - } - - auto operator<=>(String const&) const = default; - - char value[N] = {}; -}; - - -//----------------------------------------------------------------------- -// -// contract_group -// -//----------------------------------------------------------------------- -// - -#ifdef CPP2_USE_SOURCE_LOCATION - #define CPP2_SOURCE_LOCATION_PARAM , std::source_location where - #define CPP2_SOURCE_LOCATION_PARAM_WITH_DEFAULT , std::source_location where = std::source_location::current() - #define CPP2_SOURCE_LOCATION_PARAM_SOLO std::source_location where - #define CPP2_SOURCE_LOCATION_ARG , where -#else - #define CPP2_SOURCE_LOCATION_PARAM - #define CPP2_SOURCE_LOCATION_PARAM_WITH_DEFAULT - #define CPP2_SOURCE_LOCATION_PARAM_SOLO - #define CPP2_SOURCE_LOCATION_ARG -#endif - -// For C++23: make this std::string_view and drop the macro -// Before C++23 std::string_view was not guaranteed to be trivially copyable, -// and so in will pass it by const& and really it should be by value -#define CPP2_MESSAGE_PARAM char const* -#define CPP2_CONTRACT_MSG cpp2::message_to_cstr_adapter - -auto message_to_cstr_adapter( CPP2_MESSAGE_PARAM msg ) -> CPP2_MESSAGE_PARAM { return msg ? msg : ""; } -auto message_to_cstr_adapter( std::string const& msg ) -> CPP2_MESSAGE_PARAM { return msg.c_str(); } - -class contract_group { -public: - using handler = void (*)(CPP2_MESSAGE_PARAM msg CPP2_SOURCE_LOCATION_PARAM); - - constexpr contract_group (handler h = {}) : reporter{h} { } - constexpr auto set_handler(handler h = {}) { reporter = h; } - constexpr auto get_handler() const -> handler { return reporter; } - constexpr auto has_handler() const -> bool { return reporter != handler{}; } - - constexpr auto enforce(bool b, CPP2_MESSAGE_PARAM msg = "" CPP2_SOURCE_LOCATION_PARAM_WITH_DEFAULT) - -> void { if (!b) report_violation(msg CPP2_SOURCE_LOCATION_ARG); } - constexpr auto report_violation(CPP2_MESSAGE_PARAM msg = "" CPP2_SOURCE_LOCATION_PARAM_WITH_DEFAULT) - -> void { if (reporter) reporter(msg CPP2_SOURCE_LOCATION_ARG); } -private: - handler reporter; -}; - -[[noreturn]] inline auto report_and_terminate(std::string_view group, CPP2_MESSAGE_PARAM msg = "" CPP2_SOURCE_LOCATION_PARAM_WITH_DEFAULT) noexcept -> void { - std::cerr -#ifdef CPP2_USE_SOURCE_LOCATION - << where.file_name() << "(" - << where.line() << ") " - << where.function_name() << ": " -#endif - << group << " violation"; - if (msg && msg[0] != '\0') { - std::cerr << ": " << msg; - } - std::cerr << "\n"; - std::terminate(); -} - -auto inline Default = contract_group( - [](CPP2_MESSAGE_PARAM msg CPP2_SOURCE_LOCATION_PARAM)noexcept { - report_and_terminate("Contract", msg CPP2_SOURCE_LOCATION_ARG); - } -); -auto inline Bounds = contract_group( - [](CPP2_MESSAGE_PARAM msg CPP2_SOURCE_LOCATION_PARAM)noexcept { - report_and_terminate("Bounds safety", msg CPP2_SOURCE_LOCATION_ARG); - } -); -auto inline Null = contract_group( - [](CPP2_MESSAGE_PARAM msg CPP2_SOURCE_LOCATION_PARAM)noexcept { - report_and_terminate("Null safety", msg CPP2_SOURCE_LOCATION_ARG); - } -); -auto inline Type = contract_group( - [](CPP2_MESSAGE_PARAM msg CPP2_SOURCE_LOCATION_PARAM)noexcept { - report_and_terminate("Type safety", msg CPP2_SOURCE_LOCATION_ARG); - } -); -auto inline Testing = contract_group( - [](CPP2_MESSAGE_PARAM msg CPP2_SOURCE_LOCATION_PARAM)noexcept { - report_and_terminate("Testing", msg CPP2_SOURCE_LOCATION_ARG); - } -); - - -// Null pointer deref checking -// -auto assert_not_null(auto&& p CPP2_SOURCE_LOCATION_PARAM_WITH_DEFAULT) -> decltype(auto) -{ - // NOTE: This "!= T{}" test may or may not work for STL iterators. The standard - // doesn't guarantee that using == and != will reliably report whether an - // STL iterator has the default-constructed value. So use it only for raw *... - if constexpr (std::is_pointer_v) { - if (p == CPP2_TYPEOF(p){}) { - Null.report_violation("dynamic null dereference attempt detected" CPP2_SOURCE_LOCATION_ARG); - }; - } - return CPP2_FORWARD(p); -} - -// Subscript bounds checking -// -auto assert_in_bounds_impl(auto&& x, auto&& arg CPP2_SOURCE_LOCATION_PARAM_WITH_DEFAULT) -> void - requires (std::is_integral_v && - requires { std::size(x); std::ssize(x); x[arg]; std::begin(x) + 2; }) -{ - auto max = [&]() -> auto { - if constexpr (std::is_signed_v) { return std::ssize(x); } - else { return std::size(x); } - }; - auto msg = "out of bounds access attempt detected - attempted access at index " + std::to_string(arg) + ", "; - if (max() > 0 ) { - msg += "[min,max] range is [0," + std::to_string(max()-1) + "]"; - } - else { - msg += "but container is empty"; - } - if (!(0 <= arg && arg < max())) { - Bounds.report_violation(msg.c_str() CPP2_SOURCE_LOCATION_ARG); - } -} - -auto assert_in_bounds_impl(auto&&, auto&& CPP2_SOURCE_LOCATION_PARAM_WITH_DEFAULT) -> void -{ -} - -#define CPP2_ASSERT_IN_BOUNDS(x, arg) (cpp2::assert_in_bounds_impl((x),(arg)), (x)[(arg)]) - - -//----------------------------------------------------------------------- -// -// Support wrappers that unblock using this file in environments that -// disable EH or RTTI -// -// Note: This is not endorsing disabling those features, it's just -// recognizing that disabling them is popular (e.g., games, WASM) -// and so we should remove a potential adoption blocker... only a -// few features in this file depend on EH or RTTI anyway, and -// wouldn't be exercised in such an environment anyway so there -// is no real net loss here -// -//----------------------------------------------------------------------- -// - -[[noreturn]] auto Throw(auto&& x, [[maybe_unused]] char const* msg) -> void { -#ifdef CPP2_NO_EXCEPTIONS - auto err = std::string{"exceptions are disabled with -fno-exceptions - attempted to throw exception with type \"" + typeid(decltype(x)).name() + "\""}; - if (msg) { - err += " and the message \"" + msg + "\""; - } - Type.report_violation( err ); - std::terminate(); -#else - throw CPP2_FORWARD(x); -#endif -} - -inline auto Uncaught_exceptions() -> int { -#ifdef CPP2_NO_EXCEPTIONS - return 0; -#else - return std::uncaught_exceptions(); -#endif -} - -template -auto Dynamic_cast( [[maybe_unused]] auto&& x ) -> decltype(auto) { -#ifdef CPP2_NO_RTTI - Type.report_violation( "'as' dynamic casting is disabled with -fno-rtti" ); - return nullptr; -#else - return dynamic_cast(CPP2_FORWARD(x)); -#endif -} - -template -auto Typeid() -> decltype(auto) { -#ifdef CPP2_NO_RTTI - Type.report_violation( "'any' dynamic casting is disabled with -fno-rtti" ); -#else - return typeid(T); -#endif -} - -auto Typeid( [[maybe_unused]] auto&& x ) -> decltype(auto) { -#ifdef CPP2_NO_RTTI - Type.report_violation( "'typeid' is disabled with -fno-rtti" ); -#else - return typeid(CPP2_FORWARD(x)); -#endif -} - - -//----------------------------------------------------------------------- -// -// Arena objects for std::allocators -// -// Note: cppfront translates "new" to "cpp2_new", so in Cpp2 code -// these are invoked by simply "unique.new" etc. -// -//----------------------------------------------------------------------- -// -struct { - template - [[nodiscard]] auto cpp2_new(auto&& ...args) const -> std::unique_ptr { - // Prefer { } to ( ) so that initializing a vector with - // (10), (10, 20), and (10, 20, 30) is consistent - if constexpr (requires { T{CPP2_FORWARD(args)...}; }) { - // This is because apparently make_unique can't deal with list - // initialization of aggregates, even after P0960 - return std::unique_ptr( new T{CPP2_FORWARD(args)...} ); - } - else { - return std::make_unique(CPP2_FORWARD(args)...); - } - } -} inline unique; - -[[maybe_unused]] struct { - template - [[nodiscard]] auto cpp2_new(auto&& ...args) const -> std::shared_ptr { - // Prefer { } to ( ) as noted for unique.new - // - // Note this does mean we don't get the make_shared optimization a lot - // of the time -- we can restore that as soon as make_shared improves to - // allow list initialization. But the make_shared optimization isn't a - // huge deal anyway: it saves one allocation, but most of the cost of - // shared_ptrs is copying them and the allocation cost saving is probably - // outweighed by just a couple of shared_ptr copies; also, the make_shared - // optimization has the potential downside of keeping the raw storage - // alive longer when there are weak_ptrs. So, yes, we can and should - // restore the make_shared optimization as soon as make_shared supports - // list init, but I don't think it's all that important AFAIK - if constexpr (requires { T{CPP2_FORWARD(args)...}; }) { - // Why this calls 'unique.new': The workaround to use { } initialization - // requires calling naked 'new' to allocate the object separately anyway, - // so reuse the unique.new path that already does that (less code - // duplication, plus encapsulate the naked 'new' in one place) - return unique.cpp2_new(CPP2_FORWARD(args)...); - } - else { - return std::make_shared(CPP2_FORWARD(args)...); - } - } -} inline shared; - -template -[[nodiscard]] auto cpp2_new(auto&& ...args) -> std::unique_ptr { - return unique.cpp2_new(CPP2_FORWARD(args)...); -} - - -//----------------------------------------------------------------------- -// -// in For "in" parameter -// -//----------------------------------------------------------------------- -// -template -constexpr bool prefer_pass_by_value = - sizeof(T) <= 2*sizeof(void*) - && std::is_trivially_copy_constructible_v; - -template - requires std::is_class_v || std::is_union_v || std::is_array_v || std::is_function_v -constexpr bool prefer_pass_by_value = false; - -template - requires (!std::is_void_v) -using in = - std::conditional_t < - prefer_pass_by_value, - T const, - T const& - >; - - -//----------------------------------------------------------------------- -// -// Initialization: These are closely related... -// -// deferred_init For deferred-initialized local object -// -// out For out parameter -// -//----------------------------------------------------------------------- -// -template -class deferred_init { - alignas(T) std::byte data[sizeof(T)]; - bool init = false; - - auto t() -> T& { return *std::launder(reinterpret_cast(&data)); } - - template - friend class out; - - auto destroy() -> void { if (init) { t().~T(); } init = false; } - -public: - deferred_init() noexcept { } - ~deferred_init() noexcept { destroy(); } - auto value() noexcept -> T& { Default.enforce(init); return t(); } - - auto construct(auto&& ...args) -> void { Default.enforce(!init); new (&data) T{CPP2_FORWARD(args)...}; init = true; } -}; - - -template -class out { - // Not going to bother with std::variant here - union { - T* t; - deferred_init* dt; - }; - out* ot = {}; - bool has_t; - - // Each out in a chain contains its own uncaught_count ... - int uncaught_count = Uncaught_exceptions(); - // ... but all in a chain share the topmost called_construct_ - bool called_construct_ = false; - -public: - out(T* t_) noexcept : t{ t_}, has_t{true} { Default.enforce( t); } - out(deferred_init* dt_) noexcept : dt{dt_}, has_t{false} { Default.enforce(dt); } - out(out* ot_) noexcept : ot{ot_}, has_t{ot_->has_t} { Default.enforce(ot); - if (has_t) { t = ot->t; } - else { dt = ot->dt; } - } - - auto called_construct() -> bool& { - if (ot) { return ot->called_construct(); } - else { return called_construct_; } - } - - // In the case of an exception, if the parameter was uninitialized - // then leave it in the same state on exit (strong guarantee) - ~out() { - if (called_construct() && uncaught_count != Uncaught_exceptions()) { - Default.enforce(!has_t); - dt->destroy(); - called_construct() = false; - } - } - - auto construct(auto&& ...args) -> void { - if (has_t || called_construct()) { - if constexpr (requires { *t = T(CPP2_FORWARD(args)...); }) { - Default.enforce( t ); - *t = T(CPP2_FORWARD(args)...); - } - else { - Default.report_violation("attempted to copy assign, but copy assignment is not available"); - } - } - else { - Default.enforce( dt ); - if (dt->init) { - if constexpr (requires { *t = T(CPP2_FORWARD(args)...); }) { - dt->value() = T(CPP2_FORWARD(args)...); - } - else { - Default.report_violation("attempted to copy assign, but copy assignment is not available"); - } - } - else { - dt->construct(CPP2_FORWARD(args)...); - called_construct() = true; - } - } - } - - auto value() noexcept -> T& { - if (has_t) { - Default.enforce( t ); - return *t; - } - else { - Default.enforce( dt ); - return dt->value(); - } - } -}; - - -//----------------------------------------------------------------------- -// -// CPP2_UFCS: Variadic macro generating a variadic lamba, oh my... -// -//----------------------------------------------------------------------- -// -// Workaround . -#define CPP2_FORCE_INLINE_LAMBDA_CLANG /* empty */ - -#if defined(_MSC_VER) && !defined(__clang_major__) - #define CPP2_FORCE_INLINE __forceinline - #define CPP2_FORCE_INLINE_LAMBDA [[msvc::forceinline]] - #define CPP2_LAMBDA_NO_DISCARD -#else - #define CPP2_FORCE_INLINE __attribute__((always_inline)) - #if defined(__clang__) - #define CPP2_FORCE_INLINE_LAMBDA /* empty */ - #undef CPP2_FORCE_INLINE_LAMBDA_CLANG - #define CPP2_FORCE_INLINE_LAMBDA_CLANG __attribute__((always_inline)) - #else - #define CPP2_FORCE_INLINE_LAMBDA __attribute__((always_inline)) - #endif - - #if defined(__clang_major__) - // Also check __cplusplus, only to satisfy Clang -pedantic-errors - #if __cplusplus >= 202302L && (__clang_major__ > 13 || (__clang_major__ == 13 && __clang_minor__ >= 2)) - #define CPP2_LAMBDA_NO_DISCARD [[nodiscard]] - #else - #define CPP2_LAMBDA_NO_DISCARD - #endif - #elif defined(__GNUC__) - #if __GNUC__ >= 9 - #define CPP2_LAMBDA_NO_DISCARD [[nodiscard]] - #else - #define CPP2_LAMBDA_NO_DISCARD - #endif - #if ((__GNUC__ * 100) + __GNUC_MINOR__) < 1003 - // GCC 10.2 doesn't support this feature (10.3 is fine) - #undef CPP2_FORCE_INLINE_LAMBDA - #define CPP2_FORCE_INLINE_LAMBDA - #endif - #else - #define CPP2_LAMBDA_NO_DISCARD - #endif -#endif - -#define CPP2_UFCS_REMPARENS(...) __VA_ARGS__ - -// Ideally, the expression `CPP2_UFCS_IS_NOTHROW` expands to -// is in the _noexcept-specifier_ of the UFCS lambda, but without 'std::declval'. -// To workaround [GCC bug 101043](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101043), -// we instead make it a template parameter of the UFCS lambda. -// But using a template parameter, Clang also ICEs on an application. -// So we use these `NOTHROW` macros to fall back to the ideal for when not using GCC. -#define CPP2_UFCS_IS_NOTHROW(QUALID,TEMPKW,...) \ - requires { requires requires { std::declval().CPP2_UFCS_REMPARENS QUALID TEMPKW __VA_ARGS__(std::declval()...); }; \ - requires noexcept(std::declval().CPP2_UFCS_REMPARENS QUALID TEMPKW __VA_ARGS__(std::declval()...)); } \ -|| requires { requires !requires { std::declval().CPP2_UFCS_REMPARENS QUALID TEMPKW __VA_ARGS__(std::declval()...); }; \ - requires noexcept(CPP2_UFCS_REMPARENS QUALID __VA_ARGS__(std::declval(), std::declval()...)); } -#define CPP2_UFCS_IS_NOTHROW_PARAM(...) /*empty*/ -#define CPP2_UFCS_IS_NOTHROW_ARG(QUALID,TEMPKW,...) CPP2_UFCS_IS_NOTHROW(QUALID,TEMPKW,__VA_ARGS__) -#if defined(__GNUC__) && !defined(__clang__) - #undef CPP2_UFCS_IS_NOTHROW_PARAM - #undef CPP2_UFCS_IS_NOTHROW_ARG - #define CPP2_UFCS_IS_NOTHROW_PARAM(QUALID,TEMPKW,...) , bool IsNothrow = CPP2_UFCS_IS_NOTHROW(QUALID,TEMPKW,__VA_ARGS__) - #define CPP2_UFCS_IS_NOTHROW_ARG(...) IsNothrow - #if __GNUC__ < 11 - #undef CPP2_UFCS_IS_NOTHROW_PARAM - #undef CPP2_UFCS_IS_NOTHROW_ARG - #define CPP2_UFCS_IS_NOTHROW_PARAM(...) /*empty*/ - #define CPP2_UFCS_IS_NOTHROW_ARG(...) false // GCC 10 UFCS is always potentially-throwing. - #endif -#endif - -// Ideally, the expression `CPP2_UFCS_CONSTRAINT_ARG` expands to -// is in the _requires-clause_ of the UFCS lambda. -// To workaround an MSVC bug within a member function 'F' where UFCS is also for 'F' -// (), -// we instead make it a template parameter of the UFCS lambda. -// But using a template parameter, Clang also ICEs and GCC rejects a local 'F'. -// Also, Clang rejects the SFINAE test case when using 'std::declval'. -// So we use these `CONSTRAINT` macros to fall back to the ideal for when not using MSVC. -#define CPP2_UFCS_CONSTRAINT_PARAM(...) /*empty*/ -#define CPP2_UFCS_CONSTRAINT_ARG(QUALID,TEMPKW,...) \ - requires { CPP2_FORWARD(obj).CPP2_UFCS_REMPARENS QUALID TEMPKW __VA_ARGS__(CPP2_FORWARD(params)...); } \ -|| requires { CPP2_UFCS_REMPARENS QUALID __VA_ARGS__(CPP2_FORWARD(obj), CPP2_FORWARD(params)...); } -#if defined(_MSC_VER) - #undef CPP2_UFCS_CONSTRAINT_PARAM - #undef CPP2_UFCS_CONSTRAINT_ARG - #define CPP2_UFCS_CONSTRAINT_PARAM(QUALID,TEMPKW,...) , bool IsViable = \ - requires { std::declval().CPP2_UFCS_REMPARENS QUALID TEMPKW __VA_ARGS__(std::declval()...); } \ -|| requires { CPP2_UFCS_REMPARENS QUALID __VA_ARGS__(std::declval(), std::declval()...); } - #define CPP2_UFCS_CONSTRAINT_ARG(...) IsViable -#endif - -#define CPP2_UFCS_(LAMBDADEFCAPT,QUALID,TEMPKW,...) \ -[LAMBDADEFCAPT]< \ - typename Obj, typename... Params \ - CPP2_UFCS_IS_NOTHROW_PARAM(QUALID,TEMPKW,__VA_ARGS__) \ - CPP2_UFCS_CONSTRAINT_PARAM(QUALID,TEMPKW,__VA_ARGS__) \ - > \ - CPP2_LAMBDA_NO_DISCARD (Obj&& obj, Params&& ...params) CPP2_FORCE_INLINE_LAMBDA_CLANG \ - noexcept(CPP2_UFCS_IS_NOTHROW_ARG(QUALID,TEMPKW,__VA_ARGS__)) CPP2_FORCE_INLINE_LAMBDA -> decltype(auto) \ - requires CPP2_UFCS_CONSTRAINT_ARG(QUALID,TEMPKW,__VA_ARGS__) { \ - if constexpr (requires{ CPP2_FORWARD(obj).CPP2_UFCS_REMPARENS QUALID TEMPKW __VA_ARGS__(CPP2_FORWARD(params)...); }) { \ - return CPP2_FORWARD(obj).CPP2_UFCS_REMPARENS QUALID TEMPKW __VA_ARGS__(CPP2_FORWARD(params)...); \ - } else { \ - return CPP2_UFCS_REMPARENS QUALID __VA_ARGS__(CPP2_FORWARD(obj), CPP2_FORWARD(params)...); \ - } \ -} - -#define CPP2_UFCS(...) CPP2_UFCS_(&,(),,__VA_ARGS__) -#define CPP2_UFCS_TEMPLATE(...) CPP2_UFCS_(&,(),template,__VA_ARGS__) -#define CPP2_UFCS_QUALIFIED_TEMPLATE(QUALID,...) CPP2_UFCS_(&,QUALID,template,__VA_ARGS__) -#define CPP2_UFCS_NONLOCAL(...) CPP2_UFCS_(,(),,__VA_ARGS__) -#define CPP2_UFCS_TEMPLATE_NONLOCAL(...) CPP2_UFCS_(,(),template,__VA_ARGS__) -#define CPP2_UFCS_QUALIFIED_TEMPLATE_NONLOCAL(QUALID,...) CPP2_UFCS_(,QUALID,template,__VA_ARGS__) - - -//----------------------------------------------------------------------- -// -// to_string for string interpolation -// -//----------------------------------------------------------------------- -// -// For use when returning "no such thing", such as -// when customizing "as" for std::variant -struct nonesuch_ { - auto operator==(auto const&) -> bool { return false; } -}; -constexpr inline nonesuch_ nonesuch; - -inline auto to_string(...) -> std::string -{ - return "(customize me - no cpp2::to_string overload exists for this type)"; -} - -inline auto to_string(nonesuch_) -> std::string -{ - return "(invalid type)"; -} - -inline auto to_string(std::same_as auto const&) -> std::string -{ - return "std::any"; -} - -inline auto to_string(bool b) -> std::string -{ - return b ? "true" : "false"; -} - -template -inline auto to_string(T const& t) -> std::string - requires requires { std::to_string(t); } -{ - return std::to_string(t); -} - -inline auto to_string(char const& t) -> std::string -{ - return std::string{t}; -} - -inline auto to_string(char const* s) -> std::string -{ - return std::string{s}; -} - -inline auto to_string(std::string const& s) -> std::string const& -{ - return s; -} - -template -inline auto to_string(T const& sv) -> std::string - requires (std::is_convertible_v - && !std::is_convertible_v) -{ - return std::string{sv}; -} - -template -inline auto to_string(std::variant const& v) -> std::string; - -template < typename T, typename U> -inline auto to_string(std::pair const& p) -> std::string; - -template < typename... Ts> -inline auto to_string(std::tuple const& t) -> std::string; - -template -inline auto to_string(std::optional const& o) -> std::string { - if (o.has_value()) { - return cpp2::to_string(o.value()); - } - return "(empty)"; -} - -template -inline auto to_string(std::variant const& v) -> std::string -{ - if (v.valueless_by_exception()) return "(empty)"; - // Need to guard this with is_any otherwise the get_if is illegal - if constexpr (is_any) if (std::get_if(&v) != nullptr) return "(empty)"; - - return std::visit([](auto&& arg) -> std::string { - return cpp2::to_string(arg); - }, v); -} - -template < typename T, typename U> -inline auto to_string(std::pair const& p) -> std::string -{ - return "(" + cpp2::to_string(p.first) + ", " + cpp2::to_string(p.second) + ")"; -} - -template < typename... Ts> -inline auto to_string(std::tuple const& t) -> std::string -{ - if constexpr (sizeof...(Ts) == 0) { - return "()"; - } else { - std::string out = "(" + cpp2::to_string(std::get<0>(t)); - std::apply([&out](auto&&, auto&&... args) { - ((out += ", " + cpp2::to_string(args)), ...); - }, t); - out += ")"; - return out; - } -} - -// MSVC supports it but doesn't define __cpp_lib_format until the ABI stablizes, but here -// don't care about that, so consider it as supported since VS 2019 16.10 (_MSC_VER 1929) -#if defined(__cpp_lib_format) || (defined(_MSC_VER) && _MSC_VER >= 1929) -inline auto to_string(auto&& value, std::string_view fmt) -> std::string -{ - return std::vformat(fmt, std::make_format_args(CPP2_FORWARD(value))); -} -#else -inline auto to_string(auto&& value, std::string_view) -> std::string -{ - // This Cpp1 implementation does not support -ted string interpolation - // so the best we can do is ignore the formatting request (degraded operation - // seems better than a dynamic error message string or a hard error) - return to_string(CPP2_FORWARD(value)); -} -#endif - - -//----------------------------------------------------------------------- -// -// is and as -// -//----------------------------------------------------------------------- -// - -//------------------------------------------------------------------------------------------------------------- -// Built-in is -// - -// For designating "holds no value" -- used only with is, not as -// TODO: Does this really warrant a new synonym? Perhaps "is void" is enough -using empty = void; - - -// Templates -// -template