eina_str_toupper(&p);
p = strncpy(env->lower_eo_prefix, eo_prefix, PATH_MAX - 1);
eina_str_tolower(&p);
+
+ /* classtype */
+ if (class) switch (eolian_class_type_get(class))
+ {
+ case EOLIAN_CLASS_REGULAR:
+ case EOLIAN_CLASS_ABSTRACT:
+ strcpy(env->lower_classtype, "class");
+ strcpy(env->upper_classtype, "CLASS");
+ break;
+ case EOLIAN_CLASS_MIXIN:
+ strcpy(env->lower_classtype, "mixin");
+ strcpy(env->upper_classtype, "MIXIN");
+ break;
+ case EOLIAN_CLASS_INTERFACE:
+ strcpy(env->lower_classtype, "interface");
+ strcpy(env->upper_classtype, "INTERFACE");
+ break;
+ default:
+ break;
+ }
}
void
eina_strbuf_replace_all(buf, "@#func", funcname);
eina_strbuf_replace_all(buf, "@#FUNC", tmp_func_env.upper_func);
}
+ eina_strbuf_replace_all(buf, "@#classtype", tmp_env.lower_classtype);
+ eina_strbuf_replace_all(buf, "@#CLASSTYPE", tmp_env.upper_classtype);
eina_strbuf_replace_all(buf, "@#Class", tmp_env.full_classname);
eina_strbuf_replace_all(buf, "@#class", tmp_env.lower_classname);
eina_strbuf_replace_all(buf, "@#CLASS", tmp_env.upper_classname);
char upper_classname[PATH_MAX];
char lower_classname[PATH_MAX];
+
+ char upper_classtype[PATH_MAX];
+ char lower_classtype[PATH_MAX];
}_eolian_class_vars;
typedef struct
@#dtor_name\n\
};\n\
\n\
-EO_DEFINE_CLASS(@#class_class_get, &_@#class_class_desc, @#list_inheritNULL);\
+EO_DEFINE_CLASS(@#class_@#classtype_get, &_@#class_class_desc, @#list_inheritNULL);\
";
static const char
tmpl_eo_obj_header[] = "\
-#define @#CLASS_CLASS @#class_class_get()\n\
+#define @#CLASS_@#CLASSTYPE @#class_@#classtype_get()\n\
\n\
-const Eo_Class *@#class_class_get(void) EINA_CONST;\n\
+const Eo_Class *@#class_@#classtype_get(void) EINA_CONST;\n\
\n\
";
Eolian_Class inherit_class = eolian_class_find_by_name(inherit_name);
_eolian_class_vars inherit_env;
_class_env_create(inherit_class, NULL, &inherit_env);
- eina_strbuf_append_printf(tmpbuf, "%s_CLASS, ", inherit_env.upper_classname);
+ eina_strbuf_append_printf(tmpbuf, "%s_%s, ", inherit_env.upper_classname,
+ inherit_env.upper_classtype);
}
if (eina_strbuf_length_get(tmpbuf) == 0) eina_strbuf_append(tmpbuf, "NULL, ");
if (impl_desc && ftype == EOLIAN_CTOR)
{
eina_strbuf_append_printf(super_invok,
- " eo_do_super(obj, %s_CLASS, %s_%s(%s);\n",
- class_env.upper_eo_prefix,
+ " eo_do_super(obj, %s_%s, %s_%s(%s);\n",
+ class_env.upper_eo_prefix, class_env.upper_classtype,
impl_env.lower_classname, eolian_function_name_get(foo),
eina_strbuf_string_get(short_params));
}
inline std::string
class_eo_name(Eolian_Class const& klass)
{
- std::string s = class_full_name(klass) + "_CLASS";
+ std::string suffix;
+ switch (eolian_class_type_get(klass))
+ {
+ case EOLIAN_CLASS_REGULAR:
+ case EOLIAN_CLASS_ABSTRACT:
+ suffix = "CLASS";
+ break;
+ case EOLIAN_CLASS_MIXIN:
+ suffix = "MIXIN";
+ break;
+ case EOLIAN_CLASS_INTERFACE:
+ suffix = "INTERFACE";
+ break;
+ default:
+ break;
+ }
+ std::string s = class_full_name(klass) + "_" + suffix;
std::transform(s.begin(), s.end(), s.begin(),
[](int c)
{
#include "canvas/evas_zoomable_interface.eo.h"
// Interface classes links
-#define EVAS_SMART_SIGNAL_INTERFACE EVAS_SIGNAL_INTERFACE_CLASS
-#define EVAS_SMART_CLICKABLE_INTERFACE EVAS_CLICKABLE_INTERFACE_CLASS
-#define EVAS_SMART_SCROLLABLE_INTERFACE EVAS_SCROLLABLE_INTERFACE_CLASS
-#define EVAS_SMART_DRAGGABLE_INTERFACE EVAS_DRAGGABLE_INTERFACE_CLASS
-#define EVAS_SMART_SELECTABLE_INTERFACE EVAS_SELECTABLE_INTERFACE_CLASS
-#define EVAS_SMART_ZOOMABLE_INTERFACE EVAS_ZOOMABLE_INTERFACE_CLASS
+#define EVAS_SMART_SIGNAL_INTERFACE EVAS_SIGNAL_INTERFACE_INTERFACE
+#define EVAS_SMART_CLICKABLE_INTERFACE EVAS_CLICKABLE_INTERFACE_INTERFACE
+#define EVAS_SMART_SCROLLABLE_INTERFACE EVAS_SCROLLABLE_INTERFACE_INTERFACE
+#define EVAS_SMART_DRAGGABLE_INTERFACE EVAS_DRAGGABLE_INTERFACE_INTERFACE
+#define EVAS_SMART_SELECTABLE_INTERFACE EVAS_SELECTABLE_INTERFACE_INTERFACE
+#define EVAS_SMART_ZOOMABLE_INTERFACE EVAS_ZOOMABLE_INTERFACE_INTERFACE
#include "canvas/evas_canvas.eo.h"