fixed macro function bug
This commit is contained in:
		
							parent
							
								
									34b7d96fec
								
							
						
					
					
						commit
						f46a02a360
					
				
					 2 changed files with 12 additions and 0 deletions
				
			
		| 
						 | 
					@ -7,6 +7,7 @@ version 0.9.17:
 | 
				
			||||||
- function parameters must be converted to pointers (signaled by Neil Brown)
 | 
					- function parameters must be converted to pointers (signaled by Neil Brown)
 | 
				
			||||||
- sanitized string and character constant parsing
 | 
					- sanitized string and character constant parsing
 | 
				
			||||||
- fixed comment parse (signaled by Damian M Gryski)
 | 
					- fixed comment parse (signaled by Damian M Gryski)
 | 
				
			||||||
 | 
					- fixed macro function bug (signaled by Philippe Ribet)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
version 0.9.16:
 | 
					version 0.9.16:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										11
									
								
								tcc.c
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								tcc.c
									
										
									
									
									
								
							| 
						 | 
					@ -3749,7 +3749,14 @@ static int macro_subst_tok(TokenString *tok_str,
 | 
				
			||||||
               next token. XXX: find better solution */
 | 
					               next token. XXX: find better solution */
 | 
				
			||||||
            if (macro_ptr) {
 | 
					            if (macro_ptr) {
 | 
				
			||||||
                t = *macro_ptr;
 | 
					                t = *macro_ptr;
 | 
				
			||||||
 | 
					                if (t == 0) {
 | 
				
			||||||
 | 
					                    /* end of macro stream: we must look at the token
 | 
				
			||||||
 | 
					                       after in the file */
 | 
				
			||||||
 | 
					                    macro_ptr = NULL;
 | 
				
			||||||
 | 
					                    goto parse_stream;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
 | 
					            parse_stream:
 | 
				
			||||||
                /* XXX: incorrect with comments */
 | 
					                /* XXX: incorrect with comments */
 | 
				
			||||||
                ch = file->buf_ptr[0];
 | 
					                ch = file->buf_ptr[0];
 | 
				
			||||||
                while (is_space(ch) || ch == '\n')
 | 
					                while (is_space(ch) || ch == '\n')
 | 
				
			||||||
| 
						 | 
					@ -3981,6 +3988,10 @@ static void macro_subst(TokenString *tok_str,
 | 
				
			||||||
    if (macro_str1) 
 | 
					    if (macro_str1) 
 | 
				
			||||||
        ptr = macro_str1;
 | 
					        ptr = macro_str1;
 | 
				
			||||||
    while (1) {
 | 
					    while (1) {
 | 
				
			||||||
 | 
					        /* NOTE: ptr == NULL can only happen if tokens are read from
 | 
				
			||||||
 | 
					           file stream due to a macro function call */
 | 
				
			||||||
 | 
					        if (ptr == NULL)
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
        TOK_GET(t, ptr, cval);
 | 
					        TOK_GET(t, ptr, cval);
 | 
				
			||||||
        if (t == 0)
 | 
					        if (t == 0)
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue