diff --git a/include/chaiscript/language/chaiscript_parser.hpp b/include/chaiscript/language/chaiscript_parser.hpp index 4ced5d73..edfc0e06 100644 --- a/include/chaiscript/language/chaiscript_parser.hpp +++ b/include/chaiscript/language/chaiscript_parser.hpp @@ -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; diff --git a/unittests/class_missing_line_separator.chai b/unittests/class_missing_line_separator.chai new file mode 100644 index 00000000..3b7c107f --- /dev/null +++ b/unittests/class_missing_line_separator.chai @@ -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)