From 6b46975642e8c9c88d5a7da078fb7e0709e3bc24 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Thu, 12 Mar 2026 21:08:58 -0500 Subject: [PATCH] xo-reader2 stack: support op<= --- xo-reader2/src/reader2/DApplySsm.cpp | 2 +- xo-reader2/src/reader2/DDefineSsm.cpp | 2 +- xo-reader2/src/reader2/DDeftypeSsm.cpp | 2 +- xo-reader2/src/reader2/DExpectExprSsm.cpp | 2 +- .../src/reader2/DExpectFormalArgSsm.cpp | 2 +- .../src/reader2/DExpectFormalArglistSsm.cpp | 2 +- xo-reader2/src/reader2/DExpectListTypeSsm.cpp | 2 +- xo-reader2/src/reader2/DExpectQArraySsm.cpp | 2 +- xo-reader2/src/reader2/DExpectQListSsm.cpp | 2 +- xo-reader2/src/reader2/DExpectQLiteralSsm.cpp | 2 +- xo-reader2/src/reader2/DExpectSymbolSsm.cpp | 2 +- xo-reader2/src/reader2/DExpectTypeSsm.cpp | 2 +- xo-reader2/src/reader2/DIfElseSsm.cpp | 2 +- xo-reader2/src/reader2/DLambdaSsm.cpp | 2 +- xo-reader2/src/reader2/DParenSsm.cpp | 2 +- xo-reader2/src/reader2/DProgressSsm.cpp | 67 +++---------------- xo-reader2/src/reader2/DQuoteSsm.cpp | 2 +- xo-reader2/src/reader2/DSequenceSsm.cpp | 2 +- xo-reader2/src/reader2/DToplevelSeqSsm.cpp | 2 +- .../include/xo/tokenizer2/tokentype.hpp | 2 +- xo-tokenizer2/src/tokenizer2/Tokenizer.cpp | 2 +- xo-tokenizer2/src/tokenizer2/tokentype.cpp | 2 +- 22 files changed, 29 insertions(+), 80 deletions(-) diff --git a/xo-reader2/src/reader2/DApplySsm.cpp b/xo-reader2/src/reader2/DApplySsm.cpp index cd591c9c..dc263b75 100644 --- a/xo-reader2/src/reader2/DApplySsm.cpp +++ b/xo-reader2/src/reader2/DApplySsm.cpp @@ -158,7 +158,7 @@ namespace xo { case tokentype::tk_rightbrace: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_comma: diff --git a/xo-reader2/src/reader2/DDefineSsm.cpp b/xo-reader2/src/reader2/DDefineSsm.cpp index 2f7f99be..ba7c1a01 100644 --- a/xo-reader2/src/reader2/DDefineSsm.cpp +++ b/xo-reader2/src/reader2/DDefineSsm.cpp @@ -533,7 +533,7 @@ namespace xo { case tokentype::tk_rightbrace: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_comma: diff --git a/xo-reader2/src/reader2/DDeftypeSsm.cpp b/xo-reader2/src/reader2/DDeftypeSsm.cpp index 383f4fee..ca0baf7f 100644 --- a/xo-reader2/src/reader2/DDeftypeSsm.cpp +++ b/xo-reader2/src/reader2/DDeftypeSsm.cpp @@ -138,7 +138,7 @@ namespace xo { case tokentype::tk_rightbrace: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_comma: diff --git a/xo-reader2/src/reader2/DExpectExprSsm.cpp b/xo-reader2/src/reader2/DExpectExprSsm.cpp index f4fabfc9..ae7a0cb6 100644 --- a/xo-reader2/src/reader2/DExpectExprSsm.cpp +++ b/xo-reader2/src/reader2/DExpectExprSsm.cpp @@ -179,7 +179,7 @@ namespace xo { case tokentype::tk_rightbrace: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_comma: diff --git a/xo-reader2/src/reader2/DExpectFormalArgSsm.cpp b/xo-reader2/src/reader2/DExpectFormalArgSsm.cpp index a17d094c..e20a935c 100644 --- a/xo-reader2/src/reader2/DExpectFormalArgSsm.cpp +++ b/xo-reader2/src/reader2/DExpectFormalArgSsm.cpp @@ -122,7 +122,7 @@ namespace xo { case tokentype::tk_rightbrace: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_comma: diff --git a/xo-reader2/src/reader2/DExpectFormalArglistSsm.cpp b/xo-reader2/src/reader2/DExpectFormalArglistSsm.cpp index 9f7da033..65adb978 100644 --- a/xo-reader2/src/reader2/DExpectFormalArglistSsm.cpp +++ b/xo-reader2/src/reader2/DExpectFormalArglistSsm.cpp @@ -153,7 +153,7 @@ namespace xo { case tokentype::tk_rightbrace: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_doublecolon: diff --git a/xo-reader2/src/reader2/DExpectListTypeSsm.cpp b/xo-reader2/src/reader2/DExpectListTypeSsm.cpp index 1f42d171..f99810f3 100644 --- a/xo-reader2/src/reader2/DExpectListTypeSsm.cpp +++ b/xo-reader2/src/reader2/DExpectListTypeSsm.cpp @@ -114,7 +114,7 @@ namespace xo { case tokentype::tk_rightparen: case tokentype::tk_leftbracket: case tokentype::tk_rightbracket: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_comma: diff --git a/xo-reader2/src/reader2/DExpectQArraySsm.cpp b/xo-reader2/src/reader2/DExpectQArraySsm.cpp index aa89862f..aee31dbc 100644 --- a/xo-reader2/src/reader2/DExpectQArraySsm.cpp +++ b/xo-reader2/src/reader2/DExpectQArraySsm.cpp @@ -110,7 +110,7 @@ namespace xo { case tokentype::tk_rightbrace: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_doublecolon: diff --git a/xo-reader2/src/reader2/DExpectQListSsm.cpp b/xo-reader2/src/reader2/DExpectQListSsm.cpp index f3f50b81..731dec1c 100644 --- a/xo-reader2/src/reader2/DExpectQListSsm.cpp +++ b/xo-reader2/src/reader2/DExpectQListSsm.cpp @@ -110,7 +110,7 @@ namespace xo { case tokentype::tk_rightbrace: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_doublecolon: diff --git a/xo-reader2/src/reader2/DExpectQLiteralSsm.cpp b/xo-reader2/src/reader2/DExpectQLiteralSsm.cpp index 4cb26099..73b7efd5 100644 --- a/xo-reader2/src/reader2/DExpectQLiteralSsm.cpp +++ b/xo-reader2/src/reader2/DExpectQLiteralSsm.cpp @@ -128,7 +128,7 @@ namespace xo { case tokentype::tk_rightbrace: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_doublecolon: diff --git a/xo-reader2/src/reader2/DExpectSymbolSsm.cpp b/xo-reader2/src/reader2/DExpectSymbolSsm.cpp index 17cdca06..0437417d 100644 --- a/xo-reader2/src/reader2/DExpectSymbolSsm.cpp +++ b/xo-reader2/src/reader2/DExpectSymbolSsm.cpp @@ -88,7 +88,7 @@ namespace xo { case tokentype::tk_rightbrace: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_comma: diff --git a/xo-reader2/src/reader2/DExpectTypeSsm.cpp b/xo-reader2/src/reader2/DExpectTypeSsm.cpp index 9eb2b15d..cbe73dae 100644 --- a/xo-reader2/src/reader2/DExpectTypeSsm.cpp +++ b/xo-reader2/src/reader2/DExpectTypeSsm.cpp @@ -91,7 +91,7 @@ namespace xo { case tokentype::tk_rightbrace: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_comma: diff --git a/xo-reader2/src/reader2/DIfElseSsm.cpp b/xo-reader2/src/reader2/DIfElseSsm.cpp index b915c061..0a49bf38 100644 --- a/xo-reader2/src/reader2/DIfElseSsm.cpp +++ b/xo-reader2/src/reader2/DIfElseSsm.cpp @@ -173,7 +173,7 @@ namespace xo { case tokentype::tk_rightbrace: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_comma: diff --git a/xo-reader2/src/reader2/DLambdaSsm.cpp b/xo-reader2/src/reader2/DLambdaSsm.cpp index ac19c7e0..8503e4e9 100644 --- a/xo-reader2/src/reader2/DLambdaSsm.cpp +++ b/xo-reader2/src/reader2/DLambdaSsm.cpp @@ -151,7 +151,7 @@ namespace xo { case tokentype::tk_rightbrace: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_comma: diff --git a/xo-reader2/src/reader2/DParenSsm.cpp b/xo-reader2/src/reader2/DParenSsm.cpp index 7bf28d02..3eeb1f5e 100644 --- a/xo-reader2/src/reader2/DParenSsm.cpp +++ b/xo-reader2/src/reader2/DParenSsm.cpp @@ -119,7 +119,7 @@ namespace xo { case tokentype::tk_rightbrace: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_comma: diff --git a/xo-reader2/src/reader2/DProgressSsm.cpp b/xo-reader2/src/reader2/DProgressSsm.cpp index 59317a78..d52a98c0 100644 --- a/xo-reader2/src/reader2/DProgressSsm.cpp +++ b/xo-reader2/src/reader2/DProgressSsm.cpp @@ -134,7 +134,7 @@ namespace xo { return optype::op_not_equal; case tokentype::tk_leftangle: // [<] return optype::op_less; - case tokentype::tk_lessequal: + case tokentype::tk_cmple: // [<=] return optype::op_less_equal; case tokentype::tk_rightangle: return optype::op_great; @@ -291,7 +291,6 @@ namespace xo { case tokentype::tk_rightbracket: case tokentype::tk_leftbrace: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_doublecolon: @@ -306,6 +305,7 @@ namespace xo { case tokentype::tk_cmpeq: case tokentype::tk_cmpne: case tokentype::tk_leftangle: + case tokentype::tk_cmple: this->on_operator_token(tk, p_psm); return; @@ -1163,6 +1163,12 @@ namespace xo { lhs_, rhs_); case optype::op_less_equal: + return assemble_numeric_expr_aux + (p_psm->expr_alloc(), + TypeRef::prefix_type::from_chars("_cmple_gco"), + p_psm->cmple_pm(), + lhs_, rhs_); + case optype::op_great: case optype::op_great_equal: assert(false); @@ -1175,7 +1181,6 @@ namespace xo { p_psm->multiply_pm(), //&NumericPrimitives::s_mul_gco_gco_pm lhs_, rhs_); - break; case optype::op_divide: return assemble_numeric_expr_aux (p_psm->expr_alloc(), @@ -1183,42 +1188,6 @@ namespace xo { p_psm->divide_pm(), // &NumericPrimitives::s_div_gco_gco_pm lhs_, rhs_); -#ifdef OBSOLETE - { - auto pm_obj = (with_facet::mkobj - (&NumericPrimitives::s_div_gco_gco_pm)); - auto fn_expr = (DConstant::make - (p_psm->expr_alloc(), pm_obj)); - - /* note: - * 1. don't assume we know lhs_ / rhs_ value types yet. - * perhaps have expression like - * f(..) * g(..) - * where f is the function that contains current ssm. - * - * 2. consequence: we need representation for - * polymorphic multiply on unknown numeric arguments. - * - * 3. TypeRef::dwim(..) is a placeholder. - * Plan to later provide abstract interpreter - * (ie compiler pass :) to drive type inference/unification - * - * 4. Alternatively could supply type-annotation syntax - * so human can assist inference; context here is we want - * to automate the boring stuff - */ - - TypeRef tref = TypeRef::dwim - (TypeRef::prefix_type::from_chars("_div_gco"), - nullptr); - - return DApplyExpr::make2(p_psm->expr_alloc(), - tref, fn_expr, lhs_, rhs_); - } -#endif - - break; - case optype::op_add: return assemble_numeric_expr_aux (p_psm->expr_alloc(), @@ -1268,26 +1237,6 @@ namespace xo { p_psm->subtract_pm(), lhs_, rhs_); -#ifdef OBSOLETE - { - auto pm_obj = (with_facet::mkobj - (&NumericPrimitives::s_sub_gco_gco_pm)); - auto fn_expr = (DConstant::make - (p_psm->expr_alloc(), pm_obj)); - - // see comment on op_multiply re need for poly impl - - TypeRef tref = TypeRef::dwim - (TypeRef::prefix_type::from_chars("_sub_gco"), - nullptr); - - return DApplyExpr::make2(p_psm->expr_alloc(), - tref, fn_expr, lhs_, rhs_); - } -#endif - - break; - #ifdef NOT_YET case optype::op_assign: { diff --git a/xo-reader2/src/reader2/DQuoteSsm.cpp b/xo-reader2/src/reader2/DQuoteSsm.cpp index c61ed632..2e335064 100644 --- a/xo-reader2/src/reader2/DQuoteSsm.cpp +++ b/xo-reader2/src/reader2/DQuoteSsm.cpp @@ -120,7 +120,7 @@ namespace xo { case tokentype::tk_rightbracket: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_comma: diff --git a/xo-reader2/src/reader2/DSequenceSsm.cpp b/xo-reader2/src/reader2/DSequenceSsm.cpp index b2b237dd..6311a2ae 100644 --- a/xo-reader2/src/reader2/DSequenceSsm.cpp +++ b/xo-reader2/src/reader2/DSequenceSsm.cpp @@ -101,7 +101,7 @@ namespace xo { case tokentype::tk_leftbrace: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_comma: diff --git a/xo-reader2/src/reader2/DToplevelSeqSsm.cpp b/xo-reader2/src/reader2/DToplevelSeqSsm.cpp index 612f64fd..193ea42c 100644 --- a/xo-reader2/src/reader2/DToplevelSeqSsm.cpp +++ b/xo-reader2/src/reader2/DToplevelSeqSsm.cpp @@ -174,7 +174,7 @@ namespace xo { case tokentype::tk_rightbrace: case tokentype::tk_leftangle: case tokentype::tk_rightangle: - case tokentype::tk_lessequal: + case tokentype::tk_cmple: case tokentype::tk_greatequal: case tokentype::tk_dot: case tokentype::tk_comma: diff --git a/xo-tokenizer2/include/xo/tokenizer2/tokentype.hpp b/xo-tokenizer2/include/xo/tokenizer2/tokentype.hpp index 5f7e1937..18857af9 100644 --- a/xo-tokenizer2/include/xo/tokenizer2/tokentype.hpp +++ b/xo-tokenizer2/include/xo/tokenizer2/tokentype.hpp @@ -92,7 +92,7 @@ namespace xo { tk_rightangle, /** less-equal @c '<=' **/ - tk_lessequal, + tk_cmple, /** great-equal @c '>=' **/ tk_greatequal, diff --git a/xo-tokenizer2/src/tokenizer2/Tokenizer.cpp b/xo-tokenizer2/src/tokenizer2/Tokenizer.cpp index 2a6f8ed9..76881e7f 100644 --- a/xo-tokenizer2/src/tokenizer2/Tokenizer.cpp +++ b/xo-tokenizer2/src/tokenizer2/Tokenizer.cpp @@ -486,7 +486,7 @@ namespace xo { log && log("leftangle or lessequal token"); if (*(ix + 1) == '=') { - tk_type = tokentype::tk_lessequal; + tk_type = tokentype::tk_cmple; ++ix; ++ix; } else { diff --git a/xo-tokenizer2/src/tokenizer2/tokentype.cpp b/xo-tokenizer2/src/tokenizer2/tokentype.cpp index b8a013da..e704b38d 100644 --- a/xo-tokenizer2/src/tokenizer2/tokentype.cpp +++ b/xo-tokenizer2/src/tokenizer2/tokentype.cpp @@ -29,7 +29,7 @@ namespace xo { CASE(tk_leftangle); CASE(tk_rightangle); - CASE(tk_lessequal); + CASE(tk_cmple); CASE(tk_greatequal); CASE(tk_dot); CASE(tk_comma);