An imperative JVM language created using ANTLR and ASM.
An imperative JVM language that I started using Jakub Dziworski’s tutorial. However, my language is going in a different direction than the original tutorial, so the end results will be quite different. The goal of this language is not to be used, but for me to learn from.
This is up for change, but this is currently how I would like the language to look when I decide to stop working on it.
var test = 4
var arrTest = String<5>
fn add(int: x, int: y) -> int {
ret x + y
}
var total = add(test, 3)
arrTest<0> = total.toStr()
print(total)
for(i in [0, 4]) {
print(arrTest<i>)
}
var param1 = "Test"
var param2 = 5
var response = testFunc(param1, param2)
print(response)
fn testFunc(String: thing, Int: test) -> String {
print(thing)
print(test)
ret thing
}
Which compiles down to:
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=100, locals=3, args_size=1
0: ldc #25 // String \"Test\"
2: astore_0
3: bipush 5
5: istore_1
6: aload_0
7: iload_1
8: invokestatic #27 // Method testFunc:(Ljava/lang/String;I)Ljava/lang/String;
11: astore_2
12: getstatic #14 // Field java/lang/System.out:Ljava/io/PrintStream;
15: aload_2
16: invokevirtual #20 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
19: return
public static java.lang.String testFunc(java.lang.String, int);
descriptor: (Ljava/lang/String;I)Ljava/lang/String;
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=100, locals=2, args_size=2
0: getstatic #14 // Field java/lang/System.out:Ljava/io/PrintStream;
3: aload_0
4: invokevirtual #20 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
7: getstatic #14 // Field java/lang/System.out:Ljava/io/PrintStream;
10: iload_1
11: invokevirtual #23 // Method java/io/PrintStream.println:(I)V
14: aload_0
15: areturn