class InstructionCallMacro extends Instruction {
    private final String name;

    public InstructionCallMacro(String name) {
        this.name = name;
    }

    @Override
    public void execute(RunEnvironment environment, List<String> errorList) throws Exception {<FILL_FUNCTION_BODY>}

    @Override
    public String toString() {
        return "call macro " + this.name;
    }
}

        InstructionSetContext context = environment.getContext();
        Object functionSet = context.getSymbol(this.name);

        Object result = InstructionSetRunner.execute(context.getExpressRunner(), (InstructionSet)functionSet,
            context.getExpressLoader(), context, errorList, environment.isTrace(), false, false,
            environment.getContext().isSupportDynamicFieldName(), environment.getExecuteTimeOut());
        if (result instanceof OperateData) {
            environment.push((OperateData)result);
        } else {
            environment.push(OperateDataCacheManager.fetchOperateData(result, null));
        }

        environment.programPointAddOne();
    
<methods>public non-sealed void <init>() ,public abstract void execute(com.ql.util.express.RunEnvironment, List<java.lang.String>) throws java.lang.Exception,public java.lang.String getExceptionPrefix() ,public java.lang.Integer getLine() ,public com.ql.util.express.instruction.detail.Instruction setLine(java.lang.Integer) <variables>private java.lang.Integer line