public boolean propagateSize(ConstructTpl ct) {
		// Fill in size for varnodes
		// with size 0
		// Return first OpTpl with a size 0 varnode
		// that cannot be filled in or NULL otherwise
		entry("propagateSize", ct);
		VectorSTL<OpTpl> zerovec = new VectorSTL<OpTpl>(), zerovec2 = new VectorSTL<OpTpl>();
		IteratorSTL<OpTpl> iter;
		int lastsize;

		for (iter = ct.getOpvec().begin(); !iter.isEnd(); iter.increment()) {
			if (iter.get().isZeroSize()) {
				fillinZero(iter.get(), ct.getOpvec());
				if (iter.get().isZeroSize()) {
					zerovec.push_back(iter.get());
				}
			}
		}
		lastsize = zerovec.size() + 1;
		while (zerovec.size() < lastsize) {
			lastsize = zerovec.size();
			zerovec2 = new VectorSTL<OpTpl>();
			for (iter = zerovec.begin(); !iter.isEnd(); iter.increment()) {
				fillinZero(iter.get(), ct.getOpvec());
				if (iter.get().isZeroSize()) {
					zerovec2.push_back(iter.get());
				}
			}
			zerovec = zerovec2;
		}
		if (lastsize != 0) {
			return false;
		}
		return true;
	}
Handle a sleigh 'macro' invocation, returning the resulting p-code op templates (OpTpl)

@param location is the file/line where the macro is invoked
@param sym MacroSymbol is the macro symbol
@param param is the parsed list of operand expressions
@return a list of p-code op templates
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java