Skip to content

Commit

Permalink
Add function support for references.
Browse files Browse the repository at this point in the history
  • Loading branch information
Moderocky committed Sep 21, 2022
1 parent 7aeedba commit 97abd81
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 1 deletion.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>org.byteskript</groupId>
<artifactId>byteskript</artifactId>
<version>1.0.36</version>
<version>1.0.37</version>
<name>ByteSkript</name>
<description>A compiled JVM implementation of the Skript language.</description>

Expand Down
21 changes: 21 additions & 0 deletions src/main/java/skript.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
import org.byteskript.skript.runtime.threading.ScriptThread;
import org.byteskript.skript.runtime.type.AtomicVariable;

import java.lang.ref.Reference;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;

/**
* This is the Java implementation of the 'skript' namespace functions.
* Some implementations may re-implement this in Skript itself.
Expand Down Expand Up @@ -129,6 +133,23 @@ public static double log(Object object) {
//endregion

//region Generic
public static WeakReference<?> weak_reference(Object value) {
if (value instanceof WeakReference<?> reference) return reference;
if (value instanceof Reference<?> reference) return new WeakReference<>(reference.get());
return new WeakReference<>(value);
}

public static SoftReference<?> soft_reference(Object value) {
if (value instanceof SoftReference<?> reference) return reference;
if (value instanceof Reference<?> reference) return new SoftReference<>(reference.get());
return new SoftReference<>(value);
}

public static Object reference_value(Object object) {
if (object instanceof Reference<?> reference) return reference.get();
return object;
}

public static AtomicVariable get_atomic_literal(Object atomic) {
if (atomic instanceof AtomicVariable variable) return variable;
else return AtomicVariable.wrap(atomic);
Expand Down
8 changes: 8 additions & 0 deletions src/test/resources/tests/namespaceskript.bsk
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,14 @@ function generic:
assert hashcode("hello") is a number: "Generic function failed."
assert strict_equals(1, 1) is true: "Generic function failed."
assert strict_equals("cc", "c" + "c") is false: "Generic function failed."
assert weak_reference("hello") exists: "Weak reference creation failed."
assert soft_reference("hello") exists: "Soft reference creation failed."
set {thing} to weak_reference("hello")
assert {thing} is not "hello": "Reference was not created."
assert reference_value({thing}) is "hello": "Weak reference was not extracted."
set {thing} to soft_reference("hello")
assert {thing} is not "hello": "Reference was not created."
assert reference_value({thing}) is "hello": "Soft reference was not extracted."

function test:
trigger:
Expand Down

0 comments on commit 97abd81

Please sign in to comment.