diff options
Diffstat (limited to 'Build/source/utils/asymptote/runbacktrace.cc')
-rw-r--r-- | Build/source/utils/asymptote/runbacktrace.cc | 119 |
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 |