Skip to content

Commit

Permalink
Replace control characters with spaces in string literals
Browse files Browse the repository at this point in the history
  • Loading branch information
positively-charged committed Apr 23, 2017
1 parent 7798ef0 commit 2586c90
Showing 1 changed file with 53 additions and 7 deletions.
60 changes: 53 additions & 7 deletions src/parse/token/source.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include "phase.h"

enum { LINE_OFFSET = 1 };
enum { ACC_EOF_CHARACTER = 127 };

struct request {
const char* given_path;
Expand Down Expand Up @@ -46,6 +47,7 @@ static char peek_ch( struct parse* parse );
static void read_initial_ch( struct parse* parse );
static struct str* temp_text( struct parse* parse );
static void append_ch( struct str* str, char ch );
static void append_string_ch( struct str* text, char ch );

void p_load_main_source( struct parse* parse ) {
struct request request;
Expand Down Expand Up @@ -982,21 +984,31 @@ void read_token_acs( struct parse* parse, struct token* token ) {
"unterminated string" );
p_bail( parse );
}
else if ( ch == ACC_EOF_CHARACTER ) {
struct pos pos;
t_init_pos( &pos,
parse->source->file_entry_id,
parse->source->line,
parse->source->column );
p_diag( parse, DIAG_POS_ERR, &pos,
"invalid character in string literal" );
p_bail( parse );
}
else if ( ch == '"' ) {
ch = read_ch( parse );
tk = TK_LIT_STRING;
goto finish;
}
else if ( ch == '\\' ) {
append_ch( text, ch );
append_string_ch( text, ch );
ch = read_ch( parse );
if ( ch ) {
append_ch( text, ch );
append_string_ch( text, ch );
ch = read_ch( parse );
}
}
else {
append_ch( text, ch );
append_string_ch( text, ch );
ch = read_ch( parse );
}
}
Expand Down Expand Up @@ -1595,13 +1607,23 @@ void read_token_acs95( struct parse* parse, struct token* token ) {
"unterminated string" );
p_bail( parse );
}
else if ( ch == ACC_EOF_CHARACTER ) {
struct pos pos;
t_init_pos( &pos,
parse->source->file_entry_id,
parse->source->line,
parse->source->column );
p_diag( parse, DIAG_POS_ERR, &pos,
"invalid character in string literal" );
p_bail( parse );
}
else if ( ch == '"' ) {
ch = read_ch( parse );
tk = TK_LIT_STRING;
goto finish;
}
else {
append_ch( text, ch );
append_ch( text, isprint( ch ) ? ch : ' ' );
ch = read_ch( parse );
}
}
Expand Down Expand Up @@ -2376,21 +2398,31 @@ void read_token( struct parse* parse, struct token* token ) {
"unterminated string" );
p_bail( parse );
}
else if ( ch == ACC_EOF_CHARACTER ) {
struct pos pos;
t_init_pos( &pos,
parse->source->file_entry_id,
parse->source->line,
parse->source->column );
p_diag( parse, DIAG_POS_ERR, &pos,
"invalid character in string literal" );
p_bail( parse );
}
else if ( ch == '"' ) {
ch = read_ch( parse );
tk = TK_LIT_STRING;
goto finish;
}
else if ( ch == '\\' ) {
append_ch( text, ch );
append_string_ch( text, ch );
ch = read_ch( parse );
if ( ch ) {
append_ch( text, ch );
append_string_ch( text, ch );
ch = read_ch( parse );
}
}
else {
append_ch( text, ch );
append_string_ch( text, ch );
ch = read_ch( parse );
}
}
Expand Down Expand Up @@ -2725,6 +2757,20 @@ void append_ch( struct str* str, char ch ) {
str_append( str, segment );
}

#if CHAR_MIN == 0

static void append_string_ch( struct str* text, char ch ) {
append_ch( text, ( ch >= ' ' ) ? ch : ' ' );
}

#else

static void append_string_ch( struct str* text, char ch ) {
append_ch( text, ( ! ( ch >= 0 && ch < ' ' ) ) ? ch : ' ' );
}

#endif

void p_increment_pos( struct pos* pos, enum tk tk ) {
switch ( tk ) {
case TK_BRACE_R:
Expand Down

0 comments on commit 2586c90

Please sign in to comment.