private bool TryReadFunctionArgument(CodeScope scope, bool createDefinitions, List <ArgumentDescriptor> args, List <Definition> newDefList) { var dataType = DataType.TryParse(new DataType.ParseArgs { Code = _code, DataTypeCallback = GlobalDataTypeCallback, VariableCallback = GlobalVariableCallback }); if (dataType == null) { return(false); } PassByMethod passByMethod = PassByMethod.Value; if (_code.ReadExact("&")) // Optional reference { if (_code.ReadExact("+")) // Optional &+ { passByMethod = PassByMethod.ReferencePlus; } else { passByMethod = PassByMethod.Reference; } } string name = null; if (_code.ReadWord()) { name = _code.Text; } args.Add(new ArgumentDescriptor(name, dataType, passByMethod)); if (name != null && createDefinitions) // Optional var name { var arrayLength = TryReadArrayDecl(); var localPos = _source.GetFilePosition(_code.TokenStartPostion); var def = new VariableDefinition(_code.Text, localPos, dataType, true, arrayLength, VariableType.Argument); scope.AddDefinition(def); if (!_visible || localPos.PrimaryFile) { newDefList.Add(def); } } return(true); }
public static ArgumentDescriptor ParseFromDb(string str) { string name = null; PassByMethod passByMethod = PassByMethod.Value; DataType dataType = null; var code = new CodeParser(str); if (code.ReadExactWholeWord("name")) { if (!code.ReadWord()) { Log.Debug("Unable to parse argument name from: {0}", str); return(null); } name = code.Text; } if (code.ReadExactWholeWord("ref")) { passByMethod = PassByMethod.Reference; } else if (code.ReadExactWholeWord("refp")) { passByMethod = PassByMethod.ReferencePlus; } if (code.ReadExactWholeWord("dt")) { dataType = DataType.TryParse(new DataType.ParseArgs { Code = code }); if (dataType == null) { Log.Debug("Unable to parse data type from: {0}", str); } } return(new ArgumentDescriptor(name, dataType, passByMethod)); }
public ArgumentDescriptor(string name, DataType dataType) { _name = name; _dataType = dataType; _passByMethod = DkTools.CodeModel.PassByMethod.Value; }
public ArgumentDescriptor(string name, DataType dataType, PassByMethod passByMethod) { _name = name; _dataType = dataType; _passByMethod = passByMethod; }