@@ -519,40 +519,40 @@ bool ps_visit_type_reference_subrange_max(ps_interpreter *interpreter, ps_interp
519519}
520520
521521bool ps_visit_type_reference_subrange_register_type_def (ps_interpreter * interpreter , ps_interpreter_mode mode ,
522- ps_value_type value_type , char * type_name ,
523- ps_symbol * * type_symbol )
522+ const char * type_name , ps_symbol * * type_symbol , ps_symbol * type ,
523+ const ps_type_definition_subrange * subrange )
524524{
525525 VISIT_BEGIN ("TYPE_REFERENCE_SUBRANGE" , "" )
526526
527527 ps_type_definition * type_def = NULL ;
528528 ps_identifier name = {0 };
529529
530530 // Create type definition for subrange
531- switch (value_type )
531+ switch (type -> value -> data . t -> type )
532532 {
533533 case PS_TYPE_CHAR :
534- type_def = ps_type_definition_create_subrange_char (c .min , c .max );
534+ type_def = ps_type_definition_create_subrange_char (subrange -> c .min , subrange -> c .max );
535535 if (type_name == NULL )
536536 snprintf (name , sizeof (name ) - 1 , "#SUBRANGE_C_%08X" , ps_symbol_get_auto_num ());
537537 else
538538 memcpy (name , type_name , PS_IDENTIFIER_SIZE );
539539 break ;
540540 case PS_TYPE_INTEGER :
541- type_def = ps_type_definition_create_subrange_integer (i .min , i .max );
541+ type_def = ps_type_definition_create_subrange_integer (subrange -> i .min , subrange -> i .max );
542542 if (type_name == NULL )
543543 snprintf (name , sizeof (name ) - 1 , "#SUBRANGE_I_%08X" , ps_symbol_get_auto_num ());
544544 else
545545 memcpy (name , type_name , PS_IDENTIFIER_SIZE );
546546 break ;
547547 case PS_TYPE_UNSIGNED :
548- type_def = ps_type_definition_create_subrange_unsigned (u .min , u .max );
548+ type_def = ps_type_definition_create_subrange_unsigned (subrange -> u .min , subrange -> u .max );
549549 if (type_name == NULL )
550550 snprintf (name , sizeof (name ) - 1 , "#SUBRANGE_U_%08X" , ps_symbol_get_auto_num ());
551551 else
552552 memcpy (name , type_name , PS_IDENTIFIER_SIZE );
553553 break ;
554554 case PS_TYPE_ENUM :
555- type_def = ps_type_definition_create_subrange_enum (min_value . type , e .min , e .max );
555+ type_def = ps_type_definition_create_subrange_enum (type , subrange -> e .min , subrange -> e .max );
556556 if (type_name == NULL )
557557 snprintf (name , sizeof (name ) - 1 , "#SUBRANGE_E_%08X" , ps_symbol_get_auto_num ());
558558 else
@@ -582,23 +582,24 @@ bool ps_visit_type_reference_subrange(ps_interpreter *interpreter, ps_interprete
582582 ps_value_type min_base = PS_TYPE_NONE ;
583583 ps_value_type max_base = PS_TYPE_NONE ;
584584
585- // Parse min value of subrange as a constant expression
585+ // *** Parse min value of subrange as a constant expression
586586 if (!ps_visit_type_reference_subrange_min (interpreter , mode , & min_value , & min_base , & subrange ))
587- TRACE_ERROR ("MIN2 " )
588- // Parse '..'
587+ TRACE_ERROR ("MIN " )
588+ // *** Parse '..'
589589 EXPECT_TOKEN (PS_TOKEN_RANGE )
590590 READ_NEXT_TOKEN
591- // Parse max value of subrange as a constant expression
591+ // *** Parse max value of subrange as a constant expression
592592 if (!ps_visit_type_reference_subrange_max (interpreter , mode , & tmp_value , & max_base , & subrange ))
593- TRACE_ERROR ("MAX2" )
593+ TRACE_ERROR ("MAX" )
594+ // *** Copy value to max with same type as min
594595 max_value .type = min_value .type ;
595596 if (!ps_interpreter_copy_value (interpreter , & tmp_value , & max_value ))
596597 {
597598 ps_interpreter_set_message (interpreter , "Min and max value of subrange type mismatch: %s %s" ,
598599 min_value .type -> name , max_value .type -> name );
599- TRACE_ERROR ("COPY " )
600+ TRACE_ERROR ("COPY_MAX " )
600601 }
601- // Check that subrange min is less than max
602+ // *** Check that subrange min is less than max
602603 if ((max_base == PS_TYPE_CHAR && subrange .c .max <= subrange .c .min ) ||
603604 (max_base == PS_TYPE_INTEGER && subrange .i .max <= subrange .i .min ) ||
604605 (max_base == PS_TYPE_UNSIGNED && subrange .u .max <= subrange .u .min ))
@@ -612,9 +613,10 @@ bool ps_visit_type_reference_subrange(ps_interpreter *interpreter, ps_interprete
612613 }
613614 else
614615 RETURN_ERROR (PS_ERROR_UNEXPECTED_TYPE )
615- // Register subrange
616- if (!ps_visit_type_reference_subrange_register_type_def (interpreter , mode , min_base , type_name , type_symbol ))
617- TRACE_ERROR ("TYPE_DEF" )
616+ // *** Register subrange
617+ if (!ps_visit_type_reference_subrange_register_type_def (interpreter , mode , type_name , type_symbol , min_value .type ,
618+ & subrange ))
619+ TRACE_ERROR ("TYPE_DEF_SUBRANGE" )
618620
619621 VISIT_END ("OK" )
620622}
0 commit comments