VMFrame *VMFrameStack::AllocFrame(VMScriptFunction *func) { int size = VMFrame::FrameSize(func->NumRegD, func->NumRegF, func->NumRegS, func->NumRegA, func->MaxParam, func->ExtraSpace); VMFrame *frame = Alloc(size); frame->Func = func; frame->NumRegD = func->NumRegD; frame->NumRegF = func->NumRegF; frame->NumRegS = func->NumRegS; frame->NumRegA = func->NumRegA; frame->MaxParam = func->MaxParam; frame->Func = func; frame->InitRegS(); return frame; }
VMFrame *VMFrameStack::AllocFrame(VMScriptFunction *func) { VMFrame *frame = Alloc(func->StackSize); frame->Func = func; frame->NumRegD = func->NumRegD; frame->NumRegF = func->NumRegF; frame->NumRegS = func->NumRegS; frame->NumRegA = func->NumRegA; frame->MaxParam = func->MaxParam; frame->Func = func; frame->InitRegS(); if (func->SpecialInits.Size()) { func->InitExtra(frame->GetExtra()); } return frame; }
VMFrame *VMFrameStack::AllocFrame(int numregd, int numregf, int numregs, int numrega) { assert((unsigned)numregd < 255); assert((unsigned)numregf < 255); assert((unsigned)numregs < 255); assert((unsigned)numrega < 255); // To keep the arguments to this function simpler, it assumes that every // register might be used as a parameter for a single call. int numparam = numregd + numregf + numregs + numrega; int size = VMFrame::FrameSize(numregd, numregf, numregs, numrega, numparam, 0); VMFrame *frame = Alloc(size); frame->NumRegD = numregd; frame->NumRegF = numregf; frame->NumRegS = numregs; frame->NumRegA = numrega; frame->MaxParam = numparam; frame->InitRegS(); return frame; }