private static void CheckContainer(IBlockContainer container) { foreach (var path in container.Paths()) { bool blockReturns = false; for (int i = path.Block.Statements.Length - 1; i >= 0; i--) { if (path.Block.Statements[i] is ReturnNode) { blockReturns = true; break; } if (path.Block.Statements[i] is IBlockContainer) { if (((IBlockContainer)path.Block.Statements[i]).Paths().Any(containerPath => containerPath.WillRun)) { blockReturns = true; } CheckContainer((IBlockContainer)path.Block.Statements[i]); } } if (!blockReturns) { throw new SyntaxErrorException("Path does not return a value.", path.ErrorRange); } } }