From 523c76dd386bc57c890f9572e2d032d6ce478d0d Mon Sep 17 00:00:00 2001 From: aNNiMON Date: Thu, 9 Nov 2023 19:53:47 +0200 Subject: [PATCH] Convert OwnLang value to Java object --- .../java/com/annimon/ownlang/lib/ArrayValue.java | 9 ++++++--- .../com/annimon/ownlang/lib/ClassInstance.java | 5 +++++ .../java/com/annimon/ownlang/lib/MapValue.java | 14 +++++++++----- .../main/java/com/annimon/ownlang/lib/Value.java | 4 ++++ 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/ownlang-core/src/main/java/com/annimon/ownlang/lib/ArrayValue.java b/ownlang-core/src/main/java/com/annimon/ownlang/lib/ArrayValue.java index 94b7a76..44aa31c 100644 --- a/ownlang-core/src/main/java/com/annimon/ownlang/lib/ArrayValue.java +++ b/ownlang-core/src/main/java/com/annimon/ownlang/lib/ArrayValue.java @@ -2,9 +2,7 @@ package com.annimon.ownlang.lib; import com.annimon.ownlang.exceptions.ArgumentsMismatchException; import com.annimon.ownlang.exceptions.TypeException; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; +import java.util.*; /** * Represents array type. @@ -131,6 +129,11 @@ public class ArrayValue implements Value, Iterable { return elements; } + @Override + public Object asJavaObject() { + return Arrays.stream(elements).map(Value::asJavaObject).toArray(Object[]::new); + } + @Override public int asInt() { throw new TypeException("Cannot cast array to integer"); diff --git a/ownlang-core/src/main/java/com/annimon/ownlang/lib/ClassInstance.java b/ownlang-core/src/main/java/com/annimon/ownlang/lib/ClassInstance.java index 75c1292..a5a0fe2 100644 --- a/ownlang-core/src/main/java/com/annimon/ownlang/lib/ClassInstance.java +++ b/ownlang-core/src/main/java/com/annimon/ownlang/lib/ClassInstance.java @@ -69,6 +69,11 @@ public class ClassInstance implements Value { return thisMap; } + @Override + public Object asJavaObject() { + return thisMap.asJavaObject(); + } + @Override public int asInt() { throw new TypeException("Cannot cast class " + className + " to integer"); diff --git a/ownlang-core/src/main/java/com/annimon/ownlang/lib/MapValue.java b/ownlang-core/src/main/java/com/annimon/ownlang/lib/MapValue.java index 1d8c7d1..6fecbcf 100644 --- a/ownlang-core/src/main/java/com/annimon/ownlang/lib/MapValue.java +++ b/ownlang-core/src/main/java/com/annimon/ownlang/lib/MapValue.java @@ -1,10 +1,7 @@ package com.annimon.ownlang.lib; import com.annimon.ownlang.exceptions.TypeException; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.function.Consumer; /** @@ -60,7 +57,7 @@ public class MapValue implements Value, Iterable> { public int type() { return Types.MAP; } - + public int size() { return map.size(); } @@ -93,6 +90,13 @@ public class MapValue implements Value, Iterable> { public Object raw() { return map; } + + @Override + public Object asJavaObject() { + Map result = new HashMap<>(map.size()); + map.forEach((k, v) -> result.put(k.asJavaObject(), v.asJavaObject())); + return result; + } @Override public int asInt() { diff --git a/ownlang-core/src/main/java/com/annimon/ownlang/lib/Value.java b/ownlang-core/src/main/java/com/annimon/ownlang/lib/Value.java index 0bac3e4..f334e6d 100644 --- a/ownlang-core/src/main/java/com/annimon/ownlang/lib/Value.java +++ b/ownlang-core/src/main/java/com/annimon/ownlang/lib/Value.java @@ -15,4 +15,8 @@ public interface Value extends Comparable { String asString(); int type(); + + default Object asJavaObject() { + return raw(); + } }