@@ -717,8 +717,11 @@ public struct BridgeJSLink {
717717 functionName: String
718718 ) throws -> [ String ] {
719719 let printer = CodeFragmentPrinter ( )
720- let scope = JSGlueVariableScope ( intrinsicRegistry: intrinsicRegistry)
721- let cleanupCode = CodeFragmentPrinter ( )
720+ let context = IntrinsicJSFragment . PrintCodeContext (
721+ scope: JSGlueVariableScope ( intrinsicRegistry: intrinsicRegistry) ,
722+ printer: printer,
723+ cleanupCode: CodeFragmentPrinter ( )
724+ )
722725
723726 // Build parameter list for invoke function
724727 var invokeParams : [ String ] = [ " callbackId " ]
@@ -746,7 +749,7 @@ public struct BridgeJSLink {
746749 } else {
747750 args = [ " param \( index) Id " , " param \( index) " ]
748751 }
749- _ = try fragment. printCode ( args, scope , printer , cleanupCode )
752+ _ = try fragment. printCode ( args, context )
750753 }
751754
752755 let callbackParams = signature. parameters. indices. map { " param \( $0) " } . joined ( separator: " , " )
@@ -765,13 +768,13 @@ public struct BridgeJSLink {
765768 }
766769
767770 let returnFragment = try IntrinsicJSFragment . closureLowerReturn ( type: signature. returnType)
768- _ = try returnFragment. printCode ( [ " result " ] , scope , printer , cleanupCode )
771+ _ = try returnFragment. printCode ( [ " result " ] , context )
769772 }
770773 printer. write ( " } catch (error) { " )
771774 try printer. indent {
772775 printer. write ( " \( JSGlueVariableScope . reservedSetException) ?.(error); " )
773776 let errorFragment = IntrinsicJSFragment . closureErrorReturn ( type: signature. returnType)
774- _ = try errorFragment. printCode ( [ ] , scope , printer , cleanupCode )
777+ _ = try errorFragment. printCode ( [ ] , context )
775778 }
776779 printer. write ( " } " )
777780 }
@@ -786,8 +789,11 @@ public struct BridgeJSLink {
786789 functionName: String
787790 ) throws -> [ String ] {
788791 let printer = CodeFragmentPrinter ( )
789- let scope = JSGlueVariableScope ( intrinsicRegistry: intrinsicRegistry)
790- let cleanupCode = CodeFragmentPrinter ( )
792+ let context = IntrinsicJSFragment . PrintCodeContext (
793+ scope: JSGlueVariableScope ( intrinsicRegistry: intrinsicRegistry) ,
794+ printer: printer,
795+ cleanupCode: CodeFragmentPrinter ( )
796+ )
791797
792798 printer. write (
793799 " const \( functionName) = function( \( signature. parameters. indices. map { " param \( $0) " } . joined ( separator: " , " ) ) ) { "
@@ -798,7 +804,7 @@ public struct BridgeJSLink {
798804 for (index, paramType) in signature. parameters. enumerated ( ) {
799805 let paramName = " param \( index) "
800806 let fragment = try IntrinsicJSFragment . lowerParameter ( type: paramType)
801- let lowered = try fragment. printCode ( [ paramName] , scope , printer , cleanupCode )
807+ let lowered = try fragment. printCode ( [ paramName] , context )
802808 invokeArgs. append ( contentsOf: lowered)
803809 }
804810
@@ -822,7 +828,7 @@ public struct BridgeJSLink {
822828 printer. write ( " } " )
823829
824830 let returnFragment = try IntrinsicJSFragment . closureLiftReturn ( type: signature. returnType)
825- _ = try returnFragment. printCode ( [ invokeResultName] , scope , printer , cleanupCode )
831+ _ = try returnFragment. printCode ( [ invokeResultName] , context )
826832 }
827833 printer. write ( " }; " )
828834
@@ -1010,7 +1016,14 @@ public struct BridgeJSLink {
10101016 let structScope = JSGlueVariableScope ( intrinsicRegistry: intrinsicRegistry)
10111017 let structCleanup = CodeFragmentPrinter ( )
10121018 let fragment = IntrinsicJSFragment . structHelper ( structDefinition: structDef, allStructs: allStructs)
1013- _ = try fragment. printCode ( [ structDef. name] , structScope, structPrinter, structCleanup)
1019+ _ = try fragment. printCode (
1020+ [ structDef. name] ,
1021+ IntrinsicJSFragment . PrintCodeContext (
1022+ scope: structScope,
1023+ printer: structPrinter,
1024+ cleanupCode: structCleanup
1025+ )
1026+ )
10141027 bodyPrinter. write ( lines: structPrinter. lines)
10151028 }
10161029
@@ -1022,7 +1035,14 @@ public struct BridgeJSLink {
10221035 let enumScope = JSGlueVariableScope ( intrinsicRegistry: intrinsicRegistry)
10231036 let enumCleanup = CodeFragmentPrinter ( )
10241037 let fragment = IntrinsicJSFragment . associatedValueEnumHelperFactory ( enumDefinition: enumDef)
1025- _ = try fragment. printCode ( [ enumDef. valuesName] , enumScope, enumPrinter, enumCleanup)
1038+ _ = try fragment. printCode (
1039+ [ enumDef. valuesName] ,
1040+ IntrinsicJSFragment . PrintCodeContext (
1041+ scope: enumScope,
1042+ printer: enumPrinter,
1043+ cleanupCode: enumCleanup
1044+ )
1045+ )
10261046 bodyPrinter. write ( lines: enumPrinter. lines)
10271047 }
10281048 bodyPrinter. nextLine ( )
@@ -1269,12 +1289,18 @@ public struct BridgeJSLink {
12691289 var parameterForwardings : [ String ] = [ ]
12701290 let effects : Effects
12711291 let scope : JSGlueVariableScope
1292+ let context : IntrinsicJSFragment . PrintCodeContext
12721293
12731294 init ( effects: Effects , intrinsicRegistry: JSIntrinsicRegistry ) {
12741295 self . effects = effects
12751296 self . scope = JSGlueVariableScope ( intrinsicRegistry: intrinsicRegistry)
12761297 self . body = CodeFragmentPrinter ( )
12771298 self . cleanupCode = CodeFragmentPrinter ( )
1299+ self . context = IntrinsicJSFragment . PrintCodeContext (
1300+ scope: scope,
1301+ printer: body,
1302+ cleanupCode: cleanupCode
1303+ )
12781304 }
12791305
12801306 func lowerParameter( param: Parameter ) throws {
@@ -1283,7 +1309,7 @@ public struct BridgeJSLink {
12831309 loweringFragment. parameters. count == 1 ,
12841310 " Lowering fragment should have exactly one parameter to lower "
12851311 )
1286- let loweredValues = try loweringFragment. printCode ( [ param. name] , scope , body , cleanupCode )
1312+ let loweredValues = try loweringFragment. printCode ( [ param. name] , context )
12871313 parameterForwardings. append ( contentsOf: loweredValues)
12881314 }
12891315
@@ -1315,7 +1341,7 @@ public struct BridgeJSLink {
13151341 body. write ( " const \( returnVariable) = \( call) ; " )
13161342 fragmentArguments = [ returnVariable]
13171343 }
1318- let liftedValues = try liftingFragment. printCode ( fragmentArguments, scope , body , cleanupCode )
1344+ let liftedValues = try liftingFragment. printCode ( fragmentArguments, context )
13191345 assert ( liftedValues. count <= 1 , " Lifting fragment should produce at most one value " )
13201346 return liftedValues. first
13211347 }
@@ -1566,26 +1592,30 @@ public struct BridgeJSLink {
15661592 var jsTopLevelLines : [ String ] = [ ]
15671593 var dtsTypeLines : [ String ] = [ ]
15681594 let scope = JSGlueVariableScope ( intrinsicRegistry: intrinsicRegistry)
1569- let cleanup = CodeFragmentPrinter ( )
15701595 let printer = CodeFragmentPrinter ( )
1596+ let context = IntrinsicJSFragment . PrintCodeContext (
1597+ scope: scope,
1598+ printer: printer,
1599+ cleanupCode: CodeFragmentPrinter ( )
1600+ )
15711601 let enumValuesName = enumDefinition. valuesName
15721602
15731603 switch enumDefinition. enumType {
15741604 case . simple:
15751605 let fragment = IntrinsicJSFragment . simpleEnumHelper ( enumDefinition: enumDefinition)
1576- _ = try fragment. printCode ( [ enumValuesName] , scope , printer , cleanup )
1606+ _ = try fragment. printCode ( [ enumValuesName] , context )
15771607 jsTopLevelLines. append ( contentsOf: printer. lines)
15781608 case . rawValue:
15791609 guard enumDefinition. rawType != nil else {
15801610 throw BridgeJSLinkError ( message: " Raw value enum \( enumDefinition. name) is missing rawType " )
15811611 }
15821612
15831613 let fragment = IntrinsicJSFragment . rawValueEnumHelper ( enumDefinition: enumDefinition)
1584- _ = try fragment. printCode ( [ enumValuesName] , scope , printer , cleanup )
1614+ _ = try fragment. printCode ( [ enumValuesName] , context )
15851615 jsTopLevelLines. append ( contentsOf: printer. lines)
15861616 case . associatedValue:
15871617 let fragment = IntrinsicJSFragment . associatedValueEnumValues ( enumDefinition: enumDefinition)
1588- _ = try fragment. printCode ( [ enumValuesName] , scope , printer , cleanup )
1618+ _ = try fragment. printCode ( [ enumValuesName] , context )
15891619 jsTopLevelLines. append ( contentsOf: printer. lines)
15901620 case . namespace:
15911621 break
@@ -2155,12 +2185,18 @@ extension BridgeJSLink {
21552185 let context : BridgeContext
21562186 var parameterNames : [ String ] = [ ]
21572187 var parameterForwardings : [ String ] = [ ]
2188+ let printContext : IntrinsicJSFragment . PrintCodeContext
21582189
21592190 init ( context: BridgeContext = . importTS, intrinsicRegistry: JSIntrinsicRegistry ) {
21602191 self . body = CodeFragmentPrinter ( )
21612192 self . scope = JSGlueVariableScope ( intrinsicRegistry: intrinsicRegistry)
21622193 self . cleanupCode = CodeFragmentPrinter ( )
21632194 self . context = context
2195+ self . printContext = IntrinsicJSFragment . PrintCodeContext (
2196+ scope: scope,
2197+ printer: body,
2198+ cleanupCode: cleanupCode
2199+ )
21642200 }
21652201
21662202 func liftSelf( ) {
@@ -2179,7 +2215,7 @@ extension BridgeJSLink {
21792215 valuesToLift = liftingFragment. parameters. map { scope. variable ( param. name + $0. capitalizedFirstLetter) }
21802216 parameterNames. append ( contentsOf: valuesToLift)
21812217 }
2182- let liftedValues = try liftingFragment. printCode ( valuesToLift, scope , body , cleanupCode )
2218+ let liftedValues = try liftingFragment. printCode ( valuesToLift, printContext )
21832219 assert ( liftedValues. count == 1 , " Lifting fragment should produce exactly one value " )
21842220 parameterForwardings. append ( contentsOf: liftedValues)
21852221 }
@@ -2289,7 +2325,7 @@ extension BridgeJSLink {
22892325 )
22902326
22912327 let fragment = try IntrinsicJSFragment . protocolPropertyOptionalToSideChannel ( wrappedType: wrappedType)
2292- _ = try fragment. printCode ( [ resultVar] , scope , body , cleanupCode )
2328+ _ = try fragment. printCode ( [ resultVar] , printContext )
22932329
22942330 return nil // Side-channel types return nil (no direct return value)
22952331 }
@@ -2342,7 +2378,10 @@ extension BridgeJSLink {
23422378 loweringFragment: IntrinsicJSFragment
23432379 ) throws -> String ? {
23442380 assert ( loweringFragment. parameters. count <= 1 , " Lowering fragment should have at most one parameter " )
2345- let loweredValues = try loweringFragment. printCode ( returnExpr. map { [ $0] } ?? [ ] , scope, body, cleanupCode)
2381+ let loweredValues = try loweringFragment. printCode (
2382+ returnExpr. map { [ $0] } ?? [ ] ,
2383+ printContext
2384+ )
23462385 assert ( loweredValues. count <= 1 , " Lowering fragment should produce at most one value " )
23472386 return loweredValues. first
23482387 }
0 commit comments