From 62a125276f6dc3acedaf11af209b7e4c02306128 Mon Sep 17 00:00:00 2001 From: dos-reis Date: Mon, 28 May 2012 14:09:02 +0000 Subject: * interp/io.boot (findChar): Do not define here. * interp/match.boot (charPosition): Likewise. * boot/utility.boot (charPosition): Now return argument string length if no match. (findChar): New. * boot/scanner.boot (lexerCharPosition): Adjust. (shoeAccumulateLines): Use findChar. --- src/boot/strap/utility.clisp | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'src/boot/strap/utility.clisp') diff --git a/src/boot/strap/utility.clisp b/src/boot/strap/utility.clisp index 4de1d345..daec2a91 100644 --- a/src/boot/strap/utility.clisp +++ b/src/boot/strap/utility.clisp @@ -22,7 +22,7 @@ |symbolAssoc| |applySubst| |applySubst!| |applySubstNQ| |objectAssoc| |remove| |removeSymbol| |atomic?| |every?| |any?| |take| |takeWhile| |drop| |copyTree| |finishLine| - |stringSuffix?|))) + |stringSuffix?| |findChar| |charPosition|))) (DECLAIM (FTYPE (FUNCTION (|%Thing| |%Thing| |%Thing|) |%Thing|) |substitute|)) @@ -429,14 +429,27 @@ ((OR (CHARACTERP |x|) (INTEGERP |x|)) (|removeScalar| |l| |x|)) (T (|removeValue| |l| |x|)))) +(DEFUN |findChar| (|c| |s| &OPTIONAL (|k| 0)) + (LET ((|bfVar#2| NIL) (|bfVar#1| (|maxIndex| |s|)) (|i| |k|)) + (LOOP + (COND ((> |i| |bfVar#1|) (RETURN |bfVar#2|)) + (T + (AND (CHAR= (SCHAR |s| |i|) |c|) + (PROGN + (SETQ |bfVar#2| |i|) + (COND (|bfVar#2| (RETURN |bfVar#2|))))))) + (SETQ |i| (+ |i| 1))))) + (DEFUN |charPosition| (|c| |s| |k|) (LET* (|n|) (PROGN (SETQ |n| (LENGTH |s|)) - (LOOP - (COND ((NOT (< |k| |n|)) (RETURN NIL)) - ((CHAR= (SCHAR |s| |k|) |c|) (RETURN |k|)) - (T (SETQ |k| (+ |k| 1)))))))) + (COND ((MINUSP |k|) |n|) + (T + (LOOP + (COND ((NOT (< |k| |n|)) (RETURN |k|)) + ((CHAR= (SCHAR |s| |k|) |c|) (RETURN |k|)) + (T (SETQ |k| (+ |k| 1)))))))))) (DEFUN |firstNonblankPosition| (|s| |k|) (LET ((|bfVar#2| NIL) (|bfVar#1| (- (LENGTH |s|) 1)) (|i| |k|)) -- cgit v1.2.3