Skip to content

Incorrect behavior of 'error' function #221

@ChAoSUnItY

Description

@ChAoSUnItY

error function heavily relies on source_idx, which results in the function itself not being able to be used after parsing phase completed, as first saw in #220.

shecc/src/globals.c

Lines 1123 to 1144 in 11785eb

/* Construct error source diagnostics, enabling precise identification of
* syntax and logic issues within the code.
*/
int offset, start_idx, i = 0;
char diagnostic[512 /* MAX_LINE_LEN * 2 */];
for (offset = SOURCE->size; offset >= 0 && SOURCE->elements[offset] != '\n';
offset--)
;
start_idx = offset + 1;
for (offset = 0;
offset < MAX_SOURCE && SOURCE->elements[start_idx + offset] != '\n';
offset++) {
diagnostic[i++] = SOURCE->elements[start_idx + offset];
}
diagnostic[i++] = '\n';
for (offset = start_idx; offset < SOURCE->size; offset++) {
diagnostic[i++] = ' ';
}

Possible fixes

One possible fix to address this issue is to instead of relying on global counter (source_idx), we stores lexical position within an AST's node, and by passing an node instance to properly report an error at correct lexical position.

Workarounds

It's advised to use fatal function after parsing phase is completed before behavior of error function is fixed.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions