Preserve the order of Map elements by default

This commit is contained in:
aNNiMON 2023-11-27 19:14:01 +02:00 committed by Victor Melnik
parent 90314e0cb9
commit 2fbd578b77
2 changed files with 3 additions and 6 deletions

View File

@ -388,7 +388,7 @@ public final class Parser {
private Node map() { private Node map() {
// {key1 : value1, key2 : value2, ...} // {key1 : value1, key2 : value2, ...}
consume(TokenType.LBRACE); consume(TokenType.LBRACE);
final Map<Node, Node> elements = new HashMap<>(); final Map<Node, Node> elements = new LinkedHashMap<>();
while (!match(TokenType.RBRACE)) { while (!match(TokenType.RBRACE)) {
final Node key = primary(); final Node key = primary();
consume(TokenType.COLON); consume(TokenType.COLON);

View File

@ -5,10 +5,7 @@ import com.annimon.ownlang.lib.UserDefinedFunction;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
import com.annimon.ownlang.parser.ast.*; import com.annimon.ownlang.parser.ast.*;
import static com.annimon.ownlang.parser.visitors.VisitorUtils.isValue; import static com.annimon.ownlang.parser.visitors.VisitorUtils.isValue;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public abstract class OptimizationVisitor<T> implements ResultVisitor<Node, T> { public abstract class OptimizationVisitor<T> implements ResultVisitor<Node, T> {
@ -264,7 +261,7 @@ public abstract class OptimizationVisitor<T> implements ResultVisitor<Node, T> {
@Override @Override
public Node visit(MapExpression s, T t) { public Node visit(MapExpression s, T t) {
final Map<Node, Node> elements = new HashMap<>(s.elements.size()); final Map<Node, Node> elements = new LinkedHashMap<>(s.elements.size());
boolean changed = false; boolean changed = false;
for (Map.Entry<Node, Node> entry : s.elements.entrySet()) { for (Map.Entry<Node, Node> entry : s.elements.entrySet()) {
final Node key = entry.getKey().accept(this, t); final Node key = entry.getKey().accept(this, t);