Nuitka-winsvc 1.6.6__cp310-cp310-win_amd64.whl → 1.7.5__cp310-cp310-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. {Nuitka_winsvc-1.6.6.dist-info → Nuitka_winsvc-1.7.5.dist-info}/METADATA +1 -1
  2. {Nuitka_winsvc-1.6.6.dist-info → Nuitka_winsvc-1.7.5.dist-info}/RECORD +84 -81
  3. nuitka/Builtins.py +7 -1
  4. nuitka/MainControl.py +4 -0
  5. nuitka/OptionParsing.py +5 -3
  6. nuitka/Options.py +17 -2
  7. nuitka/Serialization.py +28 -5
  8. nuitka/Version.py +2 -2
  9. nuitka/build/Backend.scons +16 -3
  10. nuitka/build/CCompilerVersion.scons +1 -1
  11. nuitka/build/DataComposerInterface.py +15 -9
  12. nuitka/build/Onefile.scons +1 -1
  13. nuitka/build/SconsCompilerSettings.py +1 -0
  14. nuitka/build/SconsProgress.py +11 -2
  15. nuitka/build/SconsSpawn.py +15 -15
  16. nuitka/build/include/nuitka/builtins.h +2 -0
  17. nuitka/build/include/nuitka/filesystem_paths.h +4 -0
  18. nuitka/build/include/nuitka/helper/attributes.h +3 -0
  19. nuitka/build/include/nuitka/helper/import_hard.h +6 -0
  20. nuitka/build/include/nuitka/helpers.h +1 -1
  21. nuitka/build/include/nuitka/safe_string_ops.h +10 -3
  22. nuitka/build/static_src/CompiledCodeHelpers.c +0 -200
  23. nuitka/build/static_src/HelpersAttributes.c +185 -8
  24. nuitka/build/static_src/HelpersFilesystemPaths.c +528 -7
  25. nuitka/build/static_src/HelpersImportHard.c +38 -0
  26. nuitka/build/static_src/HelpersSafeStrings.c +6 -278
  27. nuitka/build/static_src/MainProgram.c +273 -73
  28. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +6 -0
  29. nuitka/build/static_src/OnefileBootstrap.c +19 -36
  30. nuitka/build/static_src/OnefileSplashScreen.cpp +1 -0
  31. nuitka/code_generation/AttributeCodes.py +42 -23
  32. nuitka/code_generation/CodeGeneration.py +4 -0
  33. nuitka/code_generation/FunctionCodes.py +18 -3
  34. nuitka/code_generation/GlobalConstants.py +8 -1
  35. nuitka/code_generation/PackageResourceCodes.py +40 -0
  36. nuitka/code_generation/templates/CodeTemplatesModules.py +1 -7
  37. nuitka/freezer/DllDependenciesMacOS.py +18 -1
  38. nuitka/freezer/IncludedDataFiles.py +6 -10
  39. nuitka/importing/ImportResolving.py +6 -0
  40. nuitka/importing/Recursion.py +24 -68
  41. nuitka/nodes/AttributeNodes.py +72 -19
  42. nuitka/nodes/ChildrenHavingMixins.py +203 -234
  43. nuitka/nodes/ExpressionBasesGenerated.py +136 -0
  44. nuitka/nodes/HardImportNodesGenerated.py +94 -0
  45. nuitka/nodes/ImportHardNodes.py +3 -3
  46. nuitka/nodes/ImportNodes.py +14 -4
  47. nuitka/nodes/ModuleNodes.py +4 -2
  48. nuitka/nodes/PackageMetadataNodes.py +12 -10
  49. nuitka/nodes/PackageResourceNodes.py +115 -0
  50. nuitka/nodes/TypeNodes.py +5 -1
  51. nuitka/plugins/PluginBase.py +32 -8
  52. nuitka/plugins/Plugins.py +44 -7
  53. nuitka/plugins/standard/AntiBloatPlugin.py +166 -72
  54. nuitka/plugins/standard/DataFilesPlugin.py +10 -0
  55. nuitka/plugins/standard/DllFilesPlugin.py +1 -2
  56. nuitka/plugins/standard/MatplotlibPlugin.py +24 -22
  57. nuitka/plugins/standard/MultiprocessingPlugin.py +5 -12
  58. nuitka/plugins/standard/OptionsNannyPlugin.py +2 -2
  59. nuitka/plugins/standard/PySidePyQtPlugin.py +18 -6
  60. nuitka/plugins/standard/PywebViewPlugin.py +4 -2
  61. nuitka/plugins/standard/TkinterPlugin.py +3 -0
  62. nuitka/plugins/standard/TransformersPlugin.py +11 -1
  63. nuitka/plugins/standard/TrioPlugin.py +6 -66
  64. nuitka/plugins/standard/standard.nuitka-package.config.yml +367 -21
  65. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +16 -4
  66. nuitka/specs/HardImportSpecs.py +6 -0
  67. nuitka/tools/data_composer/DataComposer.py +25 -27
  68. nuitka/tools/general/find_module/FindModuleCode.py +5 -2
  69. nuitka/tools/podman/Podman.py +53 -0
  70. nuitka/tools/podman/__init__.py +18 -0
  71. nuitka/tools/podman/__main__.py +255 -0
  72. nuitka/tools/specialize/SpecializePython.py +37 -3
  73. nuitka/tools/testing/RuntimeTracing.py +4 -0
  74. nuitka/tree/Building.py +1 -1
  75. nuitka/tree/ReformulationFunctionStatements.py +137 -10
  76. nuitka/utils/Execution.py +11 -1
  77. nuitka/utils/ModuleNames.py +1 -1
  78. nuitka/utils/SharedLibraries.py +7 -7
  79. {Nuitka_winsvc-1.6.6.data → Nuitka_winsvc-1.7.5.data}/scripts/nuitka-run.bat +0 -0
  80. {Nuitka_winsvc-1.6.6.data → Nuitka_winsvc-1.7.5.data}/scripts/nuitka.bat +0 -0
  81. {Nuitka_winsvc-1.6.6.dist-info → Nuitka_winsvc-1.7.5.dist-info}/LICENSE.txt +0 -0
  82. {Nuitka_winsvc-1.6.6.dist-info → Nuitka_winsvc-1.7.5.dist-info}/WHEEL +0 -0
  83. {Nuitka_winsvc-1.6.6.dist-info → Nuitka_winsvc-1.7.5.dist-info}/entry_points.txt +0 -0
  84. {Nuitka_winsvc-1.6.6.dist-info → Nuitka_winsvc-1.7.5.dist-info}/top_level.txt +0 -0
@@ -6663,163 +6663,51 @@ ChildrenExpressionYieldFromMixin = ChildHavingExpressionMixin
6663
6663
  ChildrenExpressionYieldFromWaitableMixin = ChildHavingExpressionMixin
6664
6664
 
6665
6665
 
6666
- class ChildrenHavingExpressionAttributeMixin(object):
6667
- # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
6668
- __slots__ = ()
6669
-
6670
- # This is generated for use in
6671
- # ExpressionBuiltinHasattr
6672
-
6673
- def __init__(
6674
- self,
6675
- expression,
6676
- attribute,
6677
- ):
6678
- expression.parent = self
6679
-
6680
- self.subnode_expression = expression
6681
-
6682
- attribute.parent = self
6683
-
6684
- self.subnode_attribute = attribute
6685
-
6686
- def getVisitableNodes(self):
6687
- """The visitable nodes, with tuple values flattened."""
6688
-
6689
- return (
6690
- self.subnode_expression,
6691
- self.subnode_attribute,
6692
- )
6693
-
6694
- def getVisitableNodesNamed(self):
6695
- """Named children dictionary.
6696
-
6697
- For use in cloning nodes, debugging and XML output.
6698
- """
6699
-
6700
- return (
6701
- ("expression", self.subnode_expression),
6702
- ("attribute", self.subnode_attribute),
6703
- )
6704
-
6705
- def replaceChild(self, old_node, new_node):
6706
- value = self.subnode_expression
6707
- if old_node is value:
6708
- new_node.parent = self
6709
-
6710
- self.subnode_expression = new_node
6711
-
6712
- return
6713
-
6714
- value = self.subnode_attribute
6715
- if old_node is value:
6716
- new_node.parent = self
6717
-
6718
- self.subnode_attribute = new_node
6719
-
6720
- return
6721
-
6722
- raise AssertionError("Didn't find child", old_node, "in", self)
6723
-
6724
- def getCloneArgs(self):
6725
- """Get clones of all children to pass for a new node.
6726
-
6727
- Needs to make clones of child nodes too.
6728
- """
6729
-
6730
- values = {
6731
- "expression": self.subnode_expression.makeClone(),
6732
- "attribute": self.subnode_attribute.makeClone(),
6733
- }
6734
-
6735
- values.update(self.getDetails())
6736
-
6737
- return values
6738
-
6739
- def finalize(self):
6740
- del self.parent
6741
-
6742
- self.subnode_expression.finalize()
6743
- del self.subnode_expression
6744
- self.subnode_attribute.finalize()
6745
- del self.subnode_attribute
6746
-
6747
- def computeExpressionRaw(self, trace_collection):
6748
- """Compute an expression.
6749
-
6750
- Default behavior is to just visit the child expressions first, and
6751
- then the node "computeExpression". For a few cases this needs to
6752
- be overloaded, e.g. conditional expressions.
6753
- """
6754
-
6755
- # First apply the sub-expressions, as they are evaluated before
6756
- # the actual operation.
6757
- for count, sub_expression in enumerate(self.getVisitableNodes()):
6758
- expression = trace_collection.onExpression(sub_expression)
6759
-
6760
- if expression.willRaiseAnyException():
6761
- sub_expressions = self.getVisitableNodes()
6762
-
6763
- wrapped_expression = wrapExpressionWithSideEffects(
6764
- side_effects=sub_expressions[:count],
6765
- old_node=sub_expression,
6766
- new_node=expression,
6767
- )
6768
-
6769
- return (
6770
- wrapped_expression,
6771
- "new_raise",
6772
- lambda: "For '%s' the child expression '%s' will raise."
6773
- % (self.getChildNameNice(), expression.getChildNameNice()),
6774
- )
6775
-
6776
- # Then ask ourselves to work on it.
6777
- return self.computeExpression(trace_collection)
6778
-
6779
- def collectVariableAccesses(self, emit_read, emit_write):
6780
- """Collect variable reads and writes of child nodes."""
6781
-
6782
- self.subnode_expression.collectVariableAccesses(emit_read, emit_write)
6783
- self.subnode_attribute.collectVariableAccesses(emit_read, emit_write)
6784
-
6785
-
6786
- # Assign the names that are easier to import with a stable name.
6787
- ChildrenExpressionBuiltinHasattrMixin = ChildrenHavingExpressionAttributeMixin
6788
-
6789
-
6790
- class ChildrenHavingExpressionAttributeValueMixin(object):
6666
+ class ChildrenHavingExpressionLowerAutoNoneUpperAutoNoneMixin(object):
6791
6667
  # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
6792
6668
  __slots__ = ()
6793
6669
 
6794
6670
  # This is generated for use in
6795
- # ExpressionBuiltinSetattr
6671
+ # ExpressionSliceLookup
6796
6672
 
6797
6673
  def __init__(
6798
6674
  self,
6799
6675
  expression,
6800
- attribute,
6801
- value,
6676
+ lower,
6677
+ upper,
6802
6678
  ):
6803
6679
  expression.parent = self
6804
6680
 
6805
6681
  self.subnode_expression = expression
6806
6682
 
6807
- attribute.parent = self
6683
+ lower = convertNoneConstantToNone(lower)
6684
+ if lower is not None:
6685
+ lower.parent = self
6808
6686
 
6809
- self.subnode_attribute = attribute
6687
+ self.subnode_lower = lower
6810
6688
 
6811
- value.parent = self
6689
+ upper = convertNoneConstantToNone(upper)
6690
+ if upper is not None:
6691
+ upper.parent = self
6812
6692
 
6813
- self.subnode_value = value
6693
+ self.subnode_upper = upper
6814
6694
 
6815
6695
  def getVisitableNodes(self):
6816
6696
  """The visitable nodes, with tuple values flattened."""
6817
6697
 
6818
- return (
6819
- self.subnode_expression,
6820
- self.subnode_attribute,
6821
- self.subnode_value,
6822
- )
6698
+ result = []
6699
+ result.append(self.subnode_expression)
6700
+ value = self.subnode_lower
6701
+ if value is None:
6702
+ pass
6703
+ else:
6704
+ result.append(value)
6705
+ value = self.subnode_upper
6706
+ if value is None:
6707
+ pass
6708
+ else:
6709
+ result.append(value)
6710
+ return tuple(result)
6823
6711
 
6824
6712
  def getVisitableNodesNamed(self):
6825
6713
  """Named children dictionary.
@@ -6829,8 +6717,8 @@ class ChildrenHavingExpressionAttributeValueMixin(object):
6829
6717
 
6830
6718
  return (
6831
6719
  ("expression", self.subnode_expression),
6832
- ("attribute", self.subnode_attribute),
6833
- ("value", self.subnode_value),
6720
+ ("lower", self.subnode_lower),
6721
+ ("upper", self.subnode_upper),
6834
6722
  )
6835
6723
 
6836
6724
  def replaceChild(self, old_node, new_node):
@@ -6842,19 +6730,23 @@ class ChildrenHavingExpressionAttributeValueMixin(object):
6842
6730
 
6843
6731
  return
6844
6732
 
6845
- value = self.subnode_attribute
6733
+ value = self.subnode_lower
6846
6734
  if old_node is value:
6847
- new_node.parent = self
6735
+ new_node = convertNoneConstantToNone(new_node)
6736
+ if new_node is not None:
6737
+ new_node.parent = self
6848
6738
 
6849
- self.subnode_attribute = new_node
6739
+ self.subnode_lower = new_node
6850
6740
 
6851
6741
  return
6852
6742
 
6853
- value = self.subnode_value
6743
+ value = self.subnode_upper
6854
6744
  if old_node is value:
6855
- new_node.parent = self
6745
+ new_node = convertNoneConstantToNone(new_node)
6746
+ if new_node is not None:
6747
+ new_node.parent = self
6856
6748
 
6857
- self.subnode_value = new_node
6749
+ self.subnode_upper = new_node
6858
6750
 
6859
6751
  return
6860
6752
 
@@ -6868,8 +6760,12 @@ class ChildrenHavingExpressionAttributeValueMixin(object):
6868
6760
 
6869
6761
  values = {
6870
6762
  "expression": self.subnode_expression.makeClone(),
6871
- "attribute": self.subnode_attribute.makeClone(),
6872
- "value": self.subnode_value.makeClone(),
6763
+ "lower": self.subnode_lower.makeClone()
6764
+ if self.subnode_lower is not None
6765
+ else None,
6766
+ "upper": self.subnode_upper.makeClone()
6767
+ if self.subnode_upper is not None
6768
+ else None,
6873
6769
  }
6874
6770
 
6875
6771
  values.update(self.getDetails())
@@ -6881,10 +6777,12 @@ class ChildrenHavingExpressionAttributeValueMixin(object):
6881
6777
 
6882
6778
  self.subnode_expression.finalize()
6883
6779
  del self.subnode_expression
6884
- self.subnode_attribute.finalize()
6885
- del self.subnode_attribute
6886
- self.subnode_value.finalize()
6887
- del self.subnode_value
6780
+ if self.subnode_lower is not None:
6781
+ self.subnode_lower.finalize()
6782
+ del self.subnode_lower
6783
+ if self.subnode_upper is not None:
6784
+ self.subnode_upper.finalize()
6785
+ del self.subnode_upper
6888
6786
 
6889
6787
  def computeExpressionRaw(self, trace_collection):
6890
6788
  """Compute an expression.
@@ -6922,54 +6820,55 @@ class ChildrenHavingExpressionAttributeValueMixin(object):
6922
6820
  """Collect variable reads and writes of child nodes."""
6923
6821
 
6924
6822
  self.subnode_expression.collectVariableAccesses(emit_read, emit_write)
6925
- self.subnode_attribute.collectVariableAccesses(emit_read, emit_write)
6926
- self.subnode_value.collectVariableAccesses(emit_read, emit_write)
6823
+ subnode_lower = self.subnode_lower
6824
+
6825
+ if subnode_lower is not None:
6826
+ self.subnode_lower.collectVariableAccesses(emit_read, emit_write)
6827
+ subnode_upper = self.subnode_upper
6828
+
6829
+ if subnode_upper is not None:
6830
+ self.subnode_upper.collectVariableAccesses(emit_read, emit_write)
6927
6831
 
6928
6832
 
6929
6833
  # Assign the names that are easier to import with a stable name.
6930
- ChildrenExpressionBuiltinSetattrMixin = ChildrenHavingExpressionAttributeValueMixin
6834
+ ChildrenExpressionSliceLookupMixin = (
6835
+ ChildrenHavingExpressionLowerAutoNoneUpperAutoNoneMixin
6836
+ )
6931
6837
 
6932
6838
 
6933
- class ChildrenHavingExpressionLowerAutoNoneUpperAutoNoneMixin(object):
6839
+ class ChildrenHavingExpressionNameDefaultOptionalMixin(object):
6934
6840
  # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
6935
6841
  __slots__ = ()
6936
6842
 
6937
6843
  # This is generated for use in
6938
- # ExpressionSliceLookup
6844
+ # ExpressionBuiltinGetattr
6939
6845
 
6940
6846
  def __init__(
6941
6847
  self,
6942
6848
  expression,
6943
- lower,
6944
- upper,
6849
+ name,
6850
+ default,
6945
6851
  ):
6946
6852
  expression.parent = self
6947
6853
 
6948
6854
  self.subnode_expression = expression
6949
6855
 
6950
- lower = convertNoneConstantToNone(lower)
6951
- if lower is not None:
6952
- lower.parent = self
6856
+ name.parent = self
6953
6857
 
6954
- self.subnode_lower = lower
6858
+ self.subnode_name = name
6955
6859
 
6956
- upper = convertNoneConstantToNone(upper)
6957
- if upper is not None:
6958
- upper.parent = self
6860
+ if default is not None:
6861
+ default.parent = self
6959
6862
 
6960
- self.subnode_upper = upper
6863
+ self.subnode_default = default
6961
6864
 
6962
6865
  def getVisitableNodes(self):
6963
6866
  """The visitable nodes, with tuple values flattened."""
6964
6867
 
6965
6868
  result = []
6966
6869
  result.append(self.subnode_expression)
6967
- value = self.subnode_lower
6968
- if value is None:
6969
- pass
6970
- else:
6971
- result.append(value)
6972
- value = self.subnode_upper
6870
+ result.append(self.subnode_name)
6871
+ value = self.subnode_default
6973
6872
  if value is None:
6974
6873
  pass
6975
6874
  else:
@@ -6984,8 +6883,8 @@ class ChildrenHavingExpressionLowerAutoNoneUpperAutoNoneMixin(object):
6984
6883
 
6985
6884
  return (
6986
6885
  ("expression", self.subnode_expression),
6987
- ("lower", self.subnode_lower),
6988
- ("upper", self.subnode_upper),
6886
+ ("name", self.subnode_name),
6887
+ ("default", self.subnode_default),
6989
6888
  )
6990
6889
 
6991
6890
  def replaceChild(self, old_node, new_node):
@@ -6997,23 +6896,20 @@ class ChildrenHavingExpressionLowerAutoNoneUpperAutoNoneMixin(object):
6997
6896
 
6998
6897
  return
6999
6898
 
7000
- value = self.subnode_lower
6899
+ value = self.subnode_name
7001
6900
  if old_node is value:
7002
- new_node = convertNoneConstantToNone(new_node)
7003
- if new_node is not None:
7004
- new_node.parent = self
6901
+ new_node.parent = self
7005
6902
 
7006
- self.subnode_lower = new_node
6903
+ self.subnode_name = new_node
7007
6904
 
7008
6905
  return
7009
6906
 
7010
- value = self.subnode_upper
6907
+ value = self.subnode_default
7011
6908
  if old_node is value:
7012
- new_node = convertNoneConstantToNone(new_node)
7013
6909
  if new_node is not None:
7014
6910
  new_node.parent = self
7015
6911
 
7016
- self.subnode_upper = new_node
6912
+ self.subnode_default = new_node
7017
6913
 
7018
6914
  return
7019
6915
 
@@ -7027,11 +6923,9 @@ class ChildrenHavingExpressionLowerAutoNoneUpperAutoNoneMixin(object):
7027
6923
 
7028
6924
  values = {
7029
6925
  "expression": self.subnode_expression.makeClone(),
7030
- "lower": self.subnode_lower.makeClone()
7031
- if self.subnode_lower is not None
7032
- else None,
7033
- "upper": self.subnode_upper.makeClone()
7034
- if self.subnode_upper is not None
6926
+ "name": self.subnode_name.makeClone(),
6927
+ "default": self.subnode_default.makeClone()
6928
+ if self.subnode_default is not None
7035
6929
  else None,
7036
6930
  }
7037
6931
 
@@ -7044,12 +6938,11 @@ class ChildrenHavingExpressionLowerAutoNoneUpperAutoNoneMixin(object):
7044
6938
 
7045
6939
  self.subnode_expression.finalize()
7046
6940
  del self.subnode_expression
7047
- if self.subnode_lower is not None:
7048
- self.subnode_lower.finalize()
7049
- del self.subnode_lower
7050
- if self.subnode_upper is not None:
7051
- self.subnode_upper.finalize()
7052
- del self.subnode_upper
6941
+ self.subnode_name.finalize()
6942
+ del self.subnode_name
6943
+ if self.subnode_default is not None:
6944
+ self.subnode_default.finalize()
6945
+ del self.subnode_default
7053
6946
 
7054
6947
  def computeExpressionRaw(self, trace_collection):
7055
6948
  """Compute an expression.
@@ -7087,34 +6980,29 @@ class ChildrenHavingExpressionLowerAutoNoneUpperAutoNoneMixin(object):
7087
6980
  """Collect variable reads and writes of child nodes."""
7088
6981
 
7089
6982
  self.subnode_expression.collectVariableAccesses(emit_read, emit_write)
7090
- subnode_lower = self.subnode_lower
7091
-
7092
- if subnode_lower is not None:
7093
- self.subnode_lower.collectVariableAccesses(emit_read, emit_write)
7094
- subnode_upper = self.subnode_upper
6983
+ self.subnode_name.collectVariableAccesses(emit_read, emit_write)
6984
+ subnode_default = self.subnode_default
7095
6985
 
7096
- if subnode_upper is not None:
7097
- self.subnode_upper.collectVariableAccesses(emit_read, emit_write)
6986
+ if subnode_default is not None:
6987
+ self.subnode_default.collectVariableAccesses(emit_read, emit_write)
7098
6988
 
7099
6989
 
7100
6990
  # Assign the names that are easier to import with a stable name.
7101
- ChildrenExpressionSliceLookupMixin = (
7102
- ChildrenHavingExpressionLowerAutoNoneUpperAutoNoneMixin
7103
- )
6991
+ ChildrenExpressionBuiltinGetattrMixin = ChildrenHavingExpressionNameDefaultOptionalMixin
7104
6992
 
7105
6993
 
7106
- class ChildrenHavingExpressionNameDefaultOptionalMixin(object):
6994
+ class ChildrenHavingExpressionNameValueMixin(object):
7107
6995
  # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
7108
6996
  __slots__ = ()
7109
6997
 
7110
6998
  # This is generated for use in
7111
- # ExpressionBuiltinGetattr
6999
+ # ExpressionBuiltinSetattr
7112
7000
 
7113
7001
  def __init__(
7114
7002
  self,
7115
7003
  expression,
7116
7004
  name,
7117
- default,
7005
+ value,
7118
7006
  ):
7119
7007
  expression.parent = self
7120
7008
 
@@ -7124,23 +7012,18 @@ class ChildrenHavingExpressionNameDefaultOptionalMixin(object):
7124
7012
 
7125
7013
  self.subnode_name = name
7126
7014
 
7127
- if default is not None:
7128
- default.parent = self
7015
+ value.parent = self
7129
7016
 
7130
- self.subnode_default = default
7017
+ self.subnode_value = value
7131
7018
 
7132
7019
  def getVisitableNodes(self):
7133
7020
  """The visitable nodes, with tuple values flattened."""
7134
7021
 
7135
- result = []
7136
- result.append(self.subnode_expression)
7137
- result.append(self.subnode_name)
7138
- value = self.subnode_default
7139
- if value is None:
7140
- pass
7141
- else:
7142
- result.append(value)
7143
- return tuple(result)
7022
+ return (
7023
+ self.subnode_expression,
7024
+ self.subnode_name,
7025
+ self.subnode_value,
7026
+ )
7144
7027
 
7145
7028
  def getVisitableNodesNamed(self):
7146
7029
  """Named children dictionary.
@@ -7151,7 +7034,7 @@ class ChildrenHavingExpressionNameDefaultOptionalMixin(object):
7151
7034
  return (
7152
7035
  ("expression", self.subnode_expression),
7153
7036
  ("name", self.subnode_name),
7154
- ("default", self.subnode_default),
7037
+ ("value", self.subnode_value),
7155
7038
  )
7156
7039
 
7157
7040
  def replaceChild(self, old_node, new_node):
@@ -7171,12 +7054,11 @@ class ChildrenHavingExpressionNameDefaultOptionalMixin(object):
7171
7054
 
7172
7055
  return
7173
7056
 
7174
- value = self.subnode_default
7057
+ value = self.subnode_value
7175
7058
  if old_node is value:
7176
- if new_node is not None:
7177
- new_node.parent = self
7059
+ new_node.parent = self
7178
7060
 
7179
- self.subnode_default = new_node
7061
+ self.subnode_value = new_node
7180
7062
 
7181
7063
  return
7182
7064
 
@@ -7191,9 +7073,7 @@ class ChildrenHavingExpressionNameDefaultOptionalMixin(object):
7191
7073
  values = {
7192
7074
  "expression": self.subnode_expression.makeClone(),
7193
7075
  "name": self.subnode_name.makeClone(),
7194
- "default": self.subnode_default.makeClone()
7195
- if self.subnode_default is not None
7196
- else None,
7076
+ "value": self.subnode_value.makeClone(),
7197
7077
  }
7198
7078
 
7199
7079
  values.update(self.getDetails())
@@ -7207,9 +7087,8 @@ class ChildrenHavingExpressionNameDefaultOptionalMixin(object):
7207
7087
  del self.subnode_expression
7208
7088
  self.subnode_name.finalize()
7209
7089
  del self.subnode_name
7210
- if self.subnode_default is not None:
7211
- self.subnode_default.finalize()
7212
- del self.subnode_default
7090
+ self.subnode_value.finalize()
7091
+ del self.subnode_value
7213
7092
 
7214
7093
  def computeExpressionRaw(self, trace_collection):
7215
7094
  """Compute an expression.
@@ -7248,14 +7127,11 @@ class ChildrenHavingExpressionNameDefaultOptionalMixin(object):
7248
7127
 
7249
7128
  self.subnode_expression.collectVariableAccesses(emit_read, emit_write)
7250
7129
  self.subnode_name.collectVariableAccesses(emit_read, emit_write)
7251
- subnode_default = self.subnode_default
7252
-
7253
- if subnode_default is not None:
7254
- self.subnode_default.collectVariableAccesses(emit_read, emit_write)
7130
+ self.subnode_value.collectVariableAccesses(emit_read, emit_write)
7255
7131
 
7256
7132
 
7257
7133
  # Assign the names that are easier to import with a stable name.
7258
- ChildrenExpressionBuiltinGetattrMixin = ChildrenHavingExpressionNameDefaultOptionalMixin
7134
+ ChildrenExpressionBuiltinSetattrMixin = ChildrenHavingExpressionNameValueMixin
7259
7135
 
7260
7136
 
7261
7137
  class ChildrenHavingExpressionSubscriptMixin(object):
@@ -12172,6 +12048,99 @@ class ChildHavingPMixin(object):
12172
12048
  ChildrenExpressionOsPathBasenameMixin = ChildHavingPMixin
12173
12049
 
12174
12050
 
12051
+ class ChildHavingPackageMixin(object):
12052
+ # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
12053
+ __slots__ = ()
12054
+
12055
+ # This is generated for use in
12056
+ # ExpressionImportlibResourcesFiles
12057
+ # ExpressionImportlibResourcesFilesCall
12058
+
12059
+ def __init__(
12060
+ self,
12061
+ package,
12062
+ ):
12063
+ package.parent = self
12064
+
12065
+ self.subnode_package = package
12066
+
12067
+ def getVisitableNodes(self):
12068
+ """The visitable nodes, with tuple values flattened."""
12069
+
12070
+ return (self.subnode_package,)
12071
+
12072
+ def getVisitableNodesNamed(self):
12073
+ """Named children dictionary.
12074
+
12075
+ For use in cloning nodes, debugging and XML output.
12076
+ """
12077
+
12078
+ return (("package", self.subnode_package),)
12079
+
12080
+ def replaceChild(self, old_node, new_node):
12081
+ value = self.subnode_package
12082
+ if old_node is value:
12083
+ new_node.parent = self
12084
+
12085
+ self.subnode_package = new_node
12086
+
12087
+ return
12088
+
12089
+ raise AssertionError("Didn't find child", old_node, "in", self)
12090
+
12091
+ def getCloneArgs(self):
12092
+ """Get clones of all children to pass for a new node.
12093
+
12094
+ Needs to make clones of child nodes too.
12095
+ """
12096
+
12097
+ values = {
12098
+ "package": self.subnode_package.makeClone(),
12099
+ }
12100
+
12101
+ values.update(self.getDetails())
12102
+
12103
+ return values
12104
+
12105
+ def finalize(self):
12106
+ del self.parent
12107
+
12108
+ self.subnode_package.finalize()
12109
+ del self.subnode_package
12110
+
12111
+ def computeExpressionRaw(self, trace_collection):
12112
+ """Compute an expression.
12113
+
12114
+ Default behavior is to just visit the child expressions first, and
12115
+ then the node "computeExpression". For a few cases this needs to
12116
+ be overloaded, e.g. conditional expressions.
12117
+ """
12118
+
12119
+ # First apply the sub-expression, as they it's evaluated before.
12120
+ expression = trace_collection.onExpression(self.subnode_package)
12121
+
12122
+ if expression.willRaiseAnyException():
12123
+ return (
12124
+ expression,
12125
+ "new_raise",
12126
+ lambda: "For '%s' the child expression '%s' will raise."
12127
+ % (self.getChildNameNice(), expression.getChildNameNice()),
12128
+ )
12129
+
12130
+ # Then ask ourselves to work on it.
12131
+ return self.computeExpression(trace_collection)
12132
+
12133
+ def collectVariableAccesses(self, emit_read, emit_write):
12134
+ """Collect variable reads and writes of child nodes."""
12135
+
12136
+ self.subnode_package.collectVariableAccesses(emit_read, emit_write)
12137
+
12138
+
12139
+ # Assign the names that are easier to import with a stable name.
12140
+ ChildrenExpressionImportlibResourcesFilesMixin = ChildHavingPackageMixin
12141
+ ChildrenExpressionImportlibResourcesFilesCallMixin = ChildHavingPackageMixin
12142
+
12143
+
12175
12144
  class ChildrenHavingPackageResourceMixin(object):
12176
12145
  # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
12177
12146
  __slots__ = ()