summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/callable.cc
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
committerKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
commitad547a6b5986815fda458221149728d9d9ab1d87 (patch)
tree16296910eb3eca724371474ea9aea3994dc69614 /Build/source/utils/asymptote/callable.cc
parent947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (diff)
restore Build,TODO from r57911
git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/callable.cc')
-rw-r--r--Build/source/utils/asymptote/callable.cc75
1 files changed, 75 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/callable.cc b/Build/source/utils/asymptote/callable.cc
new file mode 100644
index 00000000000..581c3af2c1c
--- /dev/null
+++ b/Build/source/utils/asymptote/callable.cc
@@ -0,0 +1,75 @@
+/*****
+ * callable.cc
+ * Tom Prince 2005/06/19
+ *
+ * Runtime representation of functions.
+ *****/
+
+#include "stack.h"
+#include "callable.h"
+
+namespace vm {
+
+callable::~callable()
+{}
+
+void func::call(stack *s)
+{
+ s->run(this);
+}
+
+void nullfunc::print(ostream& out) {
+ out << "nullfunc";
+}
+
+bool func::compare(callable* F)
+{
+ if (func* f=dynamic_cast<func*>(F))
+ return (body == f->body) && (closure == f->closure);
+ else return false;
+}
+
+void func::print(ostream& out) {
+ out << "func with lambda";
+#ifdef DEBUG_FRAME
+ out << " " << body->name;
+#endif
+}
+
+bool bfunc::compare(callable* F)
+{
+ if (bfunc* f=dynamic_cast<bfunc*>(F))
+ return (func == f->func);
+ else return false;
+}
+
+void bfunc::print(ostream& out) {
+ out << "bltin";
+#ifdef DEBUG_BLTIN
+ out << " " << lookupBltin(func);
+#endif
+}
+
+void thunk::call(stack *s)
+{
+ s->push(arg);
+ func->call(s);
+}
+
+void thunk::print(ostream& out) {
+ out << "thunk on " << arg << " with ";
+ func->print(out);
+}
+
+nullfunc nullfunc::func;
+void nullfunc::call(stack *)
+{
+ error("dereference of null function");
+}
+
+bool nullfunc::compare(callable* f)
+{
+ return f == &func;
+}
+
+} // namespace vm