From 8a58a282da521c8efaeb99e86fd697fd02111a70 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (l)" <j.wuttke@fz-juelich.de>
Date: Wed, 14 Oct 2015 20:29:32 +0200
Subject: [PATCH] new node SessionNK

---
 pub/lib/node.cpp     | 14 ++++++++++----
 pub/lib/xax_lex.lpp  |  7 +++++++
 pub/lib/xax_yacc.ypp |  2 +-
 3 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/pub/lib/node.cpp b/pub/lib/node.cpp
index da8ac38c..968962fa 100644
--- a/pub/lib/node.cpp
+++ b/pub/lib/node.cpp
@@ -738,6 +738,16 @@ const RObj CNodeIdxK::tree_val( const CContext& ctx ) const
 }
 
 
+//**************************************************************************************************
+//* CNodeSession: session-wide workspace information
+//**************************************************************************************************
+
+const RObj CNodeSessionNK::tree_val( const CContext& ctx ) const
+{
+    return RObjInt( new CObjInt( NOlm::mem_size() ) );
+}
+
+
 //**************************************************************************************************
 //* CNodeIva: indexed variable node
 //**************************************************************************************************
@@ -760,10 +770,6 @@ const RObj CNodeIva::tree_val( const CContext& ctx ) const
     if ( !(var->pointwise() || var->slicewise() || var->filewise()) && ref->tk )
         throw "reference "+var->var_info()+" does not admit an index";
 
-    // sessionwide references
-    if  ( var->categ == VCateg::NK )
-        return RObjInt( new CObjInt( NOlm::mem_size() ) );
-
     // Get k from context:
     int k = ref->get_k( ctx );
 
diff --git a/pub/lib/xax_lex.lpp b/pub/lib/xax_lex.lpp
index 9083f2fb..b55b4011 100644
--- a/pub/lib/xax_lex.lpp
+++ b/pub/lib/xax_lex.lpp
@@ -52,6 +52,9 @@ struct xaxtype {
 RNode node_I( new CNodeIdxI() );
 RNode node_J( new CNodeIdxJ() );
 RNode node_K( new CNodeIdxK() );
+
+RNode node_NK( new CNodeSessionNK() );
+
 RNode node_E( new CNodeVal( M_E ) );
 RNode node_PI( new CNodeVal( M_PI ) );
 RNode node_INF( new CNodeVal( INFINITY ) );
@@ -96,6 +99,10 @@ i {
         xaxlval->t = node_I;
         return VAL; }
 
+nk {
+        xaxlval->t = node_NK;
+        return VAL; }
+
 [xy]|dy|n[ijk]|([zpr]{DIG}+)|outcome|chi2|R2 {
         xaxlval->v = PVar( new CVar(xaxtext) );
         return REF; }
diff --git a/pub/lib/xax_yacc.ypp b/pub/lib/xax_yacc.ypp
index 3ff9e325..44607090 100644
--- a/pub/lib/xax_yacc.ypp
+++ b/pub/lib/xax_yacc.ypp
@@ -74,7 +74,7 @@ int xaxlex(YYSTYPE *xaxlval); // created by lex.l
 %left BOP_PM  /* error */
 
 /* other tokens created by xax_lex.lpp: */
-%token VAL REF DUMMY CEV FNCT GENI CVIN END CONV PCONV DIRAC IDF
+%token VAL REF0 REF DUMMY CEV FNCT GENI CVIN END CONV PCONV DIRAC IDF
 
 /* Grammar follows */
 
-- 
GitLab