/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
#mixed_content  // f.c.MixedContent
    #text  // f.c.TextBlock
        - content: "1 "  // String
    #assign  // f.c.Assignment
        - assignment target: "x"  // String
        - assignment operator: "="  // String
        - assignment source: 1  // f.c.NumberLiteral
        - variable scope: "1"  // Integer
        - namespace: null  // Null
    #text  // f.c.TextBlock
        - content: "\n2 "  // String
    #assign  // f.c.AssignmentInstruction
        - variable scope: "1"  // Integer
        - namespace: null  // Null
        #assign  // f.c.Assignment
            - assignment target: "x"  // String
            - assignment operator: "="  // String
            - assignment source: 1  // f.c.NumberLiteral
            - variable scope: "1"  // Integer
            - namespace: null  // Null
        #assign  // f.c.Assignment
            - assignment target: "y"  // String
            - assignment operator: "="  // String
            - assignment source: 2  // f.c.NumberLiteral
            - variable scope: "1"  // Integer
            - namespace: null  // Null
    #text  // f.c.TextBlock
        - content: "\n3 "  // String
    #assign  // f.c.Assignment
        - assignment target: "x"  // String
        - assignment operator: "="  // String
        - assignment source: 1  // f.c.NumberLiteral
        - variable scope: "1"  // Integer
        - namespace: ns  // f.c.Identifier
    #text  // f.c.TextBlock
        - content: "\n4 "  // String
    #assign  // f.c.AssignmentInstruction
        - variable scope: "1"  // Integer
        - namespace: ns  // f.c.Identifier
        #assign  // f.c.Assignment
            - assignment target: "x"  // String
            - assignment operator: "="  // String
            - assignment source: 1  // f.c.NumberLiteral
            - variable scope: "1"  // Integer
            - namespace: ns  // f.c.Identifier
        #assign  // f.c.Assignment
            - assignment target: "y"  // String
            - assignment operator: "="  // String
            - assignment source: 2  // f.c.NumberLiteral
            - variable scope: "1"  // Integer
            - namespace: ns  // f.c.Identifier
    #text  // f.c.TextBlock
        - content: "\n5 "  // String
    #global  // f.c.Assignment
        - assignment target: "x"  // String
        - assignment operator: "="  // String
        - assignment source: 1  // f.c.NumberLiteral
        - variable scope: "3"  // Integer
        - namespace: null  // Null
    #text  // f.c.TextBlock
        - content: "\n6 "  // String
    #global  // f.c.AssignmentInstruction
        - variable scope: "3"  // Integer
        - namespace: null  // Null
        #global  // f.c.Assignment
            - assignment target: "x"  // String
            - assignment operator: "="  // String
            - assignment source: 1  // f.c.NumberLiteral
            - variable scope: "3"  // Integer
            - namespace: null  // Null
        #global  // f.c.Assignment
            - assignment target: "y"  // String
            - assignment operator: "="  // String
            - assignment source: 2  // f.c.NumberLiteral
            - variable scope: "3"  // Integer
            - namespace: null  // Null
    #macro  // f.c.Macro
        - assignment target: "m"  // String
        - catch-all parameter name: null  // Null
        - AST-node subtype: "0"  // Integer
        #text  // f.c.TextBlock
            - content: "  7 "  // String
        #local  // f.c.Assignment
            - assignment target: "x"  // String
            - assignment operator: "="  // String
            - assignment source: 1  // f.c.NumberLiteral
            - variable scope: "2"  // Integer
            - namespace: null  // Null
        #text  // f.c.TextBlock
            - content: "\n  8 "  // String
        #local  // f.c.AssignmentInstruction
            - variable scope: "2"  // Integer
            - namespace: null  // Null
            #local  // f.c.Assignment
                - assignment target: "x"  // String
                - assignment operator: "="  // String
                - assignment source: 1  // f.c.NumberLiteral
                - variable scope: "2"  // Integer
                - namespace: null  // Null
            #local  // f.c.Assignment
                - assignment target: "y"  // String
                - assignment operator: "="  // String
                - assignment source: 2  // f.c.NumberLiteral
                - variable scope: "2"  // Integer
                - namespace: null  // Null
        #text  // f.c.TextBlock
            - content: "\n"  // String
    #text  // f.c.TextBlock
        - content: "9 "  // String
    #assign  // f.c.AssignmentInstruction
        - variable scope: "1"  // Integer
        - namespace: null  // Null
        #assign  // f.c.Assignment
            - assignment target: "a"  // String
            - assignment operator: "+="  // String
            - assignment source: 1  // f.c.NumberLiteral
            - variable scope: "1"  // Integer
            - namespace: null  // Null
        #assign  // f.c.Assignment
            - assignment target: "b"  // String
            - assignment operator: "-="  // String
            - assignment source: 2  // f.c.NumberLiteral
            - variable scope: "1"  // Integer
            - namespace: null  // Null
        #assign  // f.c.Assignment
            - assignment target: "c"  // String
            - assignment operator: "*="  // String
            - assignment source: 3  // f.c.NumberLiteral
            - variable scope: "1"  // Integer
            - namespace: null  // Null
        #assign  // f.c.Assignment
            - assignment target: "d"  // String
            - assignment operator: "/="  // String
            - assignment source: 4  // f.c.NumberLiteral
            - variable scope: "1"  // Integer
            - namespace: null  // Null
        #assign  // f.c.Assignment
            - assignment target: "e"  // String
            - assignment operator: "%="  // String
            - assignment source: 5  // f.c.NumberLiteral
            - variable scope: "1"  // Integer
            - namespace: null  // Null
        #assign  // f.c.Assignment
            - assignment target: "f"  // String
            - assignment operator: "++"  // String
            - assignment source: null  // Null
            - variable scope: "1"  // Integer
            - namespace: null  // Null
        #assign  // f.c.Assignment
            - assignment target: "g"  // String
            - assignment operator: "--"  // String
            - assignment source: null  // Null
            - variable scope: "1"  // Integer
            - namespace: null  // Null