@@ -28,7 +28,6 @@ final class JSGlueVariableScope {
2828 static let reservedF32Stack = " f32Stack "
2929 static let reservedF64Stack = " f64Stack "
3030 static let reservedPointerStack = " ptrStack "
31- static let reservedTmpStructCleanups = " tmpStructCleanups "
3231 static let reservedEnumHelpers = " enumHelpers "
3332 static let reservedStructHelpers = " structHelpers "
3433 static let reservedSwiftClosureRegistry = " swiftClosureRegistry "
@@ -56,7 +55,6 @@ final class JSGlueVariableScope {
5655 reservedF32Stack,
5756 reservedF64Stack,
5857 reservedPointerStack,
59- reservedTmpStructCleanups,
6058 reservedEnumHelpers,
6159 reservedStructHelpers,
6260 reservedSwiftClosureRegistry,
@@ -635,7 +633,7 @@ struct IntrinsicJSFragment: Sendable {
635633 IntrinsicJSFragment (
636634 parameters: [ " value " ] ,
637635 printCode: { arguments, context in
638- let ( printer, cleanup ) = ( context. printer, context . cleanupCode )
636+ let printer = context. printer
639637 let value = arguments [ 0 ]
640638 let caseIdName = " \( value) CaseId "
641639 printer. write (
@@ -812,15 +810,11 @@ struct IntrinsicJSFragment: Sendable {
812810 switch wrappedType {
813811 case . swiftStruct( let fullName) :
814812 let base = fullName. components ( separatedBy: " . " ) . last ?? fullName
815- let cleanupVar = scope. variable ( " \( value) Cleanup " )
816- printer. write ( " let \( cleanupVar) ; " )
817813 printer. write ( " if ( \( isSomeVar) ) { " )
818814 printer. indent {
819- let resultVar = scope. variable ( " structResult " )
820815 printer. write (
821- " const \( resultVar ) = \( JSGlueVariableScope . reservedStructHelpers) . \( base) .lower( \( value) ); "
816+ " \( JSGlueVariableScope . reservedStructHelpers) . \( base) .lower( \( value) ); "
822817 )
823- printer. write ( " \( cleanupVar) = \( resultVar) .cleanup; " )
824818 }
825819 printer. write ( " } " )
826820 printer. write ( " \( JSGlueVariableScope . reservedI32Stack) .push(+ \( isSomeVar) ); " )
@@ -1774,16 +1768,15 @@ struct IntrinsicJSFragment: Sendable {
17741768 return IntrinsicJSFragment (
17751769 parameters: [ " value " , " enumName " , " caseName " ] ,
17761770 printCode: { arguments, context in
1777- let ( printer, cleanup ) = ( context. printer, context . cleanupCode )
1771+ let printer = context. printer
17781772 let enumName = arguments [ 1 ]
17791773 let caseName = arguments [ 2 ]
17801774
17811775 printer. write ( " case \( enumName) .Tag. \( caseName) : { " )
17821776
17831777 try printer. indent {
17841778 if enumCase. associatedValues. isEmpty {
1785- printer. write ( " const cleanup = undefined; " )
1786- printer. write ( " return { caseId: \( enumName) .Tag. \( caseName) , cleanup }; " )
1779+ printer. write ( " return { caseId: \( enumName) .Tag. \( caseName) }; " )
17871780 } else {
17881781 // Process associated values in reverse order (to match the order they'll be popped)
17891782 let reversedValues = enumCase. associatedValues. enumerated ( ) . reversed ( )
@@ -1797,14 +1790,7 @@ struct IntrinsicJSFragment: Sendable {
17971790 _ = try fragment. printCode ( [ " value. \( prop) " ] , context)
17981791 }
17991792
1800- if cleanup. lines. isEmpty {
1801- printer. write ( " const cleanup = undefined; " )
1802- } else {
1803- printer. write ( " const cleanup = () => { " )
1804- printer. write ( contentsOf: cleanup)
1805- printer. write ( " }; " )
1806- }
1807- printer. write ( " return { caseId: \( enumName) .Tag. \( caseName) , cleanup }; " )
1793+ printer. write ( " return { caseId: \( enumName) .Tag. \( caseName) }; " )
18081794 }
18091795 }
18101796
@@ -1950,15 +1936,11 @@ struct IntrinsicJSFragment: Sendable {
19501936 }
19511937 case . swiftStruct( let structName) :
19521938 let structBase = structName. components ( separatedBy: " . " ) . last ?? structName
1953- let nestedCleanupVar = scope. variable ( " nestedCleanup " )
1954- printer. write ( " let \( nestedCleanupVar) ; " )
19551939 printer. write ( " if ( \( isSomeVar) ) { " )
19561940 printer. indent {
1957- let structResultVar = scope. variable ( " structResult " )
19581941 printer. write (
1959- " const \( structResultVar ) = \( JSGlueVariableScope . reservedStructHelpers) . \( structBase) .lower( \( value) ); "
1942+ " \( JSGlueVariableScope . reservedStructHelpers) . \( structBase) .lower( \( value) ); "
19601943 )
1961- printer. write ( " \( nestedCleanupVar) = \( structResultVar) .cleanup; " )
19621944 }
19631945 printer. write ( " } " )
19641946 scope. emitPushI32Parameter ( " \( isSomeVar) ? 1 : 0 " , printer: printer)
@@ -1991,16 +1973,12 @@ struct IntrinsicJSFragment: Sendable {
19911973 case . associatedValueEnum( let enumName) :
19921974 let base = enumName. components ( separatedBy: " . " ) . last ?? enumName
19931975 let caseIdVar = scope. variable ( " enumCaseId " )
1994- let enumCleanupVar = scope. variable ( " enumCleanup " )
1995- printer. write ( " let \( caseIdVar) , \( enumCleanupVar) ; " )
1976+ printer. write ( " let \( caseIdVar) ; " )
19961977 printer. write ( " if ( \( isSomeVar) ) { " )
19971978 printer. indent {
1998- let enumResultVar = scope. variable ( " enumResult " )
19991979 printer. write (
2000- " const \( enumResultVar ) = \( JSGlueVariableScope . reservedEnumHelpers) . \( base) .lower( \( value) ); "
1980+ " const \( caseIdVar ) = \( JSGlueVariableScope . reservedEnumHelpers) . \( base) .lower( \( value) ); "
20011981 )
2002- printer. write ( " \( caseIdVar) = \( enumResultVar) .caseId; " )
2003- printer. write ( " \( enumCleanupVar) = \( enumResultVar) .cleanup; " )
20041982 scope. emitPushI32Parameter ( caseIdVar, printer: printer)
20051983 }
20061984 printer. write ( " } else { " )
@@ -2010,30 +1988,13 @@ struct IntrinsicJSFragment: Sendable {
20101988 printer. write ( " } " )
20111989 scope. emitPushI32Parameter ( " \( isSomeVar) ? 1 : 0 " , printer: printer)
20121990 case . array( let elementType) :
2013- // Array cleanup references variables declared inside the if block,
2014- // so capture cleanup into a variable declared at the outer scope.
2015- let arrCleanupVar = scope. variable ( " arrCleanup " )
2016- printer. write ( " let \( arrCleanupVar) ; " )
20171991 printer. write ( " if ( \( isSomeVar) ) { " )
20181992 try printer. indent {
2019- let localCleanup = CodeFragmentPrinter ( )
20201993 let arrFragment = try arrayLower ( elementType: elementType)
20211994 _ = try arrFragment. printCode (
20221995 [ value] ,
2023- context. with ( \ . cleanupCode , localCleanup )
1996+ context
20241997 )
2025- let cleanupLines = localCleanup. lines. filter {
2026- !$0. trimmingCharacters ( in: . whitespaces) . isEmpty
2027- }
2028- if !cleanupLines. isEmpty {
2029- printer. write ( " \( arrCleanupVar) = () => { " )
2030- printer. indent {
2031- for line in cleanupLines {
2032- printer. write ( line)
2033- }
2034- }
2035- printer. write ( " }; " )
2036- }
20371998 }
20381999 printer. write ( " } " )
20392000 scope. emitPushI32Parameter ( " \( isSomeVar) ? 1 : 0 " , printer: printer)
@@ -2857,31 +2818,22 @@ struct IntrinsicJSFragment: Sendable {
28572818 let ( scope, printer) = ( context. scope, context. printer)
28582819 let lowerPrinter = CodeFragmentPrinter ( )
28592820 let lowerScope = scope. makeChildScope ( )
2860- let lowerCleanup = CodeFragmentPrinter ( )
2861- lowerCleanup. indent ( )
28622821
28632822 let instanceProps = structDef. properties. filter { !$0. isStatic }
28642823 for property in instanceProps {
28652824 let fragment = try structFieldLowerFragment ( field: property, allStructs: allStructs)
28662825 let fieldValue = " value. \( property. name) "
28672826 _ = try fragment. printCode (
28682827 [ fieldValue] ,
2869- context. with ( \. scope, lowerScope) . with ( \. printer, lowerPrinter) . with ( \ . cleanupCode , lowerCleanup )
2828+ context. with ( \. scope, lowerScope) . with ( \. printer, lowerPrinter)
28702829 )
28712830 }
28722831
28732832 for line in lowerPrinter. lines {
28742833 printer. write ( line)
28752834 }
28762835
2877- if !lowerCleanup. lines. isEmpty {
2878- printer. write ( " const cleanup = () => { " )
2879- printer. write ( contentsOf: lowerCleanup)
2880- printer. write ( " }; " )
2881- printer. write ( " return { cleanup }; " )
2882- } else {
2883- printer. write ( " return { cleanup: undefined }; " )
2884- }
2836+ printer. write ( " return { cleanup: undefined }; " )
28852837 }
28862838
28872839 private static func generateStructLiftCode(
@@ -2925,12 +2877,6 @@ struct IntrinsicJSFragment: Sendable {
29252877 )
29262878 try printer. indent {
29272879 let methodScope = scope. makeChildScope ( )
2928- let methodCleanup = CodeFragmentPrinter ( )
2929-
2930- let structCleanupVar = methodScope. variable ( " structCleanup " )
2931- printer. write (
2932- " const { cleanup: \( structCleanupVar) } = \( JSGlueVariableScope . reservedStructHelpers) . \( structDef. name) .lower(this); "
2933- )
29342880
29352881 var paramForwardings : [ String ] = [ ]
29362882 for param in method. parameters {
@@ -2946,10 +2892,6 @@ struct IntrinsicJSFragment: Sendable {
29462892 printer. write ( " const ret = \( callExpr) ; " )
29472893 }
29482894
2949- // Cleanup
2950- printer. write ( " if ( \( structCleanupVar) ) { \( structCleanupVar) (); } " )
2951- printer. write ( contentsOf: methodCleanup)
2952-
29532895 // Lift return value if needed
29542896 if method. returnType != . void {
29552897 let liftFragment = try IntrinsicJSFragment . liftReturn ( type: method. returnType)
0 commit comments