diff options
author | Karl Berry <karl@freefriends.org> | 2009-05-16 00:19:13 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-05-16 00:19:13 +0000 |
commit | bab45528d65eaafe68a705dbb2a57075c7b7cbd8 (patch) | |
tree | 10b4ae2b5195c8dede153ab89359ec00f55f325f /Build/source/utils/asymptote/callable.cc | |
parent | 8643d90372e9c31e0f461c15c596b60a545bd7d3 (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.cc | 52 |
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 |