stage3/lvalue_check.cc
changeset 525 77bff42a025e
parent 524 52b18b3c7490
child 526 6e610449861a
equal deleted inserted replaced
524:52b18b3c7490 525:77bff42a025e
   152 	 * of the function's OUTPUT or IN_OUT parameters.
   152 	 * of the function's OUTPUT or IN_OUT parameters.
   153 	 */
   153 	 */
   154 	/* This may occur in function invocations, when passing values (possibly an expression) to one
   154 	/* This may occur in function invocations, when passing values (possibly an expression) to one
   155 	 * of the function's OUTPUT or IN_OUT parameters.
   155 	 * of the function's OUTPUT or IN_OUT parameters.
   156 	 */
   156 	 */
   157 	if ( (typeid( *lvalue ) == typeid( or_expression_c     )) ||
   157 	if ( 
   158 	     (typeid( *lvalue ) == typeid( xor_expression_c    )) ||
   158 	     /*********************/
   159 	     (typeid( *lvalue ) == typeid( and_expression_c    )) ||
   159 	     /* B 1.2 - Constants */
   160 	     (typeid( *lvalue ) == typeid( equ_expression_c    )) ||
   160 	     /*********************/
   161 	     (typeid( *lvalue ) == typeid( notequ_expression_c )) ||
   161 	     /******************************/
   162 	     (typeid( *lvalue ) == typeid( lt_expression_c     )) ||
   162 	     /* B 1.2.1 - Numeric Literals */
   163 	     (typeid( *lvalue ) == typeid( gt_expression_c     )) ||
   163 	     /******************************/
   164 	     (typeid( *lvalue ) == typeid( le_expression_c     )) ||
   164 	     (typeid( *lvalue ) == typeid( real_c                         )) ||
   165 	     (typeid( *lvalue ) == typeid( ge_expression_c     )) ||
   165 	     (typeid( *lvalue ) == typeid( integer_c                      )) ||
   166 	     (typeid( *lvalue ) == typeid( add_expression_c    )) ||
   166 	     (typeid( *lvalue ) == typeid( binary_integer_c               )) ||
   167 	     (typeid( *lvalue ) == typeid( sub_expression_c    )) ||
   167 	     (typeid( *lvalue ) == typeid( octal_integer_c                )) ||
   168 	     (typeid( *lvalue ) == typeid( mul_expression_c    )) ||
   168 	     (typeid( *lvalue ) == typeid( hex_integer_c                  )) ||
   169 	     (typeid( *lvalue ) == typeid( div_expression_c    )) ||
   169 	     (typeid( *lvalue ) == typeid( neg_real_c                     )) ||
   170 	     (typeid( *lvalue ) == typeid( mod_expression_c    )) ||
   170 	     (typeid( *lvalue ) == typeid( neg_integer_c                  )) ||
   171 	     (typeid( *lvalue ) == typeid( power_expression_c  )) ||
   171 	     (typeid( *lvalue ) == typeid( integer_literal_c              )) ||
   172 	     (typeid( *lvalue ) == typeid( neg_expression_c    )) ||
   172 	     (typeid( *lvalue ) == typeid( real_literal_c                 )) ||
   173 	     (typeid( *lvalue ) == typeid( not_expression_c    )) ||
   173 	     (typeid( *lvalue ) == typeid( bit_string_literal_c           )) ||
   174 	     (typeid( *lvalue ) == typeid( function_invocation_c)))
   174 	     (typeid( *lvalue ) == typeid( boolean_literal_c              )) ||
   175 		STAGE3_ERROR(0, lvalue, lvalue, "Assignment an expression to OUT or IN_OUT params is not be allowed.");
   175 	     (typeid( *lvalue ) == typeid( boolean_true_c                 )) || /* should not really be needed */
   176 }
   176 	     (typeid( *lvalue ) == typeid( boolean_false_c                )) || /* should not really be needed */
       
   177 	     /*******************************/
       
   178 	     /* B.1.2.2   Character Strings */
       
   179 	     /*******************************/
       
   180 	     (typeid( *lvalue ) == typeid( double_byte_character_string_c )) ||
       
   181 	     (typeid( *lvalue ) == typeid( single_byte_character_string_c )) ||
       
   182 	     /***************************/
       
   183 	     /* B 1.2.3 - Time Literals */
       
   184 	     /***************************/
       
   185 	     /************************/
       
   186 	     /* B 1.2.3.1 - Duration */
       
   187 	     /************************/
       
   188 	     (typeid( *lvalue ) == typeid( duration_c                     )) ||
       
   189 	     /************************************/
       
   190 	     /* B 1.2.3.2 - Time of day and Date */
       
   191 	     /************************************/
       
   192 	     (typeid( *lvalue ) == typeid( time_of_day_c                  )) ||
       
   193 	     (typeid( *lvalue ) == typeid( daytime_c                      )) || /* should not really be needed */
       
   194 	     (typeid( *lvalue ) == typeid( date_c                         )) || /* should not really be needed */
       
   195 	     (typeid( *lvalue ) == typeid( date_literal_c                 )) ||
       
   196 	     (typeid( *lvalue ) == typeid( date_and_time_c                )) ||
       
   197 	     /***************************************/
       
   198 	     /* B.3 - Language ST (Structured Text) */
       
   199 	     /***************************************/
       
   200 	     /***********************/
       
   201 	     /* B 3.1 - Expressions */
       
   202 	     /***********************/
       
   203 	     (typeid( *lvalue ) == typeid( or_expression_c                )) ||
       
   204 	     (typeid( *lvalue ) == typeid( xor_expression_c               )) ||
       
   205 	     (typeid( *lvalue ) == typeid( and_expression_c               )) ||
       
   206 	     (typeid( *lvalue ) == typeid( equ_expression_c               )) ||
       
   207 	     (typeid( *lvalue ) == typeid( notequ_expression_c            )) ||
       
   208 	     (typeid( *lvalue ) == typeid( lt_expression_c                )) ||
       
   209 	     (typeid( *lvalue ) == typeid( gt_expression_c                )) ||
       
   210 	     (typeid( *lvalue ) == typeid( le_expression_c                )) ||
       
   211 	     (typeid( *lvalue ) == typeid( ge_expression_c                )) ||
       
   212 	     (typeid( *lvalue ) == typeid( add_expression_c               )) ||
       
   213 	     (typeid( *lvalue ) == typeid( sub_expression_c               )) ||
       
   214 	     (typeid( *lvalue ) == typeid( mul_expression_c               )) ||
       
   215 	     (typeid( *lvalue ) == typeid( div_expression_c               )) ||
       
   216 	     (typeid( *lvalue ) == typeid( mod_expression_c               )) ||
       
   217 	     (typeid( *lvalue ) == typeid( power_expression_c             )) ||
       
   218 	     (typeid( *lvalue ) == typeid( neg_expression_c               )) ||
       
   219 	     (typeid( *lvalue ) == typeid( not_expression_c               )) ||
       
   220 	     (typeid( *lvalue ) == typeid( function_invocation_c          )))
       
   221 		STAGE3_ERROR(0, lvalue, lvalue, "Assigning an expression to an OUT or IN_OUT parameter is not allowed.");
       
   222 }                                                                  
       
   223 
       
   224 
       
   225 
       
   226 
   177 
   227 
   178 
   228 
   179 
   229 
   180 void lvalue_check_c::verify_is_lvalue(symbol_c *lvalue) {
   230 void lvalue_check_c::verify_is_lvalue(symbol_c *lvalue) {
   181 	check_assignment_to_expression(lvalue);
   231 	check_assignment_to_expression(lvalue);