public Descriptor compile(SymbolTable table){
    	int size;
    	if(node instanceof IdentNode){
    		size = ((IntConstDescriptor)table.descriptorFor(((IdentNode)node).getIdentName())).value();
    	}else if(node instanceof ContentNode){
    		size = ((IntConstDescriptor)table.descriptorFor((((IdentNode)((ContentNode)node).getSubject()).getIdentName()))).value();
    	}else{
    		size = ((IntNode)node).getVal();
    	}
    	
    	Descriptor descr = null;
    	if (type instanceof ArrayTypeNode || type instanceof RecordTypeNode) {
    	    descr = type.compile(table);
    	} else if (type instanceof IdentNode) {
    	    String identName = ((IdentNode)type).getIdentName();
    	    descr = table.descriptorFor(identName);
    	    
    	    if (descr == null) {
    	        throw new CompilerException("unknown type: " + identName);
    	    }
    	} else {
            throw new CompilerException("unsupported type: " + type);
    	}
    	
    	return new ArrayDescriptor(size, descr);
    }