Skip to content

Commit 97abd81

Browse files
committed
Add function support for references.
1 parent 7aeedba commit 97abd81

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>org.byteskript</groupId>
88
<artifactId>byteskript</artifactId>
9-
<version>1.0.36</version>
9+
<version>1.0.37</version>
1010
<name>ByteSkript</name>
1111
<description>A compiled JVM implementation of the Skript language.</description>
1212

src/main/java/skript.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
import org.byteskript.skript.runtime.threading.ScriptThread;
33
import org.byteskript.skript.runtime.type.AtomicVariable;
44

5+
import java.lang.ref.Reference;
6+
import java.lang.ref.SoftReference;
7+
import java.lang.ref.WeakReference;
8+
59
/**
610
* This is the Java implementation of the 'skript' namespace functions.
711
* Some implementations may re-implement this in Skript itself.
@@ -129,6 +133,23 @@ public static double log(Object object) {
129133
//endregion
130134

131135
//region Generic
136+
public static WeakReference<?> weak_reference(Object value) {
137+
if (value instanceof WeakReference<?> reference) return reference;
138+
if (value instanceof Reference<?> reference) return new WeakReference<>(reference.get());
139+
return new WeakReference<>(value);
140+
}
141+
142+
public static SoftReference<?> soft_reference(Object value) {
143+
if (value instanceof SoftReference<?> reference) return reference;
144+
if (value instanceof Reference<?> reference) return new SoftReference<>(reference.get());
145+
return new SoftReference<>(value);
146+
}
147+
148+
public static Object reference_value(Object object) {
149+
if (object instanceof Reference<?> reference) return reference.get();
150+
return object;
151+
}
152+
132153
public static AtomicVariable get_atomic_literal(Object atomic) {
133154
if (atomic instanceof AtomicVariable variable) return variable;
134155
else return AtomicVariable.wrap(atomic);

src/test/resources/tests/namespaceskript.bsk

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,14 @@ function generic:
7171
assert hashcode("hello") is a number: "Generic function failed."
7272
assert strict_equals(1, 1) is true: "Generic function failed."
7373
assert strict_equals("cc", "c" + "c") is false: "Generic function failed."
74+
assert weak_reference("hello") exists: "Weak reference creation failed."
75+
assert soft_reference("hello") exists: "Soft reference creation failed."
76+
set {thing} to weak_reference("hello")
77+
assert {thing} is not "hello": "Reference was not created."
78+
assert reference_value({thing}) is "hello": "Weak reference was not extracted."
79+
set {thing} to soft_reference("hello")
80+
assert {thing} is not "hello": "Reference was not created."
81+
assert reference_value({thing}) is "hello": "Soft reference was not extracted."
7482

7583
function test:
7684
trigger:

0 commit comments

Comments
 (0)