public override void CheckBodySemantics(TigerScope scope, Report report) { //Check children IdNode.CheckSemantics(scope, report); FieldDeclarationNodes.ToList().ForEach(f => f.CheckSemantics(scope, report)); var usedNames = new List <string>(); foreach (var f in FieldDeclarationNodes) { if (usedNames.Contains(f.IdNode.Name)) { report.AddError(SemanticErrors.DuplicateFieldDeclaration(f, IdNode.Name, f.IdNode.Name)); } usedNames.Add(f.IdNode.Name); } //If type was not added to scope (if CheckSemantics failed) return if (!IsOK || FieldDeclarationNodes.Any(f => !f.IsOK)) { IsOK = false; return; } RecordTigerType = scope.FindType(IdNode.Name) as RecordType; IsOK = true; }