EOS 2  1.1.0
Einfache Objektbasierte Sprache
UserFunctionType.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.MType;
7 import de.lathanda.eos.vm.commands.UserFunction;
8 
15 public class UserFunctionType implements MethodType {
16  protected final Type[] parameters;
17  protected final Type ret;
18  protected final String name;
19  protected final String signature;
20 
28  this.parameters = parameters;
29  this.ret = ret;
30  this.name = name;
32  }
33 
34  @Override
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  @Override
87  public String getName() {
88  return name;
89  }
90 
91  public void compile(ArrayList<Command> ops, Expression target, boolean autowindow) throws Exception {
92  ops.add(new UserFunction(signature));
93  }
94 }
static String createUserFunctionSignature(String name, Type[] parameters)
Definition: Signatures.java:9
UserFunctionType(String name, Type[] parameters, Type ret)
void compile(ArrayList< Command > ops, Expression target, boolean autowindow)
Impressum