some code for const processing

This commit is contained in:
hyunghwan.chung 2019-09-29 14:54:50 +00:00
parent 19d480719e
commit 3559e5fa0e

View File

@ -3869,7 +3869,7 @@ if super is variable-nonpointer, no instance variable is allowed.
{ {
/* this part is to remember the variable access type that indicates /* this part is to remember the variable access type that indicates
* whether to generate a getter method and a setter method */ * whether to generate a getter method and a setter method */
if (set_class_level_variable_initv (moo, dcl_type, cc->var[dcl_type].count - 1, MOO_NULL, varacc_type) <= -1) return -1; if (set_class_level_variable_initv(moo, dcl_type, cc->var[dcl_type].count - 1, MOO_NULL, varacc_type) <= -1) return -1;
} }
} }
else if (TOKEN_TYPE(moo) == MOO_IOTOK_COMMA || TOKEN_TYPE(moo) == MOO_IOTOK_EOF || TOKEN_TYPE(moo) == MOO_IOTOK_PERIOD) else if (TOKEN_TYPE(moo) == MOO_IOTOK_COMMA || TOKEN_TYPE(moo) == MOO_IOTOK_EOF || TOKEN_TYPE(moo) == MOO_IOTOK_PERIOD)
@ -4023,7 +4023,33 @@ static int compile_class_level_consts (moo_t* moo)
{ {
if (TOKEN_TYPE(moo) == MOO_IOTOK_IDENT) if (TOKEN_TYPE(moo) == MOO_IOTOK_IDENT)
{ {
/* TODO */ /* TODO: */
#if 0
if (add_class_level_const(moo, TOKEN_NAME(moo), TOKEN_LOC(moo)) <= -1) return -1;
GET_TOKEN (moo);
if (TOKEN_TYPE(moo) == MOO_IOTOK_ASSIGN)
{
moo_oop_t lit;
GET_TOKEN (moo);
/* only a single literal token is allowed as a value for now.
* TODO: extend to support simple constant expression */
lit = token_to_literal(moo, 1);
if (!lit) return -1;
if (set_class_level_const_value(moo, cc->_const.count - 1, lit) <= -1) return -1;
GET_TOKEN (moo);
}
else
{
moo_setsynerr (moo, MOO_SYNERR_ASSIGN, TOKEN_LOC(moo), TOKEN_NAME(moo));
return -1;
}
#endif
} }
else if (TOKEN_TYPE(moo) == MOO_IOTOK_COMMA || TOKEN_TYPE(moo) == MOO_IOTOK_EOF || TOKEN_TYPE(moo) == MOO_IOTOK_PERIOD) else if (TOKEN_TYPE(moo) == MOO_IOTOK_COMMA || TOKEN_TYPE(moo) == MOO_IOTOK_EOF || TOKEN_TYPE(moo) == MOO_IOTOK_PERIOD)
{ {