Babel.Compiler.CodeGeneratingVisitor.VisitCase C# (CSharp) Method

VisitCase() public method

public VisitCase ( CaseStatement caseStmt ) : void
caseStmt CaseStatement
return void
        public override void VisitCase(CaseStatement caseStmt)
        {
            LocalVariable test = localVariableStack.GetLocal(caseStmt.TestName);
            test.Declare(ilGenerator);
            test.EmitStorePrefix(ilGenerator);
            caseStmt.Test.Accept(this);
            BoxIfNecessary(caseStmt.Test.RawType, test.RawType);
            test.EmitStore(ilGenerator);

            Label endLabel = ilGenerator.DefineLabel();
            foreach (CaseWhen when in caseStmt.WhenPartList) {
                Label thenLabel = ilGenerator.DefineLabel();
                Label nextLabel = ilGenerator.DefineLabel();
                foreach (CallExpression call in when.TestCallList) {
                    call.Accept(this);
                    ilGenerator.Emit(OpCodes.Brtrue, thenLabel);
                }
                ilGenerator.Emit(OpCodes.Br, nextLabel);
                ilGenerator.MarkLabel(thenLabel);
                when.ThenPart.Accept(this);
                ilGenerator.Emit(OpCodes.Br, endLabel);
                ilGenerator.MarkLabel(nextLabel);
            }
            if (caseStmt.ElsePart != null)
                caseStmt.ElsePart.Accept(this);
            ilGenerator.MarkLabel(endLabel);
        }