コード例 #1
0
ファイル: Conditional.cs プロジェクト: Seti-0/NSprak
        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);
        }
コード例 #2
0
        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);
        }