public override CodeContext Copy() { var Ret = new CodeCheckerContext(Container, IdData); Ret.RouteData = new CodeCheckerRouteData[RouteData.Length]; RouteData.CopyTo(Ret.RouteData, 0); return(Ret); }
public static CodeContextResult Process(FunctionScope Scope) { Initialize(Scope); var State = Scope.State; var Context = new CodeCheckerContext(Scope); var Ret = Context.Process(); if (Scope.Code.Length > 0) { for (var i = 0; i < Context.IdData.Length; i++) { var Local = Scope.LocalIdentifiers[i] as LocalVariable; if (Local == null) { continue; } var IdData = Context.IdData[i]; if ((IdData.Flags & CodeCheckerIdDataFlags.Used) == 0 && (Local.Flags & IdentifierFlags.ReadOnly) == 0) { State.Messages.Add(MessageId.UnusedId, Local.Name); } else if ((IdData.Flags & CodeCheckerIdDataFlags.Read) == 0 && (IdData.Flags & CodeCheckerIdDataFlags.AddressUsed) == 0 && !Local.PreAssigned) { State.Messages.Add(MessageId.AssignedButNeverUsed, Local.Name); } } } if ((Scope.ReturnLabelCommand.Flags & CommandFlags.Unreachable) == 0) { if (Scope.NeedsReturnVal) { Scope.State.Messages.Add(MessageId.NotAllPathReturn, Scope.Function.Declaration); Ret |= CodeContextResult.Failed; } } Scope.ReturnLabelCommand.Flags &= ~CommandFlags.Unreachable; if (!Finalize(Scope)) { Ret |= CodeContextResult.Failed; } return(Ret); }