static RegionPtr cwCopyPlane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, int w, int h, int dstx, int dsty, unsigned long plane) { int odstx, odsty; RegionPtr exposed = NULL; SETUP_BACKING_DST(pDst, pGC); SETUP_BACKING_SRC(pSrc, pGC); PROLOGUE(pGC); odstx = dstx; odsty = dsty; CW_OFFSET_XY_DST(dstx, dsty); CW_OFFSET_XY_SRC(srcx, srcy); exposed = (*pBackingGC->ops->CopyPlane)(pBackingSrc, pBackingDst, pBackingGC, srcx, srcy, w, h, dstx, dsty, plane); if (exposed != NULL) REGION_TRANSLATE(pDst->pScreen, exposed, odstx - dstx, odsty - dsty); EPILOGUE(pGC); return exposed; }
static void cwPolyFillArc(DrawablePtr pDst, GCPtr pGC, int narcs, xArc *parcs) { SETUP_BACKING_DST(pDst, pGC); PROLOGUE(pGC); CW_OFFSET_RECTS(parcs, narcs); (*pBackingGC->ops->PolyFillArc)(pBackingDst, pBackingGC, narcs, parcs); EPILOGUE(pGC); }
static void cwPolyFillRect(DrawablePtr pDst, GCPtr pGC, int nrects, xRectangle *pRects) { SETUP_BACKING_DST(pDst, pGC); PROLOGUE(pGC); CW_OFFSET_RECTS(pRects, nrects); (*pBackingGC->ops->PolyFillRect)(pBackingDst, pBackingGC, nrects, pRects); EPILOGUE(pGC); }
static void cwPolySegment(DrawablePtr pDst, GCPtr pGC, int nseg, xSegment *pSegs) { SETUP_BACKING_DST(pDst, pGC); PROLOGUE(pGC); CW_OFFSET_XYPOINTS(pSegs, nseg * 2); (*pBackingGC->ops->PolySegment)(pBackingDst, pBackingGC, nseg, pSegs); EPILOGUE(pGC); }
static void cwImageText8(DrawablePtr pDst, GCPtr pGC, int x, int y, int count, char *chars) { SETUP_BACKING_DST(pDst, pGC); PROLOGUE(pGC); CW_OFFSET_XY_DST(x, y); (*pBackingGC->ops->ImageText8)(pBackingDst, pBackingGC, x, y, count, chars); EPILOGUE(pGC); }
static void cwPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst, int w, int h, int x, int y) { SETUP_BACKING_DST(pDst, pGC); PROLOGUE(pGC); CW_OFFSET_XY_DST(x, y); (*pBackingGC->ops->PushPixels)(pBackingGC, pBitMap, pBackingDst, w, h, x, y); EPILOGUE(pGC); }
static void cwPolyGlyphBlt(DrawablePtr pDst, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase) { SETUP_BACKING_DST(pDst, pGC); PROLOGUE(pGC); CW_OFFSET_XY_DST(x, y); (*pBackingGC->ops->PolyGlyphBlt)(pBackingDst, pBackingGC, x, y, nglyph, ppci, pglyphBase); EPILOGUE(pGC); }
static void cwPutImage(DrawablePtr pDst, GCPtr pGC, int depth, int x, int y, int w, int h, int leftPad, int format, char *pBits) { SETUP_BACKING_DST(pDst, pGC); PROLOGUE(pGC); CW_OFFSET_XY_DST(x, y); (*pBackingGC->ops->PutImage)(pBackingDst, pBackingGC, depth, x, y, w, h, leftPad, format, pBits); EPILOGUE(pGC); }
static void cwSetSpans(DrawablePtr pDst, GCPtr pGC, char *psrc, DDXPointPtr ppt, int *pwidth, int nspans, int fSorted) { SETUP_BACKING_DST(pDst, pGC); PROLOGUE(pGC); CW_OFFSET_XYPOINTS(ppt, nspans); (*pBackingGC->ops->SetSpans)(pBackingDst, pBackingGC, psrc, ppt, pwidth, nspans, fSorted); EPILOGUE(pGC); }
static void cwPolylines(DrawablePtr pDst, GCPtr pGC, int mode, int npt, DDXPointPtr ppt) { SETUP_BACKING_DST(pDst, pGC); PROLOGUE(pGC); if (mode == CoordModeOrigin) CW_OFFSET_XYPOINTS(ppt, npt); else CW_OFFSET_XYPOINTS(ppt, 1); (*pBackingGC->ops->Polylines)(pBackingDst, pBackingGC, mode, npt, ppt); EPILOGUE(pGC); }
static int cwPolyText16(DrawablePtr pDst, GCPtr pGC, int x, int y, int count, unsigned short *chars) { int result; SETUP_BACKING_DST(pDst, pGC); PROLOGUE(pGC); CW_OFFSET_XY_DST(x, y); result = (*pBackingGC->ops->PolyText16)(pBackingDst, pBackingGC, x, y, count, chars); EPILOGUE(pGC); return result; }
void Interpreter::Start() { // initialization method = GetFrame()->GetMethod(); currentBytecodes = method->GetBytecodes(); void* loopTargets[] = { &&LABEL_BC_HALT, &&LABEL_BC_DUP, &&LABEL_BC_PUSH_LOCAL, &&LABEL_BC_PUSH_ARGUMENT, &&LABEL_BC_PUSH_FIELD, &&LABEL_BC_PUSH_BLOCK, &&LABEL_BC_PUSH_CONSTANT, &&LABEL_BC_PUSH_GLOBAL, &&LABEL_BC_POP, &&LABEL_BC_POP_LOCAL, &&LABEL_BC_POP_ARGUMENT, &&LABEL_BC_POP_FIELD, &&LABEL_BC_SEND, &&LABEL_BC_SUPER_SEND, &&LABEL_BC_RETURN_LOCAL, &&LABEL_BC_RETURN_NON_LOCAL, &&LABEL_BC_JUMP_IF_FALSE, &&LABEL_BC_JUMP_IF_TRUE, &&LABEL_BC_JUMP }; goto *loopTargets[currentBytecodes[bytecodeIndexGlobal]]; // // THIS IS THE former interpretation loop LABEL_BC_HALT: PROLOGUE(1); return; // handle the halt bytecode LABEL_BC_DUP: PROLOGUE(1); doDup(); DISPATCH_NOGC(); LABEL_BC_PUSH_LOCAL: PROLOGUE(3); doPushLocal(bytecodeIndexGlobal - 3); DISPATCH_NOGC(); LABEL_BC_PUSH_ARGUMENT: PROLOGUE(3); doPushArgument(bytecodeIndexGlobal - 3); DISPATCH_NOGC(); LABEL_BC_PUSH_FIELD: PROLOGUE(2); doPushField(bytecodeIndexGlobal - 2); DISPATCH_NOGC(); LABEL_BC_PUSH_BLOCK: PROLOGUE(2); doPushBlock(bytecodeIndexGlobal - 2); DISPATCH_GC(); LABEL_BC_PUSH_CONSTANT: PROLOGUE(2); doPushConstant(bytecodeIndexGlobal - 2); DISPATCH_NOGC(); LABEL_BC_PUSH_GLOBAL: PROLOGUE(2); doPushGlobal(bytecodeIndexGlobal - 2); DISPATCH_GC(); LABEL_BC_POP: PROLOGUE(1); doPop(); DISPATCH_NOGC(); LABEL_BC_POP_LOCAL: PROLOGUE(3); doPopLocal(bytecodeIndexGlobal - 3); DISPATCH_NOGC(); LABEL_BC_POP_ARGUMENT: PROLOGUE(3); doPopArgument(bytecodeIndexGlobal - 3); DISPATCH_NOGC(); LABEL_BC_POP_FIELD: PROLOGUE(2); doPopField(bytecodeIndexGlobal - 2); DISPATCH_NOGC(); LABEL_BC_SEND: PROLOGUE(2); doSend(bytecodeIndexGlobal - 2); DISPATCH_GC(); LABEL_BC_SUPER_SEND: PROLOGUE(2); doSuperSend(bytecodeIndexGlobal - 2); DISPATCH_GC(); LABEL_BC_RETURN_LOCAL: PROLOGUE(1); doReturnLocal(); DISPATCH_NOGC(); LABEL_BC_RETURN_NON_LOCAL: PROLOGUE(1); doReturnNonLocal(); DISPATCH_NOGC(); LABEL_BC_JUMP_IF_FALSE: PROLOGUE(5); doJumpIfFalse(bytecodeIndexGlobal - 5); DISPATCH_NOGC(); LABEL_BC_JUMP_IF_TRUE: PROLOGUE(5); doJumpIfTrue(bytecodeIndexGlobal - 5); DISPATCH_NOGC(); LABEL_BC_JUMP: PROLOGUE(5); doJump(bytecodeIndexGlobal - 5); DISPATCH_NOGC(); } VMFrame* Interpreter::PushNewFrame(VMMethod* method) { SetFrame(GetUniverse()->NewFrame(GetFrame(), method)); return GetFrame(); }