private void force_size(VarnodeTpl vt, ConstTpl size, VectorSTL<OpTpl> ops)

	{
//        entry("force_size", vt, size, ops);
		if ((vt.getSize().getType() != ConstTpl.const_type.real) || (vt.getSize().getReal() != 0)) {
			return; // Size already exists
		}

		vt.setSize(size);
		if (!vt.isLocalTemp()) {
			return;
		}
		// If the variable is a local temporary
		// The size may need to be propagated to the various
		// uses of the variable
		OpTpl op;
		VarnodeTpl vn;

		for (int i = 0; i < ops.size(); ++i) {
			op = ops.get(i);
			vn = op.getOut();
			if ((vn != null) && (vn.isLocalTemp())) {
				if (vn.getOffset().equals(vt.getOffset())) {
					if ((size.getType() == ConstTpl.const_type.real) &&
						(vn.getSize().getType() == ConstTpl.const_type.real) &&
						(vn.getSize().getReal() != 0) &&
						(vn.getSize().getReal() != size.getReal())) {
						throw new SleighError(String.format("Localtemp size mismatch: %d vs %d",
							vn.getSize().getReal(), size.getReal()), op.location);
					}
					vn.setSize(size);
				}
			}
			for (int j = 0; j < op.numInput(); ++j) {
				vn = op.getIn(j);
				if (vn.isLocalTemp() && (vn.getOffset().equals(vt.getOffset()))) {
					if ((size.getType() == ConstTpl.const_type.real) &&
						(vn.getSize().getType() == ConstTpl.const_type.real) &&
						(vn.getSize().getReal() != 0) &&
						(vn.getSize().getReal() != size.getReal())) {
						throw new SleighError(String.format("Input size mismatch: %d vs %d",
							vn.getSize().getReal(), size.getReal()), op.location);
					}
					vn.setSize(size);
				}
			}
		}
	}
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