 |
Changeset 3893
- Timestamp:
- 08/19/08 12:37:00
(4 months ago)
- Author:
- keinfarbton
- Message:
More compile fixes. Regex and RegexIterator? now ok. Remaining files with DMD crash:
tango/net/http/HttpTokens.d
tango/net/ftp/FtpClient.d
tango/io/vfs/VirtualFolder.d
tango/sys/Environment.d
It seems like it is related to the tango.text.Util template functions.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r3724 |
r3893 |
|
| 221 | 221 | Cutf8 tail; |
|---|
| 222 | 222 | //FIXME constness |
|---|
| 223 | | auto text = head !(char)( path, FileConst.PathSeparatorString, tail); |
|---|
| | 223 | auto text = head ( path, FileConst.PathSeparatorString, tail); |
|---|
| 224 | 224 | |
|---|
| 225 | 225 | auto child = text in mounts; |
|---|
| … | … | |
| 244 | 244 | { |
|---|
| 245 | 245 | //FIXME constness |
|---|
| 246 | | auto tail = locatePrior !(char)(cast(char[])path, FileConst.PathSeparatorChar); |
|---|
| | 246 | auto tail = locatePrior (path, FileConst.PathSeparatorChar); |
|---|
| 247 | 247 | if (tail < path.length) |
|---|
| 248 | 248 | return folder(path[0..tail]).open.file(path[tail..$]); |
|---|
| … | … | |
| 358 | 358 | assert (name); |
|---|
| 359 | 359 | //FIXME constness |
|---|
| 360 | | if (locatePrior!(char)(cast(char[])name, '.') != name.length || |
|---|
| | 360 | if (locatePrior(name, '.') != name.length || |
|---|
| 361 | 361 | //FIXME constness |
|---|
| 362 | | locatePrior!(char)(cast(char[])name, FileConst.PathSeparatorChar) != name.length) |
|---|
| | 362 | locatePrior(name, FileConst.PathSeparatorChar) != name.length) |
|---|
| 363 | 363 | error ("'"~name~"' contains invalid characters"); |
|---|
| 364 | 364 | } |
|---|
| r3888 |
r3893 |
|
| 562 | 562 | char[64] tmp = void; |
|---|
| 563 | 563 | |
|---|
| 564 | | this.sendCommand("EPRT", Text.layout!(char)(tmp[], cast(Cutf8)"|1|%0|%1|", cast(Cutf8)data_addr.toAddrString, cast(Cutf8)data_addr.toPortString)); |
|---|
| | 564 | this.sendCommand("EPRT", Text.layout (tmp[], cast(Cutf8)"|1|%0|%1|", cast(Cutf8)data_addr.toAddrString, cast(Cutf8)data_addr.toPortString)); |
|---|
| 565 | 565 | // this.sendCommand("EPRT", format("|1|%s|%s|", data_addr.toAddrString(), data_addr.toPortString())); |
|---|
| 566 | 566 | this.readResponse("200"); |
|---|
| … | … | |
| 579 | 579 | char[64] tmp = void; |
|---|
| 580 | 580 | char[20] foo = void; |
|---|
| 581 | | auto str = Text.layout!(char) (tmp, "%0,%1,%2,%3,%4,%5", |
|---|
| | 581 | auto str = Text.layout (tmp, "%0,%1,%2,%3,%4,%5", |
|---|
| 582 | 582 | Integer.format(foo[0..3], h1), |
|---|
| 583 | 583 | Integer.format(foo[3..6], h2), |
|---|
| … | … | |
| 980 | 980 | if (mlst_success) |
|---|
| 981 | 981 | { |
|---|
| 982 | | Cutf8[] lines = Text.splitLines!(char) (cast(Cutf8)response.message); |
|---|
| | 982 | Cutf8[] lines = Text.splitLines (cast(Cutf8)response.message); |
|---|
| 983 | 983 | |
|---|
| 984 | 984 | // We need at least 3 lines - first and last and header/footer lines. |
|---|
| … | … | |
| 1060 | 1060 | |
|---|
| 1061 | 1061 | // Each line is something in that directory. |
|---|
| 1062 | | Cutf8[] lines = Text.splitLines!(char) ( cast(Cutf8)listing.slice()); |
|---|
| | 1062 | Cutf8[] lines = Text.splitLines ( cast(Cutf8)listing.slice()); |
|---|
| 1063 | 1063 | scope (exit) |
|---|
| 1064 | 1064 | delete lines; |
|---|
| … | … | |
| 1104 | 1104 | |
|---|
| 1105 | 1105 | // Split out the lines. Most of the time, it's one-to-one. |
|---|
| 1106 | | Cutf8[] lines = Text.splitLines!(char)( cast(Cutf8)listing.slice()); |
|---|
| | 1106 | Cutf8[] lines = Text.splitLines ( cast(Cutf8)listing.slice()); |
|---|
| 1107 | 1107 | scope (exit) |
|---|
| 1108 | 1108 | delete lines; |
|---|
| … | … | |
| 1112 | 1112 | // If there are no spaces, or if there's only one... skip the line. |
|---|
| 1113 | 1113 | // This is probably like a "total 8" line. |
|---|
| 1114 | | if (Text.locate!(char)(line, ' ') == Text.locatePrior!(char)(line, ' ')) |
|---|
| | 1114 | if (Text.locate (line, ' ') == Text.locatePrior (line, ' ')) |
|---|
| 1115 | 1115 | continue; |
|---|
| 1116 | 1116 | |
|---|
| … | … | |
| 1160 | 1160 | |
|---|
| 1161 | 1161 | // We have to sniff this... :/. |
|---|
| 1162 | | switch (! Text.contains!(char) ("0123456789", line[0])) |
|---|
| | 1162 | switch (! Text.contains ("0123456789", line[0])) |
|---|
| 1163 | 1163 | { |
|---|
| 1164 | 1164 | // Not a number; this is UNIX format. |
|---|
| … | … | |
| 1285 | 1285 | if (filename_pos > 1) |
|---|
| 1286 | 1286 | { |
|---|
| 1287 | | auto temp_facts = Text.delimit!(char)(line[0 .. filename_pos - 1], ";"); |
|---|
| | 1287 | auto temp_facts = Text.delimit (line[0 .. filename_pos - 1], ";"); |
|---|
| 1288 | 1288 | |
|---|
| 1289 | 1289 | // Go through each fact and parse them into the array. |
|---|
| 1290 | 1290 | foreach (fact; temp_facts) |
|---|
| 1291 | 1291 | { |
|---|
| 1292 | | int pos = Text.locate!(char)(fact, '='); |
|---|
| | 1292 | int pos = Text.locate (fact, '='); |
|---|
| 1293 | 1293 | if (pos == fact.length) |
|---|
| 1294 | 1294 | continue; |
|---|
| … | … | |
| 1421 | 1421 | else |
|---|
| 1422 | 1422 | { |
|---|
| 1423 | | Cutf8[] lines = Text.splitLines !(char)(cast(Cutf8)response.message); |
|---|
| | 1423 | Cutf8[] lines = Text.splitLines (cast(Cutf8)response.message); |
|---|
| 1424 | 1424 | |
|---|
| 1425 | 1425 | // There are two more lines than features, but we also have FEAT. |
|---|
| … | … | |
| 1429 | 1429 | for (size_t i = 1; i < lines.length - 1; i++) |
|---|
| 1430 | 1430 | { |
|---|
| 1431 | | size_t pos = Text.locate!(char)(lines[i], ' '); |
|---|
| | 1431 | size_t pos = Text.locate (lines[i], ' '); |
|---|
| 1432 | 1432 | |
|---|
| 1433 | 1433 | this.supported_features[i].command = lines[i][0 .. pos]; |
|---|
| r3890 |
r3893 |
|
| 303 | 303 | if (s.length) |
|---|
| 304 | 304 | { |
|---|
| 305 | | auto i = Text.locate !(const(char))(s, separator); |
|---|
| | 305 | auto i = Text.locate (s, separator); |
|---|
| 306 | 306 | |
|---|
| 307 | 307 | // we should always find the separator |
|---|
| r3886 |
r3893 |
|
| 82 | 82 | |
|---|
| 83 | 83 | // rifle through the path (after converting to standard format) |
|---|
| 84 | | foreach (pe; Text.patterns !(char)(standard(get("PATH")), FileConst.SystemPathString )) |
|---|
| | 84 | foreach (pe; Text.patterns (standard(get("PATH")), FileConst.SystemPathString )) |
|---|
| 85 | 85 | if (bin.path(pe).exists) |
|---|
| 86 | 86 | version (Windows) |
|---|
| r3724 |
r3893 |
|
| 741 | 741 | } |
|---|
| 742 | 742 | |
|---|
| 743 | | static CharClass opCall(CharClass cc) |
|---|
| | 743 | static CharClass opCall(const(CharClass) cc) |
|---|
| 744 | 744 | { |
|---|
| 745 | 745 | CharClass ncc; |
|---|
| … | … | |
| 983 | 983 | alias CharRange!(char_t) cr_t; |
|---|
| 984 | 984 | |
|---|
| | 985 | alias const(char_t)[] c_string_t; |
|---|
| | 986 | alias const(CharClass!(char_t)) c_cc_t; |
|---|
| | 987 | alias const(CharRange!(char_t)) c_cr_t; |
|---|
| | 988 | |
|---|
| 985 | 989 | // generic data |
|---|
| 986 | 990 | enum Type { |
|---|
| … | … | |
| 1143 | 1147 | } |
|---|
| 1144 | 1148 | |
|---|
| 1145 | | void setInput(cc_t cc) |
|---|
| 1146 | | { |
|---|
| 1147 | | input = cc; |
|---|
| | 1149 | void setInput(c_cc_t cc) |
|---|
| | 1150 | { |
|---|
| | 1151 | input = *cast(cc_t*)&cc; //TODO: this is not cosher. Check const! |
|---|
| 1148 | 1152 | } |
|---|
| 1149 | 1153 | |
|---|
| … | … | |
| 1163 | 1167 | } |
|---|
| 1164 | 1168 | |
|---|
| 1165 | | string toString() |
|---|
| 1166 | | { |
|---|
| 1167 | | string str; |
|---|
| | 1169 | Cutf8 toString() |
|---|
| | 1170 | { |
|---|
| | 1171 | Cutf8 str; |
|---|
| 1168 | 1172 | switch ( type ) |
|---|
| 1169 | 1173 | { |
|---|
| … | … | |
| 1186 | 1190 | class RegExpException : Exception |
|---|
| 1187 | 1191 | { |
|---|
| 1188 | | this(string msg) |
|---|
| | 1192 | this(Cutf8 msg) |
|---|
| 1189 | 1193 | { |
|---|
| 1190 | 1194 | super("RegExp: "~msg); |
|---|
| … | … | |
| 1289 | 1293 | alias CharRange!(char_t) range_t; |
|---|
| 1290 | 1294 | alias CharClass!(char_t) cc_t; |
|---|
| | 1295 | alias const(CharClass!(char_t)) c_cc_t; |
|---|
| 1291 | 1296 | |
|---|
| 1292 | 1297 | string_t pattern; |
|---|
| … | … | |
| 1919 | 1924 | } |
|---|
| 1920 | 1925 | |
|---|
| 1921 | | frag_t constructChars(cc_t charclass, predicate_t.Type type) |
|---|
| | 1926 | frag_t constructChars(c_cc_t charclass, predicate_t.Type type) |
|---|
| 1922 | 1927 | { |
|---|
| 1923 | 1928 | debug(tnfa) Stdout.format("constructChars type={}", type); |
|---|
| … | … | |
| 2824 | 2829 | string toString() |
|---|
| 2825 | 2830 | { |
|---|
| 2826 | | string str = "[ "; |
|---|
| | 2831 | string str = "[ ".dup; |
|---|
| 2827 | 2832 | bool first = true; |
|---|
| 2828 | 2833 | foreach ( s; elms ) { |
|---|
| … | … | |
| 3615 | 3620 | --- |
|---|
| 3616 | 3621 | **********************************************************************************************/ |
|---|
| 3617 | | this(char_t[] pattern, char_t[] attributes=null) |
|---|
| | 3622 | this(const(char_t)[] pattern, const(char_t)[] attributes=null) |
|---|
| 3618 | 3623 | { |
|---|
| 3619 | 3624 | this(pattern, false, true); |
|---|
| … | … | |
| 3621 | 3626 | |
|---|
| 3622 | 3627 | /** ditto */ |
|---|
| 3623 | | this(char_t[] pattern, bool swapMBS, bool unanchored, bool printNFA=false) |
|---|
| | 3628 | this(const(char_t)[] pattern, bool swapMBS, bool unanchored, bool printNFA=false) |
|---|
| 3624 | 3629 | { |
|---|
| 3625 | 3630 | pattern_ = pattern; |
|---|
| … | … | |
| 3655 | 3660 | --- |
|---|
| 3656 | 3661 | **********************************************************************************************/ |
|---|
| 3657 | | static RegExpT!(char_t) opCall(char_t[] pattern, char_t[] attributes = null) |
|---|
| | 3662 | static RegExpT!(char_t) opCall(const(char_t)[] pattern, const(char_t)[] attributes = null) |
|---|
| 3658 | 3663 | { |
|---|
| 3659 | 3664 | return new RegExpT!(char_t)(pattern, attributes); |
|---|
| … | … | |
| 3680 | 3685 | --- |
|---|
| 3681 | 3686 | **********************************************************************************************/ |
|---|
| 3682 | | public RegExpT!(char_t) search(char_t[] input) |
|---|
| | 3687 | public RegExpT!(char_t) search(const(char_t)[] input) |
|---|
| 3683 | 3688 | { |
|---|
| 3684 | 3689 | input_ = input; |
|---|
| … | … | |
| 3701 | 3706 | Returns: false for no match, true for match |
|---|
| 3702 | 3707 | **********************************************************************************************/ |
|---|
| 3703 | | bool test(char_t[] input) |
|---|
| | 3708 | bool test(const(char_t)[] input) |
|---|
| 3704 | 3709 | { |
|---|
| 3705 | 3710 | this.input_ = input; |
|---|
| … | … | |
| 3907 | 3912 | Slice of input for the requested submatch, or null if no such submatch exists. |
|---|
| 3908 | 3913 | **********************************************************************************************/ |
|---|
| 3909 | | char_t[] match(uint index) |
|---|
| | 3914 | const(char_t)[] match(uint index) |
|---|
| 3910 | 3915 | { |
|---|
| 3911 | 3916 | if ( index > tdfa_.num_tags ) |
|---|
| … | … | |
| 3919 | 3924 | |
|---|
| 3920 | 3925 | /** ditto */ |
|---|
| 3921 | | char_t[] opIndex(uint index) |
|---|
| | 3926 | const(char_t)[] opIndex(uint index) |
|---|
| 3922 | 3927 | { |
|---|
| 3923 | 3928 | return match(index); |
|---|
| … | … | |
| 3928 | 3933 | If no match was found, null is returned. |
|---|
| 3929 | 3934 | **********************************************************************************************/ |
|---|
| 3930 | | char_t[] pre() |
|---|
| | 3935 | const(char_t)[] pre() |
|---|
| 3931 | 3936 | { |
|---|
| 3932 | 3937 | auto start = registers_[0]; |
|---|
| … | … | |
| 3940 | 3945 | If no match was found, the whole slice of the input that was processed in the last test. |
|---|
| 3941 | 3946 | **********************************************************************************************/ |
|---|
| 3942 | | char_t[] post() |
|---|
| | 3947 | const(char_t)[] post() |
|---|
| 3943 | 3948 | { |
|---|
| 3944 | 3949 | if ( registers_[1] >= 0 ) |
|---|
| … | … | |
| 3966 | 3971 | --- |
|---|
| 3967 | 3972 | **********************************************************************************************/ |
|---|
| 3968 | | char_t[][] split(char_t[] input) |
|---|
| 3969 | | { |
|---|
| 3970 | | auto res = new char_t[][PREALLOC]; |
|---|
| | 3973 | const(char_t)[][] split(char_t[] input) |
|---|
| | 3974 | { |
|---|
| | 3975 | auto res = new const(char_t)[][PREALLOC]; |
|---|
| 3971 | 3976 | uint index; |
|---|
| 3972 | | char_t[] tmp = input; |
|---|
| | 3977 | const(char_t)[] tmp = input; |
|---|
| 3973 | 3978 | |
|---|
| 3974 | 3979 | foreach ( r; search(input) ) |
|---|
| … | … | |
| 3989 | 3994 | Returns a copy of the input with all matches replaced by replacement. |
|---|
| 3990 | 3995 | **********************************************************************************************/ |
|---|
| 3991 | | char_t[] replaceAll(char_t[] input, char_t[] replacement, char_t[] output_buffer=null) |
|---|
| 3992 | | { |
|---|
| 3993 | | char_t[] tmp = input; |
|---|
| | 3996 | const(char_t)[] replaceAll(const(char_t)[] input, const(char_t)[] replacement, char_t[] output_buffer=null) |
|---|
| | 3997 | { |
|---|
| | 3998 | const(char_t)[] tmp = input; |
|---|
| 3994 | 3999 | if ( output_buffer.length <= 0 ) |
|---|
| 3995 | 4000 | output_buffer = new char_t[input.length+replacement.length]; |
|---|
| … | … | |
| 4011 | 4016 | Returns a copy of the input with the last match replaced by replacement. |
|---|
| 4012 | 4017 | **********************************************************************************************/ |
|---|
| 4013 | | char_t[] replaceLast(char_t[] input, char_t[] replacement, char_t[] output_buffer=null) |
|---|
| 4014 | | { |
|---|
| 4015 | | char_t[] tmp_pre, tmp_post; |
|---|
| | 4018 | const(char_t)[] replaceLast(const(char_t)[] input, const(char_t)[] replacement, char_t[] output_buffer=null) |
|---|
| | 4019 | { |
|---|
| | 4020 | const(char_t)[] tmp_pre, tmp_post; |
|---|
| 4016 | 4021 | if ( output_buffer.length <= 0 ) |
|---|
| 4017 | 4022 | output_buffer = new char_t[input.length+replacement.length]; |
|---|
| … | … | |
| 4037 | 4042 | Returns a copy of the input with the first match replaced by replacement. |
|---|
| 4038 | 4043 | **********************************************************************************************/ |
|---|
| 4039 | | char_t[] replaceFirst(char_t[] input, char_t[] replacement, char_t[] output_buffer=null) |
|---|
| 4040 | | { |
|---|
| 4041 | | char_t[] tmp = input; |
|---|
| | 4044 | const(char_t)[] replaceFirst(const(char_t)[] input, const(char_t)[] replacement, char_t[] output_buffer=null) |
|---|
| | 4045 | { |
|---|
| | 4046 | const(char_t)[] tmp = input; |
|---|
| 4042 | 4047 | if ( output_buffer.length <= 0 ) |
|---|
| 4043 | 4048 | output_buffer = new char_t[input.length+replacement.length]; |
|---|
| … | … | |
| 4059 | 4064 | Calls dg for each match and replaces it with dg's return value. |
|---|
| 4060 | 4065 | **********************************************************************************************/ |
|---|
| 4061 | | char_t[] replaceAll(char_t[] input, char_t[] delegate(RegExpT!(char_t)) dg, char_t[] output_buffer=null) |
|---|
| 4062 | | { |
|---|
| 4063 | | char_t[] tmp = input; |
|---|
| | 4066 | const(char_t)[] replaceAll(const(char_t)[] input, char_t[] delegate(RegExpT!(char_t)) dg, char_t[] output_buffer=null) |
|---|
| | 4067 | { |
|---|
| | 4068 | const(char_t)[] tmp = input; |
|---|
| 4064 | 4069 | uint offset; |
|---|
| 4065 | 4070 | if ( output_buffer.length <= 0 ) |
|---|
| … | … | |
| 4083 | 4088 | **********************************************************************************************/ |
|---|
| 4084 | 4089 | // TODO: input-end special case |
|---|
| 4085 | | string compileToD(string func_name = "match", bool lexer=false) |
|---|
| 4086 | | { |
|---|
| 4087 | | string code; |
|---|
| 4088 | | string str_type; |
|---|
| | 4090 | Cutf8 compileToD(Cutf8 func_name = "match", bool lexer=false) |
|---|
| | 4091 | { |
|---|
| | 4092 | Cutf8 code; |
|---|
| | 4093 | Cutf8 str_type; |
|---|
| 4089 | 4094 | static if ( is(char_t == char) ) |
|---|
| 4090 | 4095 | str_type = "char[]"; |
|---|
| … | … | |
| 4303 | 4308 | private: |
|---|
| 4304 | 4309 | const int PREALLOC = 16; |
|---|
| 4305 | | char_t[] input_, |
|---|
| 4306 | | pattern_; |
|---|
| 4307 | | |
|---|
| 4308 | | string compileCommand(Layout!(char) layout, tdfa_t.Command cmd, char_t[] indent) |
|---|
| | 4310 | const(char_t)[] input_, |
|---|
| | 4311 | pattern_; |
|---|
| | 4312 | |
|---|
| | 4313 | string compileCommand(Layout!(char) layout, tdfa_t.Command cmd, const(char_t)[] indent) |
|---|
| 4309 | 4314 | { |
|---|
| 4310 | 4315 | string code, |
|---|
| … | … | |
| 4352 | 4357 | size_t idx; /// index in string of where error occurred |
|---|
| 4353 | 4358 | |
|---|
| 4354 | | this(char[] s, size_t i) |
|---|
| | 4359 | this(Cutf8 s, size_t i) |
|---|
| 4355 | 4360 | { |
|---|
| 4356 | 4361 | idx = i; |
|---|
| … | … | |
| 4467 | 4472 | body |
|---|
| 4468 | 4473 | { |
|---|
| 4469 | | char[] msg; |
|---|
| | 4474 | Cutf8 msg; |
|---|
| 4470 | 4475 | dchar V; |
|---|
| 4471 | 4476 | size_t i = idx; |
|---|
| r3890 |
r3893 |
|
| 308 | 308 | ******************************************************************************/ |
|---|
| 309 | 309 | |
|---|
| | 310 | uint locate(T, U=uint) (const(T)[] source, T match, U start=0) |
|---|
| | 311 | {return locate!(T) (source, match, start);} |
|---|
| | 312 | |
|---|
| 310 | 313 | uint locate(T, U=uint) (T[] source, T match, U start=0) |
|---|
| 311 | 314 | {return locate!(T) (source, match, start);} |
|---|
| 312 | 315 | |
|---|
| 313 | | uint locate(T) (T[] source, T match, uint start=0) |
|---|
| | 316 | uint locate(T) (const(T)[] source, T match, uint start=0) |
|---|
| 314 | 317 | { |
|---|
| 315 | 318 | if (start > source.length) |
|---|
| … | … | |
| 354 | 357 | {return locatePattern!(T) (source, match, start);} |
|---|
| 355 | 358 | |
|---|
| 356 | | uint locatePattern(T) (T[] source, T[] match, uint start=0) |
|---|
| | 359 | uint locatePattern(T) (const(T)[] source, const(T)[] match, uint start=0) |
|---|
| 357 | 360 | { |
|---|
| 358 | 361 | uint idx; |
|---|
| 359 | | T* p = source.ptr + start; |
|---|
| | 362 | const(T)* p = source.ptr + start; |
|---|
| 360 | 363 | uint extent = source.length - start - match.length + 1; |
|---|
| 361 | 364 | |
|---|
| … | … | |
| 693 | 696 | {return indexOf!(T) (str, match, length);} |
|---|
| 694 | 697 | |
|---|
| 695 | | uint indexOf(T) (T* str, T match, uint length) |
|---|
| | 698 | uint indexOf(T) (const(T)* str, T match, uint length) |
|---|
| 696 | 699 | { |
|---|
| 697 | 700 | version (D_InlineAsm_X86) |
|---|
| … | … | |
| 939 | 942 | ******************************************************************************/ |
|---|
| 940 | 943 | |
|---|
| 941 | | PatternFruct!(T) patterns(T) (T[] src, T[] pattern, T[] sub=null) |
|---|
| | 944 | PatternFruct!(T) patterns(T) (const(T)[] src, const(T)[] pattern, const(T)[] sub=null) |
|---|
| 942 | 945 | { |
|---|
| 943 | 946 | PatternFruct!(T) elements; |
|---|
| … | … | |
| 1338 | 1341 | private struct PatternFruct(T) |
|---|
| 1339 | 1342 | { |
|---|
| 1340 | | private T[] src, |
|---|
| | 1343 | private const(T)[] src, |
|---|
| 1341 | 1344 | sub, |
|---|
| 1342 | 1345 | pattern; |
|---|
| 1343 | 1346 | |
|---|
| 1344 | | int opApply (int delegate (ref T[] token) dg) |
|---|
| | 1347 | int opApply (int delegate (ref const(T)[] token) dg) |
|---|
| 1345 | 1348 | { |
|---|
| 1346 | 1349 | uint ret, |
|---|
| 1347 | 1350 | pos, |
|---|
| 1348 | 1351 | mark; |
|---|
| 1349 | | T[] token; |
|---|
| | 1352 | const(T)[] token; |
|---|
| 1350 | 1353 | |
|---|
| 1351 | 1354 | // optimize for single-element pattern |
|---|
Download in other formats:
|
 |