From c768eb2c63a9d2b0db8b788139b4aea164c25d68 Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Mon, 6 Nov 2023 14:55:48 +0100 Subject: [PATCH] ReturnOperation in parent --- src/dev/peerat/parser/java/JavaParser.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/dev/peerat/parser/java/JavaParser.java b/src/dev/peerat/parser/java/JavaParser.java index ff649c1..084cdf0 100644 --- a/src/dev/peerat/parser/java/JavaParser.java +++ b/src/dev/peerat/parser/java/JavaParser.java @@ -23,8 +23,10 @@ import dev.peerat.parser.TokenValidator; import dev.peerat.parser.Tokenizer; import dev.peerat.parser.java.Annotation.AnnotableBuffer; import dev.peerat.parser.java.Function.FunctionContainer; +import dev.peerat.parser.java.Operation.OperationContainer; import dev.peerat.parser.java.Value.BiValue; import dev.peerat.parser.java.Variable.VariableContainer; +import dev.peerat.parser.java.operation.ReturnOperation; import dev.peerat.parser.state.BuilderStateTree; import dev.peerat.parser.state.InitialStateTree; import dev.peerat.parser.state.RedirectStateTree; @@ -555,11 +557,20 @@ public class JavaParser extends Parser { operation_value.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(operation_value); StateTree operation_return = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("return"))); - operation_return.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) + operation_return.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(local.get()))) .then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) - .end((a,b) -> a); + .end((parent,bag) -> { + ReturnOperation op = new ReturnOperation(bag.get()); + if(parent instanceof OperationContainer) ((OperationContainer)parent).addOperation(op); + return null; + }); + operation_return.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) - .end((a,b) -> a); + .end((parent,bag) -> { + ReturnOperation op = new ReturnOperation(bag.get()); + if(parent instanceof OperationContainer) ((OperationContainer)parent).addOperation(op); + return null; + }); operation.then((validator) -> validator.validate((token) -> token.getValue().equals("throw"))) .then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) .then((validator) -> validator.validate((token) -> token.getValue().equals(";")))