summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/runbacktrace.cc
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/asymptote/runbacktrace.cc')
-rw-r--r--Build/source/utils/asymptote/runbacktrace.cc119
1 files changed, 119 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/runbacktrace.cc b/Build/source/utils/asymptote/runbacktrace.cc
new file mode 100644
index 00000000000..1c25be74800
--- /dev/null
+++ b/Build/source/utils/asymptote/runbacktrace.cc
@@ -0,0 +1,119 @@
+/***** Autogenerated from runbacktrace.in; changes will be overwritten *****/
+
+#line 1 "runtimebase.in"
+/*****
+ * runtimebase.in
+ * Andy Hammerlindl 2009/07/28
+ *
+ * Common declarations needed for all code-generating .in files.
+ *
+ *****/
+
+
+#line 1 "runbacktrace.in"
+/*****
+ * backtrace.in
+ * Andy Hammerlindl 2009/07/28
+ *
+ * Runtime functions for printing garbage collector backtraces.
+ *
+ *****/
+
+#line 1 "runtimebase.in"
+#include "stack.h"
+#include "types.h"
+#include "builtin.h"
+#include "entry.h"
+#include "errormsg.h"
+#include "array.h"
+#include "triple.h"
+#include "callable.h"
+
+using vm::stack;
+using vm::error;
+using vm::array;
+using vm::callable;
+using types::formal;
+using types::function;
+using camp::triple;
+
+#define PRIMITIVE(name,Name,asyName) using types::prim##Name;
+#include <primitives.h>
+#undef PRIMITIVE
+
+typedef double real;
+
+void unused(void *);
+
+namespace run {
+array *copyArray(array *a);
+array *copyArray2(array *a);
+array *copyArray3(array *a);
+
+double *copyArrayC(const array *a, size_t dim=0);
+double *copyArray2C(const array *a, bool square=true, size_t dim2=0);
+
+triple *copyTripleArrayC(const array *a, size_t dim=0);
+triple *copyTripleArray2C(const array *a, bool square=true, size_t dim2=0);
+double *copyTripleArray2Components(array *a, bool square=true, size_t dim2=0);
+}
+
+function *realRealFunction();
+
+// Return the component of vector v perpendicular to a unit vector u.
+inline triple perp(triple v, triple u)
+{
+ return v-dot(v,u)*u;
+}
+
+#define CURRENTPEN processData().currentpen
+
+#line 11 "runbacktrace.in"
+// No extra code for .cc file.
+
+// Autogenerated routines:
+
+
+
+namespace run {
+#line 16 "runbacktrace.in"
+// void generate_random_backtrace();
+void gen_runbacktrace0(stack *)
+{
+#line 17 "runbacktrace.in"
+#if defined(USEGC) && defined(GC_DEBUG) && defined(GC_BACKTRACE)
+ GC_generate_random_backtrace();
+#else
+ error("generate_random_backtrace() requires ./configure --enable-gc-debug");
+#endif
+}
+
+#line 25 "runbacktrace.in"
+// void print_random_addresses(Int n=1);
+void gen_runbacktrace1(stack *Stack)
+{
+ Int n=vm::pop<Int>(Stack,1);
+#line 26 "runbacktrace.in"
+#if defined(USEGC) && defined(GC_DEBUG) && defined(GC_BACKTRACE)
+ GC_gcollect();
+ for (Int i=0; i < n; ++i)
+ GC_debug_print_heap_obj_proc(GC_base(GC_generate_random_valid_address()));
+#else
+ error("print_random_addresses() requires ./configure --enable-gc-debug");
+ unused(&n); // Avoid unused variable warning message.
+#endif
+}
+
+} // namespace run
+
+namespace trans {
+
+void gen_runbacktrace_venv(venv &ve)
+{
+#line 16 "runbacktrace.in"
+ addFunc(ve, run::gen_runbacktrace0, primVoid(), "generate_random_backtrace");
+#line 25 "runbacktrace.in"
+ addFunc(ve, run::gen_runbacktrace1, primVoid(), "print_random_addresses", formal(primInt(), "n", true, false));
+}
+
+} // namespace trans