diff --git a/basis/alien/parser/parser-tests.factor b/basis/alien/parser/parser-tests.factor index 195cbb78a2..061deb84c5 100644 --- a/basis/alien/parser/parser-tests.factor +++ b/basis/alien/parser/parser-tests.factor @@ -1,6 +1,7 @@ ! (c)2009 Joe Groff bsd license USING: accessors alien.c-types alien.parser alien.syntax -tools.test vocabs.parser parser ; +tools.test vocabs.parser parser eval vocabs.parser debugger +continuations ; IN: alien.parser.tests TYPEDEF: char char2 @@ -28,4 +29,15 @@ SYMBOL: not-c-type [ "not-c-type" parse-c-type ] [ no-c-type? ] must-fail-with [ "not-word" parse-c-type ] [ error>> no-word-error? ] must-fail-with -] with-file-vocabs \ No newline at end of file +] with-file-vocabs + +! Reported by mnestic +TYPEDEF: int alien-parser-test-int ! reasonably unique name... + +[ "OK!" ] [ + [ + "USE: specialized-arrays SPECIALIZED-ARRAY: alien-parser-test-int" eval( -- ) + ! after restart, we end up here + "OK!" + ] [ :1 ] recover +] unit-test \ No newline at end of file diff --git a/basis/alien/parser/parser.factor b/basis/alien/parser/parser.factor index 67f1d4e5fd..e4ff5789d2 100644 --- a/basis/alien/parser/parser.factor +++ b/basis/alien/parser/parser.factor @@ -8,7 +8,7 @@ namespaces summary math vocabs.parser ; IN: alien.parser : parse-c-type-name ( name -- word ) - dup search [ nip ] [ no-word ] if* ; + dup search [ ] [ no-word ] ?if ; : parse-c-type ( string -- type ) { @@ -17,7 +17,7 @@ IN: alien.parser { [ dup search c-type-word? ] [ parse-c-type-name ] } { [ "**" ?tail ] [ drop void* ] } { [ "*" ?tail ] [ parse-c-type-name resolve-pointer-type ] } - [ parse-c-type-name no-c-type ] + [ dup search [ no-c-type ] [ no-word ] ?if ] } cond ; : scan-c-type ( -- c-type )