| #!/usr/bin/env python |
| # ************************************************************* |
| # |
| # 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. |
| # |
| # ************************************************************* |
| |
| |
| import srclexer, srcparser, globals |
| |
| class TestCase: |
| |
| @staticmethod |
| def run (tokens, defines): |
| mcExpander = srcparser.MacroExpander(tokens, defines) |
| mcExpander.debug = True |
| mcExpander.expand() |
| tokens = mcExpander.getTokens() |
| print(tokens) |
| |
| @staticmethod |
| def simpleNoArgs (): |
| tokens = ['FUNC_FOO', '(', 'left', ',', 'right', ')'] |
| defines = {} |
| macro = globals.Macro('FUNC_FOO') |
| macro.tokens = ['Here', 'comes', 'X', 'and', 'Y'] |
| defines['FUNC_FOO'] = macro |
| TestCase.run(tokens, defines) |
| |
| @staticmethod |
| def simpleArgs (): |
| tokens = ['FUNC_FOO', '(', 'left', ',', 'right', ')'] |
| defines = {} |
| macro = globals.Macro('FUNC_FOO') |
| macro.tokens = ['Here', 'comes', 'X', 'and', 'Y'] |
| macro.vars['X'] = 0 |
| macro.vars['Y'] = 1 |
| defines['FUNC_FOO'] = macro |
| TestCase.run(tokens, defines) |
| |
| @staticmethod |
| def multiTokenArgs (): |
| tokens = ['FUNC_FOO', '(', 'left1', 'left2', 'left3', ',', 'right', ')'] |
| defines = {} |
| macro = globals.Macro('FUNC_FOO') |
| macro.tokens = ['Here', 'comes', 'X', 'and', 'Y'] |
| macro.vars['X'] = 0 |
| macro.vars['Y'] = 1 |
| defines['FUNC_FOO'] = macro |
| TestCase.run(tokens, defines) |
| |
| @staticmethod |
| def nestedTokenArgs (): |
| tokens = ['FUNC_BAA', '(', 'left', ',', 'right', ')'] |
| defines = {} |
| macro = globals.Macro('FUNC_FOO') |
| macro.tokens = ['Here', 'comes', 'X', 'and', 'Y'] |
| macro.vars['X'] = 0 |
| macro.vars['Y'] = 1 |
| defines['FUNC_FOO'] = macro |
| macro = globals.Macro('FUNC_BAA') |
| macro.tokens = ['FUNC_FOO'] |
| defines['FUNC_BAA'] = macro |
| TestCase.run(tokens, defines) |
| |
| def main (): |
| print("simple expansion with no arguments") |
| TestCase.simpleNoArgs() |
| print("simple argument expansion") |
| TestCase.simpleArgs() |
| print("multi-token argument expansion") |
| TestCase.multiTokenArgs() |
| print("nested argument expansion") |
| TestCase.nestedTokenArgs() |
| |
| if __name__ == '__main__': |
| main() |