////////////////////
 // PROCEDURE CALL //
 ////////////////////
 public override void EnterTcCallStatement(CodeElementsParser.TcCallStatementContext context)
 {
     var name = CobolWordsBuilder.CreateFunctionNameReference(context.functionNameReference());
     var inputs = new List<CallSiteParameter>();
     SyntaxProperty<ParameterSharingMode> mode = null;
     foreach(var p in context.callInputParameter()) {
     CreateSharingMode(p, ref mode); // TCRFUN_INPUT_BY
     inputs.Add(new CallSiteParameter {
             SharingMode = mode,
             StorageAreaOrValue = CobolExpressionsBuilder.CreateSharedVariableOrFileName(p.sharedVariableOrFileName()),
         });
     }
     var inouts = new List<CallSiteParameter>();
     foreach(var p in context.callInoutParameter()) {
     inouts.Add(new CallSiteParameter { // TCRFUN_CALL_INOUT_AND_OUTPUT_BY_REFERENCE
             SharingMode = new SyntaxProperty<ParameterSharingMode>(ParameterSharingMode.ByReference, null),
             StorageAreaOrValue = new Variable(CobolExpressionsBuilder.CreateSharedStorageArea(p.sharedStorageArea1())),
         });
     }
     var outputs = new List<CallSiteParameter>();
     foreach(var p in context.callOutputParameter()) {
     outputs.Add(new CallSiteParameter { // TCRFUN_CALL_INOUT_AND_OUTPUT_BY_REFERENCE
             SharingMode = new SyntaxProperty<ParameterSharingMode>(ParameterSharingMode.ByReference, null),
             StorageAreaOrValue = new Variable(CobolExpressionsBuilder.CreateSharedStorageArea(p.sharedStorageArea1())),
         });
     }
     Context = context;
     CodeElement = new ProcedureStyleCallStatement(new ProcedureCall(name, inputs,inouts,outputs));
 }
 internal FunctionCall CreateUserDefinedFunctionCall(CodeElementsParser.UserDefinedFunctionCallContext context)
 {
     var name = CobolWordsBuilder.CreateFunctionNameReference(context.functionNameReference());
     return new UserDefinedFunctionCall(name, CreateArguments(context.argument()));
 }