EOS 2  1.1.0
Einfache Objektbasierte Sprache
UserMethodType.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.MProcedure;
7 import de.lathanda.eos.vm.MType;
8 import de.lathanda.eos.vm.commands.UserMethod;
9 
17 public class UserMethodType implements MethodType {
18  protected final Type[] parameters;
19  protected final Type ret;
20  protected final String name;
21  protected MProcedure method;
22 
29  public UserMethodType(String name, Type[] parameters, Type ret) {
30  this.parameters = parameters;
31  this.ret = ret;
32  this.name = name;
33  }
34 
35  public boolean checkType(Type[] args) {
36  if (parameters.length != args.length) {
37  return false;
38  }
39  for (int i = 0; i < args.length; i++) {
40  if (!parameters[i].checkType(args[i])) {
41  return false;
42  }
43  }
44  return true;
45  }
46 
47  @Override
48  public Type getReturnType() {
49  return ret;
50  }
51 
52  @Override
53  public Type getParameterType(int i) {
54  return parameters[i];
55  }
56 
57  @Override
58  public String toString() {
59  StringBuilder res = new StringBuilder();
60  boolean first = true;
61  res.append(name).append("(");
62  for (AutoCompleteType t : parameters) {
63  if (first) {
64  res.append(t);
65  } else {
66  res.append(",").append(t);
67  first = false;
68  }
69  }
70  res.append(")");
71  if (ret != null && !ret.isVoid()) {
72  res.append(":").append(ret);
73  }
74  return res.toString();
75  }
76 
77  @Override
78  public MType[] getParameters() {
79  MType[] para = new MType[parameters.length];
80  for (int i = 0; i < para.length; i++) {
81  para[i] = parameters[i].getMType();
82  }
83  return para;
84  }
85 
86  public void compile(ArrayList<Command> ops, Expression target, boolean autowindow) throws Exception {
87  target.compile(ops, autowindow);
88  ops.add(new UserMethod(method));
89  }
90 
91  @Override
92  public String getName() {
93  return name;
94  }
95 
96  public void createMProcedure(ArrayList<Command> ops) {
97  method = new MProcedure(ops, false);
98  }
99 }
void compile(ArrayList< Command > ops, Expression target, boolean autowindow)
void createMProcedure(ArrayList< Command > ops)
UserMethodType(String name, Type[] parameters, Type ret)
Impressum