Skip to content

Commit 1e33fa3

Browse files
committed
Операция слияния объектов
1 parent 56c504c commit 1e33fa3

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

src/com/annimon/ownlang/lib/MapValue.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ public class MapValue implements Value, Iterable<Map.Entry<Value, Value>> {
1414

1515
public static final MapValue EMPTY = new MapValue(1);
1616

17+
public static MapValue merge(MapValue map1, MapValue map2) {
18+
final MapValue result = new MapValue(map1.size() + map2.size());
19+
result.map.putAll(map1.map);
20+
result.map.putAll(map2.map);
21+
return result;
22+
}
23+
1724
private final Map<Value, Value> map;
1825

1926
public MapValue(int size) {

src/com/annimon/ownlang/lib/Types.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public final class Types {
1010
MAP = 4,
1111
FUNCTION = 5;
1212

13-
private static int FIRST = OBJECT, LAST = FUNCTION;
13+
private static final int FIRST = OBJECT, LAST = FUNCTION;
1414
private static final String[] NAMES = {"object", "number", "string", "array", "map", "function"};
1515

1616
public static String typeToString(int type) {

src/com/annimon/ownlang/parser/ast/BinaryExpression.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.annimon.ownlang.exceptions.TypeException;
55
import com.annimon.ownlang.lib.ArrayValue;
66
import com.annimon.ownlang.lib.Functions;
7+
import com.annimon.ownlang.lib.MapValue;
78
import com.annimon.ownlang.lib.NumberValue;
89
import com.annimon.ownlang.lib.StringValue;
910
import com.annimon.ownlang.lib.Types;
@@ -89,7 +90,10 @@ private Value add(Value value1, Value value2) {
8990
case Types.NUMBER: return add((NumberValue) value1, value2);
9091
case Types.STRING: return new StringValue(value1.asString() + value2.asString());
9192
case Types.ARRAY: return ArrayValue.add((ArrayValue) value1, value2);
92-
case Types.MAP: /* TODO: merge maps */
93+
case Types.MAP:
94+
if (value2.type() != Types.MAP)
95+
throw new TypeException("Cannot merge non map value to map");
96+
return MapValue.merge((MapValue) value1, (MapValue) value2);
9397
case Types.FUNCTION: /* TODO: combining functions */
9498
default:
9599
// Concatenation strings

0 commit comments

Comments
 (0)