66 SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
77
88"""
9+
910import os
1011import generate_ids
1112import util
1213import re
1314import hashlib
1415import json
15- import yaml
1616import copy
1717from templates .helper import param_traits , type_traits , value_traits
1818import ctypes
1919import itertools
20+ from typing import Optional
21+ from version import Version
22+
2023
21- default_version = "0.9"
22- all_versions = ["0.6" , "0.7" , "0.8" , "0.9" ]
24+ default_version = Version ( "0.10" )
25+ all_versions = [Version ( ver ) for ver in [ "0.6" , "0.7" , "0.8" , "0.9" , "0.10" ] ]
2326
2427"""
2528 preprocess object
@@ -105,14 +108,14 @@ def __validate_version(d, prefix="", base_version=default_version):
105108 raise Exception (prefix + "'version' must be a string: '%s'" % type (d ['version' ]))
106109
107110 try :
108- version = str (float ( d ['version' ]) )
111+ version = str (d ['version' ])
109112 except :
110113 version = None
111114
112115 if version != d ['version' ]:
113116 raise Exception (prefix + "'version' invalid value: '%s'" % d ['version' ])
114117
115- return float (d .get ('version' , base_version ))
118+ return Version (d .get ('version' , base_version ))
116119
117120 def __validate_tag (d , key , tags , case ):
118121 for x in tags :
@@ -127,7 +130,7 @@ def __validate_desc(desc):
127130 raise Exception (prefix + "'version' must be a string: '%s'" % type (k ))
128131
129132 try :
130- version = str (float ( k ) )
133+ version = str (k )
131134 except :
132135 version = None
133136
@@ -212,8 +215,8 @@ def __validate_etors(d, tags):
212215 typed = d .get ('typed_etors' , False )
213216
214217 value = - 1
215- d_ver = d .get ('version' , default_version )
216- max_ver = float ( d_ver )
218+ d_ver = Version ( d .get ('version' , default_version ) )
219+ max_ver = d_ver
217220 for i , item in enumerate (d ['etors' ]):
218221 prefix = "'etors'[%s] " % i
219222 if not isinstance (item , dict ):
@@ -300,8 +303,8 @@ def __validate_members(d, tags, meta):
300303 if not isinstance (d ['members' ], list ):
301304 raise Exception ("'members' must be a sequence: '%s'" % type (d ['members' ]))
302305
303- d_ver = d .get ('version' , default_version )
304- max_ver = float ( d_ver )
306+ d_ver = Version ( d .get ('version' , default_version ) )
307+ max_ver = d_ver
305308 for i , item in enumerate (d ['members' ]):
306309 prefix = "'members'[%s] " % i
307310 if not isinstance (item , dict ):
@@ -342,8 +345,8 @@ def __validate_params(d, tags, meta):
342345 if not isinstance (d ['params' ], list ):
343346 raise Exception ("'params' must be a sequence: '%s'" % type (d ['params' ]))
344347
345- d_ver = d .get ('version' , default_version )
346- max_ver = float ( d_ver )
348+ d_ver = Version ( d .get ('version' , default_version ) )
349+ max_ver = d_ver
347350 min = {'[in]' : None , '[out]' : None , '[in,out]' : None }
348351 for i , item in enumerate (d ['params' ]):
349352 prefix = "'params'[%s] " % i
@@ -501,24 +504,23 @@ def __validate_union_tag(d):
501504"""
502505 filters object by version
503506"""
504- def _filter_version (d , max_ver ) :
505- ver = float (d .get ('version' , default_version ))
507+ def _filter_version (d , max_ver : Version ) -> Optional [ dict ] :
508+ ver = Version (d .get ('version' , default_version ))
506509 if ver > max_ver :
507510 return None
508511
509- def __filter_desc (d ):
512+ def __filter_desc (d ) -> dict :
510513 if 'desc' in d and isinstance (d ['desc' ], dict ):
511514 for k , v in d ['desc' ].items ():
512- if float (k ) <= max_ver :
513- desc = v
514- d ['desc' ] = desc
515+ if Version (k ) <= max_ver :
516+ d ['desc' ] = v
515517 return d
516518
517519 flt = []
518520 type = d ['type' ]
519521 if 'enum' == type :
520522 for e in d ['etors' ]:
521- ver = float (e .get ('version' , default_version ))
523+ ver = Version (e .get ('version' , default_version ))
522524 if ver <= max_ver :
523525 flt .append (__filter_desc (e ))
524526 if d ['name' ].endswith ('version_t' ):
@@ -531,14 +533,14 @@ def __filter_desc(d):
531533
532534 elif 'function' == type :
533535 for p in d ['params' ]:
534- ver = float (p .get ('version' , default_version ))
536+ ver = Version (p .get ('version' , default_version ))
535537 if ver <= max_ver :
536538 flt .append (__filter_desc (p ))
537539 d ['params' ] = flt
538540
539541 elif 'struct' == type or 'union' == type or 'class' == type :
540542 for m in d .get ('members' ,[]):
541- ver = float (m .get ('version' , default_version ))
543+ ver = Version (m .get ('version' , default_version ))
542544 if ver <= max_ver :
543545 flt .append (__filter_desc (m ))
544546 d ['members' ] = flt
@@ -548,15 +550,15 @@ def __filter_desc(d):
548550"""
549551 creates docs per version
550552"""
551- def _make_versions (d , max_ver ) :
553+ def _make_versions (d , max_ver : Version ) -> list [ Version ] :
552554 docs = []
553555 type = d ['type' ]
554556 if 'function' == type or 'struct' == type :
555557 for ver in all_versions :
556- if float ( ver ) > max_ver :
558+ if ver > max_ver :
557559 break
558560
559- dv = _filter_version (copy .deepcopy (d ), float ( ver ) )
561+ dv = _filter_version (copy .deepcopy (d ), ver )
560562 if not dv :
561563 continue
562564
@@ -936,7 +938,7 @@ def parse(section, version, tags, meta, ref):
936938 if not _validate_doc (f , d , tags , line_nums [i ], meta ):
937939 continue
938940
939- d = _filter_version (d , float ( version ) )
941+ d = _filter_version (d , version )
940942 if not d :
941943 continue
942944
@@ -948,7 +950,10 @@ def parse(section, version, tags, meta, ref):
948950 # extract header from objects
949951 if re .match (r"header" , d ['type' ]):
950952 header = d
951- header ['ordinal' ] = int (int (header .get ('ordinal' ,"1000" )) * float (header .get ('version' ,"1.0" )))
953+ header ["ordinal" ] = int (
954+ int (header .get ("ordinal" , "1000" ))
955+ * Version (header .get ("version" , "1.0" )).major
956+ )
952957 header ['ordinal' ] *= 1000 if re .match (r"extension" , header .get ('desc' ,"" ).lower ()) else 1
953958 header ['ordinal' ] *= 1000 if re .match (r"experimental" , header .get ('desc' ,"" ).lower ()) else 1
954959 basename = os .path .splitext (os .path .basename (f ))[0 ]
@@ -961,7 +966,7 @@ def parse(section, version, tags, meta, ref):
961966 for c in '_-' :
962967 name = name .replace (c , ' ' )
963968 elif header :
964- for d in _make_versions (d , float ( version ) ):
969+ for d in _make_versions (d , version ):
965970 objects .append (d )
966971 meta = _generate_meta (d , header ['ordinal' ], meta )
967972
0 commit comments