Skip to content

Commit ba6d510

Browse files
committed
If statements added!
1 parent 10d4ce9 commit ba6d510

File tree

17 files changed

+1476
-206
lines changed

17 files changed

+1476
-206
lines changed

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package dev.ultreon.pythonc;
2+
3+
import org.objectweb.asm.Type;
4+
5+
import java.util.Stack;
6+
7+
public abstract class AbstractContext implements Context {
8+
private static final Stack<Type> stack = new Stack<>();
9+
10+
@Override
11+
public boolean needsPop() {
12+
return !stack.isEmpty();
13+
}
14+
15+
@Override
16+
public void push(Type type) {
17+
stack.push(type);
18+
if (type.equals(Type.LONG_TYPE) || type.equals(Type.DOUBLE_TYPE)) stack.push(type);
19+
}
20+
21+
@Override
22+
public Type pop() {
23+
Type pop = stack.pop();
24+
if (pop.equals(Type.LONG_TYPE) || pop.equals(Type.DOUBLE_TYPE)) stack.pop();
25+
return pop;
26+
}
27+
28+
@Override
29+
public Type peek() {
30+
return stack.peek();
31+
}
32+
33+
@Override
34+
public int stackSize() {
35+
return stack.size();
36+
}
37+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package dev.ultreon.pythonc;
2+
3+
import org.objectweb.asm.Type;
4+
5+
public interface Context {
6+
7+
boolean needsPop();
8+
void push(Type type);
9+
Type pop();
10+
11+
Type peek();
12+
13+
int stackSize();
14+
15+
default void pop(Type type) {
16+
Type pop = pop();
17+
if (!pop.equals(type)) throw new RuntimeException("Expected " + type + " but got " + pop);
18+
}
19+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package dev.ultreon.pythonc;
2+
3+
public class FileContext extends AbstractContext {
4+
5+
}

compiler/src/main/java/dev/ultreon/pythonc/FuncCall.java

Lines changed: 146 additions & 74 deletions
Large diffs are not rendered by default.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package dev.ultreon.pythonc;
2+
3+
public class FunctionContext extends AbstractContext {
4+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package dev.ultreon.pythonc;
2+
3+
import org.jetbrains.annotations.Nullable;
4+
import org.objectweb.asm.Label;
5+
import org.objectweb.asm.Type;
6+
7+
public class IfStatementContext extends AbstractContext {
8+
public @Nullable Label elifLabel;
9+
public final Label endLabel;
10+
11+
public IfStatementContext(@Nullable Label elifLabel, Label endLabel) {
12+
this.elifLabel = elifLabel;
13+
this.endLabel = endLabel;
14+
}
15+
}

compiler/src/main/java/dev/ultreon/pythonc/ImportedField.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public Object preload(MethodVisitor mv, PythonCompiler compiler, boolean boxed)
1313

1414
@Override
1515
public void load(MethodVisitor mv, PythonCompiler compiler, Object preloaded, boolean boxed) {
16-
mv.visitFieldInsn(GETSTATIC, owner, name, type.getDescriptor());
16+
compiler.writer.getStatic(owner, name, type.getDescriptor());
1717
}
1818

1919
@Override

compiler/src/main/java/dev/ultreon/pythonc/JClass.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public Object preload(MethodVisitor mv, PythonCompiler compiler, boolean boxed)
2929
@Override
3030
public void load(MethodVisitor mv, PythonCompiler compiler, Object preloaded, boolean boxed) {
3131
// Do <name>.class
32-
mv.visitLdcInsn(Type.getType("L" + className + ";"));
32+
compiler.writer.loadClass(Type.getType("L" + className + ";"));
3333
}
3434

3535
public Type asmType() {

0 commit comments

Comments
 (0)