@Override
	public void decode(Decoder decoder, SleighLanguage sleigh) throws DecoderException {
//		int el = decoder.openElement(ELEM_VARLIST_SYM);
		patval = (PatternValue) PatternExpression.decodeExpression(decoder, sleigh);
		ArrayList<VarnodeSymbol> varnodes = new ArrayList<>();
		SymbolTable symtab = sleigh.getSymbolTable();
		while (decoder.peekElement() != 0) {
			int subel = decoder.openElement();
			if (subel == ELEM_VAR.id()) {
				int id = (int) decoder.readUnsignedInteger(ATTRIB_ID);
				varnodes.add((VarnodeSymbol) symtab.findSymbol(id));
			}
			else {
				varnodes.add(null);
			}
			decoder.closeElement(subel);
		}
		varnode_table = new VarnodeSymbol[varnodes.size()];

		for (int i = 0; i < varnode_table.length; ++i) {
			varnode_table[i] = varnodes.get(i);
		}
		checkTableFill();
		decoder.closeElement(ELEM_VARLIST_SYM.id());
	}
A ValueSymbol where the semantic context is obtained by looking
up the value in a table of VarnodeSymbols
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/symbol/VarnodeListSymbol.java