[Build] Function (signature)

This commit is contained in:
jeffcheasey88 2023-09-12 17:44:44 +02:00
parent 18c2d0cfa1
commit 5394d21552
4 changed files with 74 additions and 7 deletions

View file

@ -42,6 +42,10 @@ public class Bag{
return this.map.containsKey(key);
}
public void remove(String key){
this.map.remove(key);
}
public void set(String key, Object value){
this.map.put(key, value);
}

View file

@ -8,7 +8,7 @@ public class Function extends JavaElement{
private List<Annotation> annotations;
private int modifier;
private int mod;
private Token generic;
private Token type;
private Token name;
@ -17,6 +17,25 @@ public class Function extends JavaElement{
private List<JavaElement> elements;
public Function(){}
public Function(int mod, Token type, Token name){
this.mod = mod;
this.type = type;
this.name = name;
}
public Function(int mod, Token generic, Token type, Token name){
this(mod, type, name);
this.generic = generic;
}
public Function(int mod, Token generic, Token type, Token name, List<Variable> parameters){
this(mod, generic, type, name);
this.parameters = parameters;
}
public Function(int mod, Token generic, Token type, Token name, List<Variable> parameters, List<Token> throwables){
this(mod, generic, type, name, parameters);
this.throwables = throwables;
}
}

View file

@ -14,5 +14,24 @@ public class Variable extends JavaElement{
private boolean elips;
private Value value;
public Variable(){}
public Variable(int mod, Token type, Token name){
this.mod = mod;
this.type = type;
this.name = name;
}
public Variable(int mod, Token type, Token name, boolean elips){
this(mod, type, name);
this.elips = elips;
}
public Variable(int mod, Token type, Token name, boolean elips, Value value){
this(mod, type, name, elips);
this.value = value;
}
@Override
public String toString(){
return "Variable[mod="+mod+", type="+type+", name="+name+", elips="+elips+", value="+value+"]";
}
}

View file

@ -23,8 +23,10 @@ public class FunctionTests {
public static StateTree<JavaElement> get(){
BiFunction<JavaElement, Bag, JavaElement> function_builder = (parent, bag) -> {
System.out.println(bag);
return null;
buildVariable(bag);
Integer mod = bag.get("mod");
Function function = new Function(mod == null ? 0 : mod, bag.get("generic"), bag.get("type"), bag.get("name"), bag.get("param"), bag.get("throws"));
return function;
};
InitialStateTree<JavaElement> function = new InitialStateTree<>();
@ -71,7 +73,7 @@ public class FunctionTests {
}));
BuilderStateTree<JavaElement,JavaElement> function_start_throws = function_throws.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))).end(function_builder);
// function_start_throws.multiple(function_container);
function_start_throws.unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end((a,b) -> a);
function_start_throws.unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end();
function_throws.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(function_throws);
function_throws.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))).end(function_builder);
@ -89,7 +91,9 @@ public class FunctionTests {
validator.validate((token) -> token.getValue().equals(".")) &&
validator.validate((token) -> token.getValue().equals("."), (bag, token) -> bag.set("arg_elips", true)))
.then(function_arg_name);
StateTree<JavaElement> function_arg_split = function_arg_name.then((validator) -> validator.validate((token) -> token.getValue().equals(",")));
StateTree<JavaElement> function_arg_split = function_arg_name.then((validator) -> validator.validate((token) -> token.getValue().equals(","), (bag, token) -> {
buildVariable(bag);
}));
function_arg_split.then(function_arg_mod);
function_arg_split.then(function_arg_type);
function_arg_name.then(function_end);
@ -97,6 +101,27 @@ public class FunctionTests {
return function;
}
private static void buildVariable(Bag bag){
if(!bag.has("arg_name")) return;
List<Variable> parameters = bag.get("param");
if(parameters == null){
parameters = new ArrayList<>();
bag.set("param", parameters);
}
Integer mod = bag.get("arg_mod");
Variable variable = new Variable(mod == null ? 0 : mod, bag.<Token>get("arg_type"), bag.<Token>get("arg_name"), bag.get("arg_elips") == Boolean.TRUE);
bag.remove("arg_name");
bag.remove("arg_mod");
bag.remove("arg_type");
bag.remove("arg_name");
bag.remove("arg_elips");
parameters.add(variable);
}
private static Parser<JavaElement> parser = new Parser<JavaElement>(){
{
setTokenizer(ModifierTests.TOKENIZER);