alien.parser: fix behavior with restarts, reported by mnestic
							parent
							
								
									8da50bdce9
								
							
						
					
					
						commit
						18d4f030cd
					
				| 
						 | 
				
			
			@ -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
 | 
			
		||||
] 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
 | 
			
		||||
| 
						 | 
				
			
			@ -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 )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue