From 62b605c6c0ea13e9763c0a0115464007b13a8831 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Tue, 20 Oct 2026 11:57:16 +0000 Subject: refactor(strings): replace compiler builtins with the STRING library Construct literals as STRING values and route string operations through ordinary library functions and operators. Preserve value ownership in records, arrays, constants and file I/O. Co-Authored-By: Claude Opus 5.5 --- tests/library/exp-string/case.json | 2 +- tests/library/exp-string/program.cps | 168 +++++++++++++++++------------------ 2 files changed, 85 insertions(+), 85 deletions(-) (limited to 'tests/library/exp-string') diff --git a/tests/library/exp-string/case.json b/tests/library/exp-string/case.json index e1ed21a..4e37b1c 100644 --- a/tests/library/exp-string/case.json +++ b/tests/library/exp-string/case.json @@ -1 +1 @@ -{"sources":["program.cps","../../../pseudocode-lib/_exp_string.cps"],"compiler_args":["-no-std"]} +{"sources":["program.cps","../../../pseudocode-lib/string.cps"],"compiler_args":["-no-std"]} diff --git a/tests/library/exp-string/program.cps b/tests/library/exp-string/program.cps index 0adf86c..2e45dc3 100644 --- a/tests/library/exp-string/program.cps +++ b/tests/library/exp-string/program.cps @@ -1,43 +1,43 @@ -INCLUDE "../../../pseudocode-lib/_exp_string.cps" -FUNCTION Echo(S : _EXP_STRING) RETURNS _EXP_STRING +INCLUDE "../../../pseudocode-lib/string.cps" +FUNCTION Echo(S : STRING) RETURNS STRING RETURN S ENDFUNCTION -DECLARE A : _EXP_STRING((C_STRING)"hello") -DECLARE B : _EXP_STRING(A) +DECLARE A : STRING((C_STRING)"hello") +DECLARE B : STRING(A) B <- (C_STRING)"world" B <- B -CALL _EXP_STRING_OUTPUT(A & B) -DECLARE Empty : _EXP_STRING -OUTPUT _EXP_STRING_LENGTH(Empty) -DECLARE Nuls : _EXP_STRING(3, (C_CHAR)'\0') -OUTPUT _EXP_STRING_LENGTH(Nuls) -DECLARE Long : _EXP_STRING(20000, (C_CHAR)'x') +OUTPUT (A & B) +DECLARE Empty : STRING +OUTPUT LENGTH(Empty) +DECLARE Nuls : STRING(3, (C_CHAR)'\0') +OUTPUT LENGTH(Nuls) +DECLARE Long : STRING(20000, (C_CHAR)'x') DECLARE I : INTEGER FOR I <- 1 TO 100 Long <- Long & A NEXT I -OUTPUT _EXP_STRING_LENGTH(Long) +OUTPUT LENGTH(Long) Long <- Echo(Long) -OUTPUT _EXP_STRING_LENGTH(Long) -CALL _EXP_STRING_OUTPUT(_EXP_STRING_NUM_TO_STR(42) & _EXP_STRING_NUM_TO_STR(1.25)) -DECLARE Number : _EXP_STRING((C_STRING)"12.5") -OUTPUT _EXP_STRING_STR_TO_NUM(Number) = 12.5 +OUTPUT LENGTH(Long) +OUTPUT (NUM_TO_STR(42) & NUM_TO_STR(1.25)) +DECLARE Number : STRING((C_STRING)"12.5") +OUTPUT STR_TO_NUM(Number) = 12.5 TRY Number <- (C_STRING)"12x" - OUTPUT _EXP_STRING_STR_TO_NUM(Number) + OUTPUT STR_TO_NUM(Number) CATCH OUTPUT "conversion caught" ENDTRY TRY - DECLARE Invalid : _EXP_STRING(-1, (C_CHAR)'x') + DECLARE Invalid : STRING(-1, (C_CHAR)'x') CATCH OUTPUT "length caught" ENDTRY -CALL _EXP_STRING_NUM_TO_STR(99) +CALL NUM_TO_STR(99) CALL Echo(Long) -DECLARE Heap : _EXP_STRING -Heap <- NEW _EXP_STRING((C_STRING)"heap") -CALL _EXP_STRING_OUTPUT(Heap) +DECLARE Heap : STRING +Heap <- NEW STRING((C_STRING)"heap") +OUTPUT (Heap) DELETE Heap CALL CheckLeft() CALL CheckRight() @@ -49,90 +49,90 @@ CALL CheckChr() CALL CheckIsNum() PROCEDURE CheckLeft() - DECLARE Letters : _EXP_STRING((C_STRING)"ABCDEFGH") - DECLARE Empty : _EXP_STRING - DECLARE Nuls : _EXP_STRING(3, (C_CHAR)'\0') - DECLARE A : _EXP_STRING((C_STRING)"hello") - CALL _EXP_STRING_OUTPUT(_EXP_STRING_LEFT(Letters, 3)) - OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Empty, 2)), ":", _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Letters, 0)), ":", _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Letters, -1)) - CALL _EXP_STRING_OUTPUT(_EXP_STRING_LEFT(Letters, 20)) - OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_LEFT(Nuls & A, 4)) + DECLARE Letters : STRING((C_STRING)"ABCDEFGH") + DECLARE Empty : STRING + DECLARE Nuls : STRING(3, (C_CHAR)'\0') + DECLARE A : STRING((C_STRING)"hello") + OUTPUT (LEFT(Letters, 3)) + OUTPUT LENGTH(LEFT(Empty, 2)), ":", LENGTH(LEFT(Letters, 0)), ":", LENGTH(LEFT(Letters, -1)) + OUTPUT (LEFT(Letters, 20)) + OUTPUT LENGTH(LEFT(Nuls & A, 4)) ENDPROCEDURE PROCEDURE CheckRight() - DECLARE Letters : _EXP_STRING((C_STRING)"ABCDEFGH") - DECLARE Empty : _EXP_STRING - DECLARE Nuls : _EXP_STRING(3, (C_CHAR)'\0') - DECLARE A : _EXP_STRING((C_STRING)"hello") - CALL _EXP_STRING_OUTPUT(_EXP_STRING_RIGHT(Letters, 3)) - OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(Empty, 2)), ":", _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(Letters, 0)), ":", _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(Letters, -1)) - CALL _EXP_STRING_OUTPUT(_EXP_STRING_RIGHT(Letters, 20)) - OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_RIGHT(A & Nuls, 4)) + DECLARE Letters : STRING((C_STRING)"ABCDEFGH") + DECLARE Empty : STRING + DECLARE Nuls : STRING(3, (C_CHAR)'\0') + DECLARE A : STRING((C_STRING)"hello") + OUTPUT (RIGHT(Letters, 3)) + OUTPUT LENGTH(RIGHT(Empty, 2)), ":", LENGTH(RIGHT(Letters, 0)), ":", LENGTH(RIGHT(Letters, -1)) + OUTPUT (RIGHT(Letters, 20)) + OUTPUT LENGTH(RIGHT(A & Nuls, 4)) ENDPROCEDURE PROCEDURE CheckMid() - DECLARE Letters : _EXP_STRING((C_STRING)"ABCDEFGH") - DECLARE Empty : _EXP_STRING - DECLARE Nuls : _EXP_STRING(3, (C_CHAR)'\0') - CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(Letters, 2, 3)) - CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(Letters, -9223372036854775808, 2)) - CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(Letters, 7, 9223372036854775807)) - OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_MID(Empty, 1, 2)), ":", _EXP_STRING_LENGTH(_EXP_STRING_MID(Letters, 9223372036854775807, 2)) - OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_MID(Letters, 2, 0)), ":", _EXP_STRING_LENGTH(_EXP_STRING_MID(Letters, 2, -1)) - OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_MID(Nuls & Letters, 2, 4)) + DECLARE Letters : STRING((C_STRING)"ABCDEFGH") + DECLARE Empty : STRING + DECLARE Nuls : STRING(3, (C_CHAR)'\0') + OUTPUT (MID(Letters, 2, 3)) + OUTPUT (MID(Letters, -9223372036854775808, 2)) + OUTPUT (MID(Letters, 7, 9223372036854775807)) + OUTPUT LENGTH(MID(Empty, 1, 2)), ":", LENGTH(MID(Letters, 9223372036854775807, 2)) + OUTPUT LENGTH(MID(Letters, 2, 0)), ":", LENGTH(MID(Letters, 2, -1)) + OUTPUT LENGTH(MID(Nuls & Letters, 2, 4)) ENDPROCEDURE PROCEDURE CheckLCase() - DECLARE Mixed : _EXP_STRING((C_STRING)"AbC@19") - DECLARE Empty : _EXP_STRING - DECLARE Nuls : _EXP_STRING(2, (C_CHAR)'\0') - CALL _EXP_STRING_OUTPUT(_EXP_STRING_LCASE(Mixed)) - CALL _EXP_STRING_OUTPUT(Mixed) + DECLARE Mixed : STRING((C_STRING)"AbC@19") + DECLARE Empty : STRING + DECLARE Nuls : STRING(2, (C_CHAR)'\0') + OUTPUT (LCASE(Mixed)) + OUTPUT (Mixed) DECLARE Lower : CHAR - Lower <- _EXP_STRING_LCASE('W') - OUTPUT Lower, ":", _EXP_STRING_LCASE('w'), ":", _EXP_STRING_LCASE('@') - OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_LCASE(Empty)), ":", _EXP_STRING_LENGTH(_EXP_STRING_LCASE(Nuls & Mixed)) - CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(_EXP_STRING_LCASE(Nuls & Mixed), 3, 3)) + Lower <- LCASE('W') + OUTPUT Lower, ":", LCASE('w'), ":", LCASE('@') + OUTPUT LENGTH(LCASE(Empty)), ":", LENGTH(LCASE(Nuls & Mixed)) + OUTPUT (MID(LCASE(Nuls & Mixed), 3, 3)) ENDPROCEDURE PROCEDURE CheckUCase() - DECLARE Mixed : _EXP_STRING((C_STRING)"AbC@19") - DECLARE Empty : _EXP_STRING - DECLARE Nuls : _EXP_STRING(2, (C_CHAR)'\0') - CALL _EXP_STRING_OUTPUT(_EXP_STRING_UCASE(Mixed)) - CALL _EXP_STRING_OUTPUT(Mixed) + DECLARE Mixed : STRING((C_STRING)"AbC@19") + DECLARE Empty : STRING + DECLARE Nuls : STRING(2, (C_CHAR)'\0') + OUTPUT (UCASE(Mixed)) + OUTPUT (Mixed) DECLARE Upper : CHAR - Upper <- _EXP_STRING_UCASE('h') - OUTPUT Upper, ":", _EXP_STRING_UCASE('H'), ":", _EXP_STRING_UCASE('@') - OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_UCASE(Empty)), ":", _EXP_STRING_LENGTH(_EXP_STRING_UCASE(Nuls & Mixed)) - CALL _EXP_STRING_OUTPUT(_EXP_STRING_MID(_EXP_STRING_UCASE(Nuls & Mixed), 3, 3)) + Upper <- UCASE('h') + OUTPUT Upper, ":", UCASE('H'), ":", UCASE('@') + OUTPUT LENGTH(UCASE(Empty)), ":", LENGTH(UCASE(Nuls & Mixed)) + OUTPUT (MID(UCASE(Nuls & Mixed), 3, 3)) ENDPROCEDURE PROCEDURE CheckAsc() - DECLARE Letters : _EXP_STRING((C_STRING)"ABCDEFGH") - DECLARE Empty : _EXP_STRING - DECLARE Nuls : _EXP_STRING(2, (C_CHAR)'\0') - DECLARE High : _EXP_STRING(1, (C_CHAR)255) - OUTPUT _EXP_STRING_ASC('A'), ":", _EXP_STRING_ASC(Letters) - OUTPUT _EXP_STRING_ASC(Empty), ":", _EXP_STRING_ASC(Nuls), ":", _EXP_STRING_ASC('\0') - OUTPUT _EXP_STRING_ASC(High) + DECLARE Letters : STRING((C_STRING)"ABCDEFGH") + DECLARE Empty : STRING + DECLARE Nuls : STRING(2, (C_CHAR)'\0') + DECLARE High : STRING(1, (C_CHAR)255) + OUTPUT ASC('A'), ":", ASC(Letters) + OUTPUT ASC(Empty), ":", ASC(Nuls), ":", ASC('\0') + OUTPUT ASC(High) ENDPROCEDURE PROCEDURE CheckChr() - CALL _EXP_STRING_OUTPUT(_EXP_STRING_CHR(65) & _EXP_STRING_CHR(90)) - OUTPUT _EXP_STRING_ASC(_EXP_STRING_CHR(_EXP_STRING_ASC('A'))) - OUTPUT _EXP_STRING_LENGTH(_EXP_STRING_CHR(0)), ":", _EXP_STRING_ASC(_EXP_STRING_CHR(0)) - OUTPUT _EXP_STRING_ASC(_EXP_STRING_CHR(321)), ":", _EXP_STRING_ASC(_EXP_STRING_CHR(-1)) + OUTPUT (CHR(65) & CHR(90)) + OUTPUT ASC(CHR(ASC('A'))) + OUTPUT LENGTH(CHR(0)), ":", ASC(CHR(0)) + OUTPUT ASC(CHR(321)), ":", ASC(CHR(-1)) ENDPROCEDURE PROCEDURE CheckIsNum() - DECLARE Number : _EXP_STRING((C_STRING)"12.5") - DECLARE Junk : _EXP_STRING((C_STRING)"12x") - DECLARE Empty : _EXP_STRING - DECLARE Leading : _EXP_STRING((C_STRING)" 12.5") - DECLARE Trailing : _EXP_STRING((C_STRING)"12.5 ") - DECLARE Whitespace : _EXP_STRING((C_STRING)" ") - OUTPUT _EXP_STRING_IS_NUM(Number), ":", _EXP_STRING_IS_NUM(Junk), ":", _EXP_STRING_IS_NUM(Empty) - OUTPUT _EXP_STRING_IS_NUM(Leading), ":", _EXP_STRING_IS_NUM(Trailing), ":", _EXP_STRING_IS_NUM(Whitespace) - OUTPUT _EXP_STRING_IS_NUM(Number & _EXP_STRING_CHR(0)), ":", _EXP_STRING_IS_NUM(_EXP_STRING_CHR(0) & Number) + DECLARE Number : STRING((C_STRING)"12.5") + DECLARE Junk : STRING((C_STRING)"12x") + DECLARE Empty : STRING + DECLARE Leading : STRING((C_STRING)" 12.5") + DECLARE Trailing : STRING((C_STRING)"12.5 ") + DECLARE Whitespace : STRING((C_STRING)" ") + OUTPUT IS_NUM(Number), ":", IS_NUM(Junk), ":", IS_NUM(Empty) + OUTPUT IS_NUM(Leading), ":", IS_NUM(Trailing), ":", IS_NUM(Whitespace) + OUTPUT IS_NUM(Number & CHR(0)), ":", IS_NUM(CHR(0) & Number) ENDPROCEDURE -- cgit v1.3.1-4-g156e