[Vala] Patches regarding switch(GType) and more



Dear Jurg,

These patches provide a foundation for non-constant switches. They solve
the GType issue mentioned by you.

The .vala files are tests. 
switch-type-ok.vala contains all constant GType labels. It compiles fine
into valid C code.
switch-type-fail.vala contains mixed constant and non-constant labels.
It yields an error 'non-constant case label is not yet supported'.
(0003) We can later support it, or remove the word 'yet'.

In 0003, member function is_constant is added to SwitchLabel; it is true
for the default label(the one without expression). member function
is_all_constant is added to SwitchSection and SwitchStatement.

New CCode attribute type_id_const is introduced(0004, 0005) to indicate
whether the type id is a C constant(Class.type_id_const,
Enum.type_id_const, Struct.type_id_const). The TypeOfExpression is also
a vala constant if the type id is a C constant(0006). 

It is perhaps more appropriate to use const type definitions (eg, const
class {} or const struct {}) for this purpose. Because in that way we
don't specifically depend on the GObject/CCode backend. That will be a
grammar change; I dare not do it.

MemberAccess to EnumValue weren't correctly deduced as Vala constant.
Patch 0002 fixes this issue.

0001 is the old patch to gobject-2.0 binding about IntegerType. I
remember some time ago we preferred not to inherit from GBoxed but
directly declare the structs. Why don't we do the same for GType: ulong
this time?

I am not sure if the work worth the effort: literally it only added
support for GType in switch statements. Nevertheless some of subtle
might be useful to improve the internal of the compiler.

Regards,

Yu

Attachment: 0001-GType-is-a-IntegerType-SimpleType.patch
Description: Text Data

Attachment: 0002-EnumValue-is-a-constant.patch
Description: Text Data

Attachment: 0003-Deduces-is_all_constant-in-switch-statements.patch
Description: Text Data

Attachment: 0004-Add-type_id_const-CCode-attribute.patch
Description: Text Data

Attachment: 0005-type_id_const-for-glib-internal-types.patch
Description: Text Data

Attachment: 0006-Deduce-whether-the-typeof-expression-is-const.patch
Description: Text Data

Attachment: switch-const.vala
Description: Text Data

Attachment: switch-enum.vala
Description: Text Data

Attachment: switch-int.vala
Description: Text Data

Attachment: switch-string.vala
Description: Text Data

Attachment: switch-type-fail.vala
Description: Text Data

Attachment: switch-type-ok.vala
Description: Text Data



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]