make nested-comments work again with new strings

db4
Doug Coleman 2009-09-19 14:14:47 -05:00
parent dc4a544a92
commit de5731fa91
2 changed files with 59 additions and 14 deletions

View File

@ -0,0 +1,43 @@
! Copyright (C) 2009 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors eval kernel lexer nested-comments tools.test ;
IN: nested-comments.tests
! Correct
[ ] [
"USE: nested-comments (* comment *)" eval( -- )
] unit-test
[ ] [
"USE: nested-comments (* comment*)" eval( -- )
] unit-test
[ ] [
"USE: nested-comments (* comment
*)" eval( -- )
] unit-test
[ ] [
"USE: nested-comments (* comment
*)" eval( -- )
] unit-test
[ ] [
"USE: nested-comments (* comment
*)" eval( -- )
] unit-test
[ ] [
"USE: nested-comments (* comment
(* *)
*)" eval( -- )
] unit-test
! Malformed
[
"USE: nested-comments (* comment
(* *)" eval( -- )
] [
error>> T{ unexpected f "*)" f } =
] must-fail-with

View File

@ -1,20 +1,22 @@
! by blei on #concatenative ! Copyright (C) 2009 blei, Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: kernel sequences math locals make multiline ; USING: kernel sequences math locals make multiline ;
IN: nested-comments IN: nested-comments
:: (subsequences-at) ( sseq seq n -- ) : (count-subsequences) ( count substring string n -- count' )
sseq seq n start* [ 2dup ] dip start* [
[ dup , sseq length + [ sseq seq ] dip (subsequences-at) ] pick length +
when* ; [ 1 + ] 3dip (count-subsequences)
] [
2drop
] if* ;
: subsequences-at ( sseq seq -- indices ) : count-subsequences ( subseq seq -- n )
[ 0 (subsequences-at) ] { } make ; [ 0 ] 2dip 0 (count-subsequences) ;
: count-subsequences ( sseq seq -- i ) : parse-nestable-comment ( parsed-vector left-to-parse -- parsed-vector )
subsequences-at length ; 1 - "*)" parse-multiline-string
[ "(*" ] dip
count-subsequences + dup 0 > [ parse-nestable-comment ] [ drop ] if ;
: parse-all-(* ( parsed-vector left-to-parse -- parsed-vector ) SYNTAX: (* 1 parse-nestable-comment ;
1 - "*)" parse-multiline-string [ "(*" ] dip
count-subsequences + dup 0 > [ parse-all-(* ] [ drop ] if ;
SYNTAX: (* 1 parse-all-(* ;