static INode *SetUpArguments(KonohaContext *kctx, FuelIRBuilder *builder, kMethod *mtd) { kParam *params = kMethod_GetParam(mtd); unsigned i; INode *Arg; INode *Val; INode *Arg0 = NULL; if(mtd->typeId != TYPE_void) { Arg = CreateArgument(builder, 0); Val = CreateLocal(builder, mtd->typeId); CreateUpdate(builder, Val, Arg); INode_setType(Arg, mtd->typeId); IField_setHash((IField *) Val, 0); Arg0 = Val; } for(i = 0; i < params->psize; ++i) { enum TypeId type = ConvertToTypeId(kctx, params->paramtypeItems[i].attrTypeId); Arg = CreateArgument(builder, i+1); Val = CreateLocal(builder, type); CreateUpdate(builder, Val, Arg); INode_setType(Arg, type); IField_setHash((IField *) Val, i+1); } return Arg0; }
OVS_ARGUMENT* CreateArgument_Alloc(OVS_ARGTYPE argType, const VOID* buffer) { UINT expectedSize = 0; VOID* newBuffer = NULL; OVS_ARGUMENT* pArg = NULL; if (!GetArgumentExpectedSize(argType, &expectedSize)) { return NULL; } if (expectedSize == MAXUINT) { return NULL; } if (expectedSize) { newBuffer = KZAlloc(expectedSize); if (!newBuffer) { return NULL; } RtlCopyMemory(newBuffer, buffer, expectedSize); } pArg = CreateArgument(argType, newBuffer); if (pArg) { pArg->isNested = FALSE; pArg->freeData = TRUE; } return pArg; }