@@ -898,7 +898,7 @@ private void GeneratePropertySetter<T>(T decl,
898898                NewLine ( ) ; 
899899                WriteOpenBraceAndIndent ( ) ; 
900900
901-                 this . GenerateMember ( @class ,  c =>  GenerateFunctionSetter ( c ,  property ) ,   true ) ; 
901+                 this . GenerateMember ( @class ,  c =>  GenerateFunctionSetter ( c ,  property ) ) ; 
902902            } 
903903            else  if  ( decl  is  Variable ) 
904904            { 
@@ -907,8 +907,7 @@ private void GeneratePropertySetter<T>(T decl,
907907                var  var  =  decl  as  Variable ; 
908908                this . GenerateMember ( @class ,  c =>  GenerateVariableSetter ( 
909909                    c  is  ClassTemplateSpecialization  ? 
910-                         c . Variables . First ( v =>  v . Name  ==  decl . Name )  :  var ) , 
911-                     true ) ; 
910+                         c . Variables . First ( v =>  v . Name  ==  decl . Name )  :  var ) ) ; 
912911            } 
913912            else  if  ( decl  is  Field ) 
914913            { 
@@ -925,7 +924,7 @@ c is ClassTemplateSpecialization ?
925924            PopBlock ( NewLineKind . BeforeNextBlock ) ; 
926925        } 
927926
928-         private  void  GenerateVariableSetter ( Variable  var ) 
927+         private  bool  GenerateVariableSetter ( Variable  var ) 
929928        { 
930929            string  ptr  =  GeneratePointerTo ( var ) ; 
931930
@@ -957,6 +956,8 @@ private void GenerateVariableSetter(Variable var)
957956
958957            if  ( ctx . HasCodeBlock ) 
959958                UnindentAndWriteCloseBrace ( ) ; 
959+ 
960+             return  true ; 
960961        } 
961962
962963        private  string  GeneratePointerTo ( Variable  var ) 
@@ -991,7 +992,7 @@ private string GeneratePointerTo(Variable var)
991992            return  ptr ; 
992993        } 
993994
994-         private  void  GenerateFunctionSetter ( Class  @class ,  Property  property ) 
995+         private  bool  GenerateFunctionSetter ( Class  @class ,  Property  property ) 
995996        { 
996997            var  actualProperty  =  GetActualProperty ( property ,  @class ) ; 
997998            if  ( actualProperty  ==  null ) 
@@ -1000,8 +1001,7 @@ private void GenerateFunctionSetter(Class @class, Property property)
10001001                    property . Name }  missing from explicit specialization {  
10011002                    @class . Visit ( TypePrinter ) } ."");" ) ; 
10021003
1003-                 AddBlock ( new  Block ( BlockKind . Unreachable ) ) ; 
1004-                 return ; 
1004+                 return  false ; 
10051005            } 
10061006            property  =  actualProperty ; 
10071007
@@ -1010,6 +1010,7 @@ private void GenerateFunctionSetter(Class @class, Property property)
10101010            else 
10111011                GenerateFunctionInProperty ( @class ,  property . SetMethod ,  actualProperty , 
10121012                    new  QualifiedType ( new  BuiltinType ( PrimitiveType . Void ) ) ) ; 
1013+             return  true ; 
10131014        } 
10141015
10151016        private  void  GenerateFieldSetter ( Field  field ,  Class  @class ,  QualifiedType  fieldType ) 
@@ -1283,7 +1284,7 @@ c is ClassTemplateSpecialization ?
12831284            PopBlock ( NewLineKind . BeforeNextBlock ) ; 
12841285        } 
12851286
1286-         private  void  GenerateVariableGetter ( Variable  var ) 
1287+         private  bool  GenerateVariableGetter ( Variable  var ) 
12871288        { 
12881289            string  ptr  =  GeneratePointerTo ( var ) ; 
12891290
@@ -1320,9 +1321,11 @@ private void GenerateVariableGetter(Variable var)
13201321
13211322            if  ( ctx . HasCodeBlock ) 
13221323                UnindentAndWriteCloseBrace ( ) ; 
1324+ 
1325+             return  true ; 
13231326        } 
13241327
1325-         private  void  GenerateFunctionGetter ( Class  @class ,  Property  property ) 
1328+         private  bool  GenerateFunctionGetter ( Class  @class ,  Property  property ) 
13261329        { 
13271330            var  actualProperty  =  GetActualProperty ( property ,  @class ) ; 
13281331            if  ( actualProperty  ==  null ) 
@@ -1331,8 +1334,7 @@ private void GenerateFunctionGetter(Class @class, Property property)
13311334                    property . Name }  missing from explicit specialization {  
13321335                    @class . Visit ( TypePrinter ) } ."");" ) ; 
13331336
1334-                 AddBlock ( new  Block ( BlockKind . Unreachable ) ) ; 
1335-                 return ; 
1337+                 return  false ; 
13361338            } 
13371339            QualifiedType  type  =  default ; 
13381340            if  ( actualProperty  !=  property  || 
@@ -1343,6 +1345,7 @@ private void GenerateFunctionGetter(Class @class, Property property)
13431345                type  =  property . QualifiedType ; 
13441346            } 
13451347            GenerateFunctionInProperty ( @class ,  actualProperty . GetMethod ,  actualProperty ,  type ) ; 
1348+             return  false ; 
13461349        } 
13471350
13481351        private  static   Property  GetActualProperty ( Property  property ,  Class  c ) 
@@ -2307,9 +2310,9 @@ private void GenerateDisposeMethods(Class @class)
23072310                    if  ( dtor . IsVirtual ) 
23082311                        this . GenerateMember ( @class ,  c =>  GenerateDestructorCall ( 
23092312                            c  is  ClassTemplateSpecialization  ? 
2310-                                 c . Methods . First ( m =>  m . InstantiatedFrom  ==  dtor )  :  dtor ) ,   true ) ; 
2313+                                 c . Methods . First ( m =>  m . InstantiatedFrom  ==  dtor )  :  dtor ) ) ; 
23112314                    else 
2312-                         this . GenerateMember ( @class ,  c =>  GenerateMethodBody ( c ,  dtor ) ,   true ) ; 
2315+                         this . GenerateMember ( @class ,  c =>  GenerateMethodBody ( c ,  dtor ) ) ; 
23132316                    if  ( @class . IsDependent  ||  dtor . IsVirtual ) 
23142317                        UnindentAndWriteCloseBrace ( ) ; 
23152318                    else 
@@ -2337,7 +2340,7 @@ c is ClassTemplateSpecialization ?
23372340            PopBlock ( NewLineKind . BeforeNextBlock ) ; 
23382341        } 
23392342
2340-         private  void  GenerateDestructorCall ( Method  dtor ) 
2343+         private  bool  GenerateDestructorCall ( Method  dtor ) 
23412344        { 
23422345            var  @class  =  ( Class )  dtor . Namespace ; 
23432346            GenerateVirtualFunctionCall ( dtor ,  true ) ; 
@@ -2349,6 +2352,7 @@ private void GenerateDestructorCall(Method dtor)
23492352                GenerateInternalFunctionCall ( dtor ) ; 
23502353                Unindent ( ) ; 
23512354            } 
2355+             return  true ; 
23522356        } 
23532357
23542358        private  void  GenerateNativeConstructor ( Class  @class ) 
@@ -2669,7 +2673,7 @@ public void GenerateMethod(Method method, Class @class)
26692673                var  isVoid  =  method . OriginalReturnType . Type . Desugar ( ) . IsPrimitiveType ( PrimitiveType . Void )  || 
26702674                    method . IsConstructor ; 
26712675                this . GenerateMember ( @class ,  c =>  GenerateMethodBody ( 
2672-                     c ,  method ,  method . OriginalReturnType ) ,   isVoid ) ; 
2676+                     c ,  method ,  method . OriginalReturnType ) ) ; 
26732677            } 
26742678
26752679            SkipImpl : 
@@ -2684,7 +2688,7 @@ public void GenerateMethod(Method method, Class @class)
26842688            PopBlock ( NewLineKind . BeforeNextBlock ) ; 
26852689        } 
26862690
2687-         private  void  GenerateMethodBody ( Class  @class ,  Method  method , 
2691+         private  bool  GenerateMethodBody ( Class  @class ,  Method  method , 
26882692            QualifiedType  returnType  =  default ( QualifiedType ) ) 
26892693        { 
26902694            var  specialization  =  @class  as  ClassTemplateSpecialization ; 
@@ -2698,17 +2702,15 @@ private void GenerateMethodBody(Class @class, Method method,
26982702                        method . Name }  missing from explicit specialization {  
26992703                        @class . Visit ( TypePrinter ) } ."");" ) ; 
27002704
2701-                     AddBlock ( new  Block ( BlockKind . Unreachable ) ) ; 
2702-                     return ; 
2705+                     return  false ; 
27032706                } 
27042707                if  ( specializedMethod . Ignore ) 
27052708                { 
27062709                    WriteLine ( $@ "throw new MissingMethodException(""Method { 
27072710                        method . Name }  ignored in specialization {  
27082711                        @class . Visit ( TypePrinter ) } ."");" ) ; 
27092712
2710-                     AddBlock ( new  Block ( BlockKind . Unreachable ) ) ; 
2711-                     return ; 
2713+                     return  false ; 
27122714                } 
27132715
27142716                method  =  specializedMethod ; 
@@ -2718,8 +2720,9 @@ private void GenerateMethodBody(Class @class, Method method,
27182720                if  ( method . IsConstructor ) 
27192721                { 
27202722                    GenerateClassConstructor ( method ,  @class ) ; 
2723+                     return  true ; 
27212724                } 
2722-                 else   if  ( method . IsOperator ) 
2725+                 if  ( method . IsOperator ) 
27232726                { 
27242727                    GenerateOperator ( method ,  returnType ) ; 
27252728                } 
@@ -2755,6 +2758,8 @@ private void GenerateMethodBody(Class @class, Method method,
27552758                    GenerateInternalFunctionCall ( method ) ; 
27562759                } 
27572760            } 
2761+ 
2762+             return  method . OriginalReturnType . Type . Desugar ( ) . IsPrimitiveType ( PrimitiveType . Void ) ; 
27582763        } 
27592764
27602765        private  string  OverloadParamNameWithDefValue ( Parameter  p ,  ref  int  index ) 
@@ -2843,12 +2848,13 @@ private void GenerateEqualsAndGetHashCode(Function method, Class @class)
28432848            } 
28442849        } 
28452850
2846-         private  void  GenerateGetHashCode ( Class  @class ) 
2851+         private  bool  GenerateGetHashCode ( Class  @class ) 
28472852        { 
28482853            WriteLine ( $ "if ({ Helpers . InstanceIdentifier }  == { TypePrinter . IntPtrType } .Zero)") ; 
28492854            WriteLineIndent ( $ "return { TypePrinter . IntPtrType } .Zero.GetHashCode();") ; 
28502855            WriteLine ( $@ "return (*({ TypePrinter . PrintNative ( @class ) } *) { 
28512856                Helpers . InstanceIdentifier } ).GetHashCode();" ) ; 
2857+             return  false ; 
28522858        } 
28532859
28542860        private  void  GenerateVirtualFunctionCall ( Method  method , 
0 commit comments