diff options
author | Karl Berry <karl@freefriends.org> | 2021-02-25 19:22:25 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-02-25 19:22:25 +0000 |
commit | ad547a6b5986815fda458221149728d9d9ab1d87 (patch) | |
tree | 16296910eb3eca724371474ea9aea3994dc69614 /Build/source/utils/asymptote/callable.cc | |
parent | 947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (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.cc | 75 |
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 |