private void init(KernelParam value, KernelParam pardim, KernelParam... parDims){ this.value = value; this.parDims = new KernelParam[parDims.length]; if(parDims.length != 0){ this.parDims[0] = pardim; System.arraycopy(parDims, 0, this.parDims, 1, parDims.length - 1); lastDim = parDims[parDims.length - 1]; }else{ lastDim = pardim; } storeClass = arrayRef.getResultType(); for(int i=0, length = this.parDims.length + 1; i<length; i++){ storeClass = (storeClass).getNextDimType(); } }
@Override public void body(LocVar e) { context.getHeader().generate(context, this, encoder, type.getNextDimType(), e); encoder.call("append", val(',')); } });
private void loopArray(MethodExecuteContext context, IClass clazz, Object arrayOrElement){ Instructions instructions = context.getInstructions(); if(arrayOrElement.getClass().isArray()){ int len = Array.getLength(arrayOrElement); instructions.push(len); IClass nextDimType = clazz.getNextDimType(); instructions.newArray(nextDimType.getType()); if(len > 0){ instructions.dup(); } for(int i=0; i<len ;i++){ instructions.push(i); loopArray(context, nextDimType, Array.get(arrayOrElement, i)); instructions.arrayStore(clazz.getType()); if(i < len - 1){ instructions.dup(); } } }else{ ((KernelParam) arrayOrElement).push(context); //auto cast each value for array autoCast(context, ((KernelParam)arrayOrElement).getResultType(), clazz, false); } }
protected void getValue(MethodExecuteContext context){ IClass cls = arrayRef.getResultType(); if(LOG.isPrintEnabled()){ LOG.print("load the array reference to stack"); } KernelProgramBlock block = getParent(); arrayRef.push(context); for(int i=0; i<parDims.length; i++){ cls = cls.getNextDimType(); parDims[i].push(context); autoCast(context, parDims[i].getResultType(), block.getType(int.class), false); context.getInstructions().arrayLoad(cls.getType()); } } }
getExecutor(), startLbl); LocalVariable obj = var(elements.getResultType().getNextDimType(), arrayLoad(elements, i) ); body(obj);