From 24ade6a03cc1fc2dee50f81c5feadd7346dc0ce0 Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Tue, 30 Jul 2019 18:03:47 -0700 Subject: [PATCH] add isGotoStatement() --- src/dmd/statement.d | 1 + src/dmd/statementsem.d | 9 ++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/dmd/statement.d b/src/dmd/statement.d index fce4316595..98a6afdbbe 100644 --- a/src/dmd/statement.d +++ b/src/dmd/statement.d @@ -425,6 +425,7 @@ extern (C++) abstract class Statement : ASTNode inout(CaseStatement) isCaseStatement() { return stmt == STMT.Case ? cast(typeof(return))this : null; } inout(DefaultStatement) isDefaultStatement() { return stmt == STMT.Default ? cast(typeof(return))this : null; } inout(LabelStatement) isLabelStatement() { return stmt == STMT.Label ? cast(typeof(return))this : null; } + inout(GotoStatement) isGotoStatement() { return stmt == STMT.Goto ? cast(typeof(return))this : null; } inout(GotoDefaultStatement) isGotoDefaultStatement() { return stmt == STMT.GotoDefault ? cast(typeof(return))this : null; } inout(GotoCaseStatement) isGotoCaseStatement() { return stmt == STMT.GotoCase ? cast(typeof(return))this : null; } inout(BreakStatement) isBreakStatement() { return stmt == STMT.Break ? cast(typeof(return))this : null; } diff --git a/src/dmd/statementsem.d b/src/dmd/statementsem.d index 8397dd4a31..c8ae7a7691 100644 --- a/src/dmd/statementsem.d +++ b/src/dmd/statementsem.d @@ -1178,7 +1178,7 @@ private extern (C++) final class StatementSemanticVisitor : Visitor } } - Statement s = fs; + Statement s; switch (tab.ty) { case Tarray: @@ -1679,15 +1679,14 @@ private extern (C++) final class StatementSemanticVisitor : Visitor goto case Terror; // Resolve any forward referenced goto's - foreach (i; 0 .. fs.gotos.dim) + foreach (ScopeStatement ss; *fs.gotos) { - GotoStatement gs = cast(GotoStatement)(*fs.gotos)[i].statement; + GotoStatement gs = ss.statement.isGotoStatement(); if (!gs.label.statement) { // 'Promote' it to this scope, and replace with a return fs.cases.push(gs); - s = new ReturnStatement(Loc.initial, new IntegerExp(fs.cases.dim + 1)); - (*fs.gotos)[i].statement = s; + ss.statement = new ReturnStatement(Loc.initial, new IntegerExp(fs.cases.dim + 1)); } }