Skip to content

Commit a05e9e5

Browse files
committed
[java] Add Boolean converter to Value, add collections example
1 parent 3bed30c commit a05e9e5

File tree

3 files changed

+96
-2
lines changed

3 files changed

+96
-2
lines changed

examples/java/collections.own

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
use java
2+
3+
println "OwnLang array to Java array"
4+
arr = toObject([1, 2, 4, 2, 0, 4, 3])
5+
println arr
6+
7+
println "\nArrays.asList"
8+
Arrays = newClass("java.util.Arrays")
9+
list1 = Arrays.asList(arr)
10+
println list1
11+
12+
println "\nStack"
13+
Stack = newClass("java.util.Stack")
14+
stack = new Stack()
15+
stack.push(1)
16+
stack.push(2)
17+
stack.push(3)
18+
println stack.pop()
19+
println stack.pop()
20+
21+
22+
println "\nArrayList from Stack"
23+
ArrayList = newClass("java.util.ArrayList")
24+
list2 = new ArrayList(stack)
25+
list2.add(4)
26+
for element : list2.toArray() {
27+
println element
28+
}
29+
30+
31+
println "\nHashSet"
32+
HashSet = newClass("java.util.HashSet")
33+
set = new HashSet(list1)
34+
println set
35+
containsFour = set.contains(4)
36+
// NOTE: containsFour is java.lang.Boolean
37+
println containsFour.getClass()
38+
isContainsFour = toValue(containsFour)
39+
if (isContainsFour) {
40+
println "Set contains 4"
41+
}
42+
for element : set.toArray() {
43+
println element
44+
}

modules/main/src/main/java/com/annimon/ownlang/modules/java/java.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ public final class java implements Module {
2424
public Map<String, Value> constants() {
2525
final var result = new LinkedHashMap<String, Value>(16);
2626
result.put("null", NULL);
27+
result.put("TRUE", new ObjectValue(Boolean.TRUE));
28+
result.put("FALSE", new ObjectValue(Boolean.FALSE));
2729
result.put("boolean.class", new ClassValue(boolean.class));
2830
result.put("boolean[].class", new ClassValue(boolean[].class));
2931
result.put("boolean[][].class", new ClassValue(boolean[][].class));
@@ -258,8 +260,11 @@ private Value toObject(Value[] args) {
258260

259261
private Value toValue(Value[] args) {
260262
Arguments.check(1, args.length);
261-
if (args[0] instanceof ObjectValue) {
262-
return objectToValue( ((ObjectValue) args[0]).object );
263+
if (args[0] instanceof ObjectValue obj) {
264+
if (obj.object != null && Boolean.class.isAssignableFrom(obj.object.getClass())) {
265+
return NumberValue.fromBoolean((Boolean) obj.object);
266+
}
267+
return objectToValue(obj.object);
263268
}
264269
return NULL;
265270
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// Simple parser example
2+
use std, types
3+
4+
operations = {
5+
"+" : def(a,b) = a+b,
6+
"-" : def(a,b) = a-b,
7+
"*" : def(a,b) = a*b,
8+
"/" : def(a,b) = a/b,
9+
"%" : def(a,b) = a%b,
10+
">" : def(a,b) = a>b,
11+
"<" : def(a,b) = a<b
12+
}
13+
14+
def calculate(expression) {
15+
pos = 0
16+
len = length(expression)
17+
18+
def isDigit(c) = 48 <= c && c <= 57
19+
20+
def parseNumber() {
21+
buffer = ""
22+
while (pos < len && isDigit(expression.charAt(pos))) {
23+
buffer += toChar(expression.charAt(pos))
24+
pos++
25+
}
26+
return number(buffer)
27+
}
28+
29+
def parseOperation() {
30+
while (pos < len && !arrayKeyExists(toChar(expression.charAt(pos)), operations)) {
31+
pos++
32+
}
33+
return operations[toChar(expression.charAt(pos++))]
34+
}
35+
36+
num1 = parseNumber()
37+
op = parseOperation()
38+
num2 = parseNumber()
39+
return op(num1, num2)
40+
}
41+
42+
x = calculate("2+2")
43+
+ calculate("400*16")
44+
+ calculate("400/160")
45+
+ calculate("3>4")

0 commit comments

Comments
 (0)