EOS 2  1.1.0
Einfache Objektbasierte Sprache
Method.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.ReservedVariables;
5 import de.lathanda.eos.vm.commands.CreateVariable;
6 import de.lathanda.eos.vm.commands.DefineVariable;
7 import de.lathanda.eos.vm.commands.LoadVariable;
8 import de.lathanda.eos.vm.commands.StoreVariable;
9 
10 import java.util.ArrayList;
11 
17 public class Method extends Node implements ProgramUnit {
18  private final String name;
19  private final Sequence sequence;
20  private final Parameters parameters;
21  private final Type returnType;
22  private UserMethodType methodType;
23  private final UserClass uc;
24 
25  public Method(String name, Parameters parameters, Sequence sequence, Type returnType, UserClass uc) {
26  this.name = name;
27  this.parameters = (parameters != null) ? parameters : new Parameters();
28  this.sequence = sequence;
29  this.returnType = (returnType == null) ? Type.getVoid() : returnType;
30  this.uc = uc;
31  }
32 
33  public String getName() {
34  return name;
35  }
36 
37  public Sequence getSequence() {
38  return sequence;
39  }
40 
41  @Override
42  public void compile(ArrayList<Command> ops, boolean autoWindow) throws Exception {
43  for (Parameter p : parameters.getParameters()) {
44  ops.add(new DefineVariable(p.getName(), p.getType().getMType()));
45  ops.add(new StoreVariable(p.getName()));
46  }
47  if (returnType != null && !returnType.isVoid()) {
48  ops.add(new CreateVariable(ReservedVariables.RESULT, returnType.getMType()));
49  }
50 
51  sequence.compile(ops, autoWindow);
52  if (returnType != null && !returnType.isVoid()) {
54  }
55  methodType.createMProcedure(ops);
56  }
57 
58  @Override
59  public void resolveNamesAndTypes(Expression with, Environment env) {
60  if (parameters != null) {
61  parameters.registerParameters(env);
62  }
63  if (returnType != null && !returnType.isVoid()) {
64  env.setVariableType("1x", returnType);
65  }
66  sequence.resolveNamesAndTypes(with, env);
67  }
68 
70  if (methodType == null) {
71  createMethodType(env);
72  }
73  return methodType;
74  }
75 
77  return methodType;
78  }
79  public void createMethodType(Environment env) {
80  if (methodType != null) {
81  return;
82  }
83  Type[] para;
84  if (parameters != null) {
85  para = parameters.getTypes();
86  } else {
87  para = new Type[] {};
88  }
89  if (returnType != null && returnType.isUnknown()) {
90  env.addError(marker, "UnknownType", returnType);
91  }
92  methodType = new UserMethodType(name, para, returnType);
93  }
94 
95  @Override
96  public String getLabel() {
97  return name;
98  }
99 
101  StringBuilder autocomplete = new StringBuilder(name);
102  autocomplete.append("(");
103  boolean first = true;
104  int start = autocomplete.length()+1;
105  int length = 0;
106  for(var p:parameters.getParameters()) {
107  if (!first) {
108  autocomplete.append(", ");
109  } else {
110  start = autocomplete.length();
111  length = p.getName().length();
112  }
113  autocomplete.append(p.getName());
114  }
115  autocomplete.append(")");
116  return new AutoCompleteInfo(autocomplete.toString(), uc.getType(), AutoCompleteInformation.METHOD, start, length);
117  }
118 
119 }
void setVariableType(String name, Type type)
void addError(Marker marker, String errorId, Object... data)
void compile(ArrayList< Command > ops, boolean autoWindow)
Definition: Method.java:42
void createMethodType(Environment env)
Definition: Method.java:79
Method(String name, Parameters parameters, Sequence sequence, Type returnType, UserClass uc)
Definition: Method.java:25
MethodType getMethodType(Environment env)
Definition: Method.java:69
AutoCompleteInformation getAutoComplete()
Definition: Method.java:100
void resolveNamesAndTypes(Expression with, Environment env)
Definition: Method.java:59
void registerParameters(Environment env)
Definition: Parameters.java:43
void resolveNamesAndTypes(Expression with, Environment env)
Definition: Sequence.java:67
void compile(ArrayList< Command > ops, boolean autoWindow)
Definition: Sequence.java:53
static SystemType getVoid()
Definition: Type.java:76
void createMProcedure(ArrayList< Command > ops)
Impressum