ItsDeltin / Overwatch-Script-To-Workshop

Converts scripts to Overwatch workshops.
207 stars 24 forks source link

Error when using virtual methods that can return values #418

Closed badcodecat closed 1 year ago

badcodecat commented 1 year ago

When using a virtual method that can return, using more than one return will cause a error.

Sample code to reproduce:

class Parent
{
    public virtual Number get_value()
    {
        return 1;
    }
}

class Child : Parent
{
    public override Number get_value()
    {
        return 2;
    }
}

rule: "Test"
{
    Parent p = new Child();
    Number n = p.get_value();
}

Result:

An exception was thrown while translating to workshop. System.Exception: _multiplePaths is set as false and 2 expressions were returned. at Deltin.Deltinteger.Parse.ReturnHandler.ReturnValue(IWorkshopTree value) in /home/runner/work/Overwatch-Script-To-Workshop/Overwatch-Script-To-Workshop/Deltinteger/Deltinteger/Parse/Functions/ReturnHandler.cs:line 36 at Deltin.Deltinteger.Parse.ReturnAction.Translate(ActionSet actionSet) in /home/runner/work/Overwatch-Script-To-Workshop/Overwatch-Script-To-Workshop/Deltinteger/Deltinteger/Parse/Statement.cs:line 73 at Deltin.Deltinteger.Parse.BlockAction.Translate(ActionSet actionSet) in /home/runner/work/Overwatch-Script-To-Workshop/Overwatch-Script-To-Workshop/Deltinteger/Deltinteger/Parse/Block.cs:line 36 at Deltin.Deltinteger.Parse.Functions.Builder.Virtual.AbstractVirtualContentBuilder1.Build() in /home/runner/work/Overwatch-Script-To-Workshop/Overwatch-Script-To-Workshop/Deltinteger/Deltinteger/Parse/Functions/Builder/Virtual/AbstractVirtualContentBuilder.cs:line 63 at Deltin.Deltinteger.Parse.Functions.Builder.User.UserFunctionController.Build(ActionSet actionSet) in /home/runner/work/Overwatch-Script-To-Workshop/Overwatch-Script-To-Workshop/Deltinteger/Deltinteger/Parse/Functions/Builder/User/UserFunctionController.cs:line 100 at Deltin.Deltinteger.Parse.Functions.Builder.WorkshopFunctionBuilder.BuildInline(ICallInfo call) in /home/runner/work/Overwatch-Script-To-Workshop/Overwatch-Script-To-Workshop/Deltinteger/Deltinteger/Parse/Functions/Builder/Builder.cs:line 110 at Deltin.Deltinteger.Parse.ExpressionTree.ParseTree(ActionSet actionSet, Boolean expectingValue) in /home/runner/work/Overwatch-Script-To-Workshop/Overwatch-Script-To-Workshop/Deltinteger/Deltinteger/Parse/ExpressionTree.cs:line 211 at Deltin.Deltinteger.Parse.ExpressionTree.Parse(ActionSet actionSet) in /home/runner/work/Overwatch-Script-To-Workshop/Overwatch-Script-To-Workshop/Deltinteger/Deltinteger/Parse/ExpressionTree.cs:line 165 at Deltin.Deltinteger.Parse.DataTypeAssigner.GetResult(GettableAssignerValueInfo info) in /home/runner/work/Overwatch-Script-To-Workshop/Overwatch-Script-To-Workshop/Deltinteger/Deltinteger/Parse/Variables/GettableAssigners/DataTypeAssigner.cs:line 54 at Deltin.Deltinteger.Parse.IGettableAssigner.GetValue(GettableAssignerValueInfo info) in /home/runner/work/Overwatch-Script-To-Workshop/Overwatch-Script-To-Workshop/Deltinteger/Deltinteger/Parse/Variables/GettableAssigners/IGettableAssigner.cs:line 64 at Deltin.Deltinteger.Parse.DefineAction.Translate(ActionSet actionSet) in /home/runner/work/Overwatch-Script-To-Workshop/Overwatch-Script-To-Workshop/Deltinteger/Deltinteger/Parse/Variables/Semantics/DefineAction.cs:line 23 at Deltin.Deltinteger.Parse.BlockAction.Translate(ActionSet actionSet) in /home/runner/work/Overwatch-Script-To-Workshop/Overwatch-Script-To-Workshop/Deltinteger/Deltinteger/Parse/Block.cs:line 36 at Deltin.Deltinteger.Parse.DeltinScript.ToWorkshop(Func2 addRules) in /home/runner/work/Overwatch-Script-To-Workshop/Overwatch-Script-To-Workshop/Deltinteger/Deltinteger/Parse/Translate.cs:line 259 at Deltin.Deltinteger.Parse.DeltinScript..ctor(TranslateSettings translateSettings) in /home/runner/work/Overwatch-Script-To-Workshop/Overwatch-Script-To-Workshop/Deltinteger/Deltinteger/Parse/Translate.cs:line 57

Version: "[:] Overwatch Script To Workshop v2.6"