Browse Source

Merge pull request #1927 from IanLilleyT/debug_symbols_for_range_interval

Debug symbols for range-based for loop over number range
gingerBill 3 years ago
parent
commit
4f7bbe0e4a
1 changed files with 14 additions and 11 deletions
  1. 14 11
      src/llvm_backend_stmt.cpp

+ 14 - 11
src/llvm_backend_stmt.cpp

@@ -458,15 +458,6 @@ void lb_build_range_interval(lbProcedure *p, AstBinaryExpr *node,
 		val1_type = type_of_expr(rs->vals[1]);
 		val1_type = type_of_expr(rs->vals[1]);
 	}
 	}
 
 
-	if (val0_type != nullptr) {
-		Entity *e = entity_of_node(rs->vals[0]);
-		lb_add_local(p, e->type, e, true);
-	}
-	if (val1_type != nullptr) {
-		Entity *e = entity_of_node(rs->vals[1]);
-		lb_add_local(p, e->type, e, true);
-	}
-
 	TokenKind op = Token_Lt;
 	TokenKind op = Token_Lt;
 	switch (node->op.kind) {
 	switch (node->op.kind) {
 	case Token_Ellipsis:  op = Token_LtEq; break;
 	case Token_Ellipsis:  op = Token_LtEq; break;
@@ -478,10 +469,22 @@ void lb_build_range_interval(lbProcedure *p, AstBinaryExpr *node,
 	lbValue lower = lb_build_expr(p, node->left);
 	lbValue lower = lb_build_expr(p, node->left);
 	lbValue upper = {}; // initialized each time in the loop
 	lbValue upper = {}; // initialized each time in the loop
 
 
-	lbAddr value = lb_add_local_generated(p, val0_type ? val0_type : lower.type, false);
+	lbAddr value;
+	if (val0_type != nullptr) {
+		Entity *e = entity_of_node(rs->vals[0]);
+		value = lb_add_local(p, val0_type, e, false);
+	} else {
+		value = lb_add_local_generated(p, lower.type, false);
+	}
 	lb_addr_store(p, value, lower);
 	lb_addr_store(p, value, lower);
 
 
-	lbAddr index = lb_add_local_generated(p, t_int, false);
+	lbAddr index;
+	if (val1_type != nullptr) {
+		Entity *e = entity_of_node(rs->vals[1]);
+		index = lb_add_local(p, val1_type, e, false);
+	} else {
+		index = lb_add_local_generated(p, t_int, false);
+	}
 	lb_addr_store(p, index, lb_const_int(m, t_int, 0));
 	lb_addr_store(p, index, lb_const_int(m, t_int, 0));
 
 
 	lbBlock *loop = lb_create_block(p, "for.interval.loop");
 	lbBlock *loop = lb_create_block(p, "for.interval.loop");