@@ -817,56 +817,63 @@ static bool InterfaceGenerateHandlers(InterfaceRef self, CoderRef p_coder)
817817 }
818818 if (t_parameter -> mode == kParameterTypeIn || t_parameter -> mode == kParameterTypeInOut )
819819 {
820- CoderWriteLine (p_coder, " \t if (success)\n\t {" );
821- if (t_parameter -> default_value != nil)
820+ CoderWriteLine (p_coder, " \t if (success)" , k);
821+ CoderWriteLine (p_coder, " \t {" , k);
822+ if (t_parameter -> is_optional)
822823 {
823824 CoderWriteLine (p_coder, " \t\t if (argc > %d)" , k);
825+ if (t_parameter -> default_value != nil)
826+ CoderWrite (p_coder, " \t\t\t success = " );
827+ else
828+ CoderWrite (p_coder, " \t\t\t " );
824829 if (t_native_type != kNativeTypeEnum )
825- CoderWriteLine (p_coder, " \t\t\t success = fetch__%s(\" %s\" , argv[%d], param__%s);" , NativeTypeGetTag (t_native_type), t_name, k, t_name);
830+ CoderWriteLine (p_coder, " fetch__%s(\" %s\" , argv[%d], param__%s);" , NativeTypeGetTag (t_native_type), t_name, k, t_name);
826831 else
827- CoderWriteLine (p_coder, " \t\t\t success = fetchenum__%s(\" %s\" , argv[%d], param__%s);" , name_to_cname (t_parameter -> type), t_name, k, t_name);
828- CoderWriteLine (p_coder, " \t\t else" );
829- switch (t_native_type)
832+ CoderWriteLine (p_coder, " fetchenum__%s(\" %s\" , argv[%d], param__%s);" , name_to_cname (t_parameter -> type), t_name, k, t_name);
833+ if (t_parameter -> default_value != nil)
830834 {
831- case kNativeTypeBoolean :
832- CoderWriteLine (p_coder, " \t\t\t param__%s = %s;" , t_name, StringGetCStringPtr (NameGetString (t_parameter -> default_value)));
833- break ;
834- case kNativeTypeObjcData :
835- CoderWriteLine (p_coder, " \t\t\t success = false;" );
836- break ;
837- case kNativeTypeCString :
838- case kNativeTypeCData :
839- CoderWriteLine (p_coder, " \t\t\t success = default__%s(\" %s\" , param__%s);" , NativeTypeGetTag (t_native_type), StringGetCStringPtr (t_parameter -> default_value), t_name);
840- break ;
841- case kNativeTypeObjcString :
842- CoderWriteLine (p_coder, " \t\t\t param__%s = @\" %s\" ;" , t_name, StringGetCStringPtr (t_parameter -> default_value));
843- break ;
844- case kNativeTypeInteger :
845- CoderWriteLine (p_coder, " \t\t\t param__%s = %lld;" , t_name, NumberGetInteger (t_parameter -> default_value));
846- break ;
847- case kNativeTypeReal :
848- CoderWriteLine (p_coder, " \t\t\t param__%s = %.15g;" , t_name, NumberGetReal (t_parameter -> default_value));
849- break ;
850- case kNativeTypeEnum :
851- CoderWriteLine (p_coder, " \t\t\t param__%s = %lld;" , t_name, InterfaceResolveEnumElement (self, t_parameter -> type, t_parameter -> default_value));
852- break ;
853- default :
854- CoderWriteLine (p_coder, " \t\t\t success = false;" );
855- break ;
856- }
835+
836+ CoderWriteLine (p_coder, " \t\t if (!success)" , k);
837+ switch (t_native_type)
838+ {
839+ case kNativeTypeBoolean :
840+ CoderWriteLine (p_coder, " \t\t\t param__%s = %s;" , t_name, StringGetCStringPtr (NameGetString (t_parameter -> default_value)));
841+ break ;
842+ case kNativeTypeObjcData :
843+ CoderWriteLine (p_coder, " \t\t\t success = false;" );
844+ break ;
845+ case kNativeTypeCString :
846+ case kNativeTypeCData :
847+ CoderWriteLine (p_coder, " \t\t\t success = default__%s(\" %s\" , param__%s);" , NativeTypeGetTag (t_native_type), StringGetCStringPtr (t_parameter -> default_value), t_name);
848+ break ;
849+ case kNativeTypeObjcString :
850+ CoderWriteLine (p_coder, " \t\t\t param__%s = @\" %s\" ;" , t_name, StringGetCStringPtr (t_parameter -> default_value));
851+ break ;
852+ case kNativeTypeInteger :
853+ CoderWriteLine (p_coder, " \t\t\t param__%s = %lld;" , t_name, NumberGetInteger (t_parameter -> default_value));
854+ break ;
855+ case kNativeTypeReal :
856+ CoderWriteLine (p_coder, " \t\t\t param__%s = %.15g;" , t_name, NumberGetReal (t_parameter -> default_value));
857+ break ;
858+ case kNativeTypeEnum :
859+ CoderWriteLine (p_coder, " \t\t\t param__%s = %lld;" , t_name, InterfaceResolveEnumElement (self, t_parameter -> type, t_parameter -> default_value));
860+ break ;
861+ default :
862+ CoderWriteLine (p_coder, " \t\t\t success = false;" );
863+ break ;
864+ }
865+ }
857866 }
858867 else
859868 {
860869 if (t_native_type != kNativeTypeEnum )
861- CoderWriteLine (p_coder, " \t\t bool t_fetched = fetch__%s(\" %s\" , argv[%d], param__%s);" , NativeTypeGetTag (t_native_type), t_name, k, t_name);
870+ CoderWriteLine (p_coder, " \t\t success = fetch__%s(\" %s\" , argv[%d], param__%s);" , NativeTypeGetTag (t_native_type), t_name, k, t_name);
862871 else
863- CoderWriteLine (p_coder, " \t\t bool t_fetched = fetchenum__%s(\" %s\" , argv[%d], param__%s);" , name_to_cname (t_parameter -> type), t_name, k, t_name);
864- // optional parameters without a default value
865- if (!t_parameter->is_optional )
866- CoderWriteLine (p_coder, " \t\t success = t_fetched;" );
867- }
872+ CoderWriteLine (p_coder, " \t\t success = fetchenum__%s(\" %s\" , argv[%d], param__%s);" , name_to_cname (t_parameter -> type), t_name, k, t_name);
873+ }
868874 CoderWriteLine (p_coder, " \t }" );
869- }
875+
876+ }
870877 if ((t_native_type == kNativeTypeCString || t_native_type == kNativeTypeCData ) && t_parameter -> mode == kParameterTypeInOut )
871878 {
872879 CoderWriteLine (p_coder, " \t if (success)" );
0 commit comments