private void CheckPointerUse(Statement stat, Variable v, NonNullState nn, string purpose) { if (v == null) return; if(nn.IsNull(v)) { HandleError(stat, v, Error.UseOfNullPointer, purpose); nn.AssignNonNull(v); } else if(!nn.IsNonNull(v)) { HandleError(stat, v, Error.UseOfPossiblyNullPointer, purpose); nn.AssumeNonNull(v); } }
private void CheckReceiver(Statement stat, Variable v, NonNullState nn, Node node) { Node offendingNode = v; if (v == null) return; if (v.Type.IsValueType) return; // Create a better source context for receiver null errors. offendingNode = new Statement(NodeType.Nop); offendingNode.SourceContext = v.SourceContext; // offendingNode.SourceContext.StartPos = offendingNode.SourceContext.EndPos; // offendingNode.SourceContext.EndPos++; if(nn.IsNull(v)) { HandleError(stat, offendingNode, Error.ReceiverCannotBeNull, this.ts.GetTypeName(v.Type)); nn.AssignNonNull(v); } else if(!nn.IsNonNull(v)) { HandleError(stat, offendingNode, Error.ReceiverMightBeNull, this.ts.GetTypeName(v.Type)); nn.AssumeNonNull(v); } }