@Override
    protected void verifyArgument() {
    	//When call ArrayValue(ProgramBlock block, ArrayClass arrayCls, Parameterized... allocateDims)
    	if(allocateDims != null){
            for(KernelParam dim : allocateDims){
                int order = IClassUtils.getPrimitiveAClass(dim.getResultType()).getCastOrder();
                if(order > block.getType(int.class).getCastOrder() ||
                   order <= block.getType(boolean.class).getCastOrder()){
                    throw new RuntimeException("the allcate dim number must be byte, char, short or int type!");
                }
            }
        }

    	//When call other constructor
    	final IClass rootComp = arrayCls.getRootComponentClass();
        new EachValue(values){
            @Override
            void process(KernelParam para) {
				if(!IClassUtils.checkAssignable(para.getResultType(), rootComp)) {
					throw new IllegalArgumentException("Type mismatch: cannot convert from " + para.getResultType() + " to " + rootComp + "");
				}
            }
            
        }.process();
    }