From: Luca Bruno Date: Fri, 17 Jun 2011 13:38:00 +0000 (+0200) Subject: codegen: Fix equality expression with nullable enum values X-Git-Tag: 0.13.1~45 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=93916205264b4e90842f57675fb455c69a94fa8d;p=thirdparty%2Fvala.git codegen: Fix equality expression with nullable enum values Fixes bug 652781. --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 62a6d4584..5fbcc0c42 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -2425,8 +2425,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { return equal_func; } - private string generate_numeric_equal_function (Struct st) { - string equal_func = "_%sequal".printf (st.get_lower_case_cprefix ()); + private string generate_numeric_equal_function (TypeSymbol sym) { + string equal_func = "_%sequal".printf (sym.get_lower_case_cprefix ()); if (!add_wrapper (equal_func)) { // wrapper already defined @@ -2436,8 +2436,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { var function = new CCodeFunction (equal_func, "gboolean"); function.modifiers = CCodeModifiers.STATIC; - function.add_parameter (new CCodeParameter ("s1", "const " + st.get_cname () + "*")); - function.add_parameter (new CCodeParameter ("s2", "const " + st.get_cname () + "*")); + function.add_parameter (new CCodeParameter ("s1", "const " + sym.get_cname () + "*")); + function.add_parameter (new CCodeParameter ("s2", "const " + sym.get_cname () + "*")); push_function (function); @@ -4772,9 +4772,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { ccall.add_argument (cright); cleft = ccall; cright = new CCodeConstant ("TRUE"); - } else if ((left_type is IntegerType || left_type is FloatingType || left_type is BooleanType) && left_type.nullable && - (right_type is IntegerType || right_type is FloatingType || right_type is BooleanType) && right_type.nullable) { - var equalfunc = generate_numeric_equal_function ((Struct) left_type.data_type as Struct); + } else if ((left_type is IntegerType || left_type is FloatingType || left_type is BooleanType || left_type is EnumValueType) && left_type.nullable && + (right_type is IntegerType || right_type is FloatingType || right_type is BooleanType || right_type is EnumValueType) && right_type.nullable) { + var equalfunc = generate_numeric_equal_function ((TypeSymbol) left_type.data_type); var ccall = new CCodeFunctionCall (new CCodeIdentifier (equalfunc)); ccall.add_argument (cleft); ccall.add_argument (cright);