|
28 | 28 | 'getfortranname', 'getpymethoddef', 'getrestdoc', 'getusercode',
|
29 | 29 | 'getusercode1', 'hasbody', 'hascallstatement', 'hascommon',
|
30 | 30 | 'hasexternals', 'hasinitvalue', 'hasnote', 'hasresultnote',
|
31 |
| - 'isallocatable', 'isarray', 'isarrayofstrings', 'iscomplex', |
| 31 | + 'isallocatable', 'isarray', 'isarrayofstrings', |
| 32 | + 'ischaracter', 'ischaracterarray', 'ischaracter_or_characterarray', |
| 33 | + 'iscomplex', |
32 | 34 | 'iscomplexarray', 'iscomplexfunction', 'iscomplexfunction_warn',
|
33 | 35 | 'isdouble', 'isdummyroutine', 'isexternal', 'isfunction',
|
34 |
| - 'isfunction_wrap', 'isint1array', 'isinteger', 'isintent_aux', |
| 36 | + 'isfunction_wrap', 'isint1', 'isint1array', 'isinteger', 'isintent_aux', |
35 | 37 | 'isintent_c', 'isintent_callback', 'isintent_copy', 'isintent_dict',
|
36 | 38 | 'isintent_hide', 'isintent_in', 'isintent_inout', 'isintent_inplace',
|
37 | 39 | 'isintent_nothide', 'isintent_out', 'isintent_overwrite', 'islogical',
|
38 | 40 | 'islogicalfunction', 'islong_complex', 'islong_double',
|
39 | 41 | 'islong_doublefunction', 'islong_long', 'islong_longfunction',
|
40 | 42 | 'ismodule', 'ismoduleroutine', 'isoptional', 'isprivate', 'isrequired',
|
41 | 43 | 'isroutine', 'isscalar', 'issigned_long_longarray', 'isstring',
|
42 |
| - 'isstringarray', 'isstringfunction', 'issubroutine', |
| 44 | + 'isstringarray', 'isstring_or_stringarray', 'isstringfunction', |
| 45 | + 'issubroutine', |
43 | 46 | 'issubroutine_wrap', 'isthreadsafe', 'isunsigned', 'isunsigned_char',
|
44 | 47 | 'isunsigned_chararray', 'isunsigned_long_long',
|
45 | 48 | 'isunsigned_long_longarray', 'isunsigned_short',
|
@@ -68,24 +71,41 @@ def debugcapi(var):
|
68 | 71 | return 'capi' in debugoptions
|
69 | 72 |
|
70 | 73 |
|
| 74 | +def _ischaracter(var): |
| 75 | + return 'typespec' in var and var['typespec'] == 'character' and \ |
| 76 | + not isexternal(var) |
| 77 | + |
| 78 | + |
71 | 79 | def _isstring(var):
|
72 | 80 | return 'typespec' in var and var['typespec'] == 'character' and \
|
73 | 81 | not isexternal(var)
|
74 | 82 |
|
75 | 83 |
|
76 |
| -def isstring(var): |
77 |
| - return _isstring(var) and not isarray(var) |
| 84 | +def ischaracter_or_characterarray(var): |
| 85 | + return _ischaracter(var) and 'charselector' not in var |
78 | 86 |
|
79 | 87 |
|
80 | 88 | def ischaracter(var):
|
81 |
| - return isstring(var) and 'charselector' not in var |
| 89 | + return ischaracter_or_characterarray(var) and not isarray(var) |
| 90 | + |
| 91 | + |
| 92 | +def ischaracterarray(var): |
| 93 | + return ischaracter_or_characterarray(var) and isarray(var) |
| 94 | + |
| 95 | + |
| 96 | +def isstring_or_stringarray(var): |
| 97 | + return _ischaracter(var) and 'charselector' in var |
| 98 | + |
| 99 | + |
| 100 | +def isstring(var): |
| 101 | + return isstring_or_stringarray(var) and not isarray(var) |
82 | 102 |
|
83 | 103 |
|
84 | 104 | def isstringarray(var):
|
85 |
| - return isarray(var) and _isstring(var) |
| 105 | + return isstring_or_stringarray(var) and isarray(var) |
86 | 106 |
|
87 | 107 |
|
88 |
| -def isarrayofstrings(var): |
| 108 | +def isarrayofstrings(var): # obsolete? |
89 | 109 | # leaving out '*' for now so that `character*(*) a(m)` and `character
|
90 | 110 | # a(m,*)` are treated differently. Luckily `character**` is illegal.
|
91 | 111 | return isstringarray(var) and var['dimension'][-1] == '(*)'
|
@@ -126,6 +146,11 @@ def get_kind(var):
|
126 | 146 | pass
|
127 | 147 |
|
128 | 148 |
|
| 149 | +def isint1(var): |
| 150 | + return var.get('typespec') == 'integer' \ |
| 151 | + and get_kind(var) == '1' and not isarray(var) |
| 152 | + |
| 153 | + |
129 | 154 | def islong_long(var):
|
130 | 155 | if not isscalar(var):
|
131 | 156 | return 0
|
@@ -426,6 +451,7 @@ def isintent_hide(var):
|
426 | 451 | ('out' in var['intent'] and 'in' not in var['intent'] and
|
427 | 452 | (not l_or(isintent_inout, isintent_inplace)(var)))))
|
428 | 453 |
|
| 454 | + |
429 | 455 | def isintent_nothide(var):
|
430 | 456 | return not isintent_hide(var)
|
431 | 457 |
|
@@ -469,6 +495,7 @@ def isintent_aligned8(var):
|
469 | 495 | def isintent_aligned16(var):
|
470 | 496 | return 'aligned16' in var.get('intent', [])
|
471 | 497 |
|
| 498 | + |
472 | 499 | isintent_dict = {isintent_in: 'INTENT_IN', isintent_inout: 'INTENT_INOUT',
|
473 | 500 | isintent_out: 'INTENT_OUT', isintent_hide: 'INTENT_HIDE',
|
474 | 501 | isintent_cache: 'INTENT_CACHE',
|
@@ -566,19 +593,19 @@ def __call__(self, var):
|
566 | 593 |
|
567 | 594 |
|
568 | 595 | def l_and(*f):
|
569 |
| - l, l2 = 'lambda v', [] |
| 596 | + l1, l2 = 'lambda v', [] |
570 | 597 | for i in range(len(f)):
|
571 |
| - l = '%s,f%d=f[%d]' % (l, i, i) |
| 598 | + l1 = '%s,f%d=f[%d]' % (l1, i, i) |
572 | 599 | l2.append('f%d(v)' % (i))
|
573 |
| - return eval('%s:%s' % (l, ' and '.join(l2))) |
| 600 | + return eval('%s:%s' % (l1, ' and '.join(l2))) |
574 | 601 |
|
575 | 602 |
|
576 | 603 | def l_or(*f):
|
577 |
| - l, l2 = 'lambda v', [] |
| 604 | + l1, l2 = 'lambda v', [] |
578 | 605 | for i in range(len(f)):
|
579 |
| - l = '%s,f%d=f[%d]' % (l, i, i) |
| 606 | + l1 = '%s,f%d=f[%d]' % (l1, i, i) |
580 | 607 | l2.append('f%d(v)' % (i))
|
581 |
| - return eval('%s:%s' % (l, ' or '.join(l2))) |
| 608 | + return eval('%s:%s' % (l1, ' or '.join(l2))) |
582 | 609 |
|
583 | 610 |
|
584 | 611 | def l_not(f):
|
@@ -666,7 +693,9 @@ def getcallprotoargument(rout, cb_map={}):
|
666 | 693 | pass
|
667 | 694 | else:
|
668 | 695 | ctype = ctype + '*'
|
669 |
| - if isstring(var) or isarrayofstrings(var): |
| 696 | + if ((isstring(var) |
| 697 | + or isarrayofstrings(var) # obsolete? |
| 698 | + or isstringarray(var))): |
670 | 699 | arg_types2.append('size_t')
|
671 | 700 | arg_types.append(ctype)
|
672 | 701 |
|
@@ -731,14 +760,14 @@ def getrestdoc(rout):
|
731 | 760 |
|
732 | 761 |
|
733 | 762 | def gentitle(name):
|
734 |
| - l = (80 - len(name) - 6) // 2 |
735 |
| - return '/*%s %s %s*/' % (l * '*', name, l * '*') |
| 763 | + ln = (80 - len(name) - 6) // 2 |
| 764 | + return '/*%s %s %s*/' % (ln * '*', name, ln * '*') |
736 | 765 |
|
737 | 766 |
|
738 |
| -def flatlist(l): |
739 |
| - if isinstance(l, list): |
740 |
| - return reduce(lambda x, y, f=flatlist: x + f(y), l, []) |
741 |
| - return [l] |
| 767 | +def flatlist(lst): |
| 768 | + if isinstance(lst, list): |
| 769 | + return reduce(lambda x, y, f=flatlist: x + f(y), lst, []) |
| 770 | + return [lst] |
742 | 771 |
|
743 | 772 |
|
744 | 773 | def stripcomma(s):
|
|
0 commit comments