|
5 | 5 | import java.util.List; |
6 | 6 | import java.util.regex.Matcher; |
7 | 7 | import java.util.regex.Pattern; |
| 8 | +import java.util.stream.Collectors; |
8 | 9 |
|
9 | 10 | import com.google.gson.JsonArray; |
10 | 11 | import com.google.gson.JsonElement; |
@@ -586,6 +587,8 @@ private Node convertNodeUntyped(JsonObject node, String defaultKind) throws Pars |
586 | 587 | return convertTryStatement(node, loc); |
587 | 588 | case "TupleType": |
588 | 589 | return convertTupleType(node, loc); |
| 590 | + case "NamedTupleMember": |
| 591 | + return convertNamedTupleMember(node, loc); |
589 | 592 | case "TypeAliasDeclaration": |
590 | 593 | return convertTypeAliasDeclaration(node, loc); |
591 | 594 | case "TypeAssertionExpression": |
@@ -850,6 +853,9 @@ private Node convertBinaryExpression(JsonObject node, SourceLocation loc) throws |
850 | 853 | case ">>=": |
851 | 854 | case "<<=": |
852 | 855 | case ">>>=": |
| 856 | + case "??=": |
| 857 | + case "&&=": |
| 858 | + case "||=": |
853 | 859 | return new AssignmentExpression(loc, operator, convertLValue(left), right); |
854 | 860 |
|
855 | 861 | default: |
@@ -2178,7 +2184,22 @@ private Node convertTryStatement(JsonObject node, SourceLocation loc) throws Par |
2178 | 2184 | } |
2179 | 2185 |
|
2180 | 2186 | private Node convertTupleType(JsonObject node, SourceLocation loc) throws ParseError { |
2181 | | - return new TupleTypeExpr(loc, convertChildrenAsTypes(node, "elementTypes")); |
| 2187 | + List<Identifier> names = new ArrayList<>(); |
| 2188 | + |
| 2189 | + for (JsonElement element : node.get("elements").getAsJsonArray()) { |
| 2190 | + Identifier id = null; |
| 2191 | + if (getKind(element).equals("NamedTupleMember")) { |
| 2192 | + id = (Identifier)convertNode(element.getAsJsonObject().get("name").getAsJsonObject()); |
| 2193 | + } |
| 2194 | + names.add(id); |
| 2195 | + } |
| 2196 | + |
| 2197 | + return new TupleTypeExpr(loc, convertChildrenAsTypes(node, "elements"), names); |
| 2198 | + } |
| 2199 | + |
| 2200 | + // This method just does a trivial forward to the type. The names have already been extracted in `convertTupleType`. |
| 2201 | + private Node convertNamedTupleMember(JsonObject node, SourceLocation loc) throws ParseError { |
| 2202 | + return convertChild(node, "type"); |
2182 | 2203 | } |
2183 | 2204 |
|
2184 | 2205 | private Node convertTypeAliasDeclaration(JsonObject node, SourceLocation loc) throws ParseError { |
|
0 commit comments