private void ParseExpr_List(IUDMFBlock block, ParserInfo.BlockInfo?info) { UDMFToken tok = scanner.LookAhead(); while (tok.Type == UDMFTokenType.IDENTIFIER) { tok = scanner.Scan(); if (tok.Type != UDMFTokenType.IDENTIFIER) { Errors.Add(new UDMFParseError("Unexpected token '" + tok.Text.ToString().Replace("\n", "") + "' found. Expected " + UDMFToken.TokenTypeToString(UDMFTokenType.IDENTIFIER), 0x1001, tok)); return; } var tokStr = namePool.GetOrCreate(tok.Text); if (info != null && info.Value.Assignments.TryGetValue(namePool.GetOrCreate(tokStr), out var assignment)) { ParseAssignment_Expr(block, assignment); } else { var val = ParseAssignment_Expr(block, null); unknownAssignmentsPooled.Add(tokStr, GetUnknownAssignment(val.Value)); } tok = scanner.LookAhead(); } if (unknownAssignmentsPooled.Count > 0) { block.UnknownAssignments = new Dictionary <string, UDMFUnknownAssignment> (StringComparer.InvariantCultureIgnoreCase); block.UnknownAssignments.EnsureCapacity(unknownAssignmentsPooled.Count); foreach (var kvp in unknownAssignmentsPooled) { block.UnknownAssignments.Add(kvp.Key, kvp.Value); } unknownAssignmentsPooled.Clear(); } }
public void AddBlock(IUDMFBlock block) => Add((T)block);