public static void GenerateCode(ElseIfHeader header, GeneratorContext builder) { string currentEndLabel = builder.DeclareLabel("endElif"); builder.AddCode(header.Condition); builder.AddOp(new JumpLabelConditionalNegated(currentEndLabel), header.IfToken); foreach (Expression statement in header.ParentBlockHint.Statements) { builder.AddCode(statement); } string finalEndLabel = header.EndLabelHint; if (finalEndLabel == null) { throw new Exception("Encountered ElseIf Header without an end label!"); } if (header.NextConditionalComponentHint == null) { builder.SetLabelToNext(finalEndLabel); if (header.RequiresScopeHint) { builder.AddOp(new ScopeEnd(), header.ParentBlockHint.EndToken); } } else { builder.AddOp(new JumpLabel(finalEndLabel)); } builder.SetLabelToNext(currentEndLabel); }
public static ElseIfHeader ElseIf(MatchIterator iterator) { iterator.AssertKeyword(Keywords.Else, out Token elseToken); iterator.AssertKeyword(Keywords.If, out Token ifToken); iterator.AssertExpression(out Expression condition); iterator.AssertEnd(); ElseIfHeader result = new ElseIfHeader(elseToken, ifToken, condition); return(result); }