Skip to content

Commit 523c76d

Browse files
committed
Convert OwnLang value to Java object
1 parent 5d00598 commit 523c76d

File tree

4 files changed

+24
-8
lines changed

4 files changed

+24
-8
lines changed

ownlang-core/src/main/java/com/annimon/ownlang/lib/ArrayValue.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22

33
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
44
import com.annimon.ownlang.exceptions.TypeException;
5-
import java.util.Arrays;
6-
import java.util.Iterator;
7-
import java.util.List;
5+
import java.util.*;
86

97
/**
108
* Represents array type.
@@ -131,6 +129,11 @@ public Object raw() {
131129
return elements;
132130
}
133131

132+
@Override
133+
public Object asJavaObject() {
134+
return Arrays.stream(elements).map(Value::asJavaObject).toArray(Object[]::new);
135+
}
136+
134137
@Override
135138
public int asInt() {
136139
throw new TypeException("Cannot cast array to integer");

ownlang-core/src/main/java/com/annimon/ownlang/lib/ClassInstance.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ public Object raw() {
6969
return thisMap;
7070
}
7171

72+
@Override
73+
public Object asJavaObject() {
74+
return thisMap.asJavaObject();
75+
}
76+
7277
@Override
7378
public int asInt() {
7479
throw new TypeException("Cannot cast class " + className + " to integer");

ownlang-core/src/main/java/com/annimon/ownlang/lib/MapValue.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package com.annimon.ownlang.lib;
22

33
import com.annimon.ownlang.exceptions.TypeException;
4-
import java.util.Iterator;
5-
import java.util.LinkedHashMap;
6-
import java.util.Map;
7-
import java.util.Objects;
4+
import java.util.*;
85
import java.util.function.Consumer;
96

107
/**
@@ -60,7 +57,7 @@ public ArrayValue toPairs() {
6057
public int type() {
6158
return Types.MAP;
6259
}
63-
60+
6461
public int size() {
6562
return map.size();
6663
}
@@ -93,6 +90,13 @@ public Map<Value, Value> getMap() {
9390
public Object raw() {
9491
return map;
9592
}
93+
94+
@Override
95+
public Object asJavaObject() {
96+
Map<Object, Object> result = new HashMap<>(map.size());
97+
map.forEach((k, v) -> result.put(k.asJavaObject(), v.asJavaObject()));
98+
return result;
99+
}
96100

97101
@Override
98102
public int asInt() {

ownlang-core/src/main/java/com/annimon/ownlang/lib/Value.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,8 @@ public interface Value extends Comparable<Value> {
1515
String asString();
1616

1717
int type();
18+
19+
default Object asJavaObject() {
20+
return raw();
21+
}
1822
}

0 commit comments

Comments
 (0)