forked from enlightenment/efl
eolian: unary expr eval for floats and add a signed number mask
This adds a new mask for all signed numbers (sint + float) and fixes unary expr evaluation for floats, as well as fixes eval error messages.
This commit is contained in:
parent
b4740389f9
commit
c813e94606
|
@ -109,6 +109,7 @@ ffi.cdef [[
|
||||||
EOLIAN_MASK_STRING = 1 << 4,
|
EOLIAN_MASK_STRING = 1 << 4,
|
||||||
EOLIAN_MASK_CHAR = 1 << 5,
|
EOLIAN_MASK_CHAR = 1 << 5,
|
||||||
EOLIAN_MASK_NULL = 1 << 6,
|
EOLIAN_MASK_NULL = 1 << 6,
|
||||||
|
EOLIAN_MASK_SIGNED = EOLIAN_MASK_SINT | EOLIAN_MASK_FLOAT,
|
||||||
EOLIAN_MASK_NUMBER = EOLIAN_MASK_INT | EOLIAN_MASK_FLOAT,
|
EOLIAN_MASK_NUMBER = EOLIAN_MASK_INT | EOLIAN_MASK_FLOAT,
|
||||||
EOLIAN_MASK_ALL = EOLIAN_MASK_NUMBER | EOLIAN_MASK_BOOL
|
EOLIAN_MASK_ALL = EOLIAN_MASK_NUMBER | EOLIAN_MASK_BOOL
|
||||||
| EOLIAN_MASK_STRING | EOLIAN_MASK_CHAR
|
| EOLIAN_MASK_STRING | EOLIAN_MASK_CHAR
|
||||||
|
@ -1222,6 +1223,7 @@ M.expression_mask = {
|
||||||
local emask = M.expression_mask
|
local emask = M.expression_mask
|
||||||
|
|
||||||
emask.INT = bit.bor(emask.SINT , emask.UINT )
|
emask.INT = bit.bor(emask.SINT , emask.UINT )
|
||||||
|
emask.SIGNED = bit.bor(emask.SINT , emask.FLOAT)
|
||||||
emask.NUMBER = bit.bor(emask.INT , emask.FLOAT)
|
emask.NUMBER = bit.bor(emask.INT , emask.FLOAT)
|
||||||
emask.ALL = bit.bor(emask.NUMBER, emask.BOOL,
|
emask.ALL = bit.bor(emask.NUMBER, emask.BOOL,
|
||||||
emask.STRING, emask.CHAR, emask.NULL)
|
emask.STRING, emask.CHAR, emask.NULL)
|
||||||
|
|
|
@ -19,7 +19,7 @@ class Efl.Loop.Timer (Efl.Loop_User)
|
||||||
get {
|
get {
|
||||||
}
|
}
|
||||||
values {
|
values {
|
||||||
in: double(-1); [[The new interval in seconds]]
|
in: double(-1.0); [[The new interval in seconds]]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@property pending {
|
@property pending {
|
||||||
|
|
|
@ -254,6 +254,7 @@ typedef enum
|
||||||
EOLIAN_MASK_STRING = 1 << 4,
|
EOLIAN_MASK_STRING = 1 << 4,
|
||||||
EOLIAN_MASK_CHAR = 1 << 5,
|
EOLIAN_MASK_CHAR = 1 << 5,
|
||||||
EOLIAN_MASK_NULL = 1 << 6,
|
EOLIAN_MASK_NULL = 1 << 6,
|
||||||
|
EOLIAN_MASK_SIGNED = EOLIAN_MASK_SINT | EOLIAN_MASK_FLOAT,
|
||||||
EOLIAN_MASK_NUMBER = EOLIAN_MASK_INT | EOLIAN_MASK_FLOAT,
|
EOLIAN_MASK_NUMBER = EOLIAN_MASK_INT | EOLIAN_MASK_FLOAT,
|
||||||
EOLIAN_MASK_ALL = EOLIAN_MASK_NUMBER | EOLIAN_MASK_BOOL
|
EOLIAN_MASK_ALL = EOLIAN_MASK_NUMBER | EOLIAN_MASK_BOOL
|
||||||
| EOLIAN_MASK_STRING | EOLIAN_MASK_CHAR
|
| EOLIAN_MASK_STRING | EOLIAN_MASK_CHAR
|
||||||
|
|
|
@ -50,7 +50,7 @@ mask_to_str(int mask, char *buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
expr_type_error(const Eolian_Expression *expr, int type, int mask)
|
expr_type_error(const Eolian_Expression *expr, int mask, int type)
|
||||||
{
|
{
|
||||||
char buf[512];
|
char buf[512];
|
||||||
char ebuf[256];
|
char ebuf[256];
|
||||||
|
@ -153,9 +153,9 @@ promote(Eolian_Expression *a, Eolian_Expression *b)
|
||||||
assert(a->type && b->type);
|
assert(a->type && b->type);
|
||||||
/* not a number */
|
/* not a number */
|
||||||
if (a->type >= EOLIAN_EXPR_STRING)
|
if (a->type >= EOLIAN_EXPR_STRING)
|
||||||
return expr_type_error(a, expr_type_to_mask(a), EOLIAN_MASK_NUMBER);
|
return expr_type_error(a, EOLIAN_MASK_NUMBER, expr_type_to_mask(a));
|
||||||
if (b->type >= EOLIAN_EXPR_STRING)
|
if (b->type >= EOLIAN_EXPR_STRING)
|
||||||
return expr_type_error(b, expr_type_to_mask(b), EOLIAN_MASK_NUMBER);
|
return expr_type_error(b, EOLIAN_MASK_NUMBER, expr_type_to_mask(b));
|
||||||
/* no need for promotion */
|
/* no need for promotion */
|
||||||
if (a->type == b->type) return EINA_TRUE;
|
if (a->type == b->type) return EINA_TRUE;
|
||||||
/* if either operand is floating point, everything has to be */
|
/* if either operand is floating point, everything has to be */
|
||||||
|
@ -191,19 +191,19 @@ eval_unary(const Eolian_Expression *expr, Eolian_Expression_Mask mask,
|
||||||
case EOLIAN_UNOP_UNP:
|
case EOLIAN_UNOP_UNP:
|
||||||
{
|
{
|
||||||
/* no-op, but still typecheck */
|
/* no-op, but still typecheck */
|
||||||
if (!(mask & EOLIAN_MASK_SINT))
|
if (!(mask & EOLIAN_MASK_SIGNED))
|
||||||
return expr_type_error(expr, EOLIAN_MASK_SINT, mask);
|
return expr_type_error(expr, EOLIAN_MASK_SIGNED, mask);
|
||||||
|
|
||||||
return eval_exp(expr->expr, EOLIAN_MASK_SINT, out);
|
return eval_exp(expr->expr, EOLIAN_MASK_SIGNED, out);
|
||||||
}
|
}
|
||||||
case EOLIAN_UNOP_UNM:
|
case EOLIAN_UNOP_UNM:
|
||||||
{
|
{
|
||||||
Eolian_Expression exp;
|
Eolian_Expression exp;
|
||||||
|
|
||||||
if (!(mask & EOLIAN_MASK_SINT))
|
if (!(mask & EOLIAN_MASK_SIGNED))
|
||||||
return expr_type_error(expr, EOLIAN_MASK_SINT, mask);
|
return expr_type_error(expr, EOLIAN_MASK_SIGNED, mask);
|
||||||
|
|
||||||
if (!eval_exp(expr->expr, EOLIAN_MASK_SINT, &exp))
|
if (!eval_exp(expr->expr, EOLIAN_MASK_SIGNED, &exp))
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
|
|
||||||
switch (exp.type)
|
switch (exp.type)
|
||||||
|
@ -211,6 +211,8 @@ eval_unary(const Eolian_Expression *expr, Eolian_Expression_Mask mask,
|
||||||
case EOLIAN_EXPR_LLONG : exp.value.ll = -(exp.value.ll); break;
|
case EOLIAN_EXPR_LLONG : exp.value.ll = -(exp.value.ll); break;
|
||||||
case EOLIAN_EXPR_LONG : exp.value.l = -(exp.value.l ); break;
|
case EOLIAN_EXPR_LONG : exp.value.l = -(exp.value.l ); break;
|
||||||
case EOLIAN_EXPR_INT : exp.value.i = -(exp.value.i ); break;
|
case EOLIAN_EXPR_INT : exp.value.i = -(exp.value.i ); break;
|
||||||
|
case EOLIAN_EXPR_FLOAT : exp.value.f = -(exp.value.f ); break;
|
||||||
|
case EOLIAN_EXPR_DOUBLE: exp.value.d = -(exp.value.d ); break;
|
||||||
default: return EINA_FALSE;
|
default: return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ class Evas.Text (Efl.Canvas.Object, Efl.Text, Efl.Text.Properties, Efl.Canvas.Fi
|
||||||
get {
|
get {
|
||||||
}
|
}
|
||||||
values {
|
values {
|
||||||
ellipsis: double(-1); [[The ellipsis. Allowed values: -1.0 or 0.0-1.0]]
|
ellipsis: double(-1.0); [[The ellipsis. Allowed values: -1.0 or 0.0-1.0]]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@property bidi_delimiters {
|
@property bidi_delimiters {
|
||||||
|
|
Loading…
Reference in New Issue