GetLink instruction

This commit is contained in:
Anuken
2020-08-13 10:20:29 -04:00
parent 54dcf06722
commit 1de3217738
3 changed files with 58 additions and 2 deletions
+22
View File
@@ -29,6 +29,7 @@ public class LExecutor{
public LongSeq graphicsBuffer = new LongSeq();
public StringBuilder textBuffer = new StringBuilder();
public Building[] links = {};
public boolean initialized(){
return instructions != null && vars != null && instructions.length > 0;
@@ -161,6 +162,27 @@ public class LExecutor{
}
}
public static class GetLinkI implements LInstruction{
public int output, index;
public GetLinkI(int output, int index){
this.index = index;
this.output = output;
}
public GetLinkI(){
}
@Override
public void run(LExecutor exec){
int address = exec.numi(index);
if(address >= 0 && address < exec.links.length){
exec.setobj(output, exec.links[address]);
}
}
}
public static class ReadI implements LInstruction{
public int target, position, output;
+24 -1
View File
@@ -56,6 +56,30 @@ public class LStatements{
}
}
@RegisterStatement("read")
public static class GetLinkStatement extends LStatement{
public String output = "result", address = "0";
@Override
public void build(Table table){
field(table, output, str -> output = str);
table.add(" = link# ");
field(table, address, str -> address = str);
}
@Override
public LCategory category(){
return LCategory.io;
}
@Override
public LInstruction build(LAssembler builder){
return new GetLinkI(builder.var(output), builder.var(address));
}
}
@RegisterStatement("write")
public static class WriteStatement extends LStatement{
public String input = "result", target = "cell1", address = "0";
@@ -120,7 +144,6 @@ public class LStatements{
}
}
@RegisterStatement("draw")
public static class DrawStatement extends LStatement{
public GraphicsType type = GraphicsType.clear;