summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/callable.cc
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-05-16 00:19:13 +0000
committerKarl Berry <karl@freefriends.org>2009-05-16 00:19:13 +0000
commitbab45528d65eaafe68a705dbb2a57075c7b7cbd8 (patch)
tree10b4ae2b5195c8dede153ab89359ec00f55f325f /Build/source/utils/asymptote/callable.cc
parent8643d90372e9c31e0f461c15c596b60a545bd7d3 (diff)
asymptote 1.72 sources (not integrated into build yet)
git-svn-id: svn://tug.org/texlive/trunk@13110 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/callable.cc')
-rw-r--r--Build/source/utils/asymptote/callable.cc52
1 files changed, 52 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..ba3fe33152c
--- /dev/null
+++ b/Build/source/utils/asymptote/callable.cc
@@ -0,0 +1,52 @@
+/*****
+ * 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);
+}
+
+bool func::compare(callable* F)
+{
+ if (func* f=dynamic_cast<func*>(F))
+ return (body == f->body) && (closure == f->closure);
+ else return false;
+}
+
+bool bfunc::compare(callable* F)
+{
+ if (bfunc* f=dynamic_cast<bfunc*>(F))
+ return (func == f->func);
+ else return false;
+}
+
+void thunk::call(stack *s)
+{
+ s->push(arg);
+ func->call(s);
+}
+
+nullfunc nullfunc::func;
+void nullfunc::call(stack *)
+{
+ error("dereference of null function");
+}
+
+bool nullfunc::compare(callable* f)
+{
+ return f == &func;
+}
+
+} // namespace vm