enhanced the compiler to auto-sense the use of comma in a byte array literal

This commit is contained in:
hyunghwan.chung 2017-12-20 16:40:04 +00:00
parent 4fe38f883c
commit f27856fa72
2 changed files with 40 additions and 3 deletions

View File

@ -166,7 +166,7 @@ class MyObject(Object)
outact := [:sck :state | outact := [:sck :state |
if (state) if (state)
{ {
sck writeBytes: #[ $h $e $l $l $o ]. sck writeBytes: #[ $h, $e, $l, $l, $o ].
} }
else else
{ {
@ -174,8 +174,6 @@ class MyObject(Object)
]. ].
conact := [:sck :state | conact := [:sck :state |
if (state) if (state)
{ {
'CONNECTED NOW.............' dump. 'CONNECTED NOW.............' dump.

View File

@ -4550,6 +4550,7 @@ static int read_byte_array_literal (moo_t* moo, moo_oop_t* xlit)
moo_ooi_t tmp; moo_ooi_t tmp;
moo_oop_t ba; moo_oop_t ba;
moo_oow_t saved_balit_count; moo_oow_t saved_balit_count;
int comma_used = -1; /* unknown */
saved_balit_count = moo->c->balit.count; saved_balit_count = moo->c->balit.count;
@ -4584,6 +4585,44 @@ static int read_byte_array_literal (moo_t* moo, moo_oop_t* xlit)
if (add_to_byte_array_literal_buffer(moo, tmp) <= -1) goto oops; if (add_to_byte_array_literal_buffer(moo, tmp) <= -1) goto oops;
GET_TOKEN_GOTO (moo, oops); GET_TOKEN_GOTO (moo, oops);
if (comma_used == -1)
{
/* check if a comma has been used after the first element */
if (TOKEN_TYPE(moo) == MOO_IOTOK_COMMA)
{
comma_used = 1;
GET_TOKEN_GOTO (moo, oops);
}
else
{
comma_used = 0;
}
}
else if (comma_used == 0)
{
/* a comma is not expected */
if (TOKEN_TYPE(moo) == MOO_IOTOK_COMMA)
{
break;
}
}
else if (comma_used == 1)
{
/* a comma is expected */
if (TOKEN_TYPE(moo) == MOO_IOTOK_RBRACK) break;
if (TOKEN_TYPE(moo) != MOO_IOTOK_COMMA)
{
set_syntax_error (moo, MOO_SYNERR_COMMA, TOKEN_LOC(moo), TOKEN_NAME(moo));
goto oops;
}
GET_TOKEN_GOTO (moo, oops);
if (TOKEN_TYPE(moo) == MOO_IOTOK_COMMA || TOKEN_TYPE(moo) == MOO_IOTOK_RBRACK)
{
set_syntax_error (moo, MOO_SYNERR_LITERAL, TOKEN_LOC(moo), TOKEN_NAME(moo));
goto oops;
}
}
} }
if (TOKEN_TYPE(moo) != MOO_IOTOK_RBRACK) if (TOKEN_TYPE(moo) != MOO_IOTOK_RBRACK)