From 3b57a1f142b461bb58bbcbb20ef1a7458999334e Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Mon, 19 Aug 2024 17:34:20 -0400 Subject: [PATCH] xo-reader: wip: add environment-frame stack to psm [not used] --- include/xo/reader/parserstatemachine.hpp | 12 +++++++++++- src/reader/parser.cpp | 3 ++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/include/xo/reader/parserstatemachine.hpp b/include/xo/reader/parserstatemachine.hpp index c7ca130c..e39021f3 100644 --- a/include/xo/reader/parserstatemachine.hpp +++ b/include/xo/reader/parserstatemachine.hpp @@ -6,6 +6,7 @@ #pragma once #include "exprstate.hpp" +#include "envframestack.hpp" namespace xo { namespace scm { @@ -22,15 +23,24 @@ namespace xo { public: parserstatemachine(exprstatestack * p_stack, + envframestack * p_env_stack, rp * p_emit_expr) - : p_stack_{p_stack}, p_emit_expr_{p_emit_expr} {} + : p_stack_{p_stack}, + p_env_stack_{p_env_stack}, + p_emit_expr_{p_emit_expr} {} std::unique_ptr pop_exprstate(); exprstate & top_exprstate(); void push_exprstate(std::unique_ptr x); public: + /** stack of incomplete parser work. + * generally speaking, push when to start new work for nested content; + * pop when work complete + **/ exprstatestack * p_stack_; + /** stack of environment frames, one for each enclosing lambda **/ + envframestack * p_env_stack_; rp * p_emit_expr_; }; } /*namespace scm*/ diff --git a/src/reader/parser.cpp b/src/reader/parser.cpp index 9301f1df..e71deb40 100644 --- a/src/reader/parser.cpp +++ b/src/reader/parser.cpp @@ -33,6 +33,7 @@ namespace xo { parser::begin_translation_unit() { /* note: not using emit expr here */ parserstatemachine psm(&xs_stack_, + &env_stack_, nullptr /*p_emit_expr*/); exprseq_xs::start(&psm); @@ -55,7 +56,7 @@ namespace xo { rp retval; - parserstatemachine psm(&xs_stack_, &retval); + parserstatemachine psm(&xs_stack_, &env_stack_, &retval); xs_stack_.top_exprstate().on_input(tk, &psm);