@@ -482,12 +482,7 @@ public class ExportSwift {
482482 }
483483
484484 if function . effects . isStatic , let staticContext = function . staticContext {
485- let callName : String
486- switch staticContext {
487- case . className ( let baseName ) , . enumName ( let baseName ) , . structName ( let baseName ) ,
488- . namespaceEnum ( let baseName ) :
489- callName = " \( baseName ) . \( function . name ) "
490- }
485+ let callName = " \( staticContextBaseName ( staticContext ) ) . \( function . name ) "
491486 builder . call ( name : callName , returnType : function . returnType )
492487 } else {
493488 builder . call ( name : function . name , returnType : function . returnType )
@@ -497,17 +492,61 @@ public class ExportSwift {
497492 return builder . render ( abiName : function . abiName )
498493 }
499494
495+ private func staticContextBaseName ( _ staticContext : StaticContext ) -> String {
496+ switch staticContext {
497+ case . className ( let baseName ) , . enumName ( let baseName ) , . structName ( let baseName ) ,
498+ . namespaceEnum ( let baseName ) :
499+ return baseName
500+ }
501+ }
502+
503+ private func renderSingleExportedConstructor (
504+ constructor : ExportedConstructor ,
505+ callName : String ,
506+ returnType : BridgeType
507+ ) throws -> DeclSyntax {
508+ let builder = ExportedThunkBuilder ( effects : constructor . effects )
509+ for param in constructor . parameters {
510+ try builder . liftParameter ( param : param )
511+ }
512+ builder . call ( name : callName , returnType : returnType )
513+ try builder . lowerReturnValue ( returnType : returnType )
514+ return builder . render ( abiName : constructor . abiName )
515+ }
516+
517+ private func renderSingleExportedMethod (
518+ method : ExportedFunction ,
519+ ownerTypeName : String ,
520+ instanceSelfType : BridgeType
521+ ) throws -> DeclSyntax {
522+ let builder = ExportedThunkBuilder ( effects : method . effects )
523+ if ! method . effects . isStatic {
524+ try builder . liftParameter ( param : Parameter ( label : nil , name : " _self " , type : instanceSelfType ) )
525+ }
526+ for param in method . parameters {
527+ try builder . liftParameter ( param : param )
528+ }
529+
530+ if method . effects . isStatic {
531+ builder . call ( name : " \( ownerTypeName ) . \( method . name ) " , returnType : method . returnType )
532+ } else {
533+ builder . callMethod ( methodName : method . name , returnType : method . returnType )
534+ }
535+ try builder . lowerReturnValue ( returnType : method . returnType )
536+ return builder . render ( abiName : method . abiName )
537+ }
538+
500539 func renderSingleExportedStruct ( struct structDef : ExportedStruct ) throws -> [ DeclSyntax ] {
501540 var decls : [ DeclSyntax ] = [ ]
502541
503542 if let constructor = structDef . constructor {
504- let builder = ExportedThunkBuilder ( effects : constructor . effects )
505- for param in constructor . parameters {
506- try builder . liftParameter ( param : param )
507- }
508- builder . call ( name : structDef . swiftCallName , returnType : . swiftStruct ( structDef . swiftCallName ) )
509- try builder . lowerReturnValue ( returnType : . swiftStruct ( structDef . swiftCallName ) )
510- decls . append ( builder . render ( abiName : constructor . abiName ) )
543+ decls . append (
544+ try renderSingleExportedConstructor (
545+ constructor : constructor ,
546+ callName : structDef . swiftCallName ,
547+ returnType : . swiftStruct ( structDef . swiftCallName )
548+ )
549+ )
511550 }
512551
513552 for property in structDef . properties where property . isStatic {
@@ -520,28 +559,13 @@ public class ExportSwift {
520559 }
521560
522561 for method in structDef . methods {
523- let builder = ExportedThunkBuilder ( effects : method . effects )
524-
525- if method . effects . isStatic {
526- for param in method . parameters {
527- try builder . liftParameter ( param : param )
528- }
529- builder . call ( name : " \( structDef . swiftCallName ) . \( method . name ) " , returnType : method . returnType )
530- } else {
531- try builder . liftParameter (
532- param : Parameter ( label : nil , name : " _self " , type : . swiftStruct ( structDef . swiftCallName ) )
533- )
534- for param in method . parameters {
535- try builder . liftParameter ( param : param )
536- }
537- builder . callMethod (
538- methodName : method . name ,
539- returnType : method . returnType
562+ decls . append (
563+ try renderSingleExportedMethod (
564+ method : method ,
565+ ownerTypeName : structDef . swiftCallName ,
566+ instanceSelfType : . swiftStruct ( structDef . swiftCallName )
540567 )
541- }
542-
543- try builder . lowerReturnValue ( returnType : method . returnType )
544- decls . append ( builder . render ( abiName : method . abiName ) )
568+ )
545569 }
546570
547571 return decls
@@ -598,55 +622,29 @@ public class ExportSwift {
598622 var decls : [ DeclSyntax ] = [ ]
599623
600624 if let constructor = klass . constructor {
601- let builder = ExportedThunkBuilder ( effects : constructor . effects )
602- for param in constructor . parameters {
603- try builder . liftParameter ( param : param )
604- }
605- builder . call ( name : klass . swiftCallName , returnType : BridgeType . swiftHeapObject ( klass . name ) )
606- try builder . lowerReturnValue ( returnType : BridgeType . swiftHeapObject ( klass . name ) )
607- decls . append ( builder . render ( abiName : constructor . abiName ) )
625+ decls . append (
626+ try renderSingleExportedConstructor (
627+ constructor : constructor ,
628+ callName : klass . swiftCallName ,
629+ returnType : . swiftHeapObject ( klass . name )
630+ )
631+ )
608632 }
609633 for method in klass . methods {
610- let builder = ExportedThunkBuilder ( effects : method . effects )
611-
612- if method . effects . isStatic {
613- for param in method . parameters {
614- try builder . liftParameter ( param : param )
615- }
616- builder . call ( name : " \( klass . swiftCallName ) . \( method . name ) " , returnType : method . returnType )
617- } else {
618- try builder . liftParameter (
619- param : Parameter ( label : nil , name : " _self " , type : BridgeType . swiftHeapObject ( klass . swiftCallName ) )
620- )
621- for param in method . parameters {
622- try builder . liftParameter ( param : param )
623- }
624- builder . callMethod (
625- methodName : method . name ,
626- returnType : method . returnType
634+ decls . append (
635+ try renderSingleExportedMethod (
636+ method : method ,
637+ ownerTypeName : klass . swiftCallName ,
638+ instanceSelfType : . swiftHeapObject ( klass . swiftCallName )
627639 )
628- }
629- try builder . lowerReturnValue ( returnType : method . returnType )
630- decls . append ( builder . render ( abiName : method . abiName ) )
640+ )
631641 }
632642
633643 // Generate property getters and setters
634644 for property in klass . properties {
635- if property . isStatic {
636- decls . append (
637- contentsOf : try renderSingleExportedProperty (
638- property : property ,
639- context : . classStatic ( klass : klass )
640- )
641- )
642- } else {
643- decls . append (
644- contentsOf : try renderSingleExportedProperty (
645- property : property ,
646- context : . classInstance ( klass : klass )
647- )
648- )
649- }
645+ let context : PropertyRenderingContext =
646+ property . isStatic ? . classStatic ( klass : klass ) : . classInstance ( klass : klass )
647+ decls . append ( contentsOf : try renderSingleExportedProperty ( property : property , context : context ) )
650648 }
651649
652650 do {
@@ -760,7 +758,7 @@ struct StackCodegen {
760758 func liftArrayExpression ( elementType : BridgeType ) -> ExprSyntax {
761759 switch elementType {
762760 case . jsObject ( let className ? ) where className != " JSObject " :
763- return liftArrayExpressionInline ( elementType : elementType )
761+ return " [JSObject].bridgeJSLiftParameter().map { \( raw : className ) (unsafelyWrapping: $0) } "
764762 case . nullable , . closure :
765763 return liftArrayExpressionInline ( elementType : elementType )
766764 case . void , . namespaceEnum :
@@ -992,8 +990,7 @@ struct StackCodegen {
992990
993991 let innerStatements = lowerUnwrappedOptionalStatements (
994992 wrappedType : wrappedType ,
995- unwrappedVar : " __bjs_unwrapped_ \( varPrefix ) " ,
996- varPrefix : varPrefix
993+ unwrappedVar : " __bjs_unwrapped_ \( varPrefix ) "
997994 )
998995 for stmt in innerStatements {
999996 statements . append ( stmt . description )
@@ -1007,8 +1004,7 @@ struct StackCodegen {
10071004
10081005 private func lowerUnwrappedOptionalStatements (
10091006 wrappedType : BridgeType ,
1010- unwrappedVar : String ,
1011- varPrefix : String
1007+ unwrappedVar : String
10121008 ) -> [ CodeBlockItemSyntax ] {
10131009 switch wrappedType {
10141010 case . jsObject ( _? ) :
0 commit comments