[vala] codegen: allow integer-derived types as generic arguments
- From: Evan Nemerson <evann src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala] codegen: allow integer-derived types as generic arguments
- Date: Sun, 24 Jun 2012 19:24:18 +0000 (UTC)
commit 923a22c36ec39dd200e5d8bd8279f565e8e51a50
Author: Evan Nemerson <evan coeus-group com>
Date: Sun Jun 24 10:57:59 2012 -0700
codegen: allow integer-derived types as generic arguments
Fixes bug 677658.
codegen/valaccodebasemodule.vala | 46 ++++++++++++++++++++-----------------
1 files changed, 25 insertions(+), 21 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 7c4d28b..9102e70 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -4149,29 +4149,31 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
bool is_signed_integer_type_argument (DataType type_arg) {
var st = type_arg.data_type as Struct;
- if (type_arg.nullable) {
- return false;
- } else if (st == bool_type.data_type) {
+ if (type_arg is EnumValueType) {
return true;
- } else if (st == char_type.data_type) {
+ } else if (type_arg.nullable) {
+ return false;
+ } else if (st == null) {
+ return false;
+ } else if (st.is_subtype_of (bool_type.data_type)) {
return true;
- } else if (unichar_type != null && st == unichar_type.data_type) {
+ } else if (st.is_subtype_of (char_type.data_type)) {
return true;
- } else if (st == short_type.data_type) {
+ } else if (unichar_type != null && st.is_subtype_of (unichar_type.data_type)) {
return true;
- } else if (st == int_type.data_type) {
+ } else if (st.is_subtype_of (short_type.data_type)) {
return true;
- } else if (st == long_type.data_type) {
+ } else if (st.is_subtype_of (int_type.data_type)) {
return true;
- } else if (st == int8_type.data_type) {
+ } else if (st.is_subtype_of (long_type.data_type)) {
return true;
- } else if (st == int16_type.data_type) {
+ } else if (st.is_subtype_of (int8_type.data_type)) {
return true;
- } else if (st == int32_type.data_type) {
+ } else if (st.is_subtype_of (int16_type.data_type)) {
return true;
- } else if (st == gtype_type) {
+ } else if (st.is_subtype_of (int32_type.data_type)) {
return true;
- } else if (type_arg is EnumValueType) {
+ } else if (st.is_subtype_of (gtype_type)) {
return true;
} else {
return false;
@@ -4180,21 +4182,23 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
bool is_unsigned_integer_type_argument (DataType type_arg) {
var st = type_arg.data_type as Struct;
- if (type_arg.nullable) {
+ if (st == null) {
+ return false;
+ } else if (type_arg.nullable) {
return false;
- } else if (st == uchar_type.data_type) {
+ } else if (st.is_subtype_of (uchar_type.data_type)) {
return true;
- } else if (st == ushort_type.data_type) {
+ } else if (st.is_subtype_of (ushort_type.data_type)) {
return true;
- } else if (st == uint_type.data_type) {
+ } else if (st.is_subtype_of (uint_type.data_type)) {
return true;
- } else if (st == ulong_type.data_type) {
+ } else if (st.is_subtype_of (ulong_type.data_type)) {
return true;
- } else if (st == uint8_type.data_type) {
+ } else if (st.is_subtype_of (uint8_type.data_type)) {
return true;
- } else if (st == uint16_type.data_type) {
+ } else if (st.is_subtype_of (uint16_type.data_type)) {
return true;
- } else if (st == uint32_type.data_type) {
+ } else if (st.is_subtype_of (uint32_type.data_type)) {
return true;
} else {
return false;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]