1 package de.lathanda.eos.baseparser;
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.LoadVariable;
7 import de.lathanda.eos.vm.commands.StoreVariable;
9 import java.util.ArrayList;
18 private final String name;
21 private final Type returnType;
22 private final boolean globalAccess;
27 this.parameters = (parameters !=
null) ? parameters :
new Parameters();
28 this.sequence = sequence;
29 this.returnType = (returnType ==
null) ?
Type.
getVoid() : returnType;
30 this.globalAccess = globalAccess;
44 public void compile(ArrayList<Command> ops,
boolean autoWindow)
throws Exception {
46 ops.add(
new CreateVariable(p.getName().toLowerCase(), p.getType().getMType()));
49 if (returnType !=
null && !returnType.
isVoid()) {
53 sequence.
compile(ops, autoWindow);
54 if (returnType !=
null && !returnType.
isVoid()) {
61 if (parameters !=
null) {
64 if (returnType !=
null && !returnType.
isVoid()) {
71 createMethodType(env);
73 env.
addError(
marker,
"DoubleMethodDefinition", name, (parameters ==
null) ? 0 : parameters.
size());
75 if (parameters !=
null) {
84 if (methodType ==
null) {
85 createMethodType(env);
91 if (methodType !=
null) {
95 if (parameters !=
null) {
100 if (returnType !=
null && returnType.
isUnknown()) {
103 methodType =
new UserFunctionType(name, para, returnType);
void setVariableType(String name, Type type)
void setFunctionSignature(String name, int args, MethodType methodType)
boolean isFunctionDefined(String name, int args)
void addError(Marker marker, String errorId, Object... data)
void registerParameters(Environment env)
List< Parameter > getParameters()
void resolveNamesAndTypes(Expression with, Environment env)
void compile(ArrayList< Command > ops, boolean autoWindow)
void registerSub(Environment env)
boolean getGlobalAccess()
MethodType getMethodType(Environment env)
void compile(ArrayList< Command > ops, boolean autoWindow)
void resolveNamesAndTypes(Expression with, Environment env)
Type[] getParameterTypes()
SubRoutine(String name, Parameters parameters, Sequence sequence, Type returnType, boolean globalAccess)
abstract MType getMType()
static SystemType getVoid()