Exemplo n.º 1
0
 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;
        }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
 public virtual bool Visit(CallTarget callTarget)
 {
     return(true);
 }