Вы должны использовать 2.0 для значения, а не 2. 2 - это целое число, 2.0 - это двойное число.Vala не может обеспечить безопасность типов для переменных методов, поэтому вы должны быть осторожны.
Что касается того, почему вы видите поведение, которое вы используете для существующих свойств, я думаю, это связано с тем,что 2 является (32-разрядным) целым числом, а 2,0 - (64-разрядным) двойным.Это немного упрощает вещи, и я не знаю, какой у вас опыт работы с C (вероятно, не так уж много, так как это ошибка, которую совершил бы кто-то из динамически типизированного языка), однако ... Clutter (ну, va_arg) ожидает двойного, поэтому он анализирует 64 бита данных, но вы предоставили только 32 бита, поэтому первые 32 бита следующего аргумента (NULL) включены.Теперь, когда он начинает пытаться проанализировать следующий аргумент, он начинается с неправильного расположения (32-битный аргумент), поэтому вы получаете остаток от NULL и часть любого мусора, который оказался в стеке ... Неудивительно,это не просто 32-битные 0, поэтому, когда Clutter проверяет, является ли значение, которое он только что прочитал, == NULL, это не так, и Clutter думает, что ему дан указатель на массив символов с нулевым символом в конце (как строки представлены в C).Он считывает данные в этом месте, которое как раз и называется \ x83 \ xec \ u0014 \ x89 \ xc6e \ xa1 \ u000c, и проверяет, есть ли свойство с таким именем.Нет, поэтому он выдает сообщение об ошибке, которое вы видели.
Теперь, если вы переключитесь на использование свойства, которое не существует, Clutter проанализирует аргумент (имя свойства), обратите внимание, чтоон не существует (как это было со вторым свойством выше) и выдает ошибку.