fix prefix and div-assign
This commit is contained in:
		
							parent
							
								
									9a2a1b00be
								
							
						
					
					
						commit
						a9054f0a64
					
				
					 1 changed files with 8 additions and 10 deletions
				
			
		
							
								
								
									
										18
									
								
								boot.c
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								boot.c
									
										
									
									
									
								
							|  | @ -427,7 +427,7 @@ void next_token() { | |||
|         int ch2 = getchar(); | ||||
|         if (ch2 == '=') { | ||||
|             token_type = TOKEN_DIV_ASSIGN; | ||||
|         } if (ch2 == '/') { | ||||
|         } else if (ch2 == '/') { | ||||
|             do ch = getchar(); while (ch != -1 && ch != '\n'); | ||||
|             next_token(); | ||||
|             return; | ||||
|  | @ -1253,7 +1253,7 @@ int parse_postfix_expr() { | |||
| int parse_prefix_expr() { | ||||
|     next_token(); | ||||
|     if (token_type == TOKEN_AND) { | ||||
|         int reg = parse_postfix_expr(); | ||||
|         int reg = parse_prefix_expr(); | ||||
|         int type = reg_type[reg]; | ||||
|         if (type & TYPE_PTR_MASK) { | ||||
|             fprintf(stderr, "cannot take address of a pointer\n"); | ||||
|  | @ -1261,7 +1261,7 @@ int parse_prefix_expr() { | |||
|         } | ||||
|         return addressof(reg); | ||||
|     } else if (token_type == TOKEN_MUL) { | ||||
|         int reg = parse_postfix_expr(); | ||||
|         int reg = parse_prefix_expr(); | ||||
|         int type = reg_type[reg]; | ||||
|         if (!(type & TYPE_PTR_MASK)) { | ||||
|             fprintf(stderr, "cannot dereference a non-pointer\n"); | ||||
|  | @ -1273,20 +1273,20 @@ int parse_prefix_expr() { | |||
|         } | ||||
|         return dereference(reg); | ||||
|     } else if (token_type == TOKEN_SUB) { | ||||
|         int reg = parse_postfix_expr(); | ||||
|         int reg = parse_prefix_expr(); | ||||
|         return asm_r_arith("neg", reg); | ||||
|     } else if (token_type == TOKEN_COMPL) { | ||||
|         int reg = parse_postfix_expr(); | ||||
|         int reg = parse_prefix_expr(); | ||||
|         return asm_r_arith("not", reg); | ||||
|     } else if (token_type == TOKEN_NOT) { | ||||
|         int reg = parse_postfix_expr(); | ||||
|         int reg = parse_prefix_expr(); | ||||
|         return asm_r(TYPE_INT, "seqz", reg); | ||||
|     } else if (token_type == TOKEN_INC) { | ||||
|         int reg = parse_postfix_expr(); | ||||
|         int reg = parse_prefix_expr(); | ||||
|         _asm_ri("addi", reg, reg, step_of(reg_type[reg])); | ||||
|         return reg; | ||||
|     } else if (token_type == TOKEN_DEC) { | ||||
|         int reg = parse_postfix_expr(); | ||||
|         int reg = parse_prefix_expr(); | ||||
|         _asm_ri("addi", reg, reg, -step_of(reg_type[reg])); | ||||
|         return reg; | ||||
|     } else { | ||||
|  | @ -1989,8 +1989,6 @@ void dump_string_table() { | |||
|                 printf("\\t"); | ||||
|             } else if (ch == '\r') { | ||||
|                 printf("\\r"); | ||||
|             } else if (ch == '\0') { | ||||
|                 printf("\\0"); | ||||
|             } else if (ch == '\\') { | ||||
|                 printf("\\\\"); | ||||
|             } else if (ch == '\'') { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue