#2 Fix regression with class members access. Resolves: rhbz#1999471
Merged 2 years ago by kalev. Opened 2 years ago by elmarco.
rpms/ elmarco/vala rhbz-1999471  into  rawhide

@@ -0,0 +1,137 @@ 

+ From c0121583cee85656862516e689f8b63555a0ff20 Mon Sep 17 00:00:00 2001

+ From: Rico Tzschichholz <ricotz@ubuntu.com>

+ Date: Tue, 31 Aug 2021 16:28:05 +0200

+ Subject: [PATCH] codegen: Add missing cast to access base-class members in

+  class/static ctor

+ 

+ Regression of 9cbd53b8d79aa4c394ddf49e766f2c15fc476906

+ 

+ Fixes https://gitlab.gnome.org/GNOME/vala/issues/1221

+ ---

+  codegen/valaccodebasemodule.vala |  8 +++++++-

+  tests/objects/fields.c-expected  | 16 ++++++++++++++++

+  tests/objects/fields.vala        | 20 ++++++++++++++++++++

+  3 files changed, 43 insertions(+), 1 deletion(-)

+ 

+ diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala

+ index 54fc3e184..f7321b72a 100644

+ --- a/codegen/valaccodebasemodule.vala

+ +++ b/codegen/valaccodebasemodule.vala

+ @@ -2622,7 +2622,13 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {

+  			cast = call;

+  		} else {

+  			// Accessing the member from a static or class constructor

+ -			cast = new CCodeIdentifier ("klass");

+ +			if (current_class == cl) {

+ +				cast = new CCodeIdentifier ("klass");

+ +			} else {

+ +				call = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_class_type_function (cl)));

+ +				call.add_argument (new CCodeIdentifier ("klass"));

+ +				cast = call;

+ +			}

+  		}

+  		return cast;

+  	}

+ diff --git a/tests/objects/fields.c-expected b/tests/objects/fields.c-expected

+ index 6d7391968..03828580c 100644

+ --- a/tests/objects/fields.c-expected

+ +++ b/tests/objects/fields.c-expected

+ @@ -701,6 +701,10 @@ faz_base_init (FazClass * klass)

+  	_vala_assert (FAZ_GET_CLASS_PRIVATE (klass)->private_class_field == 42, "private_class_field == 42");

+  	FAZ_GET_CLASS_PRIVATE (klass)->private_class_field = 24;

+  	_vala_assert (FAZ_GET_CLASS_PRIVATE (klass)->private_class_field == 24, "private_class_field == 24");

+ +	_vala_assert (FOO_CLASS (klass)->public_base_class_field == 42, "public_base_class_field == 42");

+ +	FOO_CLASS (klass)->public_base_class_field = 24;

+ +	_vala_assert (FOO_CLASS (klass)->public_base_class_field == 24, "public_base_class_field == 24");

+ +	FOO_CLASS (klass)->public_base_class_field = 42;

+  }

+  

+  static void

+ @@ -722,6 +726,10 @@ faz_class_init (FazClass * klass,

+  	_vala_assert (FAZ_GET_CLASS_PRIVATE (klass)->private_class_field == 42, "private_class_field == 42");

+  	FAZ_GET_CLASS_PRIVATE (klass)->private_class_field = 24;

+  	_vala_assert (FAZ_GET_CLASS_PRIVATE (klass)->private_class_field == 24, "private_class_field == 24");

+ +	_vala_assert (FOO_CLASS (klass)->public_base_class_field == 42, "public_base_class_field == 42");

+ +	FOO_CLASS (klass)->public_base_class_field = 24;

+ +	_vala_assert (FOO_CLASS (klass)->public_base_class_field == 24, "public_base_class_field == 24");

+ +	FOO_CLASS (klass)->public_base_class_field = 42;

+  }

+  

+  static void

+ @@ -1000,6 +1008,10 @@ baz_base_init (BazClass * klass)

+  	_vala_assert (BAZ_GET_CLASS_PRIVATE (klass)->private_class_field == 42, "private_class_field == 42");

+  	BAZ_GET_CLASS_PRIVATE (klass)->private_class_field = 24;

+  	_vala_assert (BAZ_GET_CLASS_PRIVATE (klass)->private_class_field == 24, "private_class_field == 24");

+ +	_vala_assert (BAR_CLASS (klass)->public_base_class_field == 42, "public_base_class_field == 42");

+ +	BAR_CLASS (klass)->public_base_class_field = 24;

+ +	_vala_assert (BAR_CLASS (klass)->public_base_class_field == 24, "public_base_class_field == 24");

+ +	BAR_CLASS (klass)->public_base_class_field = 42;

+  }

+  

+  static void

+ @@ -1021,6 +1033,10 @@ baz_class_init (BazClass * klass,

+  	_vala_assert (BAZ_GET_CLASS_PRIVATE (klass)->private_class_field == 42, "private_class_field == 42");

+  	BAZ_GET_CLASS_PRIVATE (klass)->private_class_field = 24;

+  	_vala_assert (BAZ_GET_CLASS_PRIVATE (klass)->private_class_field == 24, "private_class_field == 24");

+ +	_vala_assert (BAR_CLASS (klass)->public_base_class_field == 42, "public_base_class_field == 42");

+ +	BAR_CLASS (klass)->public_base_class_field = 24;

+ +	_vala_assert (BAR_CLASS (klass)->public_base_class_field == 24, "public_base_class_field == 24");

+ +	BAR_CLASS (klass)->public_base_class_field = 42;

+  }

+  

+  static void

+ diff --git a/tests/objects/fields.vala b/tests/objects/fields.vala

+ index 0872045bb..e14572bd9 100644

+ --- a/tests/objects/fields.vala

+ +++ b/tests/objects/fields.vala

+ @@ -32,6 +32,11 @@ class Faz : Foo {

+  		assert (private_class_field == 42);

+  		private_class_field = 24;

+  		assert (private_class_field == 24);

+ +

+ +		assert (public_base_class_field == 42);

+ +		public_base_class_field = 24;

+ +		assert (public_base_class_field == 24);

+ +		public_base_class_field = 42;

+  	}

+  

+  	static construct {

+ @@ -42,6 +47,11 @@ class Faz : Foo {

+  		assert (private_class_field == 42);

+  		private_class_field = 24;

+  		assert (private_class_field == 24);

+ +

+ +		assert (public_base_class_field == 42);

+ +		public_base_class_field = 24;

+ +		assert (public_base_class_field == 24);

+ +		public_base_class_field = 42;

+  	}

+  

+  	public void action () {

+ @@ -132,6 +142,11 @@ class Baz : Bar {

+  		assert (private_class_field == 42);

+  		private_class_field = 24;

+  		assert (private_class_field == 24);

+ +

+ +		assert (public_base_class_field == 42);

+ +		public_base_class_field = 24;

+ +		assert (public_base_class_field == 24);

+ +		public_base_class_field = 42;

+  	}

+  

+  	static construct {

+ @@ -142,6 +157,11 @@ class Baz : Bar {

+  		assert (private_class_field == 42);

+  		private_class_field = 24;

+  		assert (private_class_field == 24);

+ +

+ +		assert (public_base_class_field == 42);

+ +		public_base_class_field = 24;

+ +		assert (public_base_class_field == 24);

+ +		public_base_class_field = 42;

+  	}

+  

+  	public void action () {

+ -- 

+ 2.33.0.113.g6c40894d24

+ 

file modified
+5 -1
@@ -3,13 +3,14 @@ 

  

  Name:           vala

  Version:        0.53.1

- Release:        1%{?dist}

+ Release:        2%{?dist}

  Summary:        A modern programming language for GNOME

  

  # Most files are LGPLv2.1+, curses.vapi is 2-clause BSD

  License:        LGPLv2+ and BSD

  URL:            https://wiki.gnome.org/Projects/Vala

  Source0:        https://download.gnome.org/sources/vala/0.53/vala-%{version}.tar.xz

+ Patch0001:      0001-codegen-Add-missing-cast-to-access-base-class-member.patch

  

  BuildRequires:  bison

  BuildRequires:  flex
@@ -191,6 +192,9 @@ 

  

  

  %changelog

+ * Tue Aug 31 2021 Marc-André Lureau <marcandre.lureau@redhat.com> - 0.53.1-2

+ - Fix regression with class members access. Resolves: rhbz#1999471

+ 

  * Mon Aug 23 2021 Kalev Lember <klember@redhat.com> - 0.53.1-1

  - Update to 0.53.1

  - Drop obsolete vala-tools virtual provide

no initial comment

also to be applied in f35, thanks
@kalev

Thanks a lot! I will cherry-pick to f35 too.

Pull-Request has been merged by kalev

2 years ago

Thanks! I went ahead and built it for both F35 and rawhide; https://bodhi.fedoraproject.org/updates/FEDORA-2021-f8c6366270 is the F35 update.