Skip to content
Snippets Groups Projects
  • Nathan Sidwell's avatar
    d1c566d7
    libcpp: Directly peek for initial line marker · d1c566d7
    Nathan Sidwell authored
    Using the tokenizer to sniff for an initial line marker for
    preprocessed input is a little brittle, particularly with
    -fdirectives-only.  If there is no marker we'll happily munch initial
    comments.  This patch directly sniffs the buffer.  This is safe
    because the initial line marker was machine generated and must be
    right at the beginning of the file.  Anything else is not such a line
    marker.  The same is true for the initial directory marker.  For that
    tokenizing the string is simplest, but at that point it's either a
    regular line marker or a directory marker.  If it's a regular marker,
    unwinding tokens is fine.
    
    	libcpp/
    	* internal.h (enum include_type): Rename IT_MAIN_INJECT to
    	IT_PRE_MAIN.
    	* init.c (cpp_read_main_file): If there is no line marker, adjust
    	the initial line marker.
    	(read_original_filename): Return bool, peek the buffer directly
    	before trying to tokenize.
    	(read_original_directory): Likewise.  Directly prod the string
    	literal.
    	* files.c (_cpp_stack_file): Adjust for IT_PRE_MAIN change.
    d1c566d7
    History
    libcpp: Directly peek for initial line marker
    Nathan Sidwell authored
    Using the tokenizer to sniff for an initial line marker for
    preprocessed input is a little brittle, particularly with
    -fdirectives-only.  If there is no marker we'll happily munch initial
    comments.  This patch directly sniffs the buffer.  This is safe
    because the initial line marker was machine generated and must be
    right at the beginning of the file.  Anything else is not such a line
    marker.  The same is true for the initial directory marker.  For that
    tokenizing the string is simplest, but at that point it's either a
    regular line marker or a directory marker.  If it's a regular marker,
    unwinding tokens is fine.
    
    	libcpp/
    	* internal.h (enum include_type): Rename IT_MAIN_INJECT to
    	IT_PRE_MAIN.
    	* init.c (cpp_read_main_file): If there is no line marker, adjust
    	the initial line marker.
    	(read_original_filename): Return bool, peek the buffer directly
    	before trying to tokenize.
    	(read_original_directory): Likewise.  Directly prod the string
    	literal.
    	* files.c (_cpp_stack_file): Adjust for IT_PRE_MAIN change.