mirror of
https://github.com/ChaiScript/ChaiScript.git
synced 2026-04-30 19:09:26 +08:00
The saw_eol variable in Class_Statements() was initialized to true and only ever set back to true, making the "missing line separator" check unreachable. The fix separates Def (block statement ending with }) from Var_Decl (simple statement) so that Var_Decl sets saw_eol to false, matching the pattern used in Statements() for simple expressions. Co-authored-by: leftibot <leftibot@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
e42497a8b3
commit
7b45fe19fe
@ -2736,7 +2736,7 @@ namespace chaiscript {
|
||||
|
||||
while (has_more) {
|
||||
const auto start = m_position;
|
||||
if (Def(true, t_class_name) || Var_Decl(true, t_class_name)) {
|
||||
if (Def(true, t_class_name)) {
|
||||
if (!saw_eol) {
|
||||
throw exception::eval_error("Two function definitions missing line separator",
|
||||
File_Position(start.line, start.col),
|
||||
@ -2745,6 +2745,15 @@ namespace chaiscript {
|
||||
has_more = true;
|
||||
retval = true;
|
||||
saw_eol = true;
|
||||
} else if (Var_Decl(true, t_class_name)) {
|
||||
if (!saw_eol) {
|
||||
throw exception::eval_error("Two expressions missing line separator",
|
||||
File_Position(start.line, start.col),
|
||||
*m_filename);
|
||||
}
|
||||
has_more = true;
|
||||
retval = true;
|
||||
saw_eol = false;
|
||||
} else if (Eol()) {
|
||||
has_more = true;
|
||||
retval = true;
|
||||
|
||||
23
unittests/class_missing_line_separator.chai
Normal file
23
unittests/class_missing_line_separator.chai
Normal file
@ -0,0 +1,23 @@
|
||||
|
||||
// Test that two var declarations on the same line in a class body
|
||||
// are rejected with a "missing line separator" error (issue #592)
|
||||
|
||||
try {
|
||||
eval("class Foo { var x var y }")
|
||||
assert_true(false)
|
||||
} catch (eval_error) {
|
||||
}
|
||||
|
||||
// Also verify that properly separated declarations still work
|
||||
class Bar {
|
||||
var x
|
||||
var y
|
||||
def Bar() {
|
||||
this.x = 1
|
||||
this.y = 2
|
||||
}
|
||||
}
|
||||
|
||||
auto b = Bar()
|
||||
assert_equal(1, b.x)
|
||||
assert_equal(2, b.y)
|
||||
Loading…
x
Reference in New Issue
Block a user