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); }
private bool TryReadVariableDeclaration(CodeScope scope, List <Definition> newDefList) { var dataType = DataType.TryParse(new DataType.ParseArgs { Code = _code, DataTypeCallback = GlobalDataTypeCallback, VariableCallback = GlobalVariableCallback }); if (dataType == null) { return(false); } var gotVars = false; while (!_code.EndOfFile) { if (!_code.ReadWord()) { break; } var varName = _code.Text; var localPos = _source.GetFilePosition(_code.TokenStartPostion); var arrayLength = TryReadArrayDecl(); var def = new VariableDefinition(varName, localPos, dataType, false, arrayLength, VariableType.Local); scope.AddDefinition(def); if (!_visible || localPos.PrimaryFile) { newDefList.Add(def); } gotVars = true; if (_code.ReadExact(',')) { continue; } if (_code.ReadExact(';')) { break; } break; } return(gotVars); }