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

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
Marc-André Lureau 2021-08-31 19:59:01 +04:00
parent be2fbaefdd
commit 87ee8d03eb
2 changed files with 142 additions and 1 deletions

View File

@ -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

View File

@ -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 @@ make check
%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