aboutsummaryrefslogtreecommitdiff
path: root/src/boot/strap/utility.clisp
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2012-05-28 14:09:02 +0000
committerdos-reis <gdr@axiomatics.org>2012-05-28 14:09:02 +0000
commit62a125276f6dc3acedaf11af209b7e4c02306128 (patch)
tree81cf15675a49410d21e6277b7e5230b86232fd26 /src/boot/strap/utility.clisp
parent7be5c459a3b8d02d87e3a21edabfbf7227df613c (diff)
downloadopen-axiom-62a125276f6dc3acedaf11af209b7e4c02306128.tar.gz
* 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.
Diffstat (limited to 'src/boot/strap/utility.clisp')
-rw-r--r--src/boot/strap/utility.clisp23
1 files changed, 18 insertions, 5 deletions
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|))