Added more warnings

This commit is contained in:
Mattia Giambirtone 2022-11-22 15:27:32 +01:00
parent a3b4fd1048
commit 43d67562f1
1 changed files with 15 additions and 4 deletions

View File

@ -1212,14 +1212,13 @@ proc endScope(self: Compiler) =
for name in self.names:
if name.depth > self.depth:
names.add(name)
if not name.resolved and not self.replMode:
self.warning(UnusedName, &"'{name.ident.token.lexeme}' is declared but not used")
#continue
if name.owner != self.currentModule and self.depth > -1:
# Names coming from other modules only go out of scope
# when the global scope is closed (i.e. at the end of
# the module)
continue
if not name.resolved and not self.replMode:
self.warning(UnusedName, &"'{name.ident.token.lexeme}' is declared but not used")
if name.kind == NameKind.Var:
inc(popCount)
elif name.kind == NameKind.Argument:
@ -1752,8 +1751,16 @@ proc blockStmt(self: Compiler, node: BlockStmt) =
## Compiles block statements, which create a new
## local scope
self.beginScope()
var last: Declaration
for decl in node.code:
if not last.isNil():
case last.kind:
of breakStmt, continueStmt:
self.warning(UnreachableCode, &"code after '{last.token.lexeme}' statement is unreachable")
else:
discard
self.declaration(decl)
last = decl
self.endScope()
@ -2014,7 +2021,6 @@ proc deferStmt(self: Compiler, node: DeferStmt) =
proc returnStmt(self: Compiler, node: ReturnStmt) =
## Compiles return statements
if not node.value.isNil():
self.expression(node.value)
self.emitByte(OpCode.SetResult, node.token.line)
@ -2282,9 +2288,14 @@ proc funDecl(self: Compiler, node: FunDecl, name: Name) =
# the try/finally block with the deferred
# code
var deferStart = self.deferred.len()
var last: Declaration
self.beginScope()
for decl in BlockStmt(node.body).code:
if not last.isNil():
if last.kind == returnStmt:
self.warning(UnreachableCode, "code after 'return' statement is unreachable")
self.declaration(decl)
last = decl
let typ = self.currentFunction.valueType.returnType
var hasVal: bool = false
case self.currentFunction.valueType.fun.kind: