Files
kolibrios/programs/develop/SPForth/src/compiler/spf_literal
T
Leency 09488af869 KolSPForth12 uploaded to SVN
git-svn-id: svn://kolibrios.org@4867 a494cfbc-eb01-0410-851d-a64ba20cac60
2014-04-21 19:22:58 +00:00

81 lines
2.4 KiB
Plaintext

( ८¡à §®¢ ­¨¥ ç¨á«®¢ëå «¨â¥à «®¢ ¯à¨ ¨­â¥à¯à¥â æ¨¨.
Ž‘-­¥§ ¢¨á¨¬ë¥ ®¯à¥¤¥«¥­¨ï.
Copyright [C] 1992-1999 A.Cherezov ac@forth.org
८¡à §®¢ ­¨¥ ¨§ 16-à §à來®£® ¢ 32-à §àï¤­ë© ª®¤ - 1995-96££
¥¢¨§¨ï - ᥭâï¡àì 1999
)
: ?LITERAL1 ( T -> ... )
\ ¯à¥®¡à §®¢ âì áâப㠢 ç¨á«®
0 0 ROT COUNT
OVER C@ [CHAR] - = IF 1- SWAP 1+ SWAP TRUE ELSE FALSE THEN >R
>NUMBER ." N{" 2DUP TYPE ." }"
DUP 1 > IF -2001 THROW THEN \ ABORT" -?"
IF C@ [CHAR] . <> IF -2002 THROW THEN \ ABORT" -??"
R> IF DNEGATE THEN
[COMPILE] 2LITERAL
ELSE DROP D>S
R> IF NEGATE THEN
[COMPILE] LITERAL
THEN
;
: ?SLITERAL1 ( c-addr u -> ... )
\ ¯à¥®¡à §®¢ âì áâப㠢 ç¨á«®
0 0 2SWAP
OVER C@ [CHAR] - = IF 1- SWAP 1+ SWAP TRUE ELSE FALSE THEN >R
>NUMBER
DUP 1 > IF -2001 THROW THEN \ ABORT" -?"
IF C@ [CHAR] . <> IF -2002 THROW THEN \ ABORT" -??"
R> IF DNEGATE THEN
[COMPILE] 2LITERAL
ELSE DROP D>S
R> IF NEGATE THEN
[COMPILE] LITERAL
THEN
;
: HEX-LITERAL ( T -> ... )
BASE @ >R HEX
0 0 ROT COUNT 2- SWAP 2+ SWAP >NUMBER 2DROP D>S [COMPILE] LITERAL
R> BASE !
;
: HEX-SLITERAL ( T -> ... )
BASE @ >R HEX
0 0 2SWAP 2- SWAP 2+ SWAP >NUMBER 2DROP D>S [COMPILE] LITERAL
R> BASE !
;
: ?LITERAL2 ( c-addr -- ... )
( à áè¨à¥­­ë© ¢ à¨ ­â ?LITERAL1:
¥á«¨ áâப  - ­¥ ç¨á«®, â® ¯ëâ ¥¬áï âࠪ⮢ âì ¥ñ
ª ª ¨¬ï ä ©«  ¤«ï  ¢â®-INCLUDED)
DUP COUNT 2 MIN S" 0x" COMPARE 0=
IF HEX-LITERAL EXIT THEN
DUP >R ['] ?LITERAL1 CATCH
IF DROP R> COUNT
OVER C@ [CHAR] " = IF 2 - SWAP 1+ SWAP THEN ( ã¡à « ª ¢ë窨, ¥á«¨ ¥áâì)
2DUP + 0 SWAP C!
['] INCLUDED CATCH
DUP 2 = OVER 3 = OR ( ä ©« ­¥ ­ ©¤¥­ ¨«¨ ¯ãâì ­¥ ­ ©¤¥­ )
IF -2003 THROW \ ABORT" -???"
ELSE THROW THEN
ELSE RDROP
THEN
;
: ?SLITERAL2 ( c-addr u -- ... )
( à áè¨à¥­­ë© ¢ à¨ ­â ?SLITERAL1:
¥á«¨ áâப  - ­¥ ç¨á«®, â® ¯ëâ ¥¬áï âࠪ⮢ âì ¥ñ
ª ª ¨¬ï ä ©«  ¤«ï  ¢â®-INCLUDED)
2DUP 2 MIN S" 0x" COMPARE 0=
IF HEX-SLITERAL EXIT THEN
2DUP 2>R ['] ?SLITERAL1 CATCH
IF 2DROP 2R>
OVER C@ [CHAR] " = IF 2 - SWAP 1+ SWAP THEN ( ã¡à « ª ¢ë窨, ¥á«¨ ¥áâì)
2DUP + 0 SWAP C!
['] INCLUDED CATCH
DUP 2 = OVER 3 = OR ( ä ©« ­¥ ­ ©¤¥­ ¨«¨ ¯ãâì ­¥ ­ ©¤¥­ )
IF -2003 THROW \ ABORT" -???"
ELSE THROW THEN
ELSE 2R> 2DROP
THEN
;