430 references to Flags
System.Private.Uri (430)
System\Uri.cs (336)
57
internal
Flags
_flags;
155
_flags |=
Flags
.Debug_LeftConstructor;
163
Debug.Assert(InFact(
Flags
.MinimalUriInfoSet) == (_info is not null));
177
if (InFact(
Flags
.AllUriInfoSet))
189
if (!InFact(
Flags
.HasUnicode))
210
Debug.Assert((_flags &
Flags
.Debug_LeftConstructor) == 0);
261
private void InterlockedSetFlags(
Flags
flags)
268
Debug.Assert(sizeof(
Flags
) == sizeof(ulong));
284
get { return (_flags &
Flags
.ImplicitFile) != 0; }
289
get { return (_flags & (
Flags
.UncPath |
Flags
.DosPath)) != 0; }
294
get { return (_flags &
Flags
.DosPath) != 0; }
299
get { return (_flags &
Flags
.UncPath) != 0; }
304
get { return (_flags &
Flags
.UnixPath) != 0; }
307
private
Flags
HostType
309
get { return _flags &
Flags
.HostTypeMask; }
335
internal bool DisablePathAndQueryCanonicalization => (_flags &
Flags
.DisablePathAndQueryCanonicalization) != 0;
341
return (_flags &
Flags
.UserDrivenParsing) != 0;
360
private bool NotAny(
Flags
flags)
365
private bool InFact(
Flags
flags)
370
private static bool StaticNotAny(
Flags
allFlags,
Flags
checkFlags)
375
private static bool StaticInFact(
Flags
allFlags,
Flags
checkFlags)
383
Flags
cF = _flags;
384
if ((cF &
Flags
.MinimalUriInfoSet) == 0)
389
Debug.Assert(_info != null && (_flags &
Flags
.MinimalUriInfoSet) != 0);
395
if ((_flags &
Flags
.AllUriInfoSet) == 0)
409
if (allowDnsOptimization && InFact(
Flags
.CanonicalDnsHost))
433
CreateThis(uriString,
Flags
.Zero, UriKind.Absolute);
446
CreateThis(uriString, dontEscape ?
Flags
.UserEscaped :
Flags
.Zero, UriKind.Absolute);
473
CreateThis(uriString,
Flags
.Zero, uriKind);
518
CreateThis(uriString,
Flags
.Zero, UriKind.Absolute);
526
CreateThis(uriString,
Flags
.Zero, UriKind.Relative);
560
CreateThis(relativeUri, dontEscape ?
Flags
.UserEscaped :
Flags
.Zero, UriKind.RelativeOrAbsolute);
584
_flags =
Flags
.Zero;
589
CreateThis(relativeUri, dontEscape ?
Flags
.UserEscaped :
Flags
.Zero, UriKind.Absolute);
611
dontEscape = InFact(
Flags
.UserEscaped);
630
_flags =
Flags
.Zero;
634
CreateThis(newUriString, dontEscape ?
Flags
.UserEscaped :
Flags
.Zero, UriKind.Absolute);
825
case
Flags
.DnsHostType: return UriHostNameType.Dns;
826
case
Flags
.IPv4HostType: return UriHostNameType.IPv4;
827
case
Flags
.IPv6HostType: return UriHostNameType.IPv6;
828
case
Flags
.BasicHostType: return UriHostNameType.Basic;
829
case
Flags
.UncHostType: return UriHostNameType.Basic;
830
case
Flags
.UnknownHostType: return UriHostNameType.Unknown;
854
return NotAny(
Flags
.NotDefaultPort);
882
return InFact(
Flags
.LoopbackHost);
1005
if (NotAny(
Flags
.HostNotCanonical |
Flags
.PathNotCanonical |
Flags
.ShouldBeCompressed))
1055
if (InFact(
Flags
.PathNotCanonical) && !IsImplicitFile)
1068
if (InFact(
Flags
.ShouldBeCompressed))
1108
if (InFact(
Flags
.NotDefaultPort))
1187
Flags
hostType = HostType;
1188
if (hostType ==
Flags
.IPv6HostType || (hostType ==
Flags
.BasicHostType && InFact(
Flags
.HostNotCanonical |
Flags
.E_HostNotCanonical)))
1215
Flags
hostType = HostType;
1216
if (hostType ==
Flags
.DnsHostType)
1220
else if (hostType ==
Flags
.IPv6HostType)
1229
else if (hostType ==
Flags
.BasicHostType && InFact(
Flags
.HostNotCanonical |
Flags
.E_HostNotCanonical))
1259
return InFact(
Flags
.UserEscaped);
1366
if (NotAny(
Flags
.AuthorityFound) || IsDosPath)
1630
ushort nonCanonical = (ushort)((ushort)_flags & (ushort)
Flags
.CannotDisplayCanonical);
1631
if (((_flags & (
Flags
.ShouldBeCompressed |
Flags
.FirstSlashAbsent |
Flags
.BackslashInPath)) != 0) ||
1634
nonCanonical |= (ushort)
Flags
.PathNotCanonical;
1760
if (NotAny(
Flags
.AllUriInfoSet) || other.NotAny(
Flags
.AllUriInfoSet))
1778
if (InFact(
Flags
.CanonicalDnsHost) && other.InFact(
Flags
.CanonicalDnsHost))
1920
private static ParsingError ParseScheme(string uriString, ref
Flags
flags, ref UriParser? syntax)
1922
Debug.Assert((flags &
Flags
.Debug_LeftConstructor) == 0);
1932
flags |= (
Flags
)6;
1937
flags |= (
Flags
)5;
1949
flags |= (
Flags
)idx;
1963
Debug.Assert((_flags &
Flags
.CustomParser_ParseMinimalAlreadyCalled) != 0);
1971
_flags |=
Flags
.ErrorOrParsingRecursion;
1990
int idx = (int)(_flags &
Flags
.IndexMask);
1993
_flags &= ~(
Flags
.IndexMask |
Flags
.UserDrivenParsing);
2004
if (!OperatingSystem.IsWindows() && InFact(
Flags
.UnixPath))
2006
_flags |=
Flags
.BasicHostType;
2007
_flags |= (
Flags
)idx;
2017
NotAny(
Flags
.ImplicitFile) &&
2037
_flags |=
Flags
.AuthorityFound;
2052
_flags |=
Flags
.DosPath;
2057
_flags |=
Flags
.AuthorityFound;
2077
_flags |=
Flags
.UncPath;
2083
_flags |=
Flags
.UnixPath |
Flags
.AuthorityFound;
2090
if ((_flags & (
Flags
.UncPath |
Flags
.DosPath |
Flags
.UnixPath)) != 0)
2104
_flags |=
Flags
.AuthorityFound;
2112
else if (_syntax.InFact(UriSyntaxFlags.OptionalAuthority) && (InFact(
Flags
.AuthorityFound) ||
2115
_flags |=
Flags
.AuthorityFound;
2123
if (InFact(
Flags
.HasUnicode))
2128
_flags |= ((
Flags
)idx |
Flags
.UnknownHostType);
2141
if (InFact(
Flags
.HasUnicode))
2146
_flags |= ((
Flags
)idx |
Flags
.UnknownHostType);
2153
if (InFact(
Flags
.DosPath))
2155
_flags |= (((_flags &
Flags
.AuthorityFound) != 0) ?
Flags
.BasicHostType :
Flags
.UnknownHostType);
2156
_flags |= (
Flags
)idx;
2179
if (hostTerminator == '\\' && NotAny(
Flags
.ImplicitFile) && _syntax.NotAny(UriSyntaxFlags.AllowDOSPath))
2184
else if (!OperatingSystem.IsWindows() && hostTerminator == '/' && NotAny(
Flags
.ImplicitFile) && InFact(
Flags
.UncPath) && _syntax == UriParser.FileUri)
2197
_flags |= (
Flags
)idx;
2212
private void CreateUriInfo(
Flags
cF)
2235
if ((cF &
Flags
.ImplicitFile) != 0)
2237
if (StaticInFact(cF,
Flags
.UncPath))
2245
int end = (int)(cF &
Flags
.IndexMask);
2258
if ((cF &
Flags
.AuthorityFound) != 0)
2276
if ((cF & (
Flags
.UncPath |
Flags
.DosPath)) != 0)
2280
int end = (int)(cF &
Flags
.IndexMask);
2299
if ((cF &
Flags
.HasUserInfo) != 0)
2314
idx = (int)(cF &
Flags
.IndexMask);
2318
cF &= ~
Flags
.IndexMask;
2322
cF |=
Flags
.SchemeNotCanonical;
2326
if ((cF &
Flags
.HostTypeMask) !=
Flags
.UnknownHostType && (cF &
Flags
.DosPath) == 0 &&
2347
cF |= (
Flags
.PortNotCanonical |
Flags
.E_PortNotCanonical);
2365
cF |=
Flags
.NotDefaultPort;
2371
cF |= (
Flags
.PortNotCanonical |
Flags
.E_PortNotCanonical);
2381
cF |=
Flags
.MinimalUriInfoSet;
2385
Flags
current = _flags;
2386
while ((current &
Flags
.MinimalUriInfoSet) == 0)
2388
Flags
oldValue = Interlocked.CompareExchange(ref _flags, (current & ~
Flags
.IndexMask) | cF, current);
2409
if (NotAny(
Flags
.ErrorOrParsingRecursion))
2411
_flags |=
Flags
.ErrorOrParsingRecursion;
2414
_flags &= ~
Flags
.ErrorOrParsingRecursion;
2420
Flags
flags = _flags;
2427
if (HostType ==
Flags
.BasicHostType)
2435
if (NotAny(
Flags
.ImplicitFile) || (result & Check.ReservedFound) != 0)
2437
flags |=
Flags
.HostNotCanonical;
2441
if (InFact(
Flags
.ImplicitFile) && (result & (Check.ReservedFound | Check.EscapedCanonical)) != 0)
2450
flags |=
Flags
.E_HostNotCanonical;
2451
if (NotAny(
Flags
.UserEscaped))
2461
else if (NotAny(
Flags
.CanonicalDnsHost))
2467
flags |= (
Flags
.HostNotCanonical |
Flags
.E_HostNotCanonical);
2476
flags |= (
Flags
.HostNotCanonical |
Flags
.E_HostNotCanonical);
2488
private static string CreateHostStringHelper(string str, int idx, int end, ref
Flags
flags, UriInfo info)
2492
switch (flags &
Flags
.HostTypeMask)
2494
case
Flags
.DnsHostType:
2498
case
Flags
.IPv6HostType:
2508
case
Flags
.IPv4HostType:
2512
case
Flags
.UncHostType:
2516
case
Flags
.BasicHostType:
2517
if (StaticInFact(flags,
Flags
.DosPath))
2534
case
Flags
.UnknownHostType:
2545
flags |=
Flags
.LoopbackHost;
2564
Flags
flags = _flags & ~
Flags
.HostTypeMask;
2571
_flags = (_flags & ~
Flags
.HostTypeMask) |
Flags
.BasicHostType;
2581
_flags |= (
Flags
.HostNotCanonical |
Flags
.E_HostNotCanonical);
2585
_flags = (_flags & ~
Flags
.HostTypeMask) | (flags &
Flags
.HostTypeMask);
2596
_flags &= ~
Flags
.NotDefaultPort;
2597
_flags |= (
Flags
.PortNotCanonical |
Flags
.E_PortNotCanonical);
2611
_flags &= ~
Flags
.NotDefaultPort;
2613
_flags |=
Flags
.NotDefaultPort;
2615
_flags |= (
Flags
.PortNotCanonical |
Flags
.E_PortNotCanonical);
2633
Debug.Assert(_info != null && (_flags &
Flags
.MinimalUriInfoSet) != 0);
2638
ushort nonCanonical = unchecked((ushort)(((ushort)_flags & ((ushort)
Flags
.CannotDisplayCanonical << 7)) >> 6));
2639
if (InFact(
Flags
.SchemeNotCanonical))
2641
nonCanonical |= (ushort)
Flags
.SchemeNotCanonical;
2647
if (InFact(
Flags
.ShouldBeCompressed |
Flags
.FirstSlashAbsent |
Flags
.BackslashInPath))
2649
nonCanonical |= (ushort)
Flags
.PathNotCanonical;
2654
nonCanonical |= (ushort)
Flags
.PathNotCanonical;
2672
Debug.Assert(_info != null && (_flags &
Flags
.MinimalUriInfoSet) != 0);
2677
ushort nonCanonical = unchecked((ushort)((ushort)_flags & (ushort)
Flags
.CannotDisplayCanonical));
2682
if ((_flags & (
Flags
.ShouldBeCompressed |
Flags
.FirstSlashAbsent |
Flags
.BackslashInPath)) != 0)
2684
nonCanonical |= (ushort)
Flags
.PathNotCanonical;
2689
nonCanonical |= (ushort)
Flags
.PathNotCanonical;
2742
Debug.Assert(InFact(
Flags
.AllUriInfoSet));
2751
if (InFact(
Flags
.AuthorityFound))
2760
if ((parts & UriComponents.UserInfo) != 0 && InFact(
Flags
.HasUserInfo))
2769
if (NotAny(
Flags
.UserEscaped))
2783
InFact(
Flags
.UserEscaped) ? UnescapeMode.Unescape : UnescapeMode.EscapeUnescape,
2832
if (formatAs != UriFormat.UriEscaped && HostType ==
Flags
.BasicHostType && (nonCanonical & (ushort)UriComponents.Host) != 0)
2843
InFact(
Flags
.UserEscaped) ? UnescapeMode.Unescape : UnescapeMode.EscapeUnescape,
2855
if ((parts & UriComponents.SerializationInfoString) != 0 && HostType ==
Flags
.IPv6HostType && _info._moreInfo?.ScopeId is string scopeId)
2866
(InFact(
Flags
.NotDefaultPort) || ((parts & UriComponents.StrongPort) != 0 && _syntax.DefaultPort != UriParser.NoDefaultPort)))
2885
if (InFact(
Flags
.AuthorityFound) && dest.Length != 0 && dest[0] == '/')
2930
if (NotAny(
Flags
.UserEscaped))
2945
UnescapeMode mode = InFact(
Flags
.UserEscaped) ? UnescapeMode.Unescape : UnescapeMode.EscapeUnescape;
2972
if (!InFact(
Flags
.HasUserInfo))
2982
if (!InFact(
Flags
.HasUserInfo))
2985
if (InFact(
Flags
.NotDefaultPort) || _syntax.DefaultPort == UriParser.NoDefaultPort)
3000
if (InFact(
Flags
.HasUserInfo))
3033
if (InFact(
Flags
.NotDefaultPort |
Flags
.PortNotCanonical))
3045
if (uriParts == UriComponents.Path && InFact(
Flags
.AuthorityFound) &&
3086
if (InFact(
Flags
.NotDefaultPort) || _syntax.DefaultPort == UriParser.NoDefaultPort)
3096
if (InFact(
Flags
.HasUserInfo))
3113
if (NotAny(
Flags
.HasUserInfo))
3145
Flags
cF = _flags |
Flags
.AllUriInfoSet;
3147
if ((cF &
Flags
.UserDrivenParsing) != 0)
3153
if ((cF &
Flags
.HasUnicode) != 0)
3168
if ((cF &
Flags
.ImplicitFile) != 0)
3170
cF |=
Flags
.SchemeNotCanonical;
3187
cF |=
Flags
.SchemeNotCanonical;
3194
if ((cF &
Flags
.AuthorityFound) != 0 && !str.Slice(schemeLength).StartsWith("://", StringComparison.Ordinal))
3196
cF |=
Flags
.SchemeNotCanonical |
Flags
.SchemeNotCanonical_NoTrailingSlashes;
3204
if ((cF &
Flags
.HasUserInfo) != 0)
3211
cF |=
Flags
.UserNotCanonical;
3215
cF |=
Flags
.E_UserNotCanonical;
3221
cF |=
Flags
.UserIriCanonical;
3234
if ((cF &
Flags
.DisablePathAndQueryCanonicalization) != 0)
3237
if ((cF &
Flags
.ImplicitFile) != 0 || (syntaxFlags & UriSyntaxFlags.MayHaveQuery) == 0)
3264
(cF &
Flags
.ImplicitFile) != 0 || (syntaxFlags & (UriSyntaxFlags.MayHaveQuery | UriSyntaxFlags.MayHaveFragment)) == 0 ? c_DummyChar :
3280
if (((cF &
Flags
.AuthorityFound) != 0) && ((syntaxFlags & UriSyntaxFlags.PathIsRooted) != 0)
3283
cF |=
Flags
.FirstSlashAbsent;
3290
if ((cF &
Flags
.DosPath) != 0 || (((cF &
Flags
.AuthorityFound) != 0) &&
3296
cF |= (
Flags
.E_PathNotCanonical |
Flags
.PathNotCanonical);
3302
cF |= (
Flags
.E_PathNotCanonical |
Flags
.PathNotCanonical);
3306
if (((syntaxFlags & (UriSyntaxFlags.CompressPath)) != 0) && ((cF &
Flags
.E_PathNotCanonical) != 0 ||
3309
cF |=
Flags
.ShouldBeCompressed;
3313
cF |=
Flags
.BackslashInPath;
3318
cF |=
Flags
.E_PathNotCanonical;
3328
if (((cF &
Flags
.ImplicitFile) == 0) || ((cF &
Flags
.UserEscaped) != 0) ||
3332
cF |=
Flags
.PathNotCanonical;
3337
if (((cF &
Flags
.ImplicitFile) != 0) && (result & (Check.ReservedFound | Check.EscapedCanonical)) != 0)
3346
cF |=
Flags
.E_PathNotCanonical;
3353
cF |=
Flags
.PathIriCanonical;
3368
cF |=
Flags
.QueryNotCanonical;
3373
cF |=
Flags
.E_QueryNotCanonical;
3380
cF |=
Flags
.QueryIriCanonical;
3396
cF |=
Flags
.FragmentNotCanonical;
3401
cF |=
Flags
.E_FragmentNotCanonical;
3408
cF |=
Flags
.FragmentIriCanonical;
3422
Debug.Assert(InFact(
Flags
.HasUnicode));
3423
Debug.Assert(InFact(
Flags
.MinimalUriInfoSet));
3424
Debug.Assert(!InFact(
Flags
.UserDrivenParsing));
3428
Flags
flags = _flags;
3433
if ((flags & (
Flags
.DosPath |
Flags
.UnixPath)) != 0)
3435
if ((flags &
Flags
.ImplicitFile) == 0)
3439
if ((flags &
Flags
.AuthorityFound) != 0)
3462
if ((flags &
Flags
.DisablePathAndQueryCanonicalization) != 0)
3475
int pathLength = (flags &
Flags
.ImplicitFile) != 0 || (syntaxFlags & UriSyntaxFlags.MayHaveQuery) == 0
3521
private static int ParseSchemeCheckImplicitFile(string uriString, ref ParsingError err, ref
Flags
flags, ref UriParser? syntax)
3524
Debug.Assert((flags &
Flags
.Debug_LeftConstructor) == 0);
3537
StaticNotAny(flags,
Flags
.DisableImplicitFilePaths) &&
3541
flags |= (
Flags
.UnixPath |
Flags
.ImplicitFile |
Flags
.AuthorityFound);
3562
if (char.IsAsciiLetter(uriString[i]) && StaticNotAny(flags,
Flags
.DisableImplicitFilePaths))
3566
flags |= (
Flags
.DosPath |
Flags
.ImplicitFile |
Flags
.AuthorityFound);
3581
if ((uriString[i + 1] is '\\' or '/') && StaticNotAny(flags,
Flags
.DisableImplicitFilePaths))
3583
flags |= (
Flags
.UncPath |
Flags
.ImplicitFile |
Flags
.AuthorityFound);
3688
private int CheckAuthorityHelper(ReadOnlySpan<char> str, int startOffset, out ParsingError err, ref
Flags
flags, UriSyntaxFlags syntaxFlags, ref string? newHost)
3690
Debug.Assert((_flags &
Flags
.Debug_LeftConstructor) == 0 || (!_syntax.IsSimple && Monitor.IsEntered(_info)));
3691
Debug.Assert((_flags &
Flags
.HasUserInfo) == 0 && (_flags &
Flags
.HostTypeMask) == 0);
3696
bool hasUnicode = ((flags &
Flags
.HasUnicode) != 0);
3711
flags &= ~
Flags
.UncPath; //UNC cannot have an empty hostname
3712
if (StaticInFact(flags,
Flags
.ImplicitFile))
3715
flags |=
Flags
.BasicHostType;
3737
flags |=
Flags
.HasUserInfo;
3763
flags |=
Flags
.IPv6HostType;
3771
IPv4AddressHelper.IsValid(str.Slice(i), out hostLength, allowIPv6: false, StaticNotAny(flags,
Flags
.ImplicitFile), (syntaxFlags & UriSyntaxFlags.V1_UnknownUri) != 0))
3773
flags |=
Flags
.IPv4HostType;
3781
DomainNameHelper.IsValid(str.Slice(i), iri: false, StaticNotAny(flags,
Flags
.ImplicitFile), out hostLength))
3786
flags |=
Flags
.DnsHostType;
3791
flags |=
Flags
.CanonicalDnsHost;
3796
DomainNameHelper.IsValid(str.Slice(i), iri: true, StaticNotAny(flags,
Flags
.ImplicitFile), out hostLength))
3798
flags |=
Flags
.DnsHostType;
3822
if (UncNameHelper.IsValid(str.Slice(i), StaticNotAny(flags,
Flags
.ImplicitFile), out hostLength))
3826
flags |=
Flags
.UncHostType;
3840
if (hostDelimiter == '\\' && (flags &
Flags
.HostTypeMask) !=
Flags
.HostNotParsed && (syntaxFlags & UriSyntaxFlags.FileLikeUri) == 0)
3848
flags &= ~
Flags
.HostTypeMask;
3877
flags &= ~
Flags
.HostTypeMask;
3893
flags &= ~
Flags
.HostTypeMask;
3909
flags &= ~
Flags
.HostTypeMask;
3914
if ((flags &
Flags
.HostTypeMask) ==
Flags
.HostNotParsed)
3917
flags &= ~
Flags
.HasUserInfo;
3922
flags |=
Flags
.BasicHostType;
3966
flags |=
Flags
.BasicHostType;
4133
if ((_flags &
Flags
.HasUnicode) != 0)
4184
if (InFact(
Flags
.FirstSlashAbsent))
4199
if (InFact(
Flags
.ShouldBeCompressed))
4206
if (_syntax.InFact(UriSyntaxFlags.UnEscapeDotsAndSlashes) && InFact(
Flags
.PathNotCanonical)
4215
if (InFact(
Flags
.E_PathNotCanonical) && NotAny(
Flags
.UserEscaped))
4238
if (!OperatingSystem.IsWindows() && InFact(
Flags
.BackslashInPath) && _syntax.NotAny(UriSyntaxFlags.ConvertPathSlashes) && _syntax.InFact(UriSyntaxFlags.FileLikeUri) && !IsImplicitFile)
4256
if (InFact(
Flags
.ShouldBeCompressed))
4261
if (_syntax.InFact(UriSyntaxFlags.UnEscapeDotsAndSlashes) && InFact(
Flags
.PathNotCanonical)
4281
if (InFact(
Flags
.ShouldBeCompressed) && dest.Length - offset > 0)
4292
if (formatAs == UriFormat.UriEscaped && NotAny(
Flags
.UserEscaped) && InFact(
Flags
.E_PathNotCanonical))
4309
if (formatAs != UriFormat.UriEscaped && InFact(
Flags
.PathNotCanonical))
4326
UnescapeMode mode = InFact(
Flags
.UserEscaped) ? UnescapeMode.Unescape : UnescapeMode.EscapeUnescape;
4501
if (basePart.HostType ==
Flags
.IPv6HostType)
4575
if (basePart.HostType ==
Flags
.IPv6HostType)
4889
return InFact(
Flags
.AuthorityFound);
System\UriCreationOptions.cs (7)
11
internal Uri.
Flags
_flags;
23
readonly get => (_flags & Uri.
Flags
.DisableImplicitFilePaths) == 0;
25
? _flags & ~Uri.
Flags
.DisableImplicitFilePaths
26
: _flags | Uri.
Flags
.DisableImplicitFilePaths;
40
readonly get => (_flags & Uri.
Flags
.DisablePathAndQueryCanonicalization) != 0;
42
? _flags | Uri.
Flags
.DisablePathAndQueryCanonicalization
43
: _flags & ~Uri.
Flags
.DisablePathAndQueryCanonicalization;
System\UriExt.cs (81)
18
private void CreateThis(string? uri,
Flags
flags, UriKind uriKind)
30
private UriFormatException? TryCreateThis(string? uri,
Flags
flags, UriKind uriKind)
39
Debug.Assert((flags &
Flags
.DisableImplicitFilePaths) == 0 || uriKind != UriKind.Relative);
40
Debug.Assert((flags &
Flags
.DisablePathAndQueryCanonicalization) == 0 || uriKind == UriKind.Absolute);
44
Debug.Assert(_originalUnicodeString is null && _info is null && _syntax is null && _flags ==
Flags
.Zero);
55
_flags |=
Flags
.HasUnicode;
86
if (NotAny(
Flags
.DosPath) && uriKind == UriKind.RelativeOrAbsolute &&
88
|| (!OperatingSystem.IsWindows() && InFact(
Flags
.UnixPath))))
114
_flags |=
Flags
.UserDrivenParsing;
124
if (InFact(
Flags
.ErrorOrParsingRecursion))
128
_flags =
Flags
.UserDrivenParsing | (_flags &
Flags
.UserEscaped);
159
_flags &=
Flags
.UserEscaped |
Flags
.HasUnicode; // the only flags that make sense for a relative uri
222
result.CreateThis(s,
Flags
.DisableImplicitFilePaths, UriKind.RelativeOrAbsolute);
229
result = CreateHelper(s,
Flags
.DisableImplicitFilePaths, UriKind.RelativeOrAbsolute);
239
result = CreateHelper(uriString,
Flags
.Zero, uriKind);
298
result ??= CreateHelper(newUriString!, dontEscape ?
Flags
.UserEscaped :
Flags
.Zero, UriKind.Absolute);
416
Flags
nonCanonical = (_flags & (
Flags
.E_CannotDisplayCanonical |
Flags
.IriCanonical));
419
if ((nonCanonical & (
Flags
.UserIriCanonical |
Flags
.PathIriCanonical |
Flags
.QueryIriCanonical |
Flags
.FragmentIriCanonical)) != 0)
421
if ((nonCanonical & (
Flags
.E_UserNotCanonical |
Flags
.UserIriCanonical)) == (
Flags
.E_UserNotCanonical |
Flags
.UserIriCanonical))
423
nonCanonical &= ~(
Flags
.E_UserNotCanonical |
Flags
.UserIriCanonical);
426
if ((nonCanonical & (
Flags
.E_PathNotCanonical |
Flags
.PathIriCanonical)) == (
Flags
.E_PathNotCanonical |
Flags
.PathIriCanonical))
428
nonCanonical &= ~(
Flags
.E_PathNotCanonical |
Flags
.PathIriCanonical);
431
if ((nonCanonical & (
Flags
.E_QueryNotCanonical |
Flags
.QueryIriCanonical)) == (
Flags
.E_QueryNotCanonical |
Flags
.QueryIriCanonical))
433
nonCanonical &= ~(
Flags
.E_QueryNotCanonical |
Flags
.QueryIriCanonical);
436
if ((nonCanonical & (
Flags
.E_FragmentNotCanonical |
Flags
.FragmentIriCanonical)) == (
Flags
.E_FragmentNotCanonical |
Flags
.FragmentIriCanonical))
438
nonCanonical &= ~(
Flags
.E_FragmentNotCanonical |
Flags
.FragmentIriCanonical);
443
if (((nonCanonical &
Flags
.E_CannotDisplayCanonical & (
Flags
.E_UserNotCanonical |
Flags
.E_PathNotCanonical |
444
Flags
.E_QueryNotCanonical |
Flags
.E_FragmentNotCanonical)) !=
Flags
.Zero))
450
if (InFact(
Flags
.AuthorityFound))
452
if (InFact(
Flags
.SchemeNotCanonical_NoTrailingSlashes))
457
if (InFact(
Flags
.UncPath |
Flags
.DosPath))
472
if (InFact(
Flags
.FirstSlashAbsent) && _info.Offset.Query > _info.Offset.Path)
478
if (InFact(
Flags
.BackslashInPath))
487
if ((_flags &
Flags
.CanonicalDnsHost) == 0 && HostType !=
Flags
.IPv6HostType)
654
internal static Uri? CreateHelper(string? uriString,
Flags
flags, UriKind uriKind)
742
if (baseUri.InFact(
Flags
.AuthorityFound))
814
if (((_flags &
Flags
.NotDefaultPort) != 0) || (uriComponents == UriComponents.StrongPort
831
|| ((_flags & (
Flags
.HostNotCanonical |
Flags
.E_HostNotCanonical)) == 0)))
886
uriLink = CreateHelper(newUriString!, dontEscape ?
Flags
.UserEscaped :
Flags
.Zero, UriKind.Absolute)!;
912
Debug.Assert((otherUri._flags &
Flags
.Debug_LeftConstructor) != 0);
914
_flags = otherUri._flags & ~
Flags
.Debug_LeftConstructor;
916
if (InFact(
Flags
.AllUriInfoSet))
923
Debug.Assert(!InFact(
Flags
.HasUnicode) || otherUri.IsNotAbsoluteUri);
929
if (InFact(
Flags
.MinimalUriInfoSet))
931
_flags &= ~(
Flags
.MinimalUriInfoSet |
Flags
.AllUriInfoSet |
Flags
.IndexMask);
934
if (InFact(
Flags
.NotDefaultPort))
948
_flags |= (
Flags
)portIndex; // Port or path
System\UriScheme.cs (4)
77
Debug.Assert(sizeof(Uri.
Flags
) == sizeof(ulong));
80
Uri.
Flags
previous = Interlocked.Or(ref uri._flags, Uri.
Flags
.CustomParser_ParseMinimalAlreadyCalled);
81
if ((previous & Uri.
Flags
.CustomParser_ParseMinimalAlreadyCalled) != 0)
System\UriSyntax.cs (2)
266
Debug.Assert(sizeof(Uri.
Flags
) == sizeof(ulong));
267
Interlocked.Or(ref thisUri._flags, Uri.
Flags
.CustomParser_ParseMinimalAlreadyCalled);