summaryrefslogtreecommitdiff
path: root/intellect-framework-from-internet/starts/meaning-vm/level-2-wip-stmtexprs/statementref.cpp
diff options
context:
space:
mode:
authorolpc user <olpc@xo-5d-f7-86.localdomain>2020-01-10 18:05:43 -0800
committerolpc user <olpc@xo-5d-f7-86.localdomain>2020-01-10 18:05:43 -0800
commit3223a360d0e70f75497aecf8c033a4f987335b5b (patch)
treec34e5ed5d7aa83513447644b4774c0449336657f /intellect-framework-from-internet/starts/meaning-vm/level-2-wip-stmtexprs/statementref.cpp
parent26c980d302adce8e3d802cb8db8ab1c69d58ce1a (diff)
downloadstandingwithresilience-3223a360d0e70f75497aecf8c033a4f987335b5b.tar.gz
standingwithresilience-3223a360d0e70f75497aecf8c033a4f987335b5b.zip
I'm confused and am handling multiple unexpected systems issues
Diffstat (limited to 'intellect-framework-from-internet/starts/meaning-vm/level-2-wip-stmtexprs/statementref.cpp')
-rw-r--r--intellect-framework-from-internet/starts/meaning-vm/level-2-wip-stmtexprs/statementref.cpp68
1 files changed, 0 insertions, 68 deletions
diff --git a/intellect-framework-from-internet/starts/meaning-vm/level-2-wip-stmtexprs/statementref.cpp b/intellect-framework-from-internet/starts/meaning-vm/level-2-wip-stmtexprs/statementref.cpp
deleted file mode 100644
index 2f23dc8..0000000
--- a/intellect-framework-from-internet/starts/meaning-vm/level-2-wip-stmtexprs/statementref.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-#include "statementref.hpp"
-
-#include "concepts.hpp"
-#include "ref.hpp"
-
-using namespace intellect;
-using namespace level2;
-using namespace concepts;
-
-// so, anonymous-assignment is both a statement and an expression.
-// multiple-member-assignment is only an expression: it is an error to evaluate it
-// the submember operator will be both a statement and an expression, but doesn't need to be held as a ref
-// single-member-assignment is mostly a statement: using it as an expression should be an error.
-
-static statementref makebinary(
- ref lhs, ref kind, ref rhs,
- std::function<ref(ref)> expraction,
- std::function<void(ref)> stmtaction
-)
-{
- a(statement-expresion, kind-expression);
- ref r = a(kind-expression);
- r.set(left-operand, lhs);
- r.set(right-operand, rhs);
- r.vset(expression-action, expraction);
- r.vset(statement-action, stmtaction);
- return r;
-}
-
-statementref::statementref(ref r)
-: r(r.ptr())
-{
- if (!r.isa(statement-expression)) {
- throw std::logic_error("that is not a statement expression");
- }
-}
-
-static void de(ref & r)
-{
- ref lhs, rhs, expraction, stmtaction;
-
- try { lhs = r.get(left-operand); } catch(level0::no_such_link_type&) {}
- try { rhs = r.get(right-operand); } catch(level0::no_such_link_type&) {}
-
- expraction = r.get(expression-action);
- stmtaction = r.get(statement-action);
- dealloc(r);
- if (lhs != nothing) { dealloc(lhs); }
- if (rhs != nothing) { dealloc(rhs); }
- dealloc(expraction);
- dealloc(stmtaction);
- r = 0;
-}
-
-statementref::~statementref()
-{
- if (r == 0) { return; }
- r.vget<std::function<void(ref)>>(statement-action)(r);
- de(r);
-}
-
-statementref::operator ref()
-{
- if (r == 0) { throw std::logic_error("doubly evaluated expression"); }
- auto ret = r.vget<std::function<void(ref)>>(expression-action)(r);
- de(r);
- return ret;
-}