(decl, decl2, force=1)
| 899 | |
| 900 | |
| 901 | def appenddecl(decl, decl2, force=1): |
| 902 | if not decl: |
| 903 | decl = {} |
| 904 | if not decl2: |
| 905 | return decl |
| 906 | if decl is decl2: |
| 907 | return decl |
| 908 | for k in list(decl2.keys()): |
| 909 | if k == 'typespec': |
| 910 | if force or k not in decl: |
| 911 | decl[k] = decl2[k] |
| 912 | elif k == 'attrspec': |
| 913 | for l in decl2[k]: |
| 914 | decl = setattrspec(decl, l, force) |
| 915 | elif k == 'kindselector': |
| 916 | decl = setkindselector(decl, decl2[k], force) |
| 917 | elif k == 'charselector': |
| 918 | decl = setcharselector(decl, decl2[k], force) |
| 919 | elif k in ['=', 'typename']: |
| 920 | if force or k not in decl: |
| 921 | decl[k] = decl2[k] |
| 922 | elif k == 'note': |
| 923 | pass |
| 924 | elif k in ['intent', 'check', 'dimension', 'optional', |
| 925 | 'required', 'depend']: |
| 926 | errmess('appenddecl: "%s" not implemented.\n' % k) |
| 927 | else: |
| 928 | raise Exception('appenddecl: Unknown variable definition key: ' + |
| 929 | str(k)) |
| 930 | return decl |
| 931 | |
| 932 | selectpattern = re.compile( |
| 933 | r'\s*(?P<this>(@\(@.*?@\)@|\*[\d*]+|\*\s*@\(@.*?@\)@|))(?P<after>.*)\Z', re.I) |
no test coverage detected