public override void ExitProcedureDivisionHeader(CodeElementsParser.ProcedureDivisionHeaderContext context) { // Register call parameters (shared storage areas) information at the CodeElement level var procedureDivisionHeader = (ProcedureDivisionHeader)CodeElement; var callTarget = new CallTarget(); int parametersCount = (procedureDivisionHeader.UsingParameters != null ? procedureDivisionHeader.UsingParameters.Count : 0) + (procedureDivisionHeader.ReturningParameter != null ? 1 : 0); callTarget.Parameters = new CallTargetParameter[parametersCount]; int i = 0; if(procedureDivisionHeader.UsingParameters != null && procedureDivisionHeader.UsingParameters.Count > 0) { foreach(var param in procedureDivisionHeader.UsingParameters) { callTarget.Parameters[i] = param; i++; } } if (procedureDivisionHeader.ReturningParameter != null) { callTarget.Parameters[i] = procedureDivisionHeader.ReturningParameter; } procedureDivisionHeader.CallTarget = callTarget; }
public override void ExitFunctionDeclarationHeader(CodeElementsParser.FunctionDeclarationHeaderContext context) { // Register call parameters (shared storage areas) information at the CodeElement level var function = (FunctionDeclarationHeader)CodeElement; var target = new CallTarget() { Name = function.FunctionName }; int parametersCount = function.Profile.InputParameters.Count + function.Profile.InoutParameters.Count + function.Profile.OutputParameters.Count + (function.Profile.ReturningParameter != null ? 1 : 0); target.Parameters = new CallTargetParameter[parametersCount]; int i = 0; foreach (var param in function.Profile.InputParameters) { target.Parameters[i++] = CreateCallTargetParameter(param); } foreach (var param in function.Profile.OutputParameters) { target.Parameters[i++] = CreateCallTargetParameter(param); } foreach (var param in function.Profile.InoutParameters) { target.Parameters[i++] = CreateCallTargetParameter(param); } if (function.Profile.ReturningParameter != null) { target.Parameters[i++] = CreateCallTargetParameter(function.Profile.ReturningParameter); } function.CallTarget = target; Context = context; CodeElement = function; }
public override void ExitEntryStatement(CodeElementsParser.EntryStatementContext context) { // Register call parameters (shared storage areas) information at the CodeElement level var entryStatement = (EntryStatement)CodeElement; var callTarget = new CallTarget() { Name = entryStatement.ProgramEntry }; int parametersCount = entryStatement.InputParameters != null ? entryStatement.InputParameters.Count : 0; callTarget.Parameters = new CallTargetParameter[parametersCount]; int i = 0; if (entryStatement.InputParameters != null && entryStatement.InputParameters.Count > 0) { foreach (var param in entryStatement.InputParameters) { callTarget.Parameters[i] = param; i++; } } entryStatement.CallTarget = callTarget; }
public virtual bool Visit(CallTarget callTarget) { return(true); }