Skip to content

Commit

Permalink
fix error after multiline string literal; add two unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
gewang committed Oct 4, 2024
1 parent fb0ad41 commit d627c83
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 9 deletions.
30 changes: 21 additions & 9 deletions src/core/chuck_errmsg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,16 +145,28 @@ static IntList intList( t_CKINT i, IntList rest )
void EM_newline( t_CKINT pos, t_CKINT lineNum )
{
// debug print
// cerr << "pos: " << pos << " lineNum: " << lineNum << " EM_lineNum: " << EM_lineNum << endl;
// cerr << "pos: " << pos << " lineNum: " << lineNum
// << " EM_lineNum: " << EM_lineNum << endl;

// HACK: this is specifically for multi-line strings
// for( int i = EM_lineNum; i < lineNum; i++ )
// the_linePos = intList( pos, the_linePos );

// set to new line num
EM_lineNum++;
// add to linked list
the_linePos = intList( pos, the_linePos );
// line num progress
t_CKINT diff = lineNum - EM_lineNum;
// this could happen, apparently, with single-line comments...
if( diff < 1 )
{
// increment line num
EM_lineNum++;
// add to linked list
the_linePos = intList( pos, the_linePos );
}
else // diff == 1 (another line of code) or...
// diff > 1 (multi-line string literal, does not call EM_newline until the end)
{
// create nodes for one or more lines
for( int i = EM_lineNum; i < lineNum; i++ )
the_linePos = intList( pos, the_linePos );
// set to new line num
EM_lineNum = lineNum;
}
}


Expand Down
10 changes: 10 additions & 0 deletions src/test/06-Errors/error-after-multiline-string-1.ck
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// test error reporting after a multi-line string literal
// (without trailing one-line comment)
"
multi
line
chuck
string
" => string foo;

[1,2,3] => int bar[]; // syntax error
6 changes: 6 additions & 0 deletions src/test/06-Errors/error-after-multiline-string-1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
error-after-multiline-string-1.ck:10:9: error: cannot resolve operator '=>' on types 'int[]' and 'int[]'...
[10] [1,2,3] => int bar[]; // syntax error
^
error-after-multiline-string-1.ck:10:9: error: ...(note: use '@=>' for object reference assignment)
[10] [1,2,3] => int bar[]; // syntax error
^
10 changes: 10 additions & 0 deletions src/test/06-Errors/error-after-multiline-string-2.ck
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// test error reporting after a multi-line string literal
// (without trailing one-line comment)
"
multi
line
chuck
string
" => string foo;

[1,2,3] => int bar[];
6 changes: 6 additions & 0 deletions src/test/06-Errors/error-after-multiline-string-2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
error-after-multiline-string-2.ck:10:9: error: cannot resolve operator '=>' on types 'int[]' and 'int[]'...
[10] [1,2,3] => int bar[];
^
error-after-multiline-string-2.ck:10:9: error: ...(note: use '@=>' for object reference assignment)
[10] [1,2,3] => int bar[];
^

0 comments on commit d627c83

Please sign in to comment.