Skip to content

Commit

Permalink
Fix: cast can accept unsupported types
Browse files Browse the repository at this point in the history
  • Loading branch information
positively-charged committed Jan 15, 2017
1 parent 11b61cf commit d80a902
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion src/parse/dec.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ static struct var* alloc_var( struct dec* dec );
static void finish_type_alias( struct parse* parse, struct dec* dec );
static void read_auto_instance_list( struct parse* parse, struct dec* dec );
static void read_foreach_var( struct parse* parse, struct dec* dec );
static bool is_cast_spec( struct parse* parse, int spec );
static void read_func( struct parse* parse, struct dec* dec );
static struct func* alloc_func( struct parse* parse, struct dec* dec );
static void read_func_param_list( struct parse* parse, struct func* func );
Expand Down Expand Up @@ -1830,7 +1831,8 @@ void p_read_paren_type( struct parse* parse, struct paren_reading* reading ) {
reading->func = func;
}
// Compound literal.
else if ( dec.static_qual || dec.dim || parse->tk == TK_BRACE_L ) {
else if ( dec.static_qual || dec.dim || parse->tk == TK_BRACE_L ||
! is_cast_spec( parse, dec.spec ) ) {
// Inializer.
dec.initz.pos = parse->tk_pos;
dec.initz.specified = true;
Expand All @@ -1853,6 +1855,19 @@ void p_read_paren_type( struct parse* parse, struct paren_reading* reading ) {
}
}

bool is_cast_spec( struct parse* parse, int spec ) {
switch ( spec ) {
case SPEC_RAW:
case SPEC_INT:
case SPEC_FIXED:
case SPEC_BOOL:
case SPEC_STR:
return true;
default:
return false;
}
}

void read_func( struct parse* parse, struct dec* dec ) {
read_name( parse, dec );
struct func* func = alloc_func( parse, dec );
Expand Down

0 comments on commit d80a902

Please sign in to comment.