fparsec / main (http://quanttec.com/fparsec)

The main development repository for FParsec.

Clone this repository (size: 1.1 MB): HTTPS / SSH
$ hg clone http://bitbucket.org/fparsec/main/
commit 83: 8a4c0be8b4e6
parent 82: 5cef9c72fc5c
branch: default
BEHAVIOUR CHANGE: accept non-positive lineOffset arguments for the State.Advance[To] overloads
Stephan Tolksdorf / stolksdorf
4 months ago

Changed (Δ1.0 KB):

raw changeset »

FParsecCS/State.cs (18 lines added, 30 lines removed)

FParsecCS/StateLT.cs (18 lines added, 30 lines removed)

Up to file-list FParsecCS/State.cs:

@@ -86,18 +86,14 @@ public sealed unsafe class State<TUserSt
86
86
        return new State<TUserState>(Iter.Advance(charOffset), newData);
87
87
    }
88
88
    public State<TUserState> Advance(int charOffset, int lineOffset, int newColumnMinus1) {
89
        if (lineOffset > 0) {
90
            long newLineBegin = Iter.Index + charOffset - newColumnMinus1;
91
            var newData = new Data(data.Line + lineOffset, newLineBegin, data.UserState, data.StreamName);
92
            return new State<TUserState>(Iter.Advance(charOffset), newData);
93
        } else return Advance(charOffset);
89
        long newLineBegin = Iter.Index + charOffset - newColumnMinus1;
90
        var newData = new Data(data.Line + lineOffset, newLineBegin, data.UserState, data.StreamName);
91
        return new State<TUserState>(Iter.Advance(charOffset), newData);
94
92
    }
95
93
    public State<TUserState> Advance(int charOffset, int lineOffset, int newColumnMinus1, TUserState userState) {
96
        if (lineOffset > 0) {
97
            long newLineBegin = Iter.Index + charOffset - newColumnMinus1;
98
            var newData = new Data(data.Line + lineOffset, newLineBegin,      userState, data.StreamName);
99
            return new State<TUserState>(Iter.Advance(charOffset), newData);
100
        } else return Advance(charOffset, userState);
94
        long newLineBegin = Iter.Index + charOffset - newColumnMinus1;
95
        var newData = new Data(data.Line + lineOffset, newLineBegin,      userState, data.StreamName);
96
        return new State<TUserState>(Iter.Advance(charOffset), newData);
101
97
    }
102
98
103
99
    internal State<TUserState> AdvanceTo(char* ptr) {
@@ -132,36 +128,28 @@ public sealed unsafe class State<TUserSt
132
128
        return new State<TUserState>(iter, newData);
133
129
    }
134
130
    public State<TUserState> AdvanceTo(CharStream.Iterator iter, int lineOffset, int newColumnMinus1) {
135
        if (lineOffset > 0) {
136
            var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1, data.UserState, data.StreamName);
137
            return new State<TUserState>(iter, newData);
138
        } else return AdvanceTo(iter);
131
        var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1, data.UserState, data.StreamName);
132
        return new State<TUserState>(iter, newData);
139
133
    }
140
134
    public State<TUserState> AdvanceTo(CharStream.Iterator iter, long lineOffset, long newColumnMinus1) {
141
        if (lineOffset > 0) {
142
            var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1, data.UserState, data.StreamName);
143
            return new State<TUserState>(iter, newData);
144
        } else return AdvanceTo(iter);
135
        var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1, data.UserState, data.StreamName);
136
        return new State<TUserState>(iter, newData);
145
137
    }
146
138
    public State<TUserState> AdvanceTo(CharStream.Iterator iter, uint lineOffset, uint newColumnMinus1) {
147
            var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1, data.UserState, data.StreamName);
148
            return new State<TUserState>(iter, newData);
139
        var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1, data.UserState, data.StreamName);
140
        return new State<TUserState>(iter, newData);
149
141
    }
150
142
    public State<TUserState> AdvanceTo(CharStream.Iterator iter, int lineOffset, int newColumnMinus1, TUserState userState) {
151
        if (lineOffset > 0) {
152
            var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1,      userState, data.StreamName);
153
            return new State<TUserState>(iter, newData);
154
        } else return AdvanceTo(iter);
143
        var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1,      userState, data.StreamName);
144
        return new State<TUserState>(iter, newData);
155
145
    }
156
146
    public State<TUserState> AdvanceTo(CharStream.Iterator iter, long lineOffset, long newColumnMinus1, TUserState userState) {
157
        if (lineOffset > 0) {
158
            var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1,      userState, data.StreamName);
159
            return new State<TUserState>(iter, newData);
160
        } else return AdvanceTo(iter);
147
        var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1,      userState, data.StreamName);
148
        return new State<TUserState>(iter, newData);
161
149
    }
162
150
    public State<TUserState> AdvanceTo(CharStream.Iterator iter, uint lineOffset, uint newColumnMinus1, TUserState userState) {
163
            var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1,      userState, data.StreamName);
164
            return new State<TUserState>(iter, newData);
151
        var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1,      userState, data.StreamName);
152
        return new State<TUserState>(iter, newData);
165
153
    }
166
154
167
155
    public State<TUserState> WithUserState(TUserState userState) {

Up to file-list FParsecCS/StateLT.cs:

@@ -90,18 +90,14 @@ public sealed class State<TUserState> :
90
90
        return new State<TUserState>(Iter.Advance(charOffset), newData);
91
91
    }
92
92
    public State<TUserState> Advance(int charOffset, int lineOffset, int newColumnMinus1) {
93
        if (lineOffset > 0) {
94
            long newLineBegin = Iter.Index + charOffset - newColumnMinus1;
95
            var newData = new Data(data.Line + lineOffset, newLineBegin, data.UserState, data.StreamName);
96
            return new State<TUserState>(Iter.Advance(charOffset), newData);
97
        } else return Advance(charOffset);
93
        long newLineBegin = Iter.Index + charOffset - newColumnMinus1;
94
        var newData = new Data(data.Line + lineOffset, newLineBegin, data.UserState, data.StreamName);
95
        return new State<TUserState>(Iter.Advance(charOffset), newData);
98
96
    }
99
97
    public State<TUserState> Advance(int charOffset, int lineOffset, int newColumnMinus1, TUserState userState) {
100
        if (lineOffset > 0) {
101
            long newLineBegin = Iter.Index + charOffset - newColumnMinus1;
102
            var newData = new Data(data.Line + lineOffset, newLineBegin,      userState, data.StreamName);
103
            return new State<TUserState>(Iter.Advance(charOffset), newData);
104
        } else return Advance(charOffset, userState);
98
        long newLineBegin = Iter.Index + charOffset - newColumnMinus1;
99
        var newData = new Data(data.Line + lineOffset, newLineBegin,      userState, data.StreamName);
100
        return new State<TUserState>(Iter.Advance(charOffset), newData);
105
101
    }
106
102
107
103
    internal State<TUserState> AdvanceTo(int idx) {
@@ -132,36 +128,28 @@ public sealed class State<TUserState> :
132
128
        return new State<TUserState>(iter, newData);
133
129
    }
134
130
    public State<TUserState> AdvanceTo(CharStream.Iterator iter, int lineOffset, int newColumnMinus1) {
135
        if (lineOffset > 0) {
136
            var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1, data.UserState, data.StreamName);
137
            return new State<TUserState>(iter, newData);
138
        } else return AdvanceTo(iter);
131
        var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1, data.UserState, data.StreamName);
132
        return new State<TUserState>(iter, newData);
139
133
    }
140
134
    public State<TUserState> AdvanceTo(CharStream.Iterator iter, long lineOffset, long newColumnMinus1) {
141
        if (lineOffset > 0) {
142
            var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1, data.UserState, data.StreamName);
143
            return new State<TUserState>(iter, newData);
144
        } else return AdvanceTo(iter);
135
        var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1, data.UserState, data.StreamName);
136
        return new State<TUserState>(iter, newData);
145
137
    }
146
138
    public State<TUserState> AdvanceTo(CharStream.Iterator iter, uint lineOffset, uint newColumnMinus1) {
147
            var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1, data.UserState, data.StreamName);
148
            return new State<TUserState>(iter, newData);
139
        var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1, data.UserState, data.StreamName);
140
        return new State<TUserState>(iter, newData);
149
141
    }
150
142
    public State<TUserState> AdvanceTo(CharStream.Iterator iter, int lineOffset, int newColumnMinus1, TUserState userState) {
151
        if (lineOffset > 0) {
152
            var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1,      userState, data.StreamName);
153
            return new State<TUserState>(iter, newData);
154
        } else return AdvanceTo(iter);
143
        var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1,      userState, data.StreamName);
144
        return new State<TUserState>(iter, newData);
155
145
    }
156
146
    public State<TUserState> AdvanceTo(CharStream.Iterator iter, long lineOffset, long newColumnMinus1, TUserState userState) {
157
        if (lineOffset > 0) {
158
            var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1,      userState, data.StreamName);
159
            return new State<TUserState>(iter, newData);
160
        } else return AdvanceTo(iter);
147
        var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1,      userState, data.StreamName);
148
        return new State<TUserState>(iter, newData);
161
149
    }
162
150
    public State<TUserState> AdvanceTo(CharStream.Iterator iter, uint lineOffset, uint newColumnMinus1, TUserState userState) {
163
            var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1,      userState, data.StreamName);
164
            return new State<TUserState>(iter, newData);
151
        var newData = new Data(data.Line + lineOffset, iter.Index - newColumnMinus1,      userState, data.StreamName);
152
        return new State<TUserState>(iter, newData);
165
153
    }
166
154
167
155
    public State<TUserState> WithUserState(TUserState userState) {