Browse Source

- Simplified parser classes, removed unnecessary classes, improved code quality

- the TokenStream now no longer has any memory at all; its input is a CharStream which has peek() and next() methods, the TokenStream doesn't store a single character, making it stateless
- Added flyweight token support, decreasing memory usage
Stan Hebben 6 years ago
parent
commit
736d9f2f8c
31 changed files with 434 additions and 504 deletions
  1. 5
    6
      Parser/src/main/java/org/openzen/zenscript/lexer/CharReader.java
  2. 61
    0
      Parser/src/main/java/org/openzen/zenscript/lexer/CountingCharReader.java
  3. 51
    16
      Parser/src/main/java/org/openzen/zenscript/lexer/LLParserTokenStream.java
  4. 35
    0
      Parser/src/main/java/org/openzen/zenscript/lexer/ReaderCharReader.java
  5. 32
    0
      Parser/src/main/java/org/openzen/zenscript/lexer/StringCharReader.java
  6. 27
    139
      Parser/src/main/java/org/openzen/zenscript/lexer/TokenParser.java
  7. 0
    31
      Parser/src/main/java/org/openzen/zenscript/lexer/TokenStream.java
  8. 2
    12
      Parser/src/main/java/org/openzen/zenscript/lexer/WhitespaceFilteringParser.java
  9. 7
    76
      Parser/src/main/java/org/openzen/zenscript/lexer/ZSTokenFactory.java
  10. 7
    16
      Parser/src/main/java/org/openzen/zenscript/lexer/ZSTokenParser.java
  11. 0
    22
      Parser/src/main/java/org/openzen/zenscript/lexer/ZSTokenStream.java
  12. 145
    122
      Parser/src/main/java/org/openzen/zenscript/lexer/ZSTokenType.java
  13. 2
    2
      Parser/src/main/java/org/openzen/zenscript/parser/ParsedDefinition.java
  14. 1
    2
      Parser/src/main/java/org/openzen/zenscript/parser/ParsedFile.java
  15. 2
    2
      Parser/src/main/java/org/openzen/zenscript/parser/ParsedImport.java
  16. 2
    2
      Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedAlias.java
  17. 2
    2
      Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedClass.java
  18. 2
    2
      Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedEnum.java
  19. 2
    2
      Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedEnumConstant.java
  20. 2
    2
      Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedExpansion.java
  21. 2
    2
      Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedFunction.java
  22. 2
    2
      Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedFunctionHeader.java
  23. 2
    3
      Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedGenericParameter.java
  24. 2
    2
      Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedInterface.java
  25. 2
    2
      Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedStruct.java
  26. 2
    2
      Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedVariant.java
  27. 2
    2
      Parser/src/main/java/org/openzen/zenscript/parser/expression/ParsedCallArguments.java
  28. 17
    17
      Parser/src/main/java/org/openzen/zenscript/parser/expression/ParsedExpression.java
  29. 2
    2
      Parser/src/main/java/org/openzen/zenscript/parser/member/ParsedDefinitionMember.java
  30. 6
    6
      Parser/src/main/java/org/openzen/zenscript/parser/statements/ParsedStatement.java
  31. 8
    8
      Parser/src/main/java/org/openzen/zenscript/parser/type/IParsedType.java

Parser/src/main/java/org/openzen/zenscript/lexer/MemoryTokenStream.java → Parser/src/main/java/org/openzen/zenscript/lexer/CharReader.java View File

@@ -5,15 +5,14 @@
5 5
  */
6 6
 package org.openzen.zenscript.lexer;
7 7
 
8
+import java.io.IOException;
9
+
8 10
 /**
9 11
  *
10 12
  * @author Hoofdgebruiker
11 13
  */
12
-public interface MemoryTokenStream<TT extends TokenType, T extends Token<TT>>
13
-		extends TokenStream<TT, T> {
14
-	void pushMark();
15
-	
16
-	void popMark();
14
+public interface CharReader {
15
+	int peek() throws IOException;
17 16
 	
18
-	void reset();
17
+	int next() throws IOException;
19 18
 }

+ 61
- 0
Parser/src/main/java/org/openzen/zenscript/lexer/CountingCharReader.java View File

@@ -0,0 +1,61 @@
1
+package org.openzen.zenscript.lexer;
2
+
3
+import java.io.IOException;
4
+import org.openzen.zenscript.shared.CodePosition;
5
+
6
+/*
7
+ * To change this license header, choose License Headers in Project Properties.
8
+ * To change this template file, choose Tools | Templates
9
+ * and open the template in the editor.
10
+ */
11
+
12
+/**
13
+ *
14
+ * @author Hoofdgebruiker
15
+ */
16
+public class CountingCharReader implements CharReader {
17
+	private final CharReader reader;
18
+	private final String filename;
19
+	private final int tabSize;
20
+	
21
+	private int line;
22
+	private int lineOffset;
23
+
24
+	public CountingCharReader(CharReader reader, String filename, int tabSize)
25
+	{
26
+		this.reader = reader;
27
+		this.filename = filename;
28
+		this.tabSize = tabSize;
29
+		
30
+		line = 1;
31
+		lineOffset = 1;
32
+	}
33
+	
34
+	public CodePosition getPosition() {
35
+		return new CodePosition(filename, line, lineOffset, line, lineOffset);
36
+	}
37
+
38
+	@Override
39
+	public int peek() throws IOException
40
+	{
41
+		return reader.peek();
42
+	}
43
+
44
+	@Override
45
+	public int next() throws IOException
46
+	{
47
+		int ch = reader.next();
48
+		if (ch == -1)
49
+			return ch;
50
+		
51
+		if (ch == '\n') {
52
+			line++;
53
+			lineOffset = 1;
54
+		} else if (ch == '\t') {
55
+			lineOffset += tabSize;
56
+		} else {
57
+			lineOffset++;
58
+		}
59
+		return ch;
60
+	}
61
+}

Parser/src/main/java/org/openzen/zenscript/lexer/MemoryTokenStreamImpl.java → Parser/src/main/java/org/openzen/zenscript/lexer/LLParserTokenStream.java View File

@@ -8,21 +8,25 @@ package org.openzen.zenscript.lexer;
8 8
 import java.util.LinkedList;
9 9
 import java.util.Stack;
10 10
 import org.openzen.zenscript.shared.CodePosition;
11
+import org.openzen.zenscript.shared.CompileException;
12
+import org.openzen.zenscript.shared.CompileExceptionCode;
11 13
 
12 14
 /**
13 15
  *
14 16
  * @author Hoofdgebruiker
15 17
  */
16
-public abstract class MemoryTokenStreamImpl<TT extends TokenType, T extends Token<TT>> implements TokenStream<TT, T> {
18
+public abstract class LLParserTokenStream<TT extends TokenType, T extends Token<TT>> {
17 19
 	private final TokenStream<TT, T> stream;
18
-    private final LinkedList<TokenParser.PositionedToken<T>> tokenMemory = new LinkedList<>();
20
+    private final LinkedList<PositionedToken> tokenMemory = new LinkedList<>();
19 21
     private final Stack<Integer> marks = new Stack<>();
20 22
 	
23
+	private T next;
21 24
     private int tokenMemoryOffset = 0;
22 25
     private int tokenMemoryCurrent = 0;
23 26
 	
24
-	public MemoryTokenStreamImpl(TokenStream<TT, T> stream) {
27
+	public LLParserTokenStream(TokenStream<TT, T> stream) {
25 28
 		this.stream = stream;
29
+		next = stream.next();
26 30
 	}
27 31
 	
28 32
 	public void pushMark() {
@@ -42,38 +46,34 @@ public abstract class MemoryTokenStreamImpl<TT extends TokenType, T extends Toke
42 46
         tokenMemoryCurrent = marks.pop();
43 47
 	}
44 48
 
45
-	@Override
46 49
 	public T peek() {
47 50
 		if (tokenMemoryCurrent < tokenMemoryOffset + tokenMemory.size()) {
48 51
             return tokenMemory.get((tokenMemoryCurrent) - tokenMemoryOffset).token;
49 52
         } else {
50
-            return stream.peek();
53
+            return next;
51 54
         }
52 55
 	}
53
-
54
-	@Override
55
-	public void replace(TT other) {
56
-		stream.replace(other);
56
+	
57
+	public void replace(T other) {
58
+		next = other;
57 59
 	}
58
-
59
-	@Override
60
+	
60 61
 	public T next() {
61 62
 		if (tokenMemoryCurrent < tokenMemoryOffset + tokenMemory.size()) {
62 63
             return tokenMemory.get((tokenMemoryCurrent++) - tokenMemoryOffset).token;
63 64
         } else {
64
-            T result = stream.peek();
65
+            T result = next;
66
+			next = stream.next();
65 67
             if (marks.isEmpty()) {
66 68
                 tokenMemoryOffset++;
67 69
             } else {
68
-                tokenMemory.add(new TokenParser.PositionedToken<>(stream.getPosition(), stream.peek()));
70
+                tokenMemory.add(new PositionedToken(getPosition(), result));
69 71
             }
70 72
             tokenMemoryCurrent++;
71
-            stream.next();
72 73
 			return result;
73 74
         }
74 75
 	}
75
-
76
-	@Override
76
+	
77 77
 	public CodePosition getPosition() {
78 78
 		if (tokenMemoryCurrent < tokenMemoryOffset + tokenMemory.size()) {
79 79
             return tokenMemory.get((tokenMemoryCurrent) - tokenMemoryOffset).position;
@@ -81,4 +81,39 @@ public abstract class MemoryTokenStreamImpl<TT extends TokenType, T extends Toke
81 81
             return stream.getPosition();
82 82
         }
83 83
 	}
84
+	
85
+	public boolean isNext(TT type) {
86
+		return peek().getType() == type;
87
+	}
88
+	
89
+	public T optional(TT type) {
90
+		if (peek().getType() == type) {
91
+            return next();
92
+        } else {
93
+            return null;
94
+        }
95
+	}
96
+	
97
+	public T required(TT type, String error) throws CompileException {
98
+		T t = peek();
99
+        if (t.getType() == type) {
100
+            return next();
101
+        } else {
102
+			throw new CompileException(getPosition(), CompileExceptionCode.UNEXPECTED_TOKEN, error);
103
+        }
104
+    }
105
+	
106
+	public boolean hasNext() {
107
+		return peek().getType() != stream.getEOF();
108
+	}
109
+	
110
+	private class PositionedToken {
111
+		public final CodePosition position;
112
+		public final T token;
113
+		
114
+		public PositionedToken(CodePosition position, T token) {
115
+			this.position = position;
116
+			this.token = token;
117
+		}
118
+	}
84 119
 }

+ 35
- 0
Parser/src/main/java/org/openzen/zenscript/lexer/ReaderCharReader.java View File

@@ -0,0 +1,35 @@
1
+/*
2
+ * To change this license header, choose License Headers in Project Properties.
3
+ * To change this template file, choose Tools | Templates
4
+ * and open the template in the editor.
5
+ */
6
+package org.openzen.zenscript.lexer;
7
+
8
+import java.io.IOException;
9
+import java.io.Reader;
10
+
11
+/**
12
+ *
13
+ * @author Hoofdgebruiker
14
+ */
15
+public class ReaderCharReader implements CharReader {
16
+	private final Reader reader;
17
+	private int next;
18
+	
19
+	public ReaderCharReader(Reader reader) throws IOException {
20
+		this.reader = reader;
21
+		next = reader.read();
22
+	}
23
+	
24
+	@Override
25
+	public int peek() {
26
+		return next;
27
+	}
28
+
29
+	@Override
30
+	public int next() throws IOException {
31
+		int result = next;
32
+		next = reader.read();
33
+		return result;
34
+	}
35
+}

+ 32
- 0
Parser/src/main/java/org/openzen/zenscript/lexer/StringCharReader.java View File

@@ -0,0 +1,32 @@
1
+/*
2
+ * To change this license header, choose License Headers in Project Properties.
3
+ * To change this template file, choose Tools | Templates
4
+ * and open the template in the editor.
5
+ */
6
+package org.openzen.zenscript.lexer;
7
+
8
+import java.io.IOException;
9
+
10
+/**
11
+ *
12
+ * @author Hoofdgebruiker
13
+ */
14
+public class StringCharReader implements CharReader {
15
+	private final char[] data;
16
+	private int index;
17
+	
18
+	public StringCharReader(String data) {
19
+		this.data = data.toCharArray();
20
+		this.index = 0;
21
+	}
22
+	
23
+	@Override
24
+	public int peek() {
25
+		return index >= data.length ? -1 : data[index];
26
+	}
27
+
28
+	@Override
29
+	public int next() throws IOException {
30
+		return index >= data.length ? -1 : data[index++];
31
+	}
32
+}

+ 27
- 139
Parser/src/main/java/org/openzen/zenscript/lexer/TokenParser.java View File

@@ -2,8 +2,6 @@
2 2
 package org.openzen.zenscript.lexer;
3 3
 
4 4
 import java.io.IOException;
5
-import java.io.Reader;
6
-import java.io.StringReader;
7 5
 import org.openzen.zenscript.shared.CodePosition;
8 6
 import org.openzen.zenscript.shared.CompileException;
9 7
 import org.openzen.zenscript.shared.CompileExceptionCode;
@@ -20,20 +18,12 @@ import org.openzen.zenscript.shared.CompileExceptionCode;
20 18
  */
21 19
 public class TokenParser<T extends Token<TT>, TT extends TokenType> implements TokenStream<TT, T>
22 20
 {
23
-	private final String filename;
24
-    private final CountingReader reader;
21
+    private final CountingCharReader reader;
25 22
     private final CompiledDFA<TT> dfa;
26 23
 	private final TT eof;
27 24
 	private final TT invalid;
28
-	private final int tabSize = 4;
29 25
 	private final TokenFactory<T, TT> factory;
30 26
 	
31
-    private PositionedToken<T> next;
32
-	
33
-    private int nextChar;
34
-    private int line;
35
-    private int lineOffset;
36
-	
37 27
     /**
38 28
      * Creates a token stream using the specified reader and DFA.
39 29
      *
@@ -44,7 +34,7 @@ public class TokenParser<T extends Token<TT>, TT extends TokenType> implements T
44 34
      */
45 35
     public TokenParser(
46 36
 			String filename,
47
-			Reader reader, 
37
+			CharReader reader, 
48 38
 			CompiledDFA<TT> dfa,
49 39
 			TT eof,
50 40
 			TT invalid,
@@ -53,22 +43,11 @@ public class TokenParser<T extends Token<TT>, TT extends TokenType> implements T
53 43
 		if (eof.isWhitespace()) // important for the advance() method
54 44
 			throw new IllegalArgumentException("EOF cannot be whitespace");
55 45
 		
56
-        this.reader = new CountingReader(reader);
46
+        this.reader = new CountingCharReader(reader, filename, 4);
57 47
         this.dfa = dfa;
58
-		this.filename = filename;
59 48
 		this.eof = eof;
60 49
 		this.invalid = invalid;
61 50
 		this.factory = factory;
62
-		
63
-		try {
64
-	        nextChar = this.reader.read();
65
-		} catch (IOException ex) {
66
-			throw new CompileException(getPosition(), CompileExceptionCode.INTERNAL_ERROR, ex.getMessage());
67
-		}
68
-		
69
-        line = 1;
70
-        lineOffset = 1;
71
-        advance();
72 51
     }
73 52
 
74 53
     /**
@@ -81,150 +60,59 @@ public class TokenParser<T extends Token<TT>, TT extends TokenType> implements T
81 60
      */
82 61
     public TokenParser(String filename, String data, CompiledDFA<TT> dfa, TT eof, TT invalid, TokenFactory<T, TT> factory)
83 62
 	{
84
-        this(filename, new StringReader(data), dfa, eof, invalid, factory);
85
-    }
86
-	
87
-	@Override
88
-    public T peek()
89
-	{
90
-        return next.token;
63
+        this(filename, new StringCharReader(data), dfa, eof, invalid, factory);
91 64
     }
92 65
 	
93 66
 	@Override
94 67
 	public CodePosition getPosition()
95 68
 	{
96
-		return next.position;
69
+		return reader.getPosition();
97 70
 	}
98 71
 	
99
-	/**
100
-	 * Replaces the current token with another one. Used to split composite tokens.
101
-	 * 
102
-	 * @param other 
103
-	 */
104
-	public void replace(TT other) {
105
-		next = new PositionedToken(
106
-				next.position,
107
-				factory.create(
108
-						other,
109
-						next.token.getContent()));
72
+	public boolean hasNext() {
73
+		try {
74
+			return reader.peek() >= 0;
75
+		} catch (IOException ex) {
76
+			return false;
77
+		}
110 78
 	}
111
-
112
-	@Override
113
-    public T next()
114
-	{
115
-        T result = next.token;
116
-		advance();
117
-		return result;
118
-    }
119 79
 	
120 80
 	@Override
121 81
 	public TT getEOF() {
122 82
 		return eof;
123 83
 	}
124 84
 	
125
-    // =======================
126
-    // === Private methods ===
127
-    // =======================
128
-	
129
-    private void advance()
85
+	@Override
86
+    public T next()
130 87
 	{
131
-        if (nextChar < 0) {
132
-			CodePosition position = new CodePosition(
133
-					filename,
134
-					line,
135
-					lineOffset,
136
-					line,
137
-					lineOffset);
88
+		try {
89
+			if (reader.peek() < 0)
90
+				return factory.create(eof, "");
138 91
 			
139
-            next = new PositionedToken(position, factory.create(eof, ""));
140
-            return;
141
-        }
142
-		
143
-        try {
144 92
             int state = 0;
145 93
             StringBuilder value = new StringBuilder();
146
-            int fromLine = line;
147
-            int fromLineOffset = lineOffset;
148
-            while (dfa.transitions[state].containsKey(nextChar)) {
149
-                value.append((char)nextChar);
150
-                state = dfa.transitions[state].get(nextChar);
151
-                line = reader.line;
152
-                lineOffset = reader.lineOffset;
153
-                nextChar = reader.read();
94
+            while (dfa.transitions[state].containsKey(reader.peek())) {
95
+				char c = (char) reader.next();
96
+                value.append(c);
97
+                state = dfa.transitions[state].get(c);
154 98
             }
155 99
 			
156
-			if (line < 0)
157
-				throw new IllegalStateException("Line cannot be negative");
158
-			
159
-			CodePosition position = new CodePosition(filename, fromLine, fromLineOffset, line, lineOffset);
160 100
             if (dfa.finals[state] != null) {
161 101
                 if (state == 0) {
162
-					value.append((char) nextChar);
163
-					next = new PositionedToken(position, factory.create(invalid, value.toString()));
164
-					nextChar = reader.read();
102
+					value.append((char) reader.next());
103
+					return factory.create(invalid, value.toString());
165 104
 				}
166 105
 				
167
-				next = new PositionedToken(position, factory.create(dfa.finals[state], value.toString()));
106
+				return factory.create(dfa.finals[state], value.toString());
168 107
             } else {
169
-				if (nextChar < 0 && value.length() == 0)
170
-					return; // happens on comments at the end of files
108
+				if (reader.peek() < 0 && value.length() == 0)
109
+					return factory.create(eof, ""); // happens on comments at the end of files
171 110
 				
172
-				value.append((char) nextChar);
173
-				next = new PositionedToken(position, factory.create(invalid, value.toString()));
174
-				nextChar = reader.read();
111
+				value.append((char) reader.next());
112
+				return factory.create(invalid, value.toString());
175 113
             }
176 114
         } catch (IOException ex) {
177 115
 			throw new CompileException(getPosition(), CompileExceptionCode.INTERNAL_ERROR, ex.getMessage());
178 116
         }
179 117
     }
180
-
181
-    // =============================
182
-    // === Private inner classes ===
183
-    // =============================
184
-
185
-    /**
186
-     * Keeps a line and line offset count.
187
-     */
188
-    private class CountingReader
189
-	{
190
-        private int line;
191
-        private int lineOffset;
192
-        private Reader reader;
193
-        private boolean eof;
194
-
195
-        public CountingReader(Reader reader)
196
-		{
197
-            this.reader = reader;
198
-            line = 1;
199
-            lineOffset = 1;
200
-        }
201
-
202
-        public int read() throws IOException
203
-		{
204
-            int ch = reader.read();
205
-            if (ch == -1) {
206
-                eof = true;
207
-                return ch;
208
-            }
209
-            if (ch == '\n') {
210
-                line++;
211
-                lineOffset = 1;
212
-            } else if (ch == '\t') {
213
-				lineOffset += tabSize;
214
-			} else {
215
-                lineOffset++;
216
-            }
217
-            return ch;
218
-        }
219
-    }
220
-	
221
-	public static class PositionedToken<T> {
222
-		public final CodePosition position;
223
-		public final T token;
224
-		
225
-		public PositionedToken(CodePosition position, T token) {
226
-			this.position = position;
227
-			this.token = token;
228
-		}
229
-	}
230 118
 }

+ 0
- 31
Parser/src/main/java/org/openzen/zenscript/lexer/TokenStream.java View File

@@ -6,43 +6,12 @@
6 6
 package org.openzen.zenscript.lexer;
7 7
 
8 8
 import org.openzen.zenscript.shared.CodePosition;
9
-import org.openzen.zenscript.shared.CompileException;
10
-import org.openzen.zenscript.shared.CompileExceptionCode;
11 9
 
12 10
 /**
13 11
  *
14 12
  * @author Hoofdgebruiker
15 13
  */
16 14
 public interface TokenStream<TT extends TokenType, T extends Token<TT>> {
17
-	T peek();
18
-	
19
-	default boolean isNext(TT type) {
20
-		return peek().getType() == type;
21
-	}
22
-	
23
-	default T optional(TT type) {
24
-		if (peek().getType() == type) {
25
-            return next();
26
-        } else {
27
-            return null;
28
-        }
29
-	}
30
-	
31
-	default T required(TT type, String error) throws CompileException {
32
-		T t = peek();
33
-        if (t.getType() == type) {
34
-            return next();
35
-        } else {
36
-			throw new CompileException(getPosition(), CompileExceptionCode.UNEXPECTED_TOKEN, error);
37
-        }
38
-    }
39
-	
40
-	void replace(TT other);
41
-	
42
-	default boolean hasNext() {
43
-		return peek().getType() != getEOF();
44
-	}
45
-	
46 15
 	T next();
47 16
 	
48 17
 	CodePosition getPosition();

+ 2
- 12
Parser/src/main/java/org/openzen/zenscript/lexer/WhitespaceFilteringParser.java View File

@@ -39,22 +39,12 @@ public class WhitespaceFilteringParser<TT extends TokenType, T extends Token<TT>
39 39
 			whitespace = whitespace.substring(index + 1);
40 40
 			return result;
41 41
 		} else {
42
+			String result = whitespace;
42 43
 			whitespace = "";
43
-			return whitespace;
44
+			return result;
44 45
 		}
45 46
 	}
46 47
 
47
-	@Override
48
-	public T peek() {
49
-		return next;
50
-	}
51
-
52
-	@Override
53
-	public void replace(TT other) {
54
-		stream.replace(other);
55
-		next = peek();
56
-	}
57
-
58 48
 	@Override
59 49
 	public T next() {
60 50
 		T result = next;

+ 7
- 76
Parser/src/main/java/org/openzen/zenscript/lexer/ZSTokenFactory.java View File

@@ -16,89 +16,20 @@ import static org.openzen.zenscript.lexer.ZSTokenType.*;
16 16
 public class ZSTokenFactory implements TokenFactory<ZSToken, ZSTokenType> {
17 17
 	public static final ZSTokenFactory INSTANCE = new ZSTokenFactory();
18 18
 	
19
-	private static final Map<String, ZSTokenType> KEYWORDS = new HashMap<>();
19
+	private static final Map<String, ZSToken> KEYWORDS = new HashMap<>();
20 20
 	
21 21
 	static {
22
-		KEYWORDS.put("import", K_IMPORT);
23
-		KEYWORDS.put("alias", K_ALIAS);
24
-		KEYWORDS.put("class", K_CLASS);
25
-		KEYWORDS.put("interface", K_INTERFACE);
26
-		KEYWORDS.put("enum", K_ENUM);
27
-		KEYWORDS.put("struct", K_STRUCT);
28
-		KEYWORDS.put("expand", K_EXPAND);
29
-		KEYWORDS.put("function", K_FUNCTION);
30
-		KEYWORDS.put("variant", K_VARIANT);
31
-		
32
-		KEYWORDS.put("abstract", K_ABSTRACT);
33
-		KEYWORDS.put("final", K_FINAL);
34
-		KEYWORDS.put("override", K_OVERRIDE);
35
-		KEYWORDS.put("const", K_CONST);
36
-		KEYWORDS.put("private", K_PRIVATE);
37
-		KEYWORDS.put("public", K_PUBLIC);
38
-		KEYWORDS.put("export", K_EXPORT);
39
-		KEYWORDS.put("static", K_STATIC);
40
-		KEYWORDS.put("protected", K_PROTECTED);
41
-		KEYWORDS.put("implicit", K_IMPLICIT);
42
-		KEYWORDS.put("virtual", K_VIRTUAL);
43
-		KEYWORDS.put("extern", K_EXTERN);
44
-		
45
-		KEYWORDS.put("val", K_VAL);
46
-		KEYWORDS.put("var", K_VAR);
47
-		KEYWORDS.put("get", K_GET);
48
-		KEYWORDS.put("implements", K_IMPLEMENTS);
49
-		KEYWORDS.put("set", K_SET);
50
-		
51
-		KEYWORDS.put("void", K_VOID);
52
-		KEYWORDS.put("any", K_ANY);
53
-		KEYWORDS.put("bool", K_BOOL);
54
-		KEYWORDS.put("byte", K_BYTE);
55
-		KEYWORDS.put("sbyte", K_SBYTE);
56
-		KEYWORDS.put("short", K_SHORT);
57
-		KEYWORDS.put("ushort", K_USHORT);
58
-		KEYWORDS.put("int", K_INT);
59
-		KEYWORDS.put("uint", K_UINT);
60
-		KEYWORDS.put("long", K_LONG);
61
-		KEYWORDS.put("ulong", K_ULONG);
62
-		KEYWORDS.put("float", K_FLOAT);
63
-		KEYWORDS.put("double", K_DOUBLE);
64
-		KEYWORDS.put("char", K_CHAR);
65
-		KEYWORDS.put("string", K_STRING);
66
-		
67
-		KEYWORDS.put("if", K_IF);
68
-		KEYWORDS.put("else", K_ELSE);
69
-		KEYWORDS.put("do", K_DO);
70
-		KEYWORDS.put("while", K_WHILE);
71
-		KEYWORDS.put("for", K_FOR);
72
-		KEYWORDS.put("throw", K_THROW);
73
-		KEYWORDS.put("lock", K_LOCK);
74
-		KEYWORDS.put("try", K_TRY);
75
-		KEYWORDS.put("catch", K_CATCH);
76
-		KEYWORDS.put("finally", K_FINALLY);
77
-		KEYWORDS.put("return", K_RETURN);
78
-		KEYWORDS.put("break", K_BREAK);
79
-		KEYWORDS.put("continue", K_CONTINUE);
80
-		KEYWORDS.put("switch", K_SWITCH);
81
-		KEYWORDS.put("case", K_CASE);
82
-		KEYWORDS.put("default", K_DEFAULT);
83
-		
84
-		KEYWORDS.put("in", K_IN);
85
-		KEYWORDS.put("is", K_IS);
86
-		KEYWORDS.put("as", K_AS);
87
-		KEYWORDS.put("match", K_MATCH);
88
-		KEYWORDS.put("throws", K_THROWS);
89
-		
90
-		KEYWORDS.put("this", K_THIS);
91
-		KEYWORDS.put("super", K_SUPER);
92
-		KEYWORDS.put("null", K_NULL);
93
-		KEYWORDS.put("true", K_TRUE);
94
-		KEYWORDS.put("false", K_FALSE);
95
-		KEYWORDS.put("new", K_NEW);
22
+		for (ZSTokenType type : ZSTokenType.values())
23
+			if (type.isKeyword)
24
+				KEYWORDS.put(type.flyweight.content, type.flyweight);
96 25
 	}
97 26
 
98 27
 	@Override
99 28
 	public ZSToken create(ZSTokenType type, String content) {
100 29
 		if (type == T_IDENTIFIER && KEYWORDS.containsKey(content))
101
-			type = KEYWORDS.get(content);
30
+			return KEYWORDS.get(content);
31
+		else if (type.flyweight != null)
32
+			return type.flyweight;
102 33
 		
103 34
 		return new ZSToken(type, content);
104 35
 	}

+ 7
- 16
Parser/src/main/java/org/openzen/zenscript/lexer/ZSTokenParser.java View File

@@ -5,6 +5,7 @@
5 5
  */
6 6
 package org.openzen.zenscript.lexer;
7 7
 
8
+import java.io.IOException;
8 9
 import java.io.Reader;
9 10
 import org.openzen.zenscript.codemodel.WhitespaceInfo;
10 11
 
@@ -12,9 +13,8 @@ import org.openzen.zenscript.codemodel.WhitespaceInfo;
12 13
  *
13 14
  * @author Hoofdgebruiker
14 15
  */
15
-public class ZSTokenParser extends MemoryTokenStreamImpl<ZSTokenType, ZSToken>
16
-		implements ZSTokenStream {
17
-	public static TokenParser<ZSToken, ZSTokenType> createRaw(String filename, Reader reader) {
16
+public class ZSTokenParser extends LLParserTokenStream<ZSTokenType, ZSToken> {
17
+	public static TokenParser<ZSToken, ZSTokenType> createRaw(String filename, CharReader reader) {
18 18
 		return new TokenParser<>(
19 19
 				filename,
20 20
 				reader,
@@ -24,12 +24,12 @@ public class ZSTokenParser extends MemoryTokenStreamImpl<ZSTokenType, ZSToken>
24 24
 				ZSTokenFactory.INSTANCE);
25 25
 	}
26 26
 	
27
-	public static ZSTokenParser create(String filename, Reader reader) {
28
-		return create(filename, new WhitespaceFilteringParser(createRaw(filename, reader)));
27
+	public static ZSTokenParser create(String filename, Reader reader) throws IOException {
28
+		return create(filename, createRaw(filename, new ReaderCharReader(reader)));
29 29
 	}
30 30
 	
31
-	public static ZSTokenParser create(String filename, WhitespaceFilteringParser<ZSTokenType, ZSToken> parser) {
32
-		return new ZSTokenParser(filename, parser);
31
+	public static ZSTokenParser create(String filename, TokenStream<ZSTokenType, ZSToken> tokens) {
32
+		return new ZSTokenParser(filename, new WhitespaceFilteringParser(tokens));
33 33
 	}
34 34
 	
35 35
 	private static final CompiledDFA DFA = CompiledDFA.createLexerDFA(ZSTokenType.values(), ZSTokenType.class);
@@ -44,28 +44,19 @@ public class ZSTokenParser extends MemoryTokenStreamImpl<ZSTokenType, ZSToken>
44 44
 		this.filename = filename;
45 45
 	}
46 46
 	
47
-	@Override
48 47
 	public String getFilename() {
49 48
 		return filename;
50 49
 	}
51 50
 	
52
-	@Override
53 51
 	public String getLastWhitespace() {
54 52
 		return whitespaceFilteringParser.getLastWhitespace();
55 53
 	}
56 54
 	
57
-	@Override
58 55
 	public void skipWhitespaceNewline() {
59 56
 		whitespaceFilteringParser.skipWhitespaceNewline();
60 57
 	}
61 58
 	
62
-	@Override
63 59
 	public WhitespaceInfo collectWhitespaceInfo(String whitespace, boolean skipLineBefore) {
64 60
 		return WhitespaceInfo.from(whitespace, whitespaceFilteringParser.grabWhitespaceLine(), skipLineBefore);
65 61
 	}
66
-	
67
-	@Override
68
-	public ZSTokenType getEOF() {
69
-		return ZSTokenType.EOF;
70
-	}
71 62
 }

+ 0
- 22
Parser/src/main/java/org/openzen/zenscript/lexer/ZSTokenStream.java View File

@@ -1,22 +0,0 @@
1
-/*
2
- * To change this license header, choose License Headers in Project Properties.
3
- * To change this template file, choose Tools | Templates
4
- * and open the template in the editor.
5
- */
6
-package org.openzen.zenscript.lexer;
7
-
8
-import org.openzen.zenscript.codemodel.WhitespaceInfo;
9
-
10
-/**
11
- *
12
- * @author Hoofdgebruiker
13
- */
14
-public interface ZSTokenStream extends MemoryTokenStream<ZSTokenType, ZSToken> {
15
-	String getFilename();
16
-	
17
-	String getLastWhitespace();
18
-	
19
-	void skipWhitespaceNewline();
20
-	
21
-	WhitespaceInfo collectWhitespaceInfo(String whitespace, boolean skipLineBefore);
22
-}

+ 145
- 122
Parser/src/main/java/org/openzen/zenscript/lexer/ZSTokenType.java View File

@@ -19,135 +19,135 @@ public enum ZSTokenType implements TokenType {
19 19
 	T_INT("\\-?(0|[1-9][0-9]*)"),
20 20
 	T_STRING_SQ("\"([^\"\\\\]|\\\\([\'\"\\\\/bfnrt&]|u[0-9a-fA-F]{4}))*\""),
21 21
 	T_STRING_DQ("\'([^\'\\\\]|\\\\([\'\"\\\\/bfnrt&]|u[0-9a-fA-F]{4}))*\'"),
22
-	T_AOPEN("\\{"),
23
-	T_ACLOSE("\\}"),
24
-	T_SQOPEN("\\["),
25
-	T_SQCLOSE("\\]"),
26
-	T_DOT3("\\.\\.\\."),
27
-	T_DOT2("\\.\\."),
28
-	T_DOT("\\."),
29
-	T_COMMA(","),
30
-	T_INCREMENT("\\+\\+"),
31
-	T_ADDASSIGN("\\+="),
32
-	T_ADD("\\+"),
33
-	T_DECREMENT("\\-\\-"),
34
-	T_SUBASSIGN("\\-="),
35
-	T_SUB("\\-"),
36
-	T_CATASSIGN("~="),
37
-	T_CAT("~"),
38
-	T_MULASSIGN("\\*="),
39
-	T_MUL("\\*"),
40
-	T_DIVASSIGN("/="),
41
-	T_DIV("/"),
42
-	T_MODASSIGN("%="),
43
-	T_MOD("%"),
44
-	T_ORASSIGN("\\|="),
45
-	T_OROR("\\|\\|"),
46
-	T_OR("\\|"),
47
-	T_ANDASSIGN("&="),
48
-	T_ANDAND("&&"),
49
-	T_AND("&"),
50
-	T_XORASSIGN("\\^="),
51
-	T_XOR("\\^"),
52
-	T_COALESCE("\\?\\?"),
53
-	T_QUEST("\\?"),
54
-	T_COLON(":"),
55
-	T_BROPEN("\\("),
56
-	T_BRCLOSE("\\)"),
57
-	T_SEMICOLON(";"),
58
-	T_LESSEQ("<="),
59
-	T_SHLASSIGN("<<="),
60
-	T_SHL("<<"),
61
-	T_LESS("<"),
62
-	T_GREATEREQ(">="),
63
-	T_USHR(">>>"),
64
-	T_USHRASSIGN(">>>="),
65
-	T_SHRASSIGN(">>="),
66
-	T_SHR(">>"),
67
-	T_GREATER(">"),
68
-	T_LAMBDA("=>"),
69
-	T_EQUAL3("==="),
70
-	T_EQUAL2("=="),
71
-	T_ASSIGN("="),
72
-	T_NOTEQUAL2("!=="),
73
-	T_NOTEQUAL("!="),
74
-	T_NOT("!"),
75
-	T_DOLLAR("$"),
22
+	T_AOPEN("\\{", "{"),
23
+	T_ACLOSE("\\}", "}"),
24
+	T_SQOPEN("\\[", "["),
25
+	T_SQCLOSE("\\]", "]"),
26
+	T_DOT3("\\.\\.\\.", "..."),
27
+	T_DOT2("\\.\\.", ".."),
28
+	T_DOT("\\.", "."),
29
+	T_COMMA(",", ","),
30
+	T_INCREMENT("\\+\\+", "++"),
31
+	T_ADDASSIGN("\\+=", "+="),
32
+	T_ADD("\\+", "+"),
33
+	T_DECREMENT("\\-\\-", "--"),
34
+	T_SUBASSIGN("\\-=", "-="),
35
+	T_SUB("\\-", "-"),
36
+	T_CATASSIGN("~=", "~="),
37
+	T_CAT("~", "~"),
38
+	T_MULASSIGN("\\*=", "*="),
39
+	T_MUL("\\*", "*"),
40
+	T_DIVASSIGN("/=", "/="),
41
+	T_DIV("/", "/"),
42
+	T_MODASSIGN("%=", "%="),
43
+	T_MOD("%", "%"),
44
+	T_ORASSIGN("\\|=", "|="),
45
+	T_OROR("\\|\\|", "||"),
46
+	T_OR("\\|", "|"),
47
+	T_ANDASSIGN("&=", "&="),
48
+	T_ANDAND("&&", "&&"),
49
+	T_AND("&", "&"),
50
+	T_XORASSIGN("\\^=", "^="),
51
+	T_XOR("\\^", "^"),
52
+	T_COALESCE("\\?\\?", "??"),
53
+	T_QUEST("\\?", "?"),
54
+	T_COLON(":", ":"),
55
+	T_BROPEN("\\(", "("),
56
+	T_BRCLOSE("\\)", ")"),
57
+	T_SEMICOLON(";", ";"),
58
+	T_LESSEQ("<=", "<="),
59
+	T_SHLASSIGN("<<=", "<<="),
60
+	T_SHL("<<", "<<"),
61
+	T_LESS("<", "<"),
62
+	T_GREATEREQ(">=", ">="),
63
+	T_USHR(">>>", ">>>"),
64
+	T_USHRASSIGN(">>>=", ">>>="),
65
+	T_SHRASSIGN(">>=", ">>="),
66
+	T_SHR(">>", ">>"),
67
+	T_GREATER(">", ">"),
68
+	T_LAMBDA("=>", "=>"),
69
+	T_EQUAL3("===", "==="),
70
+	T_EQUAL2("==", "=="),
71
+	T_ASSIGN("=", "="),
72
+	T_NOTEQUAL2("!==", "!=="),
73
+	T_NOTEQUAL("!=", "!="),
74
+	T_NOT("!", "!"),
75
+	T_DOLLAR("$", "$"),
76 76
 	
77
-	K_IMPORT,
78
-	K_ALIAS,
79
-	K_CLASS,
80
-	K_FUNCTION,
81
-	K_INTERFACE,
82
-	K_ENUM,
83
-	K_STRUCT,
84
-	K_EXPAND,
85
-	K_VARIANT,
77
+	K_IMPORT(true, "import"),
78
+	K_ALIAS(true, "alias"),
79
+	K_CLASS(true, "class"),
80
+	K_FUNCTION(true, "function"),
81
+	K_INTERFACE(true, "interface"),
82
+	K_ENUM(true, "enum"),
83
+	K_STRUCT(true, "struct"),
84
+	K_EXPAND(true, "expand"),
85
+	K_VARIANT(true, "variant"),
86 86
 	
87
-	K_ABSTRACT,
88
-	K_FINAL,
89
-	K_OVERRIDE,
90
-	K_CONST,
91
-	K_PRIVATE,
92
-	K_PUBLIC,
93
-	K_EXPORT,
94
-	K_STATIC,
95
-	K_PROTECTED,
96
-	K_IMPLICIT,
97
-	K_VIRTUAL,
98
-	K_EXTERN,
87
+	K_ABSTRACT(true, "abstract"),
88
+	K_FINAL(true, "final"),
89
+	K_OVERRIDE(true, "override"),
90
+	K_CONST(true, "const"),
91
+	K_PRIVATE(true, "private"),
92
+	K_PUBLIC(true, "public"),
93
+	K_EXPORT(true, "export"),
94
+	K_STATIC(true, "static"),
95
+	K_PROTECTED(true, "protected"),
96
+	K_IMPLICIT(true, "implicit"),
97
+	K_VIRTUAL(true, "virtual"),
98
+	K_EXTERN(true, "extern"),
99 99
 	
100
-	K_VAL,
101
-	K_VAR,
102
-	K_GET,
103
-	K_IMPLEMENTS,
104
-	K_SET,
100
+	K_VAL(true, "val"),
101
+	K_VAR(true, "var"),
102
+	K_GET(true, "get"),
103
+	K_IMPLEMENTS(true, "implements"),
104
+	K_SET(true, "set"),
105 105
 	
106
-	K_VOID,
107
-	K_ANY,
108
-	K_BOOL,
109
-	K_BYTE,
110
-	K_SBYTE,
111
-	K_SHORT,
112
-	K_USHORT,
113
-	K_INT,
114
-	K_UINT,
115
-	K_LONG,
116
-	K_ULONG,
117
-	K_FLOAT,
118
-	K_DOUBLE,
119
-	K_CHAR,
120
-	K_STRING,
106
+	K_VOID(true, "void"),
107
+	K_ANY(true, "any"),
108
+	K_BOOL(true, "bool"),
109
+	K_BYTE(true, "byte"),
110
+	K_SBYTE(true, "sbyte"),
111
+	K_SHORT(true, "short"),
112
+	K_USHORT(true, "ushort"),
113
+	K_INT(true, "int"),
114
+	K_UINT(true, "uint"),
115
+	K_LONG(true, "long"),
116
+	K_ULONG(true, "ulong"),
117
+	K_FLOAT(true, "float"),
118
+	K_DOUBLE(true, "double"),
119
+	K_CHAR(true, "char"),
120
+	K_STRING(true, "string"),
121 121
 	
122
-	K_IF,
123
-	K_ELSE,
124
-	K_DO,
125
-	K_WHILE,
126
-	K_FOR,
127
-	K_THROW,
128
-	K_LOCK,
129
-	K_TRY,
130
-	K_CATCH,
131
-	K_FINALLY,
132
-	K_RETURN,
133
-	K_BREAK,
134
-	K_CONTINUE,
135
-	K_SWITCH,
136
-	K_CASE,
137
-	K_DEFAULT,
122
+	K_IF(true, "if"),
123
+	K_ELSE(true, "else"),
124
+	K_DO(true, "do"),
125
+	K_WHILE(true, "while"),
126
+	K_FOR(true, "for"),
127
+	K_THROW(true, "throw"),
128
+	K_LOCK(true, "lock"),
129
+	K_TRY(true, "try"),
130
+	K_CATCH(true, "catch"),
131
+	K_FINALLY(true, "finally"),
132
+	K_RETURN(true, "return"),
133
+	K_BREAK(true, "break"),
134
+	K_CONTINUE(true, "continue"),
135
+	K_SWITCH(true, "switch"),
136
+	K_CASE(true, "case"),
137
+	K_DEFAULT(true, "default"),
138 138
 	
139
-	K_IN,
140
-	K_IS,
141
-	K_AS,
142
-	K_MATCH,
143
-	K_THROWS,
139
+	K_IN(true, "in"),
140
+	K_IS(true, "is"),
141
+	K_AS(true, "as"),
142
+	K_MATCH(true, "match"),
143
+	K_THROWS(true, "throws"),
144 144
 	
145
-	K_SUPER,
146
-	K_THIS,
147
-	K_NULL,
148
-	K_TRUE,
149
-	K_FALSE,
150
-	K_NEW,
145
+	K_SUPER(true, "super"),
146
+	K_THIS(true, "this"),
147
+	K_NULL(true, "null"),
148
+	K_TRUE(true, "true"),
149
+	K_FALSE(true, "false"),
150
+	K_NEW(true, "new"),
151 151
 	
152 152
 	INVALID,
153 153
 	EOF
@@ -156,19 +156,42 @@ public enum ZSTokenType implements TokenType {
156 156
 	private final String regexp;
157 157
 	private final boolean whitespace;
158 158
 	
159
+	public final ZSToken flyweight;
160
+	public final boolean isKeyword;
161
+	
159 162
 	private ZSTokenType() {
160 163
 		this.regexp = null;
161 164
 		this.whitespace = false;
165
+		this.isKeyword = false;
166
+		this.flyweight = null;
162 167
 	}
163 168
 	
164 169
 	private ZSTokenType(String regexp) {
165 170
 		this.regexp = regexp;
166 171
 		this.whitespace = false;
172
+		this.isKeyword = false;
173
+		this.flyweight = null;
167 174
 	}
168 175
 	
169 176
 	private ZSTokenType(String regexp, boolean whitespace) {
170 177
 		this.regexp = regexp;
171 178
 		this.whitespace = whitespace;
179
+		this.isKeyword = false;
180
+		this.flyweight = null;
181
+	}
182
+	
183
+	private ZSTokenType(String regexp, String content) {
184
+		this.regexp = regexp;
185
+		this.whitespace = false;
186
+		this.isKeyword = false;
187
+		this.flyweight = new ZSToken(this, content);
188
+	}
189
+	
190
+	private ZSTokenType(boolean isKeyword, String content) {
191
+		this.regexp = null;
192
+		this.whitespace = false;
193
+		this.isKeyword = isKeyword;
194
+		this.flyweight = new ZSToken(this, content);
172 195
 	}
173 196
 
174 197
 	@Override

+ 2
- 2
Parser/src/main/java/org/openzen/zenscript/parser/ParsedDefinition.java View File

@@ -7,8 +7,8 @@ package org.openzen.zenscript.parser;
7 7
 
8 8
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
9 9
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
10
+import org.openzen.zenscript.lexer.ZSTokenParser;
10 11
 import org.openzen.zenscript.shared.CodePosition;
11
-import org.openzen.zenscript.lexer.ZSTokenStream;
12 12
 import static org.openzen.zenscript.lexer.ZSTokenType.*;
13 13
 import org.openzen.zenscript.linker.BaseScope;
14 14
 import org.openzen.zenscript.parser.definitions.ParsedAlias;
@@ -25,7 +25,7 @@ import org.openzen.zenscript.parser.definitions.ParsedVariant;
25 25
  * @author Hoofdgebruiker
26 26
  */
27 27
 public abstract class ParsedDefinition {
28
-	public static ParsedDefinition parse(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenStream tokens, HighLevelDefinition outerDefinition) {
28
+	public static ParsedDefinition parse(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenParser tokens, HighLevelDefinition outerDefinition) {
29 29
 		if (tokens.optional(K_CLASS) != null) {
30 30
 			return ParsedClass.parseClass(pkg, position, modifiers, tokens, outerDefinition);
31 31
 		} else if (tokens.optional(K_INTERFACE) != null) {

+ 1
- 2
Parser/src/main/java/org/openzen/zenscript/parser/ParsedFile.java View File

@@ -28,7 +28,6 @@ import org.openzen.zenscript.shared.CodePosition;
28 28
 import org.openzen.zenscript.shared.CompileException;
29 29
 import org.openzen.zenscript.shared.CompileExceptionCode;
30 30
 import org.openzen.zenscript.lexer.ZSTokenParser;
31
-import org.openzen.zenscript.lexer.ZSTokenStream;
32 31
 import static org.openzen.zenscript.lexer.ZSTokenType.*;
33 32
 import org.openzen.zenscript.linker.FileScope;
34 33
 import org.openzen.zenscript.linker.GlobalScriptScope;
@@ -62,7 +61,7 @@ public class ParsedFile {
62 61
 		return parse(pkg, tokens);
63 62
 	}
64 63
 	
65
-	public static ParsedFile parse(ZSPackage pkg, ZSTokenStream tokens) {
64
+	public static ParsedFile parse(ZSPackage pkg, ZSTokenParser tokens) {
66 65
 		ParsedFile result = new ParsedFile(tokens.getFilename());
67 66
 		ZSToken eof = null;
68 67
 

+ 2
- 2
Parser/src/main/java/org/openzen/zenscript/parser/ParsedImport.java View File

@@ -9,7 +9,7 @@ import java.util.ArrayList;
9 9
 import java.util.List;
10 10
 import org.openzen.zenscript.shared.CodePosition;
11 11
 import org.openzen.zenscript.lexer.ZSToken;
12
-import org.openzen.zenscript.lexer.ZSTokenStream;
12
+import org.openzen.zenscript.lexer.ZSTokenParser;
13 13
 import static org.openzen.zenscript.lexer.ZSTokenType.*;
14 14
 
15 15
 /**
@@ -17,7 +17,7 @@ import static org.openzen.zenscript.lexer.ZSTokenType.*;
17 17
  * @author Hoofdgebruiker
18 18
  */
19 19
 public class ParsedImport {
20
-	public static ParsedImport parse(CodePosition position, ZSTokenStream tokens) {
20
+	public static ParsedImport parse(CodePosition position, ZSTokenParser tokens) {
21 21
 		boolean relative = tokens.optional(T_DOT) != null;
22 22
 		
23 23
 		List<String> importName = new ArrayList<>();

+ 2
- 2
Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedAlias.java View File

@@ -10,7 +10,7 @@ import org.openzen.zenscript.codemodel.HighLevelDefinition;
10 10
 import org.openzen.zenscript.codemodel.definition.AliasDefinition;
11 11
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
12 12
 import org.openzen.zenscript.codemodel.generic.TypeParameter;
13
-import org.openzen.zenscript.lexer.ZSTokenStream;
13
+import org.openzen.zenscript.lexer.ZSTokenParser;
14 14
 import org.openzen.zenscript.lexer.ZSTokenType;
15 15
 import org.openzen.zenscript.linker.BaseScope;
16 16
 import org.openzen.zenscript.linker.DefinitionScope;
@@ -23,7 +23,7 @@ import org.openzen.zenscript.shared.CodePosition;
23 23
  * @author Hoofdgebruiker
24 24
  */
25 25
 public class ParsedAlias extends ParsedDefinition {
26
-	public static ParsedAlias parseAlias(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenStream tokens, HighLevelDefinition outerDefinition) {
26
+	public static ParsedAlias parseAlias(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenParser tokens, HighLevelDefinition outerDefinition) {
27 27
 		String name = tokens.required(ZSTokenType.T_IDENTIFIER, "identifier expected").content;
28 28
 		List<ParsedGenericParameter> parameters = ParsedGenericParameter.parseAll(tokens);
29 29
 		IParsedType type = IParsedType.parse(tokens);

+ 2
- 2
Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedClass.java View File

@@ -9,7 +9,7 @@ import java.util.List;
9 9
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
10 10
 import org.openzen.zenscript.codemodel.definition.ClassDefinition;
11 11
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
12
-import org.openzen.zenscript.lexer.ZSTokenStream;
12
+import org.openzen.zenscript.lexer.ZSTokenParser;
13 13
 import org.openzen.zenscript.lexer.ZSTokenType;
14 14
 import org.openzen.zenscript.linker.BaseScope;
15 15
 import org.openzen.zenscript.linker.GenericFunctionScope;
@@ -22,7 +22,7 @@ import org.openzen.zenscript.shared.CodePosition;
22 22
  * @author Stan Hebben
23 23
  */
24 24
 public class ParsedClass extends BaseParsedDefinition {
25
-	public static ParsedClass parseClass(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenStream tokens, HighLevelDefinition outerDefinition) {
25
+	public static ParsedClass parseClass(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenParser tokens, HighLevelDefinition outerDefinition) {
26 26
 		String name = tokens.required(ZSTokenType.T_IDENTIFIER, "identifier expected").content;
27 27
 		List<ParsedGenericParameter> genericParameters = ParsedGenericParameter.parseAll(tokens);
28 28
 		

+ 2
- 2
Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedEnum.java View File

@@ -12,7 +12,7 @@ import org.openzen.zenscript.codemodel.definition.EnumDefinition;
12 12
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
13 13
 import org.openzen.zenscript.codemodel.type.DefinitionTypeID;
14 14
 import org.openzen.zenscript.codemodel.type.ITypeID;
15
-import org.openzen.zenscript.lexer.ZSTokenStream;
15
+import org.openzen.zenscript.lexer.ZSTokenParser;
16 16
 import org.openzen.zenscript.lexer.ZSTokenType;
17 17
 import org.openzen.zenscript.linker.BaseScope;
18 18
 import org.openzen.zenscript.linker.ExpressionScope;
@@ -24,7 +24,7 @@ import org.openzen.zenscript.shared.CodePosition;
24 24
  * @author Hoofdgebruiker
25 25
  */
26 26
 public class ParsedEnum extends BaseParsedDefinition {
27
-	public static ParsedEnum parseEnum(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenStream tokens, HighLevelDefinition outerDefinition) {
27
+	public static ParsedEnum parseEnum(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenParser tokens, HighLevelDefinition outerDefinition) {
28 28
 		String name = tokens.required(ZSTokenType.T_IDENTIFIER, "identifier expected").content;
29 29
 		tokens.required(ZSTokenType.T_AOPEN, "{ expected");
30 30
 		

+ 2
- 2
Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedEnumConstant.java View File

@@ -12,7 +12,7 @@ import org.openzen.zenscript.codemodel.definition.EnumDefinition;
12 12
 import org.openzen.zenscript.codemodel.member.EnumConstantMember;
13 13
 import org.openzen.zenscript.codemodel.type.DefinitionTypeID;
14 14
 import org.openzen.zenscript.lexer.ZSToken;
15
-import org.openzen.zenscript.lexer.ZSTokenStream;
15
+import org.openzen.zenscript.lexer.ZSTokenParser;
16 16
 import org.openzen.zenscript.lexer.ZSTokenType;
17 17
 import org.openzen.zenscript.linker.ExpressionScope;
18 18
 import org.openzen.zenscript.parser.expression.ParsedCallArguments;
@@ -25,7 +25,7 @@ import org.openzen.zenscript.shared.CodePosition;
25 25
  * @author Hoofdgebruiker
26 26
  */
27 27
 public class ParsedEnumConstant {
28
-	public static ParsedEnumConstant parse(ZSTokenStream tokens, EnumDefinition definition, int value) {
28
+	public static ParsedEnumConstant parse(ZSTokenParser tokens, EnumDefinition definition, int value) {
29 29
 		CodePosition position = tokens.getPosition();
30 30
 		ZSToken name = tokens.required(ZSTokenType.T_IDENTIFIER, "identifier expected");
31 31
 		List<ParsedExpression> arguments = new ArrayList<>();

+ 2
- 2
Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedExpansion.java View File

@@ -9,7 +9,7 @@ import java.util.List;
9 9
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
10 10
 import org.openzen.zenscript.codemodel.definition.ExpansionDefinition;
11 11
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
12
-import org.openzen.zenscript.lexer.ZSTokenStream;
12
+import org.openzen.zenscript.lexer.ZSTokenParser;
13 13
 import org.openzen.zenscript.lexer.ZSTokenType;
14 14
 import org.openzen.zenscript.linker.BaseScope;
15 15
 import org.openzen.zenscript.linker.GenericFunctionScope;
@@ -22,7 +22,7 @@ import org.openzen.zenscript.shared.CodePosition;
22 22
  * @author Hoofdgebruiker
23 23
  */
24 24
 public class ParsedExpansion extends BaseParsedDefinition {
25
-	public static ParsedExpansion parseExpansion(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenStream tokens, HighLevelDefinition outerDefinition) {
25
+	public static ParsedExpansion parseExpansion(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenParser tokens, HighLevelDefinition outerDefinition) {
26 26
 		List<ParsedGenericParameter> parameters = ParsedGenericParameter.parseAll(tokens);
27 27
 		IParsedType target = IParsedType.parse(tokens);
28 28
 		tokens.required(ZSTokenType.T_AOPEN, "{ expected");

+ 2
- 2
Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedFunction.java View File

@@ -10,7 +10,7 @@ import static org.openzen.zenscript.lexer.ZSTokenType.*;
10 10
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
11 11
 import org.openzen.zenscript.codemodel.definition.FunctionDefinition;
12 12
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
13
-import org.openzen.zenscript.lexer.ZSTokenStream;
13
+import org.openzen.zenscript.lexer.ZSTokenParser;
14 14
 import org.openzen.zenscript.linker.BaseScope;
15 15
 import org.openzen.zenscript.linker.FunctionScope;
16 16
 import org.openzen.zenscript.parser.ParsedDefinition;
@@ -23,7 +23,7 @@ import org.openzen.zenscript.shared.CodePosition;
23 23
  * @author Stanneke
24 24
  */
25 25
 public class ParsedFunction extends ParsedDefinition {
26
-	public static ParsedFunction parseFunction(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenStream parser, HighLevelDefinition outerDefinition) {
26
+	public static ParsedFunction parseFunction(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenParser parser, HighLevelDefinition outerDefinition) {
27 27
 		String name = parser.required(T_IDENTIFIER, "identifier expected").content;
28 28
 		ParsedFunctionHeader header = ParsedFunctionHeader.parse(parser);
29 29
 		ParsedFunctionBody body = ParsedStatement.parseFunctionBody(parser);

+ 2
- 2
Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedFunctionHeader.java View File

@@ -13,7 +13,7 @@ import org.openzen.zenscript.codemodel.FunctionParameter;
13 13
 import org.openzen.zenscript.codemodel.generic.TypeParameter;
14 14
 import org.openzen.zenscript.codemodel.type.ITypeID;
15 15
 import org.openzen.zenscript.lexer.ZSToken;
16
-import org.openzen.zenscript.lexer.ZSTokenStream;
16
+import org.openzen.zenscript.lexer.ZSTokenParser;
17 17
 import org.openzen.zenscript.lexer.ZSTokenType;
18 18
 import static org.openzen.zenscript.lexer.ZSTokenType.*;
19 19
 import org.openzen.zenscript.linker.BaseScope;
@@ -27,7 +27,7 @@ import org.openzen.zenscript.parser.type.ParsedTypeBasic;
27 27
  * @author Hoofdgebruiker
28 28
  */
29 29
 public class ParsedFunctionHeader {
30
-	public static ParsedFunctionHeader parse(ZSTokenStream tokens) {
30
+	public static ParsedFunctionHeader parse(ZSTokenParser tokens) {
31 31
 		List<ParsedGenericParameter> genericParameters = null;
32 32
 		if (tokens.optional(ZSTokenType.T_LESS) != null) {
33 33
 			genericParameters = new ArrayList<>();

+ 2
- 3
Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedGenericParameter.java View File

@@ -10,7 +10,6 @@ import java.util.List;
10 10
 import org.openzen.zenscript.codemodel.generic.TypeParameter;
11 11
 import org.openzen.zenscript.lexer.ZSToken;
12 12
 import org.openzen.zenscript.lexer.ZSTokenParser;
13
-import org.openzen.zenscript.lexer.ZSTokenStream;
14 13
 import org.openzen.zenscript.lexer.ZSTokenType;
15 14
 import org.openzen.zenscript.linker.BaseScope;
16 15
 import org.openzen.zenscript.linker.GenericFunctionScope;
@@ -22,7 +21,7 @@ import org.openzen.zenscript.shared.CodePosition;
22 21
  * @author Hoofdgebruiker
23 22
  */
24 23
 public class ParsedGenericParameter {
25
-	public static ParsedGenericParameter parse(ZSTokenStream tokens) {
24
+	public static ParsedGenericParameter parse(ZSTokenParser tokens) {
26 25
 		CodePosition position = tokens.getPosition();
27 26
 		ZSToken name = tokens.required(ZSTokenType.T_IDENTIFIER, "identifier expected");
28 27
 		List<ParsedGenericBound> bounds = new ArrayList<>();
@@ -36,7 +35,7 @@ public class ParsedGenericParameter {
36 35
 		return new ParsedGenericParameter(position, name.content, bounds);
37 36
 	}
38 37
 	
39
-	public static List<ParsedGenericParameter> parseAll(ZSTokenStream tokens) {
38
+	public static List<ParsedGenericParameter> parseAll(ZSTokenParser tokens) {
40 39
 		if (tokens.optional(ZSTokenType.T_LESS) == null)
41 40
 			return null;
42 41
 		

+ 2
- 2
Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedInterface.java View File

@@ -11,7 +11,7 @@ import java.util.List;
11 11
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
12 12
 import org.openzen.zenscript.codemodel.definition.InterfaceDefinition;
13 13
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
14
-import org.openzen.zenscript.lexer.ZSTokenStream;
14
+import org.openzen.zenscript.lexer.ZSTokenParser;
15 15
 import org.openzen.zenscript.lexer.ZSTokenType;
16 16
 import org.openzen.zenscript.linker.BaseScope;
17 17
 import org.openzen.zenscript.parser.member.ParsedDefinitionMember;
@@ -23,7 +23,7 @@ import org.openzen.zenscript.shared.CodePosition;
23 23
  * @author Hoofdgebruiker
24 24
  */
25 25
 public class ParsedInterface extends BaseParsedDefinition {
26
-	public static ParsedInterface parseInterface(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenStream tokens, HighLevelDefinition outerDefinition) {
26
+	public static ParsedInterface parseInterface(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenParser tokens, HighLevelDefinition outerDefinition) {
27 27
 		String name = tokens.required(ZSTokenType.T_IDENTIFIER, "identifier expected").content;
28 28
 		List<ParsedGenericParameter> genericParameters = ParsedGenericParameter.parseAll(tokens);
29 29
 		List<IParsedType> superInterfaces = Collections.emptyList();

+ 2
- 2
Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedStruct.java View File

@@ -9,7 +9,7 @@ import java.util.List;
9 9
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
10 10
 import org.openzen.zenscript.codemodel.definition.StructDefinition;
11 11
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
12
-import org.openzen.zenscript.lexer.ZSTokenStream;
12
+import org.openzen.zenscript.lexer.ZSTokenParser;
13 13
 import org.openzen.zenscript.lexer.ZSTokenType;
14 14
 import org.openzen.zenscript.linker.BaseScope;
15 15
 import org.openzen.zenscript.parser.member.ParsedDefinitionMember;
@@ -20,7 +20,7 @@ import org.openzen.zenscript.shared.CodePosition;
20 20
  * @author Hoofdgebruiker
21 21
  */
22 22
 public class ParsedStruct extends BaseParsedDefinition {
23
-	public static ParsedStruct parseStruct(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenStream tokens, HighLevelDefinition outerDefinition) {
23
+	public static ParsedStruct parseStruct(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenParser tokens, HighLevelDefinition outerDefinition) {
24 24
 		String name = tokens.required(ZSTokenType.T_IDENTIFIER, "identifier expected").content;
25 25
 		List<ParsedGenericParameter> parameters = ParsedGenericParameter.parseAll(tokens);
26 26
 		

+ 2
- 2
Parser/src/main/java/org/openzen/zenscript/parser/definitions/ParsedVariant.java View File

@@ -10,7 +10,7 @@ import java.util.List;
10 10
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
11 11
 import org.openzen.zenscript.codemodel.definition.VariantDefinition;
12 12
 import org.openzen.zenscript.codemodel.definition.ZSPackage;
13
-import org.openzen.zenscript.lexer.ZSTokenStream;
13
+import org.openzen.zenscript.lexer.ZSTokenParser;
14 14
 import org.openzen.zenscript.lexer.ZSTokenType;
15 15
 import org.openzen.zenscript.linker.BaseScope;
16 16
 import org.openzen.zenscript.linker.DefinitionScope;
@@ -23,7 +23,7 @@ import org.openzen.zenscript.shared.CodePosition;
23 23
  * @author Hoofdgebruiker
24 24
  */
25 25
 public class ParsedVariant extends BaseParsedDefinition {
26
-	public static ParsedVariant parseVariant(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenStream tokens, HighLevelDefinition outerDefinition) {
26
+	public static ParsedVariant parseVariant(ZSPackage pkg, CodePosition position, int modifiers, ZSTokenParser tokens, HighLevelDefinition outerDefinition) {
27 27
 		String name = tokens.required(ZSTokenType.T_IDENTIFIER, "identifier expected").content;
28 28
 		List<ParsedGenericParameter> typeParameters = ParsedGenericParameter.parseAll(tokens);
29 29
 		tokens.required(ZSTokenType.T_AOPEN, "{ expected");

+ 2
- 2
Parser/src/main/java/org/openzen/zenscript/parser/expression/ParsedCallArguments.java View File

@@ -16,7 +16,7 @@ import org.openzen.zenscript.codemodel.expression.Expression;
16 16
 import org.openzen.zenscript.codemodel.partial.IPartialExpression;
17 17
 import org.openzen.zenscript.codemodel.type.ITypeID;
18 18
 import org.openzen.zenscript.codemodel.type.member.DefinitionMemberGroup;
19
-import org.openzen.zenscript.lexer.ZSTokenStream;
19
+import org.openzen.zenscript.lexer.ZSTokenParser;
20 20
 import org.openzen.zenscript.linker.BaseScope;
21 21
 import org.openzen.zenscript.linker.ExpressionScope;
22 22
 import org.openzen.zenscript.shared.CodePosition;
@@ -30,7 +30,7 @@ import org.openzen.zenscript.shared.CompileExceptionCode;
30 30
 public class ParsedCallArguments {
31 31
 	public static final ParsedCallArguments NONE = new ParsedCallArguments(Collections.emptyList());
32 32
 	
33
-	public static ParsedCallArguments parse(ZSTokenStream tokens) {
33
+	public static ParsedCallArguments parse(ZSTokenParser tokens) {
34 34
 		tokens.required(ZSTokenType.T_BROPEN, "( expected");
35 35
 		
36 36
 		List<ParsedExpression> arguments = new ArrayList<>();

+ 17
- 17
Parser/src/main/java/org/openzen/zenscript/parser/expression/ParsedExpression.java View File

@@ -19,7 +19,7 @@ import org.openzen.zenscript.codemodel.expression.switchvalue.SwitchValue;
19 19
 import org.openzen.zenscript.codemodel.partial.IPartialExpression;
20 20
 import org.openzen.zenscript.codemodel.type.ITypeID;
21 21
 import org.openzen.zenscript.lexer.ZSToken;
22
-import org.openzen.zenscript.lexer.ZSTokenStream;
22
+import org.openzen.zenscript.lexer.ZSTokenParser;
23 23
 import org.openzen.zenscript.linker.BaseScope;
24 24
 import org.openzen.zenscript.parser.ParseException;
25 25
 import org.openzen.zenscript.parser.definitions.ParsedFunctionHeader;
@@ -47,15 +47,15 @@ public abstract class ParsedExpression {
47 47
 		}
48 48
 	}
49 49
 	
50
-	public static ParsedExpression parse(ZSTokenStream parser) {
50
+	public static ParsedExpression parse(ZSTokenParser parser) {
51 51
 		return readAssignExpression(parser, ParsingOptions.DEFAULT);
52 52
 	}
53 53
 	
54
-	public static ParsedExpression parse(ZSTokenStream parser, ParsingOptions options) {
54
+	public static ParsedExpression parse(ZSTokenParser parser, ParsingOptions options) {
55 55
 		return readAssignExpression(parser, options);
56 56
 	}
57 57
 
58
-	private static ParsedExpression readAssignExpression(ZSTokenStream parser, ParsingOptions options) {
58
+	private static ParsedExpression readAssignExpression(ZSTokenParser parser, ParsingOptions options) {
59 59
 		CodePosition position = parser.getPosition();
60 60
 		ParsedExpression left = readConditionalExpression(position, parser, options);
61 61
 
@@ -104,7 +104,7 @@ public abstract class ParsedExpression {
104 104
 		return left;
105 105
 	}
106 106
 
107
-	private static ParsedExpression readConditionalExpression(CodePosition position, ZSTokenStream parser, ParsingOptions options) {
107
+	private static ParsedExpression readConditionalExpression(CodePosition position, ZSTokenParser parser, ParsingOptions options) {
108 108
 		ParsedExpression left = readOrOrExpression(position, parser, options);
109 109
 
110 110
 		if (parser.optional(T_QUEST) != null) {
@@ -117,7 +117,7 @@ public abstract class ParsedExpression {
117 117
 		return left;
118 118
 	}
119 119
 
120
-	private static ParsedExpression readOrOrExpression(CodePosition position, ZSTokenStream parser, ParsingOptions options) {
120
+	private static ParsedExpression readOrOrExpression(CodePosition position, ZSTokenParser parser, ParsingOptions options) {
121 121
 		ParsedExpression left = readAndAndExpression(position, parser, options);
122 122
 
123 123
 		while (parser.optional(T_OROR) != null) {
@@ -133,7 +133,7 @@ public abstract class ParsedExpression {
133 133
 		return left;
134 134
 	}
135 135
 
136
-	private static ParsedExpression readAndAndExpression(CodePosition position, ZSTokenStream parser, ParsingOptions options) {
136
+	private static ParsedExpression readAndAndExpression(CodePosition position, ZSTokenParser parser, ParsingOptions options) {
137 137
 		ParsedExpression left = readOrExpression(position, parser, options);
138 138
 
139 139
 		while (parser.optional(T_ANDAND) != null) {
@@ -143,7 +143,7 @@ public abstract class ParsedExpression {
143 143
 		return left;
144 144
 	}
145 145
 
146
-	private static ParsedExpression readOrExpression(CodePosition position, ZSTokenStream parser, ParsingOptions options) {
146
+	private static ParsedExpression readOrExpression(CodePosition position, ZSTokenParser parser, ParsingOptions options) {
147 147
 		ParsedExpression left = readXorExpression(position, parser, options);
148 148
 
149 149
 		while (parser.optional(T_OR) != null) {
@@ -153,7 +153,7 @@ public abstract class ParsedExpression {
153 153
 		return left;
154 154
 	}
155 155
 
156
-	private static ParsedExpression readXorExpression(CodePosition position, ZSTokenStream parser, ParsingOptions options) {
156
+	private static ParsedExpression readXorExpression(CodePosition position, ZSTokenParser parser, ParsingOptions options) {
157 157
 		ParsedExpression left = readAndExpression(position, parser, options);
158 158
 
159 159
 		while (parser.optional(T_XOR) != null) {
@@ -163,7 +163,7 @@ public abstract class ParsedExpression {
163 163
 		return left;
164 164
 	}
165 165
 
166
-	private static ParsedExpression readAndExpression(CodePosition position, ZSTokenStream parser, ParsingOptions options) {
166
+	private static ParsedExpression readAndExpression(CodePosition position, ZSTokenParser parser, ParsingOptions options) {
167 167
 		ParsedExpression left = readCompareExpression(position, parser, options);
168 168
 
169 169
 		while (parser.optional(T_AND) != null) {
@@ -173,7 +173,7 @@ public abstract class ParsedExpression {
173 173
 		return left;
174 174
 	}
175 175
 
176
-	private static ParsedExpression readCompareExpression(CodePosition position, ZSTokenStream parser, ParsingOptions options) {
176
+	private static ParsedExpression readCompareExpression(CodePosition position, ZSTokenParser parser, ParsingOptions options) {
177 177
 		ParsedExpression left = readShiftExpression(position, parser, options);
178 178
 
179 179
 		switch (parser.peek().getType()) {
@@ -244,7 +244,7 @@ public abstract class ParsedExpression {
244 244
 		return left;
245 245
 	}
246 246
 	
247
-	private static ParsedExpression readShiftExpression(CodePosition position, ZSTokenStream parser, ParsingOptions options) {
247
+	private static ParsedExpression readShiftExpression(CodePosition position, ZSTokenParser parser, ParsingOptions options) {
248 248
 		ParsedExpression left = readAddExpression(position, parser, options);
249 249
 		
250 250
 		while (true) {
@@ -265,7 +265,7 @@ public abstract class ParsedExpression {
265 265
 		return left;
266 266
 	}
267 267
 
268
-	private static ParsedExpression readAddExpression(CodePosition position, ZSTokenStream parser, ParsingOptions options) {
268
+	private static ParsedExpression readAddExpression(CodePosition position, ZSTokenParser parser, ParsingOptions options) {
269 269
 		ParsedExpression left = readMulExpression(position, parser, options);
270 270
 		
271 271
 		while (true) {
@@ -285,7 +285,7 @@ public abstract class ParsedExpression {
285 285
 		return left;
286 286
 	}
287 287
 
288
-	private static ParsedExpression readMulExpression(CodePosition position, ZSTokenStream parser, ParsingOptions options) {
288
+	private static ParsedExpression readMulExpression(CodePosition position, ZSTokenParser parser, ParsingOptions options) {
289 289
 		ParsedExpression left = readUnaryExpression(position, parser, options);
290 290
 
291 291
 		while (true) {
@@ -306,7 +306,7 @@ public abstract class ParsedExpression {
306 306
 		return left;
307 307
 	}
308 308
 
309
-	private static ParsedExpression readUnaryExpression(CodePosition position, ZSTokenStream parser, ParsingOptions options) {
309
+	private static ParsedExpression readUnaryExpression(CodePosition position, ZSTokenParser parser, ParsingOptions options) {
310 310
 		switch (parser.peek().getType()) {
311 311
 			case T_NOT:
312 312
 				parser.next();
@@ -361,7 +361,7 @@ public abstract class ParsedExpression {
361 361
 		}
362 362
 	}
363 363
 
364
-	private static ParsedExpression readPostfixExpression(CodePosition position, ZSTokenStream parser, ParsingOptions options) {
364
+	private static ParsedExpression readPostfixExpression(CodePosition position, ZSTokenParser parser, ParsingOptions options) {
365 365
 		ParsedExpression base = readPrimaryExpression(position, parser, options);
366 366
 
367 367
 		while (true) {
@@ -415,7 +415,7 @@ public abstract class ParsedExpression {
415 415
 		return base;
416 416
 	}
417 417
 	
418
-	private static ParsedExpression readPrimaryExpression(CodePosition position, ZSTokenStream parser, ParsingOptions options) {
418
+	private static ParsedExpression readPrimaryExpression(CodePosition position, ZSTokenParser parser, ParsingOptions options) {
419 419
 		switch (parser.peek().getType()) {
420 420
 			case T_INT:
421 421
 				return new ParsedExpressionInt(position, Long.parseLong(parser.next().content));

+ 2
- 2
Parser/src/main/java/org/openzen/zenscript/parser/member/ParsedDefinitionMember.java View File

@@ -17,7 +17,7 @@ import org.openzen.zenscript.codemodel.Modifiers;
17 17
 import org.openzen.zenscript.codemodel.OperatorType;
18 18
 import org.openzen.zenscript.codemodel.member.IDefinitionMember;
19 19
 import org.openzen.zenscript.lexer.ZSToken;
20
-import org.openzen.zenscript.lexer.ZSTokenStream;
20
+import org.openzen.zenscript.lexer.ZSTokenParser;
21 21
 import org.openzen.zenscript.lexer.ZSTokenType;
22 22
 import org.openzen.zenscript.linker.BaseScope;
23 23
 import org.openzen.zenscript.parser.definitions.ParsedFunctionHeader;
@@ -32,7 +32,7 @@ import org.openzen.zenscript.shared.CodePosition;
32 32
  * @author Hoofdgebruiker
33 33
  */
34 34
 public abstract class ParsedDefinitionMember {
35
-	public static ParsedDefinitionMember parse(ZSTokenStream tokens, HighLevelDefinition forDefinition) {
35
+	public static ParsedDefinitionMember parse(ZSTokenParser tokens, HighLevelDefinition forDefinition) {
36 36
 		CodePosition start = tokens.getPosition();
37 37
 		int modifiers = 0;
38 38
 		outer: while (true) {

+ 6
- 6
Parser/src/main/java/org/openzen/zenscript/parser/statements/ParsedStatement.java View File

@@ -6,7 +6,7 @@ import org.openzen.zenscript.codemodel.WhitespaceInfo;
6 6
 import org.openzen.zenscript.codemodel.WhitespacePostComment;
7 7
 import org.openzen.zenscript.codemodel.statement.Statement;
8 8
 import org.openzen.zenscript.lexer.ZSToken;
9
-import org.openzen.zenscript.lexer.ZSTokenStream;
9
+import org.openzen.zenscript.lexer.ZSTokenParser;
10 10
 import org.openzen.zenscript.lexer.ZSTokenType;
11 11
 import static org.openzen.zenscript.lexer.ZSTokenType.*;
12 12
 import org.openzen.zenscript.linker.StatementScope;
@@ -18,7 +18,7 @@ import org.openzen.zenscript.shared.CompileException;
18 18
 import org.openzen.zenscript.shared.CompileExceptionCode;
19 19
 
20 20
 public abstract class ParsedStatement {
21
-	public static ParsedFunctionBody parseLambdaBody(ZSTokenStream tokens, boolean inExpression) {
21
+	public static ParsedFunctionBody parseLambdaBody(ZSTokenParser tokens, boolean inExpression) {
22 22
 		CodePosition position = tokens.getPosition();
23 23
 		ZSToken start = tokens.peek();
24 24
 		if (tokens.optional(T_AOPEN) != null) {
@@ -35,7 +35,7 @@ public abstract class ParsedStatement {
35 35
 		}
36 36
 	}
37 37
 	
38
-	public static ParsedFunctionBody parseFunctionBody(ZSTokenStream tokens) {
38
+	public static ParsedFunctionBody parseFunctionBody(ZSTokenParser tokens) {
39 39
 		if (tokens.optional(T_LAMBDA) != null)
40 40
 			return parseLambdaBody(tokens, false);
41 41
 		else if (tokens.optional(T_SEMICOLON) != null)
@@ -44,7 +44,7 @@ public abstract class ParsedStatement {
44 44
 			return new ParsedStatementsFunctionBody(parseBlock(tokens, true));
45 45
 	}
46 46
 	
47
-	public static ParsedStatementBlock parseBlock(ZSTokenStream parser, boolean isFirst) {
47
+	public static ParsedStatementBlock parseBlock(ZSTokenParser parser, boolean isFirst) {
48 48
 		String ws = parser.getLastWhitespace();
49 49
 		CodePosition position = parser.getPosition();
50 50
 		parser.required(T_AOPEN, "{ expected");
@@ -63,11 +63,11 @@ public abstract class ParsedStatement {
63 63
 		return new ParsedStatementBlock(position, whitespace, postComment, statements);
64 64
 	}
65 65
 	
66
-	public static ParsedStatement parse(ZSTokenStream parser) {
66
+	public static ParsedStatement parse(ZSTokenParser parser) {
67 67
 		return parse(parser, false);
68 68
 	}
69 69
 	
70
-	public static ParsedStatement parse(ZSTokenStream parser, boolean isFirst) {
70
+	public static ParsedStatement parse(ZSTokenParser parser, boolean isFirst) {
71 71
 		String ws = parser.getLastWhitespace();
72 72
 		CodePosition position = parser.getPosition();
73 73
 		ZSToken next = parser.peek();

+ 8
- 8
Parser/src/main/java/org/openzen/zenscript/parser/type/IParsedType.java View File

@@ -10,7 +10,7 @@ import java.util.Collections;
10 10
 import java.util.List;
11 11
 import org.openzen.zenscript.codemodel.type.ITypeID;
12 12
 import org.openzen.zenscript.codemodel.type.member.TypeMembers;
13
-import org.openzen.zenscript.lexer.ZSTokenStream;
13
+import org.openzen.zenscript.lexer.ZSTokenParser;
14 14
 import org.openzen.zenscript.lexer.ZSTokenType;
15 15
 import static org.openzen.zenscript.lexer.ZSTokenType.*;
16 16
 import org.openzen.zenscript.linker.BaseScope;
@@ -24,7 +24,7 @@ import org.openzen.zenscript.shared.CodePosition;
24 24
  * @author Hoofdgebruiker
25 25
  */
26 26
 public interface IParsedType {
27
-	public static IParsedType parse(ZSTokenStream tokens) {
27
+	public static IParsedType parse(ZSTokenParser tokens) {
28 28
 		IParsedType result = tryParse(tokens);
29 29
 		if (result == null)
30 30
 			throw new ParseException(tokens.getPosition(), "Type expected (got " + tokens.peek().content + ")");
@@ -32,7 +32,7 @@ public interface IParsedType {
32 32
 		return result;
33 33
 	}
34 34
 	
35
-	public static IParsedType tryParse(ZSTokenStream tokens) {
35
+	public static IParsedType tryParse(ZSTokenParser tokens) {
36 36
 		int modifiers = 0;
37 37
 		while (true) {
38 38
 			if (tokens.optional(ZSTokenType.K_CONST) != null) {
@@ -168,7 +168,7 @@ public interface IParsedType {
168 168
 		return result;
169 169
 	}
170 170
 	
171
-	public static List<IParsedType> parseGenericParameters(ZSTokenStream tokens) {
171
+	public static List<IParsedType> parseGenericParameters(ZSTokenParser tokens) {
172 172
 		if (!tokens.isNext(T_LESS))
173 173
 			return null;
174 174
 		
@@ -186,13 +186,13 @@ public interface IParsedType {
186 186
 		} while (tokens.optional(T_COMMA) != null);
187 187
 		
188 188
 		if (tokens.isNext(T_SHR)) {
189
-			tokens.replace(T_GREATER);
189
+			tokens.replace(T_GREATER.flyweight);
190 190
 		} else if (tokens.isNext(T_USHR)) {
191
-			tokens.replace(T_SHR);
191
+			tokens.replace(T_SHR.flyweight);
192 192
 		} else if (tokens.isNext(T_SHRASSIGN)) {
193
-			tokens.replace(T_GREATEREQ);
193
+			tokens.replace(T_GREATEREQ.flyweight);
194 194
 		} else if (tokens.isNext(T_USHRASSIGN)) {
195
-			tokens.replace(T_SHRASSIGN);
195
+			tokens.replace(T_SHRASSIGN.flyweight);
196 196
 		} else if (tokens.optional(T_GREATER) == null) {
197 197
 			tokens.reset();
198 198
 			return Collections.emptyList();

Loading…
Cancel
Save