private ParameterEntry CreateParameterEntry(ParameterDescriptionEntry parameter, Compiler.CodeModel.SymbolTable table) { var generated = new ParameterEntry(parameter, table); if (parameter.DataConditions != null) { foreach (var child in parameter.DataConditions) { generated.Add(new DataCondition(child)); } } return(generated); }
/// <summary> /// Get the String representation of an parameter with a Sharing Mode. /// Rule: TCCODEGEN_FUNCALL_PARAMS /// </summary> /// <param name="parameter">The Parameter</param> /// <param name="table">The Symbol table</param> /// <param name="mode">Argument mode Input, InOut, Output, etc...</param> /// <param name="previousSharingMode">The previous Sharing Mode</param> /// <param name="previousSpan">The previous marging span</param> /// <returns>The String representation of the Sharing Mode paramaters</returns> private string ToString(TypeCobol.Compiler.CodeElements.CallSiteParameter parameter, Compiler.CodeModel.SymbolTable table, ArgMode mode, ref TypeCobol.Compiler.CodeElements.ParameterSharingMode previousSharingMode, ref int previousSpan) { Variable variable = parameter.StorageAreaOrValue; var name = variable.ToString(true); string share_mode = ""; int defaultSpan = string.Intern("by reference ").Length; if (parameter.SharingMode.Token != null) { if (previousSharingMode != parameter.SharingMode.Value) { share_mode = "by " + parameter.SharingMode.Token.Text; share_mode += new string(' ', defaultSpan - share_mode.Length); previousSharingMode = parameter.SharingMode.Value; } } else { if (mode == ArgMode.InOut || mode == ArgMode.Output) { if (previousSharingMode != TypeCobol.Compiler.CodeElements.ParameterSharingMode.ByReference) { share_mode = string.Intern("by reference "); previousSharingMode = TypeCobol.Compiler.CodeElements.ParameterSharingMode.ByReference; } } } if (share_mode.Length == 0) { share_mode = new string(' ', previousSpan == 0 ? defaultSpan : previousSpan); } else { previousSpan = share_mode.Length; } if (variable.IsLiteral) { return(share_mode + name); } var found = table.GetVariable(variable); if (found.Count < 1) //this can happens for special register : LENGTH OF, ADDRESS OF { return(share_mode + variable.ToCobol85()); } // if (found.Count > 1) return "?AMBIGUOUS?"; var data = found[0] as Compiler.Nodes.DataDescription; if (data.DataType == DataType.Boolean) { name += "-value"; } return(share_mode + name); }
/// <summary> /// Get the String representation of an parameter with a Sharing Mode. /// Rule: TCCODEGEN_FUNCALL_PARAMS /// </summary> /// <param name="parameter">The Parameter</param> /// <param name="table">The Symbol table</param> /// <param name="mode">Argument mode Input, InOut, Output, etc...</param> /// <param name="previousSharingMode">The previous Sharing Mode</param> /// <param name="previousSpan">The previous marging span</param> /// <returns>The String representation of the Sharing Mode paramaters</returns> private string ToString(TypeCobol.Compiler.CodeElements.CallSiteParameter parameter, Compiler.CodeModel.SymbolTable table, ArgMode mode, ref TypeCobol.Compiler.CodeElements.ParameterSharingMode previousSharingMode, ref int previousSpan) { Variable variable = parameter.StorageAreaOrValue; bool bTypeBool = false; if (variable != null) {//We must detect a boolean variable if (!variable.IsLiteral) { var found = table.GetVariables(variable); if (found.Count() >= 1) { var data = found.First() as DataDescription; bTypeBool = (data != null && data.DataType == DataType.Boolean); } } } var name = parameter.IsOmitted ? "omitted" : variable.ToString(true, bTypeBool); string share_mode = ""; int defaultSpan = string.Intern("by reference ").Length; if (parameter.SharingMode.Token != null) { if (previousSharingMode != parameter.SharingMode.Value) { share_mode = "by " + parameter.SharingMode.Token.Text; share_mode += new string(' ', defaultSpan - share_mode.Length); previousSharingMode = parameter.SharingMode.Value; } } else { if (mode == ArgMode.InOut || mode == ArgMode.Output) { if (previousSharingMode != TypeCobol.Compiler.CodeElements.ParameterSharingMode.ByReference) { share_mode = string.Intern("by reference "); previousSharingMode = TypeCobol.Compiler.CodeElements.ParameterSharingMode.ByReference; } } } if (share_mode.Length == 0) { share_mode = new string(' ', previousSpan == 0 ? defaultSpan : previousSpan); } else { previousSpan = share_mode.Length; } if (variable != null) { if (variable.IsLiteral) { return(share_mode + name); } var found = table.GetVariables(variable); if (found.Count() < 1) //this can happens for special register : LENGTH OF, ADDRESS OF { return(share_mode + variable.ToCobol85()); } } return(share_mode + name); }