js: robust code generation
authorAlexander Alekhin <alexander.a.alekhin@gmail.com>
Fri, 18 Dec 2020 11:48:49 +0000 (11:48 +0000)
committerAlexander Alekhin <alexander.a.alekhin@gmail.com>
Fri, 18 Dec 2020 12:02:48 +0000 (12:02 +0000)
- avoid randomized output due to unpredictable dict/set order

modules/js/generator/embindgen.py

index 6e2bac71a1c25d26dff9b1ef91342bafd4a2f19e..8a25e42065dfcc1277f39597ab810d194a619f1b 100644 (file)
@@ -776,15 +776,13 @@ class JSWrapperGenerator(object):
                     self.bindings+=binding
 
         # generate code for the classes and their methods
-        class_list = list(self.classes.items())
-
-        for name, class_info in class_list:
+        for name, class_info in sorted(self.classes.items()):
             class_bindings = []
             if not name in white_list:
                 continue
 
             # Generate bindings for methods
-            for method_name, method in class_info.methods.items():
+            for method_name, method in sorted(class_info.methods.items()):
                 if method.cname in ignore_list:
                     continue
                 if not method.name in white_list[method.class_name]:
@@ -822,7 +820,7 @@ class JSWrapperGenerator(object):
 
 
             # Generate bindings for properties
-            for property in class_info.props:
+            for property in sorted(class_info.props):
                 _class_property = class_property_enum_template if property.tp in type_dict else class_property_template
                 class_bindings.append(_class_property.substitute(js_name=property.name, cpp_name='::'.join(
                     [class_info.cname, property.name])))