private void ResolveExprLet(Grammar.ASTNodeExprLet exprLet, ref int curSegment, Core.DataAccess output) { // Create a new storage location and name binding. var registerIndex = funct.CreateRegister(new Core.TypePlaceholder(), exprLet.mutable); var name = NameResolver.Resolve(((Grammar.ASTNodeExprNameConcrete)exprLet.name).name); funct.CreateBinding( name, registerIndex, exprLet.name.GetSpan()); localScopeLivenesses.Add(true); // Parse type annotation, if there is one. if (exprLet.type != null) { funct.registerTypes[registerIndex] = TypeResolver.Resolve(session, exprLet.type, useDirectives, false); } // Parse init expression, if there is one. if (exprLet.initExpr != null) { ResolveExpr(exprLet.initExpr, ref curSegment, Core.DataAccessRegister.ForRegister(exprLet.name.GetSpan(), registerIndex)); } // Generate a void store. funct.AddInstruction(curSegment, Core.InstructionMoveLiteralTuple.Empty(exprLet.GetSpan(), output)); }