authorgravatar for noam@pixelhero.devNoam Preil <noam@pixelhero.dev> 2020-08-13 12:23:37-04:00
committergravatar for noam@pixelhero.devNoam Preil <noam@pixelhero.dev> 2020-08-16 20:32:50-04:00
log692f38c2509da047e8be15fd7a932aa204f33fd3
tree18251792a839b32f5961df0babd84aec1ec6f19e
parent8d8d568854d33be7bcc2bc9874029d1082914af7
signature Commit is signed but in an unrecognized format.

astgen: minor cleanup


1 files changed, 36 insertions(+), 60 deletions(-)

src-self-hosted/astgen.zig+36-60
......@@ -335,76 +335,52 @@ fn varDecl(
335335 // Depending on the type of AST the initialization expression is, we may need an lvalue
336336 // or an rvalue as a result location. If it is an rvalue, we can use the instruction as
337337 // the variable, no memory location needed.
338 if (nodeMayNeedMemoryLocation(init_node)) {
338 const result_loc = if (nodeMayNeedMemoryLocation(init_node)) r: {
339339 if (node.getTrailer("type_node")) |type_node| {
340340 const type_inst = try typeExpr(mod, scope, type_node);
341341 const alloc = try addZIRUnOp(mod, scope, name_src, .alloc, type_inst);
342 const result_loc: ResultLoc = .{ .ptr = alloc };
343 const init_inst = try expr(mod, scope, result_loc, init_node);
344 const sub_scope = try block_arena.create(Scope.LocalVal);
345 sub_scope.* = .{
346 .parent = scope,
347 .gen_zir = scope.getGenZIR(),
348 .name = ident_name,
349 .inst = init_inst,
350 };
351 return &sub_scope.base;
342 break :r ResultLoc{ .ptr = alloc };
352343 } else {
353344 const alloc = try addZIRNoOpT(mod, scope, name_src, .alloc_inferred);
354 const result_loc: ResultLoc = .{ .inferred_ptr = alloc };
355 const init_inst = try expr(mod, scope, result_loc, init_node);
356 const sub_scope = try block_arena.create(Scope.LocalVal);
357 sub_scope.* = .{
358 .parent = scope,
359 .gen_zir = scope.getGenZIR(),
360 .name = ident_name,
361 .inst = init_inst,
362 };
363 return &sub_scope.base;
345 break :r ResultLoc{ .inferred_ptr = alloc };
364346 }
365 } else {
366 const result_loc: ResultLoc = if (node.getTrailer("type_node")) |type_node|
367 .{ .ty = try typeExpr(mod, scope, type_node) }
347 } else r: {
348 if (node.getTrailer("type_node")) |type_node|
349 break :r ResultLoc{ .ty = try typeExpr(mod, scope, type_node) }
368350 else
369 .none;
370 const init_inst = try expr(mod, scope, result_loc, init_node);
371 const sub_scope = try block_arena.create(Scope.LocalVal);
372 sub_scope.* = .{
373 .parent = scope,
374 .gen_zir = scope.getGenZIR(),
375 .name = ident_name,
376 .inst = init_inst,
377 };
378 return &sub_scope.base;
379 }
351 break :r .none;
352 };
353 const init_inst = try expr(mod, scope, result_loc, init_node);
354 const sub_scope = try block_arena.create(Scope.LocalVal);
355 sub_scope.* = .{
356 .parent = scope,
357 .gen_zir = scope.getGenZIR(),
358 .name = ident_name,
359 .inst = init_inst,
360 };
361 return &sub_scope.base;
380362 },
381363 .Keyword_var => {
382 if (node.getTrailer("type_node")) |type_node| {
364 const alloc = if (node.getTrailer("type_node")) |type_node| a: {
383365 const type_inst = try typeExpr(mod, scope, type_node);
384 const alloc = try addZIRUnOp(mod, scope, name_src, .alloc, type_inst);
385 const result_loc: ResultLoc = .{ .ptr = alloc };
386 const init_inst = try expr(mod, scope, result_loc, init_node);
387 const sub_scope = try block_arena.create(Scope.LocalPtr);
388 sub_scope.* = .{
389 .parent = scope,
390 .gen_zir = scope.getGenZIR(),
391 .name = ident_name,
392 .ptr = alloc,
393 };
394 return &sub_scope.base;
395 } else {
396 const alloc = try addZIRNoOp(mod, scope, name_src, .alloc_inferred);
397 const result_loc = .{ .inferred_ptr = alloc.castTag(.alloc_inferred).? };
398 const init_inst = try expr(mod, scope, result_loc, init_node);
399 const sub_scope = try block_arena.create(Scope.LocalPtr);
400 sub_scope.* = .{
401 .parent = scope,
402 .gen_zir = scope.getGenZIR(),
403 .name = ident_name,
404 .ptr = alloc,
405 };
406 return &sub_scope.base;
407 }
366 break :a try addZIRUnOp(mod, scope, name_src, .alloc, type_inst);
367 } else try addZIRNoOp(mod, scope, name_src, .alloc_inferred);
368 const result_loc = r: {
369 if (node.getTrailer("type_node")) |type_node| {
370 break :r ResultLoc{ .ptr = alloc };
371 } else {
372 break :r ResultLoc{ .inferred_ptr = alloc.castTag(.alloc_inferred).? };
373 }
374 };
375 const init_inst = try expr(mod, scope, result_loc, init_node);
376 const sub_scope = try block_arena.create(Scope.LocalPtr);
377 sub_scope.* = .{
378 .parent = scope,
379 .gen_zir = scope.getGenZIR(),
380 .name = ident_name,
381 .ptr = alloc,
382 };
383 return &sub_scope.base;
408384 },
409385 else => unreachable,
410386 }