| ... | @@ -360,16 +360,11 @@ const ResultInfo = struct { | ... | @@ -360,16 +360,11 @@ const ResultInfo = struct { |
| 360 | }; | 360 | }; |
| 361 | }; | 361 | }; |
| 362 | | 362 | |
| 363 | /// TODO: modify Sema to remove in favour of `coerced_align_ri` | | |
| 364 | const align_ri: ResultInfo = .{ .rl = .{ .ty = .u29_type } }; | | |
| 365 | const coerced_align_ri: ResultInfo = .{ .rl = .{ .coerced_ty = .u29_type } }; | 363 | const coerced_align_ri: ResultInfo = .{ .rl = .{ .coerced_ty = .u29_type } }; |
| 366 | /// TODO: modify Sema to remove in favour of `coerced_addrspace_ri` | | |
| 367 | const addrspace_ri: ResultInfo = .{ .rl = .{ .ty = .address_space_type } }; | | |
| 368 | const coerced_addrspace_ri: ResultInfo = .{ .rl = .{ .coerced_ty = .address_space_type } }; | 364 | const coerced_addrspace_ri: ResultInfo = .{ .rl = .{ .coerced_ty = .address_space_type } }; |
| 369 | const coerced_linksection_ri: ResultInfo = .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }; | 365 | const coerced_linksection_ri: ResultInfo = .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }; |
| 370 | const bool_ri: ResultInfo = .{ .rl = .{ .ty = .bool_type } }; | | |
| 371 | const type_ri: ResultInfo = .{ .rl = .{ .ty = .type_type } }; | | |
| 372 | const coerced_type_ri: ResultInfo = .{ .rl = .{ .coerced_ty = .type_type } }; | 366 | const coerced_type_ri: ResultInfo = .{ .rl = .{ .coerced_ty = .type_type } }; |
| | 367 | const coerced_bool_ri: ResultInfo = .{ .rl = .{ .coerced_ty = .bool_type } }; |
| 373 | | 368 | |
| 374 | fn typeExpr(gz: *GenZir, scope: *Scope, type_node: Ast.Node.Index) InnerError!Zir.Inst.Ref { | 369 | fn typeExpr(gz: *GenZir, scope: *Scope, type_node: Ast.Node.Index) InnerError!Zir.Inst.Ref { |
| 375 | return comptimeExpr(gz, scope, coerced_type_ri, type_node); | 370 | return comptimeExpr(gz, scope, coerced_type_ri, type_node); |
| ... | @@ -786,7 +781,7 @@ fn expr(gz: *GenZir, scope: *Scope, ri: ResultInfo, node: Ast.Node.Index) InnerE | ... | @@ -786,7 +781,7 @@ fn expr(gz: *GenZir, scope: *Scope, ri: ResultInfo, node: Ast.Node.Index) InnerE |
| 786 | .bool_and => return boolBinOp(gz, scope, ri, node, .bool_br_and), | 781 | .bool_and => return boolBinOp(gz, scope, ri, node, .bool_br_and), |
| 787 | .bool_or => return boolBinOp(gz, scope, ri, node, .bool_br_or), | 782 | .bool_or => return boolBinOp(gz, scope, ri, node, .bool_br_or), |
| 788 | | 783 | |
| 789 | .bool_not => return simpleUnOp(gz, scope, ri, node, bool_ri, node_datas[node].lhs, .bool_not), | 784 | .bool_not => return simpleUnOp(gz, scope, ri, node, coerced_bool_ri, node_datas[node].lhs, .bool_not), |
| 790 | .bit_not => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, node_datas[node].lhs, .bit_not), | 785 | .bit_not => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, node_datas[node].lhs, .bit_not), |
| 791 | | 786 | |
| 792 | .negation => return negation(gz, scope, ri, node), | 787 | .negation => return negation(gz, scope, ri, node), |
| ... | @@ -1372,7 +1367,7 @@ fn fnProtoExpr( | ... | @@ -1372,7 +1367,7 @@ fn fnProtoExpr( |
| 1372 | }; | 1367 | }; |
| 1373 | | 1368 | |
| 1374 | const align_ref: Zir.Inst.Ref = if (fn_proto.ast.align_expr == 0) .none else inst: { | 1369 | const align_ref: Zir.Inst.Ref = if (fn_proto.ast.align_expr == 0) .none else inst: { |
| 1375 | break :inst try expr(&block_scope, scope, align_ri, fn_proto.ast.align_expr); | 1370 | break :inst try expr(&block_scope, scope, coerced_align_ri, fn_proto.ast.align_expr); |
| 1376 | }; | 1371 | }; |
| 1377 | | 1372 | |
| 1378 | if (fn_proto.ast.addrspace_expr != 0) { | 1373 | if (fn_proto.ast.addrspace_expr != 0) { |
| ... | @@ -1387,7 +1382,7 @@ fn fnProtoExpr( | ... | @@ -1387,7 +1382,7 @@ fn fnProtoExpr( |
| 1387 | try expr( | 1382 | try expr( |
| 1388 | &block_scope, | 1383 | &block_scope, |
| 1389 | scope, | 1384 | scope, |
| 1390 | .{ .rl = .{ .ty = .calling_convention_type } }, | 1385 | .{ .rl = .{ .coerced_ty = .calling_convention_type } }, |
| 1391 | fn_proto.ast.callconv_expr, | 1386 | fn_proto.ast.callconv_expr, |
| 1392 | ) | 1387 | ) |
| 1393 | else | 1388 | else |
| ... | @@ -3136,7 +3131,7 @@ fn varDecl( | ... | @@ -3136,7 +3131,7 @@ fn varDecl( |
| 3136 | } | 3131 | } |
| 3137 | | 3132 | |
| 3138 | const align_inst: Zir.Inst.Ref = if (var_decl.ast.align_node != 0) | 3133 | const align_inst: Zir.Inst.Ref = if (var_decl.ast.align_node != 0) |
| 3139 | try expr(gz, scope, align_ri, var_decl.ast.align_node) | 3134 | try expr(gz, scope, coerced_align_ri, var_decl.ast.align_node) |
| 3140 | else | 3135 | else |
| 3141 | .none; | 3136 | .none; |
| 3142 | | 3137 | |
| ... | @@ -3505,7 +3500,7 @@ fn assignDestructureMaybeDecls( | ... | @@ -3505,7 +3500,7 @@ fn assignDestructureMaybeDecls( |
| 3505 | const this_lhs_comptime = is_comptime or (is_const and rhs_is_comptime); | 3500 | const this_lhs_comptime = is_comptime or (is_const and rhs_is_comptime); |
| 3506 | | 3501 | |
| 3507 | const align_inst: Zir.Inst.Ref = if (full.ast.align_node != 0) | 3502 | const align_inst: Zir.Inst.Ref = if (full.ast.align_node != 0) |
| 3508 | try expr(gz, scope, align_ri, full.ast.align_node) | 3503 | try expr(gz, scope, coerced_align_ri, full.ast.align_node) |
| 3509 | else | 3504 | else |
| 3510 | .none; | 3505 | .none; |
| 3511 | | 3506 | |
| ... | @@ -3783,7 +3778,7 @@ fn ptrType( | ... | @@ -3783,7 +3778,7 @@ fn ptrType( |
| 3783 | gz.astgen.source_line = source_line; | 3778 | gz.astgen.source_line = source_line; |
| 3784 | gz.astgen.source_column = source_column; | 3779 | gz.astgen.source_column = source_column; |
| 3785 | | 3780 | |
| 3786 | addrspace_ref = try expr(gz, scope, addrspace_ri, ptr_info.ast.addrspace_node); | 3781 | addrspace_ref = try expr(gz, scope, coerced_addrspace_ri, ptr_info.ast.addrspace_node); |
| 3787 | trailing_count += 1; | 3782 | trailing_count += 1; |
| 3788 | } | 3783 | } |
| 3789 | if (ptr_info.ast.align_node != 0) { | 3784 | if (ptr_info.ast.align_node != 0) { |
| ... | @@ -4176,7 +4171,7 @@ fn fnDecl( | ... | @@ -4176,7 +4171,7 @@ fn fnDecl( |
| 4176 | var addrspace_gz = decl_gz.makeSubBlock(params_scope); | 4171 | var addrspace_gz = decl_gz.makeSubBlock(params_scope); |
| 4177 | defer addrspace_gz.unstack(); | 4172 | defer addrspace_gz.unstack(); |
| 4178 | const addrspace_ref: Zir.Inst.Ref = if (fn_proto.ast.addrspace_expr == 0) .none else inst: { | 4173 | const addrspace_ref: Zir.Inst.Ref = if (fn_proto.ast.addrspace_expr == 0) .none else inst: { |
| 4179 | const inst = try expr(&decl_gz, params_scope, addrspace_ri, fn_proto.ast.addrspace_expr); | 4174 | const inst = try expr(&decl_gz, params_scope, coerced_addrspace_ri, fn_proto.ast.addrspace_expr); |
| 4180 | if (addrspace_gz.instructionsSlice().len == 0) { | 4175 | if (addrspace_gz.instructionsSlice().len == 0) { |
| 4181 | // In this case we will send a len=0 body which can be encoded more efficiently. | 4176 | // In this case we will send a len=0 body which can be encoded more efficiently. |
| 4182 | break :inst inst; | 4177 | break :inst inst; |
| ... | @@ -4431,7 +4426,7 @@ fn globalVarDecl( | ... | @@ -4431,7 +4426,7 @@ fn globalVarDecl( |
| 4431 | try expr( | 4426 | try expr( |
| 4432 | &block_scope, | 4427 | &block_scope, |
| 4433 | &block_scope.base, | 4428 | &block_scope.base, |
| 4434 | .{ .rl = .{ .ty = .type_type } }, | 4429 | coerced_type_ri, |
| 4435 | var_decl.ast.type_node, | 4430 | var_decl.ast.type_node, |
| 4436 | ) | 4431 | ) |
| 4437 | else | 4432 | else |
| ... | @@ -5254,7 +5249,7 @@ fn unionDeclInner( | ... | @@ -5254,7 +5249,7 @@ fn unionDeclInner( |
| 5254 | return astgen.failNode(member_node, "union field missing type", .{}); | 5249 | return astgen.failNode(member_node, "union field missing type", .{}); |
| 5255 | } | 5250 | } |
| 5256 | if (have_align) { | 5251 | if (have_align) { |
| 5257 | const align_inst = try expr(&block_scope, &block_scope.base, .{ .rl = .{ .ty = .u32_type } }, member.ast.align_expr); | 5252 | const align_inst = try expr(&block_scope, &block_scope.base, coerced_align_ri, member.ast.align_expr); |
| 5258 | wip_members.appendToField(@intFromEnum(align_inst)); | 5253 | wip_members.appendToField(@intFromEnum(align_inst)); |
| 5259 | any_aligned_fields = true; | 5254 | any_aligned_fields = true; |
| 5260 | } | 5255 | } |
| ... | @@ -5522,7 +5517,7 @@ fn containerDecl( | ... | @@ -5522,7 +5517,7 @@ fn containerDecl( |
| 5522 | namespace.base.tag = .enum_namespace; | 5517 | namespace.base.tag = .enum_namespace; |
| 5523 | | 5518 | |
| 5524 | const arg_inst: Zir.Inst.Ref = if (container_decl.ast.arg != 0) | 5519 | const arg_inst: Zir.Inst.Ref = if (container_decl.ast.arg != 0) |
| 5525 | try comptimeExpr(&block_scope, &namespace.base, .{ .rl = .{ .ty = .type_type } }, container_decl.ast.arg) | 5520 | try comptimeExpr(&block_scope, &namespace.base, coerced_type_ri, container_decl.ast.arg) |
| 5526 | else | 5521 | else |
| 5527 | .none; | 5522 | .none; |
| 5528 | | 5523 | |
| ... | @@ -6079,7 +6074,7 @@ fn arrayAccess( | ... | @@ -6079,7 +6074,7 @@ fn arrayAccess( |
| 6079 | | 6074 | |
| 6080 | const cursor = maybeAdvanceSourceCursorToMainToken(gz, node); | 6075 | const cursor = maybeAdvanceSourceCursorToMainToken(gz, node); |
| 6081 | | 6076 | |
| 6082 | const rhs = try expr(gz, scope, .{ .rl = .{ .ty = .usize_type } }, node_datas[node].rhs); | 6077 | const rhs = try expr(gz, scope, .{ .rl = .{ .coerced_ty = .usize_type } }, node_datas[node].rhs); |
| 6083 | try emitDbgStmt(gz, cursor); | 6078 | try emitDbgStmt(gz, cursor); |
| 6084 | | 6079 | |
| 6085 | return gz.addPlNode(.elem_ptr_node, node, Zir.Inst.Bin{ .lhs = lhs, .rhs = rhs }); | 6080 | return gz.addPlNode(.elem_ptr_node, node, Zir.Inst.Bin{ .lhs = lhs, .rhs = rhs }); |
| ... | @@ -6089,7 +6084,7 @@ fn arrayAccess( | ... | @@ -6089,7 +6084,7 @@ fn arrayAccess( |
| 6089 | | 6084 | |
| 6090 | const cursor = maybeAdvanceSourceCursorToMainToken(gz, node); | 6085 | const cursor = maybeAdvanceSourceCursorToMainToken(gz, node); |
| 6091 | | 6086 | |
| 6092 | const rhs = try expr(gz, scope, .{ .rl = .{ .ty = .usize_type } }, node_datas[node].rhs); | 6087 | const rhs = try expr(gz, scope, .{ .rl = .{ .coerced_ty = .usize_type } }, node_datas[node].rhs); |
| 6093 | try emitDbgStmt(gz, cursor); | 6088 | try emitDbgStmt(gz, cursor); |
| 6094 | | 6089 | |
| 6095 | return rvalue(gz, ri, try gz.addPlNode(.elem_val_node, node, Zir.Inst.Bin{ .lhs = lhs, .rhs = rhs }), node); | 6090 | return rvalue(gz, ri, try gz.addPlNode(.elem_val_node, node, Zir.Inst.Bin{ .lhs = lhs, .rhs = rhs }), node); |
| ... | @@ -6157,12 +6152,12 @@ fn boolBinOp( | ... | @@ -6157,12 +6152,12 @@ fn boolBinOp( |
| 6157 | const tree = astgen.tree; | 6152 | const tree = astgen.tree; |
| 6158 | const node_datas = tree.nodes.items(.data); | 6153 | const node_datas = tree.nodes.items(.data); |
| 6159 | | 6154 | |
| 6160 | const lhs = try expr(gz, scope, bool_ri, node_datas[node].lhs); | 6155 | const lhs = try expr(gz, scope, coerced_bool_ri, node_datas[node].lhs); |
| 6161 | const bool_br = (try gz.addPlNodePayloadIndex(zir_tag, node, undefined)).toIndex().?; | 6156 | const bool_br = (try gz.addPlNodePayloadIndex(zir_tag, node, undefined)).toIndex().?; |
| 6162 | | 6157 | |
| 6163 | var rhs_scope = gz.makeSubBlock(scope); | 6158 | var rhs_scope = gz.makeSubBlock(scope); |
| 6164 | defer rhs_scope.unstack(); | 6159 | defer rhs_scope.unstack(); |
| 6165 | const rhs = try expr(&rhs_scope, &rhs_scope.base, bool_ri, node_datas[node].rhs); | 6160 | const rhs = try expr(&rhs_scope, &rhs_scope.base, coerced_bool_ri, node_datas[node].rhs); |
| 6166 | if (!gz.refIsNoReturn(rhs)) { | 6161 | if (!gz.refIsNoReturn(rhs)) { |
| 6167 | _ = try rhs_scope.addBreakWithSrcNode(.break_inline, bool_br, rhs, node_datas[node].rhs); | 6162 | _ = try rhs_scope.addBreakWithSrcNode(.break_inline, bool_br, rhs, node_datas[node].rhs); |
| 6168 | } | 6163 | } |
| ... | @@ -6230,7 +6225,7 @@ fn ifExpr( | ... | @@ -6230,7 +6225,7 @@ fn ifExpr( |
| 6230 | .bool_bit = try block_scope.addUnNode(tag, optional, if_full.ast.cond_expr), | 6225 | .bool_bit = try block_scope.addUnNode(tag, optional, if_full.ast.cond_expr), |
| 6231 | }; | 6226 | }; |
| 6232 | } else { | 6227 | } else { |
| 6233 | const cond = try expr(&block_scope, &block_scope.base, bool_ri, if_full.ast.cond_expr); | 6228 | const cond = try expr(&block_scope, &block_scope.base, coerced_bool_ri, if_full.ast.cond_expr); |
| 6234 | break :c .{ | 6229 | break :c .{ |
| 6235 | .inst = cond, | 6230 | .inst = cond, |
| 6236 | .bool_bit = cond, | 6231 | .bool_bit = cond, |
| ... | @@ -6476,7 +6471,7 @@ fn whileExpr( | ... | @@ -6476,7 +6471,7 @@ fn whileExpr( |
| 6476 | .bool_bit = try cond_scope.addUnNode(tag, optional, while_full.ast.cond_expr), | 6471 | .bool_bit = try cond_scope.addUnNode(tag, optional, while_full.ast.cond_expr), |
| 6477 | }; | 6472 | }; |
| 6478 | } else { | 6473 | } else { |
| 6479 | const cond = try expr(&cond_scope, &cond_scope.base, bool_ri, while_full.ast.cond_expr); | 6474 | const cond = try expr(&cond_scope, &cond_scope.base, coerced_bool_ri, while_full.ast.cond_expr); |
| 6480 | break :c .{ | 6475 | break :c .{ |
| 6481 | .inst = cond, | 6476 | .inst = cond, |
| 6482 | .bool_bit = cond, | 6477 | .bool_bit = cond, |
| ... | @@ -8052,7 +8047,7 @@ fn ret(gz: *GenZir, scope: *Scope, node: Ast.Node.Index) InnerError!Zir.Inst.Ref | ... | @@ -8052,7 +8047,7 @@ fn ret(gz: *GenZir, scope: *Scope, node: Ast.Node.Index) InnerError!Zir.Inst.Ref |
| 8052 | .rl = .{ .ptr = .{ .inst = try gz.addNode(.ret_ptr, node) } }, | 8047 | .rl = .{ .ptr = .{ .inst = try gz.addNode(.ret_ptr, node) } }, |
| 8053 | .ctx = .@"return", | 8048 | .ctx = .@"return", |
| 8054 | } else .{ | 8049 | } else .{ |
| 8055 | .rl = .{ .ty = astgen.fn_ret_ty }, | 8050 | .rl = .{ .coerced_ty = astgen.fn_ret_ty }, |
| 8056 | .ctx = .@"return", | 8051 | .ctx = .@"return", |
| 8057 | }; | 8052 | }; |
| 8058 | const prev_anon_name_strategy = gz.anon_name_strategy; | 8053 | const prev_anon_name_strategy = gz.anon_name_strategy; |
| ... | @@ -8688,7 +8683,7 @@ fn unionInit( | ... | @@ -8688,7 +8683,7 @@ fn unionInit( |
| 8688 | params: []const Ast.Node.Index, | 8683 | params: []const Ast.Node.Index, |
| 8689 | ) InnerError!Zir.Inst.Ref { | 8684 | ) InnerError!Zir.Inst.Ref { |
| 8690 | const union_type = try typeExpr(gz, scope, params[0]); | 8685 | const union_type = try typeExpr(gz, scope, params[0]); |
| 8691 | const field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[1]); | 8686 | const field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, params[1]); |
| 8692 | const field_type = try gz.addPlNode(.field_type_ref, node, Zir.Inst.FieldTypeRef{ | 8687 | const field_type = try gz.addPlNode(.field_type_ref, node, Zir.Inst.FieldTypeRef{ |
| 8693 | .container_type = union_type, | 8688 | .container_type = union_type, |
| 8694 | .field_name = field_name, | 8689 | .field_name = field_name, |
| ... | @@ -9001,12 +8996,12 @@ fn builtinCall( | ... | @@ -9001,12 +8996,12 @@ fn builtinCall( |
| 9001 | if (ri.rl == .ref or ri.rl == .ref_coerced_ty) { | 8996 | if (ri.rl == .ref or ri.rl == .ref_coerced_ty) { |
| 9002 | return gz.addPlNode(.field_ptr_named, node, Zir.Inst.FieldNamed{ | 8997 | return gz.addPlNode(.field_ptr_named, node, Zir.Inst.FieldNamed{ |
| 9003 | .lhs = try expr(gz, scope, .{ .rl = .ref }, params[0]), | 8998 | .lhs = try expr(gz, scope, .{ .rl = .ref }, params[0]), |
| 9004 | .field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[1]), | 8999 | .field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, params[1]), |
| 9005 | }); | 9000 | }); |
| 9006 | } | 9001 | } |
| 9007 | const result = try gz.addPlNode(.field_val_named, node, Zir.Inst.FieldNamed{ | 9002 | const result = try gz.addPlNode(.field_val_named, node, Zir.Inst.FieldNamed{ |
| 9008 | .lhs = try expr(gz, scope, .{ .rl = .none }, params[0]), | 9003 | .lhs = try expr(gz, scope, .{ .rl = .none }, params[0]), |
| 9009 | .field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[1]), | 9004 | .field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, params[1]), |
| 9010 | }); | 9005 | }); |
| 9011 | return rvalue(gz, ri, result, node); | 9006 | return rvalue(gz, ri, result, node); |
| 9012 | }, | 9007 | }, |
| ... | @@ -9133,7 +9128,7 @@ fn builtinCall( | ... | @@ -9133,7 +9128,7 @@ fn builtinCall( |
| 9133 | return rvalue(gz, ri, .void_value, node); | 9128 | return rvalue(gz, ri, .void_value, node); |
| 9134 | }, | 9129 | }, |
| 9135 | .set_align_stack => { | 9130 | .set_align_stack => { |
| 9136 | const order = try expr(gz, scope, align_ri, params[0]); | 9131 | const order = try expr(gz, scope, coerced_align_ri, params[0]); |
| 9137 | _ = try gz.addExtendedPayload(.set_align_stack, Zir.Inst.UnNode{ | 9132 | _ = try gz.addExtendedPayload(.set_align_stack, Zir.Inst.UnNode{ |
| 9138 | .node = gz.nodeIndexToRelative(node), | 9133 | .node = gz.nodeIndexToRelative(node), |
| 9139 | .operand = order, | 9134 | .operand = order, |
| ... | @@ -9175,32 +9170,32 @@ fn builtinCall( | ... | @@ -9175,32 +9170,32 @@ fn builtinCall( |
| 9175 | .bit_size_of => return simpleUnOpType(gz, scope, ri, node, params[0], .bit_size_of), | 9170 | .bit_size_of => return simpleUnOpType(gz, scope, ri, node, params[0], .bit_size_of), |
| 9176 | .align_of => return simpleUnOpType(gz, scope, ri, node, params[0], .align_of), | 9171 | .align_of => return simpleUnOpType(gz, scope, ri, node, params[0], .align_of), |
| 9177 | | 9172 | |
| 9178 | .int_from_ptr => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_ptr), | 9173 | .int_from_ptr => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_ptr), |
| 9179 | .compile_error => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[0], .compile_error), | 9174 | .compile_error => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, params[0], .compile_error), |
| 9180 | .set_eval_branch_quota => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .coerced_ty = .u32_type } }, params[0], .set_eval_branch_quota), | 9175 | .set_eval_branch_quota => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .coerced_ty = .u32_type } }, params[0], .set_eval_branch_quota), |
| 9181 | .int_from_enum => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_enum), | 9176 | .int_from_enum => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_enum), |
| 9182 | .int_from_bool => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_bool), | 9177 | .int_from_bool => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_bool), |
| 9183 | .embed_file => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[0], .embed_file), | 9178 | .embed_file => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, params[0], .embed_file), |
| 9184 | .error_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .anyerror_type } }, params[0], .error_name), | 9179 | .error_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .coerced_ty = .anyerror_type } }, params[0], .error_name), |
| 9185 | .set_runtime_safety => return simpleUnOp(gz, scope, ri, node, bool_ri, params[0], .set_runtime_safety), | 9180 | .set_runtime_safety => return simpleUnOp(gz, scope, ri, node, coerced_bool_ri, params[0], .set_runtime_safety), |
| 9186 | .sqrt => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .sqrt), | 9181 | .sqrt => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .sqrt), |
| 9187 | .sin => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .sin), | 9182 | .sin => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .sin), |
| 9188 | .cos => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .cos), | 9183 | .cos => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .cos), |
| 9189 | .tan => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .tan), | 9184 | .tan => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .tan), |
| 9190 | .exp => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .exp), | 9185 | .exp => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .exp), |
| 9191 | .exp2 => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .exp2), | 9186 | .exp2 => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .exp2), |
| 9192 | .log => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .log), | 9187 | .log => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .log), |
| 9193 | .log2 => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .log2), | 9188 | .log2 => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .log2), |
| 9194 | .log10 => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .log10), | 9189 | .log10 => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .log10), |
| 9195 | .abs => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .abs), | 9190 | .abs => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .abs), |
| 9196 | .floor => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .floor), | 9191 | .floor => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .floor), |
| 9197 | .ceil => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .ceil), | 9192 | .ceil => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .ceil), |
| 9198 | .trunc => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .trunc), | 9193 | .trunc => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .trunc), |
| 9199 | .round => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .round), | 9194 | .round => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .round), |
| 9200 | .tag_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .tag_name), | 9195 | .tag_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .tag_name), |
| 9201 | .type_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .type_name), | 9196 | .type_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .type_name), |
| 9202 | .Frame => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .frame_type), | 9197 | .Frame => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .frame_type), |
| 9203 | .frame_size => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .frame_size), | 9198 | .frame_size => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .frame_size), |
| 9204 | | 9199 | |
| 9205 | .int_from_float => return typeCast(gz, scope, ri, node, params[0], .int_from_float, builtin_name), | 9200 | .int_from_float => return typeCast(gz, scope, ri, node, params[0], .int_from_float, builtin_name), |
| 9206 | .float_from_int => return typeCast(gz, scope, ri, node, params[0], .float_from_int, builtin_name), | 9201 | .float_from_int => return typeCast(gz, scope, ri, node, params[0], .float_from_int, builtin_name), |
| ... | @@ -9238,7 +9233,7 @@ fn builtinCall( | ... | @@ -9238,7 +9233,7 @@ fn builtinCall( |
| 9238 | }, | 9233 | }, |
| 9239 | .panic => { | 9234 | .panic => { |
| 9240 | try emitDbgNode(gz, node); | 9235 | try emitDbgNode(gz, node); |
| 9241 | return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[0], .panic); | 9236 | return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, params[0], .panic); |
| 9242 | }, | 9237 | }, |
| 9243 | .trap => { | 9238 | .trap => { |
| 9244 | try emitDbgNode(gz, node); | 9239 | try emitDbgNode(gz, node); |
| ... | @@ -9327,7 +9322,7 @@ fn builtinCall( | ... | @@ -9327,7 +9322,7 @@ fn builtinCall( |
| 9327 | }, | 9322 | }, |
| 9328 | .c_define => { | 9323 | .c_define => { |
| 9329 | if (!gz.c_import) return gz.astgen.failNode(node, "C define valid only inside C import block", .{}); | 9324 | if (!gz.c_import) return gz.astgen.failNode(node, "C define valid only inside C import block", .{}); |
| 9330 | const name = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[0]); | 9325 | const name = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, params[0]); |
| 9331 | const value = try comptimeExpr(gz, scope, .{ .rl = .none }, params[1]); | 9326 | const value = try comptimeExpr(gz, scope, .{ .rl = .none }, params[1]); |
| 9332 | const result = try gz.addExtendedPayload(.c_define, Zir.Inst.BinNode{ | 9327 | const result = try gz.addExtendedPayload(.c_define, Zir.Inst.BinNode{ |
| 9333 | .node = gz.nodeIndexToRelative(node), | 9328 | .node = gz.nodeIndexToRelative(node), |
| ... | @@ -9348,7 +9343,7 @@ fn builtinCall( | ... | @@ -9348,7 +9343,7 @@ fn builtinCall( |
| 9348 | return rvalue(gz, ri, result, node); | 9343 | return rvalue(gz, ri, result, node); |
| 9349 | }, | 9344 | }, |
| 9350 | .reduce => { | 9345 | .reduce => { |
| 9351 | const op = try expr(gz, scope, .{ .rl = .{ .ty = .reduce_op_type } }, params[0]); | 9346 | const op = try expr(gz, scope, .{ .rl = .{ .coerced_ty = .reduce_op_type } }, params[0]); |
| 9352 | const scalar = try expr(gz, scope, .{ .rl = .none }, params[1]); | 9347 | const scalar = try expr(gz, scope, .{ .rl = .none }, params[1]); |
| 9353 | const result = try gz.addPlNode(.reduce, node, Zir.Inst.Bin{ | 9348 | const result = try gz.addPlNode(.reduce, node, Zir.Inst.Bin{ |
| 9354 | .lhs = op, | 9349 | .lhs = op, |
| ... | @@ -9424,7 +9419,7 @@ fn builtinCall( | ... | @@ -9424,7 +9419,7 @@ fn builtinCall( |
| 9424 | }, | 9419 | }, |
| 9425 | .field_parent_ptr => { | 9420 | .field_parent_ptr => { |
| 9426 | const parent_type = try typeExpr(gz, scope, params[0]); | 9421 | const parent_type = try typeExpr(gz, scope, params[0]); |
| 9427 | const field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[1]); | 9422 | const field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, params[1]); |
| 9428 | const result = try gz.addPlNode(.field_parent_ptr, node, Zir.Inst.FieldParentPtr{ | 9423 | const result = try gz.addPlNode(.field_parent_ptr, node, Zir.Inst.FieldParentPtr{ |
| 9429 | .parent_type = parent_type, | 9424 | .parent_type = parent_type, |
| 9430 | .field_name = field_name, | 9425 | .field_name = field_name, |
| ... | @@ -9561,7 +9556,7 @@ fn hasDeclOrField( | ... | @@ -9561,7 +9556,7 @@ fn hasDeclOrField( |
| 9561 | tag: Zir.Inst.Tag, | 9556 | tag: Zir.Inst.Tag, |
| 9562 | ) InnerError!Zir.Inst.Ref { | 9557 | ) InnerError!Zir.Inst.Ref { |
| 9563 | const container_type = try typeExpr(gz, scope, lhs_node); | 9558 | const container_type = try typeExpr(gz, scope, lhs_node); |
| 9564 | const name = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, rhs_node); | 9559 | const name = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, rhs_node); |
| 9565 | const result = try gz.addPlNode(tag, node, Zir.Inst.Bin{ | 9560 | const result = try gz.addPlNode(tag, node, Zir.Inst.Bin{ |
| 9566 | .lhs = container_type, | 9561 | .lhs = container_type, |
| 9567 | .rhs = name, | 9562 | .rhs = name, |
| ... | @@ -9711,7 +9706,7 @@ fn simpleCBuiltin( | ... | @@ -9711,7 +9706,7 @@ fn simpleCBuiltin( |
| 9711 | ) InnerError!Zir.Inst.Ref { | 9706 | ) InnerError!Zir.Inst.Ref { |
| 9712 | const name: []const u8 = if (tag == .c_undef) "C undef" else "C include"; | 9707 | const name: []const u8 = if (tag == .c_undef) "C undef" else "C include"; |
| 9713 | if (!gz.c_import) return gz.astgen.failNode(node, "{s} valid only inside C import block", .{name}); | 9708 | if (!gz.c_import) return gz.astgen.failNode(node, "{s} valid only inside C import block", .{name}); |
| 9714 | const operand = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, operand_node); | 9709 | const operand = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, operand_node); |
| 9715 | _ = try gz.addExtendedPayload(tag, Zir.Inst.UnNode{ | 9710 | _ = try gz.addExtendedPayload(tag, Zir.Inst.UnNode{ |
| 9716 | .node = gz.nodeIndexToRelative(node), | 9711 | .node = gz.nodeIndexToRelative(node), |
| 9717 | .operand = operand, | 9712 | .operand = operand, |
| ... | @@ -9729,7 +9724,7 @@ fn offsetOf( | ... | @@ -9729,7 +9724,7 @@ fn offsetOf( |
| 9729 | tag: Zir.Inst.Tag, | 9724 | tag: Zir.Inst.Tag, |
| 9730 | ) InnerError!Zir.Inst.Ref { | 9725 | ) InnerError!Zir.Inst.Ref { |
| 9731 | const type_inst = try typeExpr(gz, scope, lhs_node); | 9726 | const type_inst = try typeExpr(gz, scope, lhs_node); |
| 9732 | const field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .ty = .slice_const_u8_type } }, rhs_node); | 9727 | const field_name = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_u8_type } }, rhs_node); |
| 9733 | const result = try gz.addPlNode(tag, node, Zir.Inst.Bin{ | 9728 | const result = try gz.addPlNode(tag, node, Zir.Inst.Bin{ |
| 9734 | .lhs = type_inst, | 9729 | .lhs = type_inst, |
| 9735 | .rhs = field_name, | 9730 | .rhs = field_name, |
| ... | @@ -13148,7 +13143,7 @@ const GenZir = struct { | ... | @@ -13148,7 +13143,7 @@ const GenZir = struct { |
| 13148 | fn addRet(gz: *GenZir, ri: ResultInfo, operand: Zir.Inst.Ref, node: Ast.Node.Index) !void { | 13143 | fn addRet(gz: *GenZir, ri: ResultInfo, operand: Zir.Inst.Ref, node: Ast.Node.Index) !void { |
| 13149 | switch (ri.rl) { | 13144 | switch (ri.rl) { |
| 13150 | .ptr => |ptr_res| _ = try gz.addUnNode(.ret_load, ptr_res.inst, node), | 13145 | .ptr => |ptr_res| _ = try gz.addUnNode(.ret_load, ptr_res.inst, node), |
| 13151 | .ty => _ = try gz.addUnNode(.ret_node, operand, node), | 13146 | .coerced_ty => _ = try gz.addUnNode(.ret_node, operand, node), |
| 13152 | else => unreachable, | 13147 | else => unreachable, |
| 13153 | } | 13148 | } |
| 13154 | } | 13149 | } |