Beispiel #1
0
        private bool ParseBlockStatement(TokenReader reader, out BlockStatement result)
        {
            result = null;
            Token tok = reader.Peek();
            Token start = tok;
            if (!this.Expect(reader, Keyword.Begin))
            {
                return false;
            }

            BlockStatement block = new BlockStatement(start);
            tok = reader.Peek();
            while (!tok.Is(Keyword.End))
            {
                Statement statement = null;
                if (!this.ParseStatement(reader, out statement))
                {
                    return false;
                }

                if (statement != null)
                {
                    block.AddStatement(statement);
                }

                if (!this.Expect(reader, Keyword.SemiColon))
                {
                    return false;
                }

                tok = reader.Peek();
            }

            if (!this.Expect(reader, Keyword.End))
            {
                return false;
            }

            result = block;
            return true;
        }
Beispiel #2
0
        private bool TryEmitBlockStatement(
            BlockStatement statement,
            CompilerContext context,
            Scope scope,
            MethodImpl method)
        {
            bool failed = false;
            foreach (Statement s in statement.Statements)
            {
                if (!this.TryEmitStatement(s, context, scope, method))
                {
                    failed = true;
                }
            }

            return !failed;
        }