Skip to content

Internal compiler errror with shortcut *null check* in chainned condition #48

@adrianoc-unity3d

Description

@adrianoc-unity3d

function Foo(mb: MonoBehaviour, bb : boolean) { return (mb && mb.enabled && bb); }
Above UnityScript code causes converter to crash.
Most likely issue with PromoteImplicitBooleanConversionsToExplicitComparisons

Callstack:

Boo.Lang.Compiler.CompilerError : Internal compiler error: Object reference not set to an instance of an object..
----> System.NullReferenceException : Object reference not set to an instance of an object.
at Boo.Lang.Compiler.Ast.DepthFirstVisitor.OnError(Node node, Exception error) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\DepthFirstVisitor.cs:line 83
at Boo.Lang.Compiler.Ast.DepthFirstVisitor.Visit(Node node) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\DepthFirstVisitor.cs:line 55
at Boo.Lang.Compiler.Ast.DepthFirstVisitor.Visit(Node[] array) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\DepthFirstVisitor.cs:line 112
at Boo.Lang.Compiler.Ast.DepthFirstVisitor.Visit[T](NodeCollection1 collection) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\DepthFirstVisitor.cs:line 119 at Boo.Lang.Compiler.Ast.DepthFirstVisitor.OnBlock(Block node) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\Impl\DepthFirstVisitor.cs:line 722 at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.OnBlock(Block node) in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 497 at Boo.Lang.Compiler.Ast.Block.Accept(IAstVisitor visitor) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\Impl\BlockImpl.cs:line 69 at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.OnMethod(Method node) in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 320 at Boo.Lang.Compiler.Ast.Method.Accept(IAstVisitor visitor) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\Impl\MethodImpl.cs:line 75 at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.WriteMembersOf(TypeDefinition node) in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 1554 at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.OnClassDefinition(ClassDefinition node) in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 175 at Boo.Lang.Compiler.Ast.ClassDefinition.Accept(IAstVisitor visitor) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\Impl\ClassDefinitionImpl.cs:line 67 at Boo.Lang.Compiler.Ast.DepthFirstVisitor.Visit(Node node) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\DepthFirstVisitor.cs:line 51 at Boo.Lang.Compiler.Ast.DepthFirstVisitor.Visit(Node[] array) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\DepthFirstVisitor.cs:line 112 at Boo.Lang.Compiler.Ast.DepthFirstVisitor.Visit[T](NodeCollection1 collection) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\DepthFirstVisitor.cs:line 119
at Boo.Lang.Compiler.Ast.DepthFirstVisitor.OnModule(Module node) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\Impl\DepthFirstVisitor.cs:line 240
at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.OnModule(Module node) in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 147
at Boo.Lang.Compiler.Ast.Module.Accept(IAstVisitor visitor) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\Impl\ModuleImpl.cs:line 75
at Boo.Lang.Compiler.Ast.DepthFirstVisitor.Visit(Node node) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\DepthFirstVisitor.cs:line 51
at Boo.Lang.Compiler.Ast.DepthFirstVisitor.Visit(Node[] array) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\DepthFirstVisitor.cs:line 112
at Boo.Lang.Compiler.Ast.DepthFirstVisitor.Visit[T](NodeCollection1 collection) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\DepthFirstVisitor.cs:line 119 at Boo.Lang.Compiler.Ast.DepthFirstVisitor.OnCompileUnit(CompileUnit node) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\Impl\DepthFirstVisitor.cs:line 47 at Boo.Lang.Compiler.Ast.CompileUnit.Accept(IAstVisitor visitor) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\Impl\CompileUnitImpl.cs:line 69 at UnityScript2CSharp.UnityScript2CSharpConverter.Convert(IEnumerable1 inputs, IEnumerable1 definedSymbols, IEnumerable1 referencedAssemblies, Action3 onScriptConverted) in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverter.cs:line 44 at UnityScript2CSharp.Tests.Tests.ConvertScripts(IList1 sourceFiles, String saveToFolder, Boolean verboseLog) in G:\Work\repo\unityscript2csharp\UnityScript2CSharp.Tests\Tests.Utilities.cs:line 107
at UnityScript2CSharp.Tests.Tests.TestCrash() in G:\Work\repo\unityscript2csharp\UnityScript2CSharp.Tests\Tests.cs:line 19
--NullReferenceException
at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.<>c__DisplayClass64_0.b__0() in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 784
at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.WrapWith(Boolean needParensAround, String prefix, String sufix, Action action) in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 1417
at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.OnBinaryExpression(BinaryExpression node) in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 779
at Boo.Lang.Compiler.Ast.BinaryExpression.Accept(IAstVisitor visitor) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\Impl\BinaryExpressionImpl.cs:line 73
at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.<>c__DisplayClass65_0.b__0() in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 806
at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.WrapWith(Boolean needParensAround, String prefix, String sufix, Action action) in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 1417
at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.OnConditionalExpression(ConditionalExpression node) in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 804
at Boo.Lang.Compiler.Ast.ConditionalExpression.Accept(IAstVisitor visitor) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\Impl\ConditionalExpressionImpl.cs:line 73
at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.<>c__DisplayClass64_0.b__0() in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 788
at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.WrapWith(Boolean needParensAround, String prefix, String sufix, Action action) in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 1417
at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.OnBinaryExpression(BinaryExpression node) in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 779
at Boo.Lang.Compiler.Ast.BinaryExpression.Accept(IAstVisitor visitor) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\Impl\BinaryExpressionImpl.cs:line 73
at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.<>c__DisplayClass64_0.b__0() in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 788
at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.WrapWith(Boolean needParensAround, String prefix, String sufix, Action action) in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 1417
at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.OnBinaryExpression(BinaryExpression node) in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 779
at Boo.Lang.Compiler.Ast.BinaryExpression.Accept(IAstVisitor visitor) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\Impl\BinaryExpressionImpl.cs:line 73
at UnityScript2CSharp.UnityScript2CSharpConverterVisitor.OnReturnStatement(ReturnStatement node) in G:\Work\repo\unityscript2csharp\UnityScript2CSharp\UnityScript2CSharpConverterVisitor.cs:line 621
at Boo.Lang.Compiler.Ast.ReturnStatement.Accept(IAstVisitor visitor) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\Impl\ReturnStatementImpl.cs:line 69
at Boo.Lang.Compiler.Ast.DepthFirstVisitor.Visit(Node node) in m:\Work\Repo\boo\src\Boo.Lang.Compiler\Ast\DepthFirstVisitor.cs:line 42

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions