1 package de.lathanda.eos.baseparser;
3 import java.lang.reflect.Method;
4 import java.util.ArrayList;
5 import java.util.LinkedList;
6 import java.util.TreeMap;
8 import de.lathanda.eos.vm.Command;
9 import de.lathanda.eos.vm.MType;
10 import de.lathanda.eos.vm.commands.Function;
19 private static TreeMap<String, LinkedList<SystemFunctionType> > systemFunctions =
new TreeMap<>();
22 protected final String
name;
36 throws NoSuchMethodException {
38 Class<?>[] parametersClass =
new Class<?>[
parameters.length];
40 parametersClass[i] =
parameters[i].convertToClass();
42 this.method = target.convertToClass().getMethod(
name, parametersClass);
59 this.originalName =
name;
72 throws NoSuchMethodException {
74 Class<?>[] parametersClass =
new Class<?>[
parameters.length];
76 parametersClass[i] =
parameters[i].convertToClass();
78 this.method = target.getMethod(
name, parametersClass);
87 LinkedList<SystemFunctionType> list;
88 if (systemFunctions.containsKey(key)) {
89 list = systemFunctions.get(key);
91 list =
new LinkedList<>();
92 systemFunctions.put(key, list);
100 for (
int i = 0; i < args.length; i++) {
120 StringBuilder res =
new StringBuilder();
121 boolean first =
true;
127 res.append(
",").append(t);
133 res.append(
":").append(
ret);
135 return res.toString();
146 for (
int i = 0; i < para.length; i++) {
152 public void compile(ArrayList<Command> ops,
Expression target,
boolean autowindow)
throws Exception {
158 for(var sf : functions) {
159 if (sf.checkType(types)) {
static String createPreselectionSignature(String name, int args)
boolean checkType(Type[] args)
static void registerSystemFunction(Class<?> target, SystemType[] parameters, Type ret, String name, String originalName)
Type getParameterType(int i)
SystemFunctionType(String name, Type[] parameters, Type ret)
static SystemFunctionType getSystemFunction(String name, Type[] types)
final String originalName
void compile(ArrayList< Command > ops, Expression target, boolean autowindow)
SystemFunctionType(Class<?> target, SystemType[] parameters, Type ret, String name, String originalName)
SystemFunctionType(SystemType target, SystemType[] parameters, Type ret, String name, String originalName)
abstract MType getMType()