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