diff --git a/xo-expression2/src/expression2/DConstant.cpp b/xo-expression2/src/expression2/DConstant.cpp index a0b255a6..f65ba013 100644 --- a/xo-expression2/src/expression2/DConstant.cpp +++ b/xo-expression2/src/expression2/DConstant.cpp @@ -65,15 +65,15 @@ namespace xo { bool DConstant::pretty(const ppindentinfo & ppii) const { - obj value + obj value_pr = FacetRegistry::instance().variant(value_); return ppii.pps()->pretty_struct (ppii, "DConstant", refrtag("value_.tseq", value_._typeseq()), - refrtag("value.tseq", value._typeseq()), - refrtag("value", value)); + refrtag("value.tseq", value_pr._typeseq()), + refrtag("value", value_pr)); } } /*namespace scm*/ } /*namespace xo*/ diff --git a/xo-object2/include/xo/object2/DBoolean.hpp b/xo-object2/include/xo/object2/DBoolean.hpp index e951cfba..69dd1c16 100644 --- a/xo-object2/include/xo/object2/DBoolean.hpp +++ b/xo-object2/include/xo/object2/DBoolean.hpp @@ -42,7 +42,7 @@ namespace xo { private: /** boxed boolean value **/ - bool value_; + bool value_ = false; }; template diff --git a/xo-object2/src/object2/DBoolean.cpp b/xo-object2/src/object2/DBoolean.cpp index 341e656d..a926b0ec 100644 --- a/xo-object2/src/object2/DBoolean.cpp +++ b/xo-object2/src/object2/DBoolean.cpp @@ -24,7 +24,9 @@ namespace xo { bool DBoolean::pretty(const ppindentinfo & ppii) const { - return ppdetail_atomic::print_pretty(ppii, value_); + return ppdetail_atomic::print_pretty + (ppii, + (value_ ? "true" : "false")); } size_t diff --git a/xo-object2/src/object2/object2_register_facets.cpp b/xo-object2/src/object2/object2_register_facets.cpp index ebf320c4..be68e009 100644 --- a/xo-object2/src/object2/object2_register_facets.cpp +++ b/xo-object2/src/object2/object2_register_facets.cpp @@ -67,7 +67,7 @@ namespace xo { log && log(xtag("DVariantPlaceholder.tseq", typeseq::id())); log && log(xtag("DList.tseq", typeseq::id())); - log && log(xtag("DBoolean.tseq", typeseq::id())); + log && log(xtag("DBoolean.tseq", typeseq::id())); log && log(xtag("DFloat.tseq", typeseq::id())); log && log(xtag("DInteger.tseq", typeseq::id())); log && log(xtag("DString.tseq", typeseq::id())); diff --git a/xo-reader2/example/readerreplxx/readerreplxx.cpp b/xo-reader2/example/readerreplxx/readerreplxx.cpp index 5d74dc06..341893cf 100644 --- a/xo-reader2/example/readerreplxx/readerreplxx.cpp +++ b/xo-reader2/example/readerreplxx/readerreplxx.cpp @@ -110,6 +110,8 @@ namespace { pps.prettyn(expr_pr); + p_reader->reset_result(); + *p_input = remaining; return true; diff --git a/xo-reader2/include/xo/reader2/SchematikaReader.hpp b/xo-reader2/include/xo/reader2/SchematikaReader.hpp index 540c19bc..fd26a4ec 100644 --- a/xo-reader2/include/xo/reader2/SchematikaReader.hpp +++ b/xo-reader2/include/xo/reader2/SchematikaReader.hpp @@ -56,6 +56,9 @@ namespace xo { /** consume input @p input_cstr **/ const ReaderResult & read_expr(span_type input_span, bool eof); + /** reset @ref result_ to nominal value **/ + void reset_result(); + /** reset to known starting point after encountering an error. * - remainder of stashed current line. * Necesary for well-formatted error reporting. diff --git a/xo-reader2/src/reader2/DExprSeqState.cpp b/xo-reader2/src/reader2/DExprSeqState.cpp index c6e53ba2..1d7aea93 100644 --- a/xo-reader2/src/reader2/DExprSeqState.cpp +++ b/xo-reader2/src/reader2/DExprSeqState.cpp @@ -11,6 +11,8 @@ #include #include #include +#include +#include #include namespace xo { @@ -221,6 +223,26 @@ namespace xo { DExprSeqState::on_bool_token(const Token & tk, ParserStateMachine * p_psm) { + switch (seqtype_) { + case exprseqtype::toplevel_interactive: + { + auto dvalue = DBoolean::box(p_psm->expr_alloc(), + tk.bool_value()); + auto * dconst = DConstant::make(p_psm->expr_alloc(), dvalue); + auto expr = with_facet::mkobj(dconst); + + DProgressSsm::start(p_psm->parser_alloc(), + expr, + p_psm); + return; + } + case exprseqtype::toplevel_batch: + break; + case exprseqtype::N: + assert(false); // unreachable + break; + } + p_psm->illegal_input_on_token("DExprSeqState::on_bool_token", tk, this->get_expect_str()); diff --git a/xo-reader2/src/reader2/SchematikaReader.cpp b/xo-reader2/src/reader2/SchematikaReader.cpp index 8aa85bf8..4dd8600c 100644 --- a/xo-reader2/src/reader2/SchematikaReader.cpp +++ b/xo-reader2/src/reader2/SchematikaReader.cpp @@ -142,6 +142,12 @@ namespace xo { return this->result_; } + void + SchematikaReader::reset_result() + { + this->parser_.reset_result(); + } + void SchematikaReader::reset_to_idle_toplevel() {