/***** Autogenerated from runsystem.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 "./runsystem.in" /***** * runsystem.in * * Runtime functions for system operations. * *****/ #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" #include "opsymbols.h" using vm::stack; using vm::error; using vm::array; using vm::read; using vm::callable; using types::formal; using types::function; using camp::triple; #define PRIMITIVE(name,Name,asyName) using types::prim##Name; #include #undef PRIMITIVE void unused(void *); namespace run { typedef double real; array *copyArray(array *a); array *copyArray2(array *a); array *copyArray3(array *a); double *copyTripleArray2Components(array *a, size_t &N, GCPlacement placement=NoGC); triple *copyTripleArray2C(array *a, size_t &N, GCPlacement placement=NoGC); } function *realRealFunction(); #define CURRENTPEN processData().currentpen #line 12 "runsystem.in" #include "asyprocess.h" #include "stack.h" #include "locate.h" using namespace camp; using namespace settings; using vm::bpinfo; using vm::bplist; using vm::getPos; using vm::Default; using vm::nullfunc; using vm::item; using absyntax::runnable; typedef callable callableBp; namespace run { extern string emptystring; } function *voidFunction() { return new function(primVoid()); } function *breakpointFunction() { return new function(primString(),primString(),primInt(),primInt(), primCode()); } void clear(string file, Int line, bool warn=false) { bpinfo bp(file,line); for(mem::list::iterator p=bplist.begin(); p != bplist.end(); ++p) { if(*p == bp) { cout << "cleared breakpoint at " << file << ": " << line << endl; bplist.remove(bp); return; } } if(warn) cout << "No such breakpoint at " << file << ": " << line << endl; } namespace run { void breakpoint(stack *Stack, runnable *r) { callable *atBreakpointFunction=processData().atBreakpointFunction; if(atBreakpointFunction && !nullfunc::instance()->compare(atBreakpointFunction)) { position curPos=getPos(); Stack->push(curPos.filename()); Stack->push((Int) curPos.Line()); Stack->push((Int) curPos.Column()); Stack->push(r ? r : vm::Default); atBreakpointFunction->call(Stack); // returns a string } else Stack->push(""); } } string convertname(string name, const string& format) { if(name.empty()) return buildname(outname(),format,""); name=outpath(name); return format.empty() ? name : format+":"+name; } namespace run { void purge(Int divisor=0) { #ifdef USEGC if(divisor > 0) GC_set_free_space_divisor((GC_word) divisor); GC_gcollect(); #endif } void updateFunction(stack *Stack) { callable *atUpdateFunction=processData().atUpdateFunction; if(atUpdateFunction && !nullfunc::instance()->compare(atUpdateFunction)) atUpdateFunction->call(Stack); } void exitFunction(stack *Stack) { callable *atExitFunction=processData().atExitFunction; if(atExitFunction && !nullfunc::instance()->compare(atExitFunction)) atExitFunction->call(Stack); } } // Autogenerated routines: #ifndef NOSYM #include "runsystem.symbols.h" #endif namespace run { #line 107 "./runsystem.in" // string outname(); void gen_runsystem0(stack *Stack) { #line 108 "./runsystem.in" {Stack->push(outname()); return;} } #line 112 "./runsystem.in" // void atupdate(callable *f); void gen_runsystem1(stack *Stack) { callable * f=vm::pop(Stack); #line 113 "./runsystem.in" processData().atUpdateFunction=f; } #line 117 "./runsystem.in" // callable* atupdate(); void gen_runsystem2(stack *Stack) { #line 118 "./runsystem.in" {Stack->push(processData().atUpdateFunction); return;} } #line 122 "./runsystem.in" // void atexit(callable *f); void gen_runsystem3(stack *Stack) { callable * f=vm::pop(Stack); #line 123 "./runsystem.in" processData().atExitFunction=f; } #line 127 "./runsystem.in" // callable* atexit(); void gen_runsystem4(stack *Stack) { #line 128 "./runsystem.in" {Stack->push(processData().atExitFunction); return;} } #line 132 "./runsystem.in" // void atbreakpoint(callableBp *f); void gen_runsystem5(stack *Stack) { callableBp * f=vm::pop(Stack); #line 133 "./runsystem.in" processData().atBreakpointFunction=f; } #line 137 "./runsystem.in" // void breakpoint(runnable *s=NULL); void gen_runsystem6(stack *Stack) { runnable * s=vm::pop(Stack,NULL); #line 138 "./runsystem.in" breakpoint(Stack,s); } #line 142 "./runsystem.in" // string locatefile(string file, bool full=true); void gen_runsystem7(stack *Stack) { bool full=vm::pop(Stack,true); string file=vm::pop(Stack); #line 143 "./runsystem.in" {Stack->push(locateFile(file,full)); return;} } #line 147 "./runsystem.in" // void stop(string file, Int line, runnable *s=NULL); void gen_runsystem8(stack *Stack) { runnable * s=vm::pop(Stack,NULL); Int line=vm::pop(Stack); string file=vm::pop(Stack); #line 148 "./runsystem.in" file=locateFile(file); clear(file,line); cout << "setting breakpoint at " << file << ": " << line << endl; bplist.push_back(bpinfo(file,line,s)); } #line 155 "./runsystem.in" // void breakpoints(); void gen_runsystem9(stack *) { #line 156 "./runsystem.in" for(mem::list::iterator p=bplist.begin(); p != bplist.end(); ++p) cout << p->f.name() << ": " << p->f.line() << endl; } #line 161 "./runsystem.in" // void clear(string file, Int line); void gen_runsystem10(stack *Stack) { Int line=vm::pop(Stack); string file=vm::pop(Stack); #line 162 "./runsystem.in" file=locateFile(file); clear(file,line,true); } #line 167 "./runsystem.in" // void clear(); void gen_runsystem11(stack *) { #line 168 "./runsystem.in" bplist.clear(); } #line 172 "./runsystem.in" // void warn(string s); void gen_runsystem12(stack *Stack) { string s=vm::pop(Stack); #line 173 "./runsystem.in" Warn(s); } #line 177 "./runsystem.in" // void nowarn(string s); void gen_runsystem13(stack *Stack) { string s=vm::pop(Stack); #line 178 "./runsystem.in" noWarn(s); } #line 182 "./runsystem.in" // void warning(string s, string t, bool position=false); void gen_runsystem14(stack *Stack) { bool position=vm::pop(Stack,false); string t=vm::pop(Stack); string s=vm::pop(Stack); #line 183 "./runsystem.in" if(settings::warn(s)) { em.warning(position ? getPos() : nullPos,s); em << t; em.sync(true); } } // Strip directory from string #line 192 "./runsystem.in" // string stripdirectory(string *s); void gen_runsystem15(stack *Stack) { string * s=vm::pop(Stack); #line 193 "./runsystem.in" {Stack->push(stripDir(*s)); return;} } // Strip directory from string #line 198 "./runsystem.in" // string stripfile(string *s); void gen_runsystem16(stack *Stack) { string * s=vm::pop(Stack); #line 199 "./runsystem.in" {Stack->push(stripFile(*s)); return;} } // Strip file extension from string #line 204 "./runsystem.in" // string stripextension(string *s); void gen_runsystem17(stack *Stack) { string * s=vm::pop(Stack); #line 205 "./runsystem.in" {Stack->push(stripExt(*s)); return;} } // Call ImageMagick convert. #line 210 "./runsystem.in" // Int convert(string args=emptystring, string file=emptystring, string format=emptystring); void gen_runsystem18(stack *Stack) { string format=vm::pop(Stack,emptystring); string file=vm::pop(Stack,emptystring); string args=vm::pop(Stack,emptystring); #line 212 "./runsystem.in" string name=convertname(file,format); mem::vector cmd; string s=getSetting("convert"); cmd.push_back(s); push_split(cmd,args); cmd.push_back(name); bool quiet=verbose <= 1; char *oldPath=NULL; string dir=stripFile(outname()); if(!dir.empty()) { oldPath=getPath(); setPath(dir.c_str()); } Int ret=System(cmd,quiet ? 1 : 0,true,"convert", "your ImageMagick convert utility"); if(oldPath != NULL) setPath(oldPath); if(ret == 0 && verbose > 0) cout << "Wrote " << (file.empty() ? name : file) << endl; {Stack->push(ret); return;} } // Call ImageMagick animate. #line 239 "./runsystem.in" // Int animate(string args=emptystring, string file=emptystring, string format=emptystring); void gen_runsystem19(stack *Stack) { string format=vm::pop(Stack,emptystring); string file=vm::pop(Stack,emptystring); string args=vm::pop(Stack,emptystring); #line 241 "./runsystem.in" string name=convertname(file,format); if(view()) { mem::vector cmd; string s=getSetting("animate"); cmd.push_back(s); if(s == "magick") cmd.push_back("animate"); push_split(cmd,args); cmd.push_back(name); {Stack->push(System(cmd,0,false,"animate","your animated GIF viewer")); return;} } {Stack->push(0); return;} } #line 256 "./runsystem.in" // void purge(Int divisor=0); void gen_runsystem20(stack *Stack) { Int divisor=vm::pop(Stack,0); #line 257 "./runsystem.in" purge(divisor); } } // namespace run namespace trans { void gen_runsystem_venv(venv &ve) { #line 107 "./runsystem.in" addFunc(ve, run::gen_runsystem0, primString(), SYM(outname)); #line 112 "./runsystem.in" addFunc(ve, run::gen_runsystem1, primVoid(), SYM(atupdate), formal(voidFunction(), SYM(f), false, false)); #line 117 "./runsystem.in" addFunc(ve, run::gen_runsystem2, voidFunction(), SYM(atupdate)); #line 122 "./runsystem.in" addFunc(ve, run::gen_runsystem3, primVoid(), SYM(atexit), formal(voidFunction(), SYM(f), false, false)); #line 127 "./runsystem.in" addFunc(ve, run::gen_runsystem4, voidFunction(), SYM(atexit)); #line 132 "./runsystem.in" addFunc(ve, run::gen_runsystem5, primVoid(), SYM(atbreakpoint), formal(breakpointFunction(), SYM(f), false, false)); #line 137 "./runsystem.in" addFunc(ve, run::gen_runsystem6, primVoid(), SYM(breakpoint), formal(primCode(), SYM(s), true, false)); #line 142 "./runsystem.in" addFunc(ve, run::gen_runsystem7, primString(), SYM(locatefile), formal(primString(), SYM(file), false, false), formal(primBoolean(), SYM(full), true, false)); #line 147 "./runsystem.in" addFunc(ve, run::gen_runsystem8, primVoid(), SYM(stop), formal(primString(), SYM(file), false, false), formal(primInt(), SYM(line), false, false), formal(primCode(), SYM(s), true, false)); #line 155 "./runsystem.in" addFunc(ve, run::gen_runsystem9, primVoid(), SYM(breakpoints)); #line 161 "./runsystem.in" addFunc(ve, run::gen_runsystem10, primVoid(), SYM(clear), formal(primString(), SYM(file), false, false), formal(primInt(), SYM(line), false, false)); #line 167 "./runsystem.in" addFunc(ve, run::gen_runsystem11, primVoid(), SYM(clear)); #line 172 "./runsystem.in" addFunc(ve, run::gen_runsystem12, primVoid(), SYM(warn), formal(primString(), SYM(s), false, false)); #line 177 "./runsystem.in" addFunc(ve, run::gen_runsystem13, primVoid(), SYM(nowarn), formal(primString(), SYM(s), false, false)); #line 182 "./runsystem.in" addFunc(ve, run::gen_runsystem14, primVoid(), SYM(warning), formal(primString(), SYM(s), false, false), formal(primString(), SYM(t), false, false), formal(primBoolean(), SYM(position), true, false)); #line 191 "./runsystem.in" addFunc(ve, run::gen_runsystem15, primString(), SYM(stripdirectory), formal(primString(), SYM(s), false, false)); #line 197 "./runsystem.in" addFunc(ve, run::gen_runsystem16, primString(), SYM(stripfile), formal(primString(), SYM(s), false, false)); #line 203 "./runsystem.in" addFunc(ve, run::gen_runsystem17, primString(), SYM(stripextension), formal(primString(), SYM(s), false, false)); #line 209 "./runsystem.in" addFunc(ve, run::gen_runsystem18, primInt(), SYM(convert), formal(primString(), SYM(args), true, false), formal(primString(), SYM(file), true, false), formal(primString(), SYM(format), true, false)); #line 238 "./runsystem.in" addFunc(ve, run::gen_runsystem19, primInt(), SYM(animate), formal(primString(), SYM(args), true, false), formal(primString(), SYM(file), true, false), formal(primString(), SYM(format), true, false)); #line 256 "./runsystem.in" addFunc(ve, run::gen_runsystem20, primVoid(), SYM(purge), formal(primInt(), SYM(divisor), true, false)); } } // namespace trans