EOS 2  1.1.0
Einfache Objektbasierte Sprache
Difference.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.baseparser;
2 
3 import de.lathanda.eos.vm.Command;
4 import de.lathanda.eos.vm.commands.SubtractD;
5 import de.lathanda.eos.vm.commands.SubtractI;
6 
7 import java.util.ArrayList;
8 
15 public class Difference extends Expression {
16 
17  private final Expression left;
18  private final Expression right;
19 
20  public Difference(Expression left, Expression right) {
21  this.left = left;
22  this.right = right;
23  prio = 4;
24  }
25 
26  @Override
27  public void compile(ArrayList<Command> ops, boolean autoWindow) throws Exception {
28  left.compile(ops, autoWindow);
29  right.compile(ops, autoWindow);
30  if (type.isInteger()) {
31  ops.add(new SubtractI());
32  } else {
33  ops.add(new SubtractD());
34  }
35  }
36 
37  @Override
38  public void resolveNamesAndTypes(Expression with, Environment env) {
39  left.resolveNamesAndTypes(with, env);
40  right.resolveNamesAndTypes(with, env);
41  if (!left.getType().isNumber() || !right.getType().isNumber()) {
42  env.addError(marker, "NumberType", left.getType(), right.getType());
43  }
44  type = left.getType().mergeTypes(right.getType());
45  }
46 
47  @Override
48  public String toString() {
49  return "(" + left + "-" + right + ")";
50  }
51 
52  @Override
53  public String getLabel() {
54  return createText("Difference.Label", getLabelLeft(left), getLabelRight(right));
55  }
56 
57 }
void compile(ArrayList< Command > ops, boolean autoWindow)
Definition: Difference.java:27
void resolveNamesAndTypes(Expression with, Environment env)
Definition: Difference.java:38
Difference(Expression left, Expression right)
Definition: Difference.java:20
void addError(Marker marker, String errorId, Object... data)
String getLabelRight(Expression e)
Definition: Expression.java:82
abstract void compile(ArrayList< Command > ops, boolean autoWindow)
final String createText(String id, Object... args)
Definition: Node.java:34
abstract void resolveNamesAndTypes(Expression with, Environment env)
Type mergeTypes(Type right)
Definition: Type.java:62
Impressum