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 ;
IN: nested-comments
:: (subsequences-at) ( sseq seq n -- )
sseq seq n start*
[ dup , sseq length + [ sseq seq ] dip (subsequences-at) ]
when* ;
: (count-subsequences) ( count substring string n -- count' )
[ 2dup ] dip start* [
pick length +
[ 1 + ] 3dip (count-subsequences)
] [
2drop
] if* ;
: subsequences-at ( sseq seq -- indices )
[ 0 (subsequences-at) ] { } make ;
: count-subsequences ( subseq seq -- n )
[ 0 ] 2dip 0 (count-subsequences) ;
: count-subsequences ( sseq seq -- i )
subsequences-at length ;
: parse-nestable-comment ( parsed-vector left-to-parse -- parsed-vector )
1 - "*)" parse-multiline-string
[ "(*" ] dip
count-subsequences + dup 0 > [ parse-nestable-comment ] [ drop ] if ;
: parse-all-(* ( parsed-vector left-to-parse -- parsed-vector )
1 - "*)" parse-multiline-string [ "(*" ] dip
count-subsequences + dup 0 > [ parse-all-(* ] [ drop ] if ;
SYNTAX: (* 1 parse-all-(* ;
SYNTAX: (* 1 parse-nestable-comment ;