// Very simple printf. Only for debugging prints. // Do not add to this without checking with Rob. static void go_vprintf(const char *s, va_list va) { const char *p, *lp; Slice sl; runtime_printlock(); lp = p = s; for(; *p; p++) { if(*p != '%') continue; if(p > lp) { // Use memcpy to avoid const-cast warning. memcpy(&sl.__values, &lp, sizeof(char*)); sl.__count = p - lp; sl.__capacity = p - lp; gwrite(sl); } p++; switch(*p) { case 'a': runtime_printslice(va_arg(va, Slice)); break; case 'c': runtime_printbyte(va_arg(va, int32)); break; case 'd': runtime_printint(va_arg(va, int32)); break; case 'D': runtime_printint(va_arg(va, int64)); break; case 'e': runtime_printeface(va_arg(va, Eface)); break; case 'f': runtime_printfloat(va_arg(va, float64)); break; case 'C': runtime_printcomplex(va_arg(va, complex double)); break; case 'i': runtime_printiface(va_arg(va, Iface)); break; case 'p': runtime_printpointer(va_arg(va, void*)); break; case 's': runtime_prints(va_arg(va, char*)); break; case 'S': runtime_printstring(va_arg(va, String)); break; case 't': runtime_printbool(va_arg(va, int)); break; case 'U': runtime_printuint(va_arg(va, uint64)); break; case 'x': runtime_printhex(va_arg(va, uint32)); break; case 'X': runtime_printhex(va_arg(va, uint64)); break; } lp = p+1; } if(p > lp) { // Use memcpy to avoid const-cast warning. memcpy(&sl.__values, &lp, sizeof(char*)); sl.__count = p - lp; sl.__capacity = p - lp; gwrite(sl); } runtime_printunlock(); }
// Very simple printf. Only for debugging prints. // Do not add to this without checking with Rob. static void go_vprintf(const char *s, va_list va) { const char *p, *lp; //runtime_lock(&debuglock); lp = p = s; for(; *p; p++) { if(*p != '%') continue; if(p > lp) gwrite(lp, p-lp); p++; switch(*p) { case 'a': runtime_printslice(va_arg(va, Slice)); break; case 'c': runtime_printbyte(va_arg(va, int32)); break; case 'd': runtime_printint(va_arg(va, int32)); break; case 'D': runtime_printint(va_arg(va, int64)); break; case 'e': runtime_printeface(va_arg(va, Eface)); break; case 'f': runtime_printfloat(va_arg(va, float64)); break; case 'C': runtime_printcomplex(va_arg(va, complex double)); break; case 'i': runtime_printiface(va_arg(va, Iface)); break; case 'p': runtime_printpointer(va_arg(va, void*)); break; case 's': runtime_prints(va_arg(va, char*)); break; case 'S': runtime_printstring(va_arg(va, String)); break; case 't': runtime_printbool(va_arg(va, int)); break; case 'U': runtime_printuint(va_arg(va, uint64)); break; case 'x': runtime_printhex(va_arg(va, uint32)); break; case 'X': runtime_printhex(va_arg(va, uint64)); break; } lp = p+1; } if(p > lp) gwrite(lp, p-lp); //runtime_unlock(&debuglock); }