private VarInfo AddVar(Lexema var, SemType type) { var name = var.Tok; var currentFrame = environment.Last(); if (currentFrame.ContainsKey(name)) { var prev = currentFrame[name]; throw new SemanticException($"Cannot redefine variable: `{name}`", var, $"previous declaration at {prev.Location.Line}:{prev.Location.Symbol}"); } return(currentFrame[name] = VarInfo.Of(type, var, "")); }
private VarInfo AddVar(Lexema var, SemType type) { var name = var.Tok; var currentFrame = environment.Last(); if (currentFrame.ContainsKey(name)) { var prev = currentFrame[name]; throw new SemanticException($"Cannot redefine variable: `{name}`", var, $"previous declaration at {prev.Location.Line}:{prev.Location.Symbol}"); } var varInfo = VarInfo.Of(type, var, Scope, allocSize); if (type != SemType.Function) { allocSize += GetSize(type); allocMax = Math.Max(allocSize, allocMax); } return(currentFrame[name] = varInfo); }