forked from enlightenment/efl
eolian: Add some color to those warning messages
Note: This is not using eina_log, not entirely sure why, but this doesn't prevent us from adding some color.
This commit is contained in:
parent
1adb93b3e5
commit
c1d21cef89
|
@ -12,6 +12,7 @@ lib_eolian_libeolian_la_SOURCES = \
|
||||||
lib/eolian/eo_parser.c \
|
lib/eolian/eo_parser.c \
|
||||||
lib/eolian/eo_parser.h \
|
lib/eolian/eo_parser.h \
|
||||||
lib/eolian/eolian.c \
|
lib/eolian/eolian.c \
|
||||||
|
lib/eolian/eolian_priv.h \
|
||||||
lib/eolian/eolian_database.c \
|
lib/eolian/eolian_database.c \
|
||||||
lib/eolian/eolian_database.h \
|
lib/eolian/eolian_database.h \
|
||||||
lib/eolian/database_class.c \
|
lib/eolian/database_class.c \
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include <Eina.h>
|
#include <Eina.h>
|
||||||
#include "eolian_database.h"
|
#include "eolian_database.h"
|
||||||
|
#include "eolian_priv.h"
|
||||||
|
|
||||||
EAPI Eina_Stringshare *
|
EAPI Eina_Stringshare *
|
||||||
eolian_class_file_get(const Eolian_Class *cl)
|
eolian_class_file_get(const Eolian_Class *cl)
|
||||||
|
@ -147,7 +148,7 @@ eolian_class_function_get_by_name(const Eolian_Class *cl, const char *func_name,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "eolian: function '%s' not found in class '%s'\n", func_name, cl->name);
|
_eolian_log("function '%s' not found in class '%s'", func_name, cl->name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,11 +6,12 @@
|
||||||
|
|
||||||
#include <Eina.h>
|
#include <Eina.h>
|
||||||
#include "eolian_database.h"
|
#include "eolian_database.h"
|
||||||
|
#include "eolian_priv.h"
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
node_error(const Eolian_Object *obj, const char *msg)
|
node_error(const Eolian_Object *obj, const char *msg)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "eolian:%s:%d:%d: %s\n", obj->file, obj->line, obj->column, msg);
|
_eolian_log_line(obj->file, obj->line, obj->column, "%s", msg);
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "eo_lexer.h"
|
#include "eo_lexer.h"
|
||||||
|
#include "eolian_priv.h"
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_validate(Eolian_Object *obj)
|
_validate(Eolian_Object *obj)
|
||||||
|
@ -33,8 +34,8 @@ _validate_docstr(Eina_Stringshare *str, const Eolian_Object *info)
|
||||||
if (eolian_doc_token_ref_get(NULL, &tok, NULL, NULL) == EOLIAN_DOC_REF_INVALID)
|
if (eolian_doc_token_ref_get(NULL, &tok, NULL, NULL) == EOLIAN_DOC_REF_INVALID)
|
||||||
{
|
{
|
||||||
char *refn = eolian_doc_token_text_get(&tok);
|
char *refn = eolian_doc_token_text_get(&tok);
|
||||||
fprintf(stderr, "eolian:%s:%d:%d: failed validating reference '%s'\n",
|
_eolian_log_line(info->file, info->line, info->column,
|
||||||
info->file, info->line, info->column, refn);
|
"failed validating reference '%s'", refn);
|
||||||
free(refn);
|
free(refn);
|
||||||
ret = EINA_FALSE;
|
ret = EINA_FALSE;
|
||||||
break;
|
break;
|
||||||
|
@ -98,7 +99,7 @@ _ef_map_cb(const Eina_Hash *hash EINA_UNUSED, const void *key EINA_UNUSED,
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_obj_error(const Eolian_Object *o, const char *msg)
|
_obj_error(const Eolian_Object *o, const char *msg)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "eolian:%s:%d:%d: %s\n", o->file, o->line, o->column, msg);
|
_eolian_log_line(o->file, o->line, o->column, "%s", msg);
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#include "eo_lexer.h"
|
#include "eo_lexer.h"
|
||||||
|
#include "eolian_priv.h"
|
||||||
|
|
||||||
static int lastbytes = 0;
|
static int lastbytes = 0;
|
||||||
|
|
||||||
|
@ -107,8 +108,8 @@ throw(Eo_Lexer *ls, const char *fmt, ...)
|
||||||
for (i = 0; i < ls->column; ++i)
|
for (i = 0; i < ls->column; ++i)
|
||||||
eina_strbuf_append_char(buf, ' ');
|
eina_strbuf_append_char(buf, ' ');
|
||||||
eina_strbuf_append(buf, "^\n");
|
eina_strbuf_append(buf, "^\n");
|
||||||
fprintf(stderr, "eolian:%s:%d:%d: %s\n", ls->source, ls->line_number,
|
_eolian_log_line(ls->source, ls->line_number, ls->column,
|
||||||
ls->column, eina_strbuf_string_get(buf));
|
"%s", eina_strbuf_string_get(buf));
|
||||||
eina_strbuf_free(buf);
|
eina_strbuf_free(buf);
|
||||||
longjmp(ls->err_jmp, EINA_TRUE);
|
longjmp(ls->err_jmp, EINA_TRUE);
|
||||||
}
|
}
|
||||||
|
@ -1018,7 +1019,7 @@ eo_lexer_set_input(Eo_Lexer *ls, const char *source)
|
||||||
Eina_File *f = eina_file_open(source, EINA_FALSE);
|
Eina_File *f = eina_file_open(source, EINA_FALSE);
|
||||||
if (!f)
|
if (!f)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "eolian: %s\n", strerror(errno));
|
_eolian_log("%s", strerror(errno));
|
||||||
longjmp(ls->err_jmp, EINA_TRUE);
|
longjmp(ls->err_jmp, EINA_TRUE);
|
||||||
}
|
}
|
||||||
ls->lookahead.token = -1;
|
ls->lookahead.token = -1;
|
||||||
|
@ -1255,7 +1256,7 @@ eo_lexer_context_push(Eo_Lexer *ls)
|
||||||
Lexer_Ctx *ctx = malloc(sizeof(Lexer_Ctx));
|
Lexer_Ctx *ctx = malloc(sizeof(Lexer_Ctx));
|
||||||
if (!ctx)
|
if (!ctx)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "eolian: out of memory pushing context\n");
|
_eolian_log("out of memory pushing context");
|
||||||
longjmp(ls->err_jmp, EINA_TRUE);
|
longjmp(ls->err_jmp, EINA_TRUE);
|
||||||
}
|
}
|
||||||
ctx->line = ls->line_number;
|
ctx->line = ls->line_number;
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "eo_parser.h"
|
#include "eo_parser.h"
|
||||||
|
#include "eolian_priv.h"
|
||||||
|
|
||||||
#define CASE_LOCK(ls, var, msg) \
|
#define CASE_LOCK(ls, var, msg) \
|
||||||
if (has_##var) \
|
if (has_##var) \
|
||||||
|
@ -1118,9 +1119,9 @@ parse_accessor:
|
||||||
{
|
{
|
||||||
if (getenv("EOLIAN_PROPERTY_DOC_WARN"))
|
if (getenv("EOLIAN_PROPERTY_DOC_WARN"))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "eolian:%s:%d:%d: %s doc without property "
|
_eolian_log_line(prop->base.file, line, col,
|
||||||
"doc for '%s.%s'\n",
|
"%s doc without property doc for '%s.%s'",
|
||||||
prop->base.file, line, col, is_get ? "getter" : "setter",
|
is_get ? "getter" : "setter",
|
||||||
ls->tmp.kls->full_name, prop->name);
|
ls->tmp.kls->full_name, prop->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2257,11 +2258,8 @@ _get_impl_class(const Eolian_Class *cl, const char *cln)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
#define _eo_parser_log(_base, ...) \
|
||||||
_print_linecol(const Eolian_Object *base)
|
_eolian_log_line((_base)->file, (_base)->line, (_base)->column, __VA_ARGS__)
|
||||||
{
|
|
||||||
fprintf(stderr, "eolian:%s:%d:%d: ", base->file, base->line, base->column);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl)
|
_db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl)
|
||||||
|
@ -2290,8 +2288,7 @@ _db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl)
|
||||||
const Eolian_Class *tcl = _get_impl_class(cl, clname);
|
const Eolian_Class *tcl = _get_impl_class(cl, clname);
|
||||||
if (!tcl)
|
if (!tcl)
|
||||||
{
|
{
|
||||||
_print_linecol(&impl->base);
|
_eo_parser_log(&impl->base, "class '%s' not found within the inheritance tree of '%s'",
|
||||||
fprintf(stderr, "class '%s' not found within the inheritance tree of '%s'\n",
|
|
||||||
clname, cl->full_name);
|
clname, cl->full_name);
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
@ -2301,8 +2298,7 @@ _db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl)
|
||||||
const Eolian_Function *fid = eolian_class_function_get_by_name(tcl, fnname, EOLIAN_UNRESOLVED);
|
const Eolian_Function *fid = eolian_class_function_get_by_name(tcl, fnname, EOLIAN_UNRESOLVED);
|
||||||
if (!fid)
|
if (!fid)
|
||||||
{
|
{
|
||||||
_print_linecol(&impl->base);
|
_eo_parser_log(&impl->base, "function '%s' not known in class '%s'", fnname, clname);
|
||||||
fprintf(stderr, "function '%s' not known in class '%s'\n", fnname, clname);
|
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2316,8 +2312,7 @@ _db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl)
|
||||||
/* property */
|
/* property */
|
||||||
if (aftype != EOLIAN_PROPERTY)
|
if (aftype != EOLIAN_PROPERTY)
|
||||||
{
|
{
|
||||||
_print_linecol(&impl->base);
|
_eo_parser_log(&impl->base, "function '%s' is not a complete property", fnname);
|
||||||
fprintf(stderr, "function '%s' is not a complete property", fnname);
|
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
auto_empty = auto_empty && (impl->set_auto || impl->set_empty);
|
auto_empty = auto_empty && (impl->set_auto || impl->set_empty);
|
||||||
|
@ -2327,8 +2322,7 @@ _db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl)
|
||||||
/* setter */
|
/* setter */
|
||||||
if ((aftype != EOLIAN_PROP_SET) && (aftype != EOLIAN_PROPERTY))
|
if ((aftype != EOLIAN_PROP_SET) && (aftype != EOLIAN_PROPERTY))
|
||||||
{
|
{
|
||||||
_print_linecol(&impl->base);
|
_eo_parser_log(&impl->base, "function '%s' doesn't have a setter", fnname);
|
||||||
fprintf(stderr, "function '%s' doesn't have a setter\n", fnname);
|
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
auto_empty = (impl->set_auto || impl->set_empty);
|
auto_empty = (impl->set_auto || impl->set_empty);
|
||||||
|
@ -2338,15 +2332,13 @@ _db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl)
|
||||||
/* getter */
|
/* getter */
|
||||||
if ((aftype != EOLIAN_PROP_GET) && (aftype != EOLIAN_PROPERTY))
|
if ((aftype != EOLIAN_PROP_GET) && (aftype != EOLIAN_PROPERTY))
|
||||||
{
|
{
|
||||||
_print_linecol(&impl->base);
|
_eo_parser_log(&impl->base, "function '%s' doesn't have a getter", fnname);
|
||||||
fprintf(stderr, "function '%s' doesn't have a getter\n", fnname);
|
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (aftype != EOLIAN_METHOD)
|
else if (aftype != EOLIAN_METHOD)
|
||||||
{
|
{
|
||||||
_print_linecol(&impl->base);
|
_eo_parser_log(&impl->base, "function '%s' is not a method", fnname);
|
||||||
fprintf(stderr, "function '%s' is not a method\n", fnname);
|
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2355,8 +2347,7 @@ _db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl)
|
||||||
/* only allow explicit implements from other classes, besides auto and
|
/* only allow explicit implements from other classes, besides auto and
|
||||||
* empty... also prevents pure virtuals from being implemented
|
* empty... also prevents pure virtuals from being implemented
|
||||||
*/
|
*/
|
||||||
_print_linecol(&impl->base);
|
_eo_parser_log(&impl->base, "invalid implement '%s'", impl->full_name);
|
||||||
fprintf(stderr, "invalid implement '%s'\n", impl->full_name);
|
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2380,8 +2371,7 @@ _db_fill_implements(Eolian_Class *cl)
|
||||||
Eina_Bool prop = (impl->is_prop_get || impl->is_prop_set);
|
Eina_Bool prop = (impl->is_prop_get || impl->is_prop_set);
|
||||||
if (eina_hash_find(prop ? pth : th, impl->full_name))
|
if (eina_hash_find(prop ? pth : th, impl->full_name))
|
||||||
{
|
{
|
||||||
_print_linecol(&impl->base);
|
_eo_parser_log(&impl->base, "duplicate implement '%s'", impl->full_name);
|
||||||
fprintf(stderr, "duplicate implement '%s'\n", impl->full_name);
|
|
||||||
ret = EINA_FALSE;
|
ret = EINA_FALSE;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
@ -2422,8 +2412,7 @@ _db_fill_ctors(Eolian_Class *cl)
|
||||||
{
|
{
|
||||||
if (eina_hash_find(th, ctor->full_name))
|
if (eina_hash_find(th, ctor->full_name))
|
||||||
{
|
{
|
||||||
_print_linecol(&ctor->base);
|
_eo_parser_log(&ctor->base, "duplicate ctor '%s'", ctor->full_name);
|
||||||
fprintf(stderr, "duplicate ctor '%s'\n", ctor->full_name);
|
|
||||||
ret = EINA_FALSE;
|
ret = EINA_FALSE;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
@ -2439,9 +2428,8 @@ _db_fill_ctors(Eolian_Class *cl)
|
||||||
const Eolian_Class *tcl = _get_impl_class(cl, cnbuf);
|
const Eolian_Class *tcl = _get_impl_class(cl, cnbuf);
|
||||||
if (!tcl)
|
if (!tcl)
|
||||||
{
|
{
|
||||||
_print_linecol(&ctor->base);
|
_eo_parser_log(&ctor->base, "class '%s' not found within the inheritance tree of '%s'",
|
||||||
fprintf(stderr, "class '%s' not found within the inheritance "
|
cnbuf, cl->full_name);
|
||||||
"tree of '%s'\n", cnbuf, cl->full_name);
|
|
||||||
ret = EINA_FALSE;
|
ret = EINA_FALSE;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
@ -2449,8 +2437,7 @@ _db_fill_ctors(Eolian_Class *cl)
|
||||||
const Eolian_Function *cfunc = eolian_constructor_function_get(ctor);
|
const Eolian_Function *cfunc = eolian_constructor_function_get(ctor);
|
||||||
if (!cfunc)
|
if (!cfunc)
|
||||||
{
|
{
|
||||||
_print_linecol(&ctor->base);
|
_eo_parser_log(&ctor->base, "unable to find function '%s'", ctor->full_name);
|
||||||
fprintf(stderr, "unable to find function '%s'\n", ctor->full_name);
|
|
||||||
ret = EINA_FALSE;
|
ret = EINA_FALSE;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
@ -2474,7 +2461,7 @@ eo_parser_database_fill(const char *filename, Eina_Bool eot)
|
||||||
Eo_Lexer *ls = eo_lexer_new(filename);
|
Eo_Lexer *ls = eo_lexer_new(filename);
|
||||||
if (!ls)
|
if (!ls)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "eolian: unable to create lexer for file '%s'\n", filename);
|
_eolian_log("unable to create lexer for file '%s'", filename);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2491,7 +2478,7 @@ eo_parser_database_fill(const char *filename, Eina_Bool eot)
|
||||||
|
|
||||||
if (!(cl = ls->tmp.kls))
|
if (!(cl = ls->tmp.kls))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "eolian: no class for file '%s'\n", filename);
|
_eolian_log("eolian: no class for file '%s'", filename);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
ls->tmp.kls = NULL;
|
ls->tmp.kls = NULL;
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include <Eina.h>
|
#include <Eina.h>
|
||||||
#include "eo_parser.h"
|
#include "eo_parser.h"
|
||||||
#include "eolian_database.h"
|
#include "eolian_database.h"
|
||||||
|
#include "eolian_priv.h"
|
||||||
|
|
||||||
Eina_Hash *_classes = NULL;
|
Eina_Hash *_classes = NULL;
|
||||||
Eina_Hash *_aliases = NULL;
|
Eina_Hash *_aliases = NULL;
|
||||||
|
@ -675,7 +676,7 @@ _eolian_file_parse_nodep(const char *filepath)
|
||||||
is_eo = eina_str_has_suffix(filepath, EO_SUFFIX);
|
is_eo = eina_str_has_suffix(filepath, EO_SUFFIX);
|
||||||
if (!is_eo && !eina_str_has_suffix(filepath, EOT_SUFFIX))
|
if (!is_eo && !eina_str_has_suffix(filepath, EOT_SUFFIX))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "eolian: file '%s' doesn't have a correct extension\n", filepath);
|
_eolian_log("file '%s' doesn't have a correct extension", filepath);
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
if (!(eopath = eina_hash_find(is_eo ? _filenames : _tfilenames, filepath)))
|
if (!(eopath = eina_hash_find(is_eo ? _filenames : _tfilenames, filepath)))
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
#ifndef EOLIAN_PRIV_H
|
||||||
|
#define EOLIAN_PRIV_H
|
||||||
|
|
||||||
|
#include <Eina.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
static inline void _eolian_log_line(const char *file, int line, int column, const char *fmt, ...) EINA_ARG_NONNULL(1, 4) EINA_PRINTF(4, 5);
|
||||||
|
static inline void _eolian_log(const char *fmt, ...) EINA_ARG_NONNULL(1) EINA_PRINTF(1, 2);
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
_eolian_log_line(const char *file, int line, int column, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
Eina_Strbuf *sb = eina_strbuf_new();
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
va_start(args, fmt);
|
||||||
|
eina_strbuf_append_vprintf(sb, fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
if (!eina_log_color_disable_get())
|
||||||
|
{
|
||||||
|
fprintf(stderr, EINA_COLOR_RED "eolian" EINA_COLOR_RESET ": "
|
||||||
|
EINA_COLOR_WHITE "%s" EINA_COLOR_RESET ":%d:%d: "
|
||||||
|
EINA_COLOR_ORANGE "%s\n" EINA_COLOR_RESET,
|
||||||
|
file, line, column, eina_strbuf_string_get(sb));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(stderr, "eolian: %s:%d:%d: %s\n", file, line, column,
|
||||||
|
eina_strbuf_string_get(sb));
|
||||||
|
}
|
||||||
|
eina_strbuf_free(sb);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
_eolian_log(const char *fmt, ...)
|
||||||
|
{
|
||||||
|
Eina_Strbuf *sb = eina_strbuf_new();
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
va_start(args, fmt);
|
||||||
|
eina_strbuf_append_vprintf(sb, fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
if (!eina_log_color_disable_get())
|
||||||
|
{
|
||||||
|
fprintf(stderr, EINA_COLOR_RED "eolian" EINA_COLOR_RESET ": "
|
||||||
|
EINA_COLOR_ORANGE "%s\n" EINA_COLOR_RESET,
|
||||||
|
eina_strbuf_string_get(sb));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(stderr, "eolian: %s\n", eina_strbuf_string_get(sb));
|
||||||
|
}
|
||||||
|
eina_strbuf_free(sb);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue