private void ParseFunctionParameterList(ScriptFunction func) { Modifiers modifiers; bool atEndOfParameterList = false; while ((!atEndOfParameterList) && (!_source.NextIsKeyword(PredefinedSymbol.CloseParenthesis))) { modifiers = new Modifiers(); while (_source.PeekNextToken() is ModifierToken) { modifiers.Add((ModifierToken)_source.ReadNextToken()); } if (_source.NextIsKeyword(PredefinedSymbol.VariableArguments)) { func.VariableArguments = true; _source.ExpectKeyword(PredefinedSymbol.CloseParenthesis, "Variable arguments must be the last parameter"); break; } Token parameterType = _source.ReadNextAsVariableType(); Token parameterName = null; _source.IgnoreAsteriskIfPresent(); CompilerUtils.VerifyModifiersAgainstType(ModifierTargets.FunctionParameter, modifiers); VerifyParameterTypeValidForFunction(parameterType); if (!_source.PeekNextToken().Defined) { parameterName = _source.ReadNextTokenAndThrowIfAlreadyDefined(); } else { func.IsPrototypeOnly = true; } FunctionParameter parameter = new FunctionParameter(parameterType, parameterName); parameter.Modifiers = modifiers; if (_source.NextIsKeyword(PredefinedSymbol.SetEqual)) { parameter.DefaultValue = _source.ReadNextAsConstInt(); } if (_source.NextIsKeyword(PredefinedSymbol.CloseParenthesis)) { atEndOfParameterList = true; } else { _source.ExpectKeyword(PredefinedSymbol.Comma); } func.Parameters.Add(parameter); } }
public static void SetArrayPropertiesOnTokenFromStream(ScriptReader source, Token variableName) { if (source.NextIsKeyword(PredefinedSymbol.OpenSquareBracket)) { variableName.IsArray = true; if (source.NextIsKeyword(PredefinedSymbol.CloseSquareBracket)) { variableName.ArraySize = Token.ARRAY_SIZE_DYNAMIC; } else { variableName.ArraySize = source.ReadNextAsConstInt(); source.ExpectKeyword(PredefinedSymbol.CloseSquareBracket); } } }