/* this function dumps registers using ANSI colour codes */ static void dump_oneline(struct dcpu_vcpu *vcpu, const struct dcpu_vcpu_state *old, FILE *out) { char hex_buf[1024]; char asm_buf[1024]; dcpu_generate_hex(hex_buf, sizeof(hex_buf), dcpu_vcpu_current_op(vcpu)); dcpu_generate_asm(asm_buf, sizeof(asm_buf), dcpu_vcpu_current_op(vcpu)); // macro to colourize a register #define Dr(reg) \ /* colour first */ \ (!old) ? CLR(N,WHITE) : \ (vcpu->st.reg < old->reg) ? CLR(B,RED) : \ (vcpu->st.reg > old->reg) ? CLR(B,GREEN) : \ CLR(N,WHITE), \ /* then the register value */ \ vcpu->st.reg // another macro to colourize PC and IA, when they match #define Ddup(reg, reg2) \ /* colour first */ \ (vcpu->st.reg2 && vcpu->st.reg == vcpu->st.reg2) \ ? CLR(B,YELLOW) : \ (!old) ? CLR(N,WHITE) : \ (vcpu->st.reg < old->reg) ? CLR(B,RED) : \ (vcpu->st.reg > old->reg) ? CLR(B,GREEN) : \ CLR(N,WHITE), \ /* then the register value */ \ vcpu->st.reg fprintf(out, DUMP_FMT, (dcpu_word)vcpu->st.cycles, old ? vcpu->st.cycles - old->cycles : 0, Dr(gr.a), Dr(gr.b), Dr(gr.c), Dr(gr.x), Dr(gr.y), Dr(gr.z), Dr(gr.i), Dr(gr.j), Ddup(sr.pc, sr.ia), Dr(sr.sp), Dr(sr.ex), Ddup(sr.ia, sr.pc), vcpu->st.skipping ? "sk" : " ", hex_buf, asm_buf); }
void RpalParser::Da() { pushProc("Da()"); Dr(); int n = 1; while (_nt == "and") { read_token(_nt); Dr(); n++; } if (n > 1) { build("and", n); } popProc("Da()"); }
void RpalParser::Ew() { pushProc("Ew()"); T(); if (_nt == "where") { read_token("where"); Dr(); build("where", 2); } popProc("Ew()"); }