From bd60b45ae94368f2a18a762cdd5428d7f8dfc965 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Fri, 23 Jan 2026 15:11:36 -0500 Subject: [PATCH] xo-reader2: + f64 toplevel constant in interactive session --- example/readerreplxx/readerreplxx.cpp | 2 +- src/reader2/DExprSeqState.cpp | 30 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/example/readerreplxx/readerreplxx.cpp b/example/readerreplxx/readerreplxx.cpp index 28598292..5d74dc06 100644 --- a/example/readerreplxx/readerreplxx.cpp +++ b/example/readerreplxx/readerreplxx.cpp @@ -173,7 +173,7 @@ main() // accepting defaults too ReaderConfig rdr_config; { - //rdr_config.reader_debug_flag_ = true; + rdr_config.reader_debug_flag_ = true; //rdr_config.parser_debug_flag_ = true; //rdr_config.tk_debug_flag_ = true; } diff --git a/src/reader2/DExprSeqState.cpp b/src/reader2/DExprSeqState.cpp index 33a68c15..65ec004c 100644 --- a/src/reader2/DExprSeqState.cpp +++ b/src/reader2/DExprSeqState.cpp @@ -6,8 +6,18 @@ #include "DExprSeqState.hpp" #include "DDefineSsm.hpp" #include "ssm/ISyntaxStateMachine_DExprSeqState.hpp" +#include +#include +#include +#include +#include +#include namespace xo { + using xo::scm::DProgressSsm; + using xo::scm::DConstant; + using xo::scm::DFloat; + using xo::mm::AGCObject; using xo::mm::AAllocator; using xo::facet::with_facet; using xo::reflect::typeseq; @@ -182,6 +192,26 @@ namespace xo { DExprSeqState::on_f64_token(const Token & tk, ParserStateMachine * p_psm) { + switch (seqtype_) { + case exprseqtype::toplevel_interactive: + { + auto f64o = DFloat::box(p_psm->expr_alloc(), + tk.f64_value()); + auto * dconst = DConstant::make(p_psm->expr_alloc(), f64o); + 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_f64_token", tk, this->get_expect_str());