diff options
author | olpc user <olpc@xo-5d-f7-86.localdomain> | 2020-01-10 14:55:19 -0800 |
---|---|---|
committer | olpc user <olpc@xo-5d-f7-86.localdomain> | 2020-01-10 14:55:19 -0800 |
commit | c8bb547bea279af2bb48c13260f98aa8add07131 (patch) | |
tree | 7f64265d514dc50427d2e5d8a70e09a46927dfbd /intellect-framework-from-internet/starts/meaning-vm/level1.cpp | |
parent | 5601d1f3324c30651ad3f264ac2d6e7f12ea8b34 (diff) | |
download | standingwithresilience-c8bb547bea279af2bb48c13260f98aa8add07131.tar.gz standingwithresilience-c8bb547bea279af2bb48c13260f98aa8add07131.zip |
move intellect-framework-from-internet into folder
Diffstat (limited to 'intellect-framework-from-internet/starts/meaning-vm/level1.cpp')
-rw-r--r-- | intellect-framework-from-internet/starts/meaning-vm/level1.cpp | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/intellect-framework-from-internet/starts/meaning-vm/level1.cpp b/intellect-framework-from-internet/starts/meaning-vm/level1.cpp new file mode 100644 index 0000000..a2046d2 --- /dev/null +++ b/intellect-framework-from-internet/starts/meaning-vm/level1.cpp @@ -0,0 +1,86 @@ +#include "level-1/level-1.hpp" + +#include <iostream> + +using namespace intellect::level1; +using namespace intellect::level1::concepts; + +int main() +{ + std::cout << intellect::level0::allocated() << " allocated" << std::endl; + + ///* + + decls(make, linked, habit); + std::cout << intellect::level0::allocated() << " allocated" << std::endl; + decls(needs, assumes, makes); + decls(not, topic); + decls(A, B, C); + decls(source, type, target); + decls(structure, function, argument, position); + decls(variable, provide); + decls(act); + + (make-linked).link( + is, habit, + needs, a(structure).link( + is, function-argument, + argument-position, ref(1), + a(variable, A), provide, + a(variable, B), provide, + a(variable, C), provide + ) + ); + movetoname(a(link), A-B-C-linked).link( + link-source, A, + link-type, B, + link-target, C + ); + a(not, not-A-B-C-linked).set(topic, A-B-C-linked); + (make-linked).link( + assumes, not-A-B-C-linked, + makes, A-B-C-linked + ); + (make-linked).fset( + act, + (std::function<void(ref)>)[&](ref args) + { + ref source = args[A]; + ref type = args[B]; + ref target = args[C]; + std::cout << "Linking " << source.name() << " by " << type.name() << " to " << target.name() << std::endl; + source.link(type, target); + } + ); + + std::cout << (make-linked).dump("dumped") << std::endl; + + decls(apple, fruit); + (make-linked)[act] + (a(function-argument) + .link( + A, apple, + B, is, + C, fruit + )); + + std::cout << apple.dump("dumped") << std::endl; + + std::cout << intellect::level0::allocated() << " allocated" << std::endl; + while (true) { + try { + intellect::level0::dealloc(intellect::level0::concepts::allocations(), intellect::level0::concepts::level0allocations()); + break; + } catch (intellect::level0::still_referenced_by &e) { + if (e.topic->linked(intellect::level0::concepts::allocates(), e.referrer)) { + intellect::level0::realloc(e.referrer, intellect::level0::concepts::allocations()); + } else { + std::cout << "In deallocation, " << ref(e.topic).name() << " still referenced by " << ref(e.referrer).name() << std::endl; + throw; + } + } + } + std::cout << intellect::level0::allocated() << " allocated" << std::endl; + + return 0; +} |