EAPI Eina_Bool eolian_constructor_is_optional(const Eolian_Constructor *ctor);
/*
+ * @brief Checks if a constructor is tagged as a constructor parameter.
+ *
+ * @param[in] ctor the handle of the constructor
+ * @return EINA_TRUE if a constructor parameter, EINA_FALSE if not (or if input is NULL).
+ *
+ * @ingroup Eolian
+ */
+EAPI Eina_Bool eolian_constructor_is_ctor_param(const Eolian_Constructor *ctor);
+
+/*
* @brief Get an iterator to the constructing functions defined in a class.
*
* @param[in] klass the class.
EINA_SAFETY_ON_NULL_RETURN_VAL(ctor, EINA_FALSE);
return ctor->is_optional;
}
+
+EAPI Eina_Bool
+eolian_constructor_is_ctor_param(const Eolian_Constructor *ctor)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ctor, EINA_FALSE);
+ return ctor->is_ctor_param;
+}
KW(function), \
KW(__undefined_type), \
\
- KW(true), KW(false), KW(null)
+ KW(true), KW(false), KW(null), KWAT(ctor_param)
/* "regular" keyword and @ prefixed keyword */
#define KW(x) KW_##x
ls->klass->base.name,
ls->t.value.s);
eo_lexer_get(ls);
- if (ls->t.kw == KW_at_optional)
+ while (ls->t.kw == KW_at_optional || ls->t.kw == KW_at_ctor_param)
{
+ if (ls->t.kw == KW_at_optional)
+ {
+ ctor->is_optional = EINA_TRUE;
+ }
+ if (ls->t.kw == KW_at_ctor_param)
+ {
+ ctor->is_ctor_param = EINA_TRUE;
+ }
eo_lexer_get(ls);
- ctor->is_optional = EINA_TRUE;
}
check_next(ls, ';');
return;
if (ls->t.token != '.') break;
eo_lexer_get(ls);
}
- if (ls->t.kw == KW_at_optional)
+ while (ls->t.kw == KW_at_optional || ls->t.kw == KW_at_ctor_param)
{
+ if (ls->t.kw == KW_at_optional)
+ {
+ ctor->is_optional = EINA_TRUE;
+ }
+ if (ls->t.kw == KW_at_ctor_param)
+ {
+ ctor->is_ctor_param = EINA_TRUE;
+ }
eo_lexer_get(ls);
- ctor->is_optional = EINA_TRUE;
}
check_next(ls, ';');
ctor->base.name = eina_stringshare_add(eina_strbuf_string_get(buf));
Eolian_Object base;
const Eolian_Class *klass;
Eina_Bool is_optional: 1;
+ Eina_Bool is_ctor_param : 1;
};
struct _Eolian_Event
}
custom_constructor_2 {
}
+ custom_constructor_3 {
+ params {
+ @in z: int;
+ }
+ }
}
implements {
class.constructor;
constructors {
.custom_constructor_1;
.custom_constructor_2 @optional;
+ .custom_constructor_3 @ctor_param;
}
}
fail_if(!(eina_iterator_next(iter, (void**)&impl)));
fail_if(!(eina_iterator_next(iter, (void**)&impl)));
fail_if(!(eina_iterator_next(iter, (void**)&impl)));
+ fail_if(!(eina_iterator_next(iter, (void**)&impl)));
fail_if(!(impl_class = eolian_implement_class_get(impl)));
fail_if(!(impl_func = eolian_implement_function_get(impl, NULL)));
fail_if(impl_class != base);
fail_if(strcmp(eolian_function_name_get(impl_func), "custom_constructor_2"));
fail_if(!eolian_function_is_constructor(impl_func, class));
fail_if(eolian_function_is_constructor(impl_func, base));
+ fail_if(!(eina_iterator_next(iter, (void**)&ctor)));
+ fail_if(!eolian_constructor_is_ctor_param(ctor));
+ fail_if(!(impl_class = eolian_constructor_class_get(ctor)));
+ fail_if(!(impl_func = eolian_constructor_function_get(ctor)));
+ fail_if(impl_class != class);
+ fail_if(strcmp(eolian_function_name_get(impl_func), "custom_constructor_3"));
+ fail_if(!eolian_function_is_constructor(impl_func, class));
+ fail_if(eolian_function_is_constructor(impl_func, base));
fail_if(eina_iterator_next(iter, &dummy));
eina_iterator_free(iter);