summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/program.cc
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-08-15 23:57:48 +0000
committerKarl Berry <karl@freefriends.org>2009-08-15 23:57:48 +0000
commit16d128e5e10d541a78654b86409d5a3539f07708 (patch)
tree66de0af63c3811bb3040c16e9b52c11985f70811 /Build/source/utils/asymptote/program.cc
parentb20f78c549859ec0e8610bdd3ad904245e86b489 (diff)
asymptote 1.83
git-svn-id: svn://tug.org/texlive/trunk@14696 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/program.cc')
-rw-r--r--Build/source/utils/asymptote/program.cc59
1 files changed, 56 insertions, 3 deletions
diff --git a/Build/source/utils/asymptote/program.cc b/Build/source/utils/asymptote/program.cc
index fd7b14bfe0e..4459362e9b5 100644
--- a/Build/source/utils/asymptote/program.cc
+++ b/Build/source/utils/asymptote/program.cc
@@ -6,8 +6,11 @@
*****/
#include <iostream>
+#include "util.h"
+#include "callable.h"
#include "program.h"
+
namespace vm {
static const char* opnames[] = {
@@ -19,6 +22,44 @@ static const char* opnames[] = {
};
static const Int numOps = (Int)(sizeof(opnames)/sizeof(char *));
+#ifdef DEBUG_BLTIN
+mem::map<bltin,string> bltinRegistry;
+
+void registerBltin(bltin b, string s) {
+ bltinRegistry[b] = s;
+}
+string lookupBltin(bltin b) {
+ return bltinRegistry[b];
+}
+#endif
+
+
+ostream& operator<< (ostream& out, const item& i)
+{
+ // TODO: Make a data structure mapping typeids to print functions.
+ if (i.empty())
+ out << "empty";
+ else if (isdefault(i))
+ out << "default";
+ else if (i.type() == typeid(Int))
+ out << "Int, value = " << get<Int>(i);
+ else if (i.type() == typeid(double))
+ out << "real, value = " << get<double>(i);
+ else if (i.type() == typeid(string))
+ out << "string, value = " << get<string>(i);
+ else if (i.type() == typeid(callable))
+ out << *(get<callable *>(i));
+ else if (i.type() == typeid(frame)) {
+ out << "frame";
+#ifdef DEBUG_FRAME
+ out << " " << (get<frame *>(i))->getName();
+#endif
+ }
+ else
+ out << "type " << demangle(i.type().name());
+ return out;
+}
+
void printInst(ostream& out, const program::label& code,
const program::label& base)
{
@@ -44,11 +85,21 @@ void printInst(ostream& out, const program::label& code,
break;
}
+ case inst::constpush:
+ {
+ item c = code->ref;
+ out << " " << c;
+ break;
+ }
+
+#ifdef DEBUG_BLTIN
case inst::builtin:
- {
- out << " " << get<bltin>(*code) << " ";
+ {
+ string s=lookupBltin(get<bltin>(*code));
+ out << " " << (!s.empty() ? s : "<unnamed>") << " ";
break;
}
+#endif
case inst::jmp:
case inst::cjmp:
@@ -62,11 +113,13 @@ void printInst(ostream& out, const program::label& code,
break;
}
+#ifdef DEBUG_FRAME
case inst::makefunc:
{
- out << " " << get<lambda*>(*code) << " ";
+ out << " " << get<lambda*>(*code)->name << " ";
break;
}
+#endif
default: {
/* nothing else to do */