parent
d8a8c8806f
commit
43832f8e57
5 changed files with 10 additions and 26 deletions
|
|
@ -33,7 +33,7 @@ type
|
||||||
warnFieldXNotSupported, warnCommentXIgnored,
|
warnFieldXNotSupported, warnCommentXIgnored,
|
||||||
warnTypelessParam,
|
warnTypelessParam,
|
||||||
warnUseBase, warnWriteToForeignHeap, warnUnsafeCode,
|
warnUseBase, warnWriteToForeignHeap, warnUnsafeCode,
|
||||||
warnEachIdentIsTuple, warnShadowIdent,
|
warnEachIdentIsTuple,
|
||||||
warnProveInit, warnProveField, warnProveIndex, warnGcUnsafe, warnGcUnsafe2,
|
warnProveInit, warnProveField, warnProveIndex, warnGcUnsafe, warnGcUnsafe2,
|
||||||
warnUninit, warnGcMem, warnDestructor, warnLockLevel, warnResultShadowed,
|
warnUninit, warnGcMem, warnDestructor, warnLockLevel, warnResultShadowed,
|
||||||
warnInconsistentSpacing, warnUser,
|
warnInconsistentSpacing, warnUser,
|
||||||
|
|
@ -79,7 +79,6 @@ const
|
||||||
warnWriteToForeignHeap: "write to foreign heap",
|
warnWriteToForeignHeap: "write to foreign heap",
|
||||||
warnUnsafeCode: "unsafe code: '$1'",
|
warnUnsafeCode: "unsafe code: '$1'",
|
||||||
warnEachIdentIsTuple: "each identifier is a tuple",
|
warnEachIdentIsTuple: "each identifier is a tuple",
|
||||||
warnShadowIdent: "shadowed identifier: '$1'",
|
|
||||||
warnProveInit: "Cannot prove that '$1' is initialized. This will become a compile time error in the future.",
|
warnProveInit: "Cannot prove that '$1' is initialized. This will become a compile time error in the future.",
|
||||||
warnProveField: "cannot prove that field '$1' is accessible",
|
warnProveField: "cannot prove that field '$1' is accessible",
|
||||||
warnProveIndex: "cannot prove index '$1' is valid",
|
warnProveIndex: "cannot prove index '$1' is valid",
|
||||||
|
|
@ -132,7 +131,7 @@ const
|
||||||
"LanguageXNotSupported", "FieldXNotSupported",
|
"LanguageXNotSupported", "FieldXNotSupported",
|
||||||
"CommentXIgnored",
|
"CommentXIgnored",
|
||||||
"TypelessParam", "UseBase", "WriteToForeignHeap",
|
"TypelessParam", "UseBase", "WriteToForeignHeap",
|
||||||
"UnsafeCode", "EachIdentIsTuple", "ShadowIdent",
|
"UnsafeCode", "EachIdentIsTuple",
|
||||||
"ProveInit", "ProveField", "ProveIndex", "GcUnsafe", "GcUnsafe2", "Uninit",
|
"ProveInit", "ProveField", "ProveIndex", "GcUnsafe", "GcUnsafe2", "Uninit",
|
||||||
"GcMem", "Destructor", "LockLevel", "ResultShadowed",
|
"GcMem", "Destructor", "LockLevel", "ResultShadowed",
|
||||||
"Spacing", "User"]
|
"Spacing", "User"]
|
||||||
|
|
@ -167,7 +166,7 @@ type
|
||||||
proc computeNotesVerbosity(): array[0..3, TNoteKinds] =
|
proc computeNotesVerbosity(): array[0..3, TNoteKinds] =
|
||||||
result[3] = {low(TNoteKind)..high(TNoteKind)} - {}
|
result[3] = {low(TNoteKind)..high(TNoteKind)} - {}
|
||||||
result[2] = result[3] - {hintStackTrace, warnUninit, hintExtendedContext}
|
result[2] = result[3] - {hintStackTrace, warnUninit, hintExtendedContext}
|
||||||
result[1] = result[2] - {warnShadowIdent, warnProveField, warnProveIndex,
|
result[1] = result[2] - {warnProveField, warnProveIndex,
|
||||||
warnGcUnsafe, hintPath, hintDependency, hintCodeBegin, hintCodeEnd,
|
warnGcUnsafe, hintPath, hintDependency, hintCodeBegin, hintCodeEnd,
|
||||||
hintSource, hintGlobalVar, hintGCStats}
|
hintSource, hintGlobalVar, hintGCStats}
|
||||||
result[0] = result[1] - {hintSuccessX, hintSuccess, hintConf,
|
result[0] = result[1] - {hintSuccessX, hintSuccess, hintConf,
|
||||||
|
|
|
||||||
|
|
@ -524,10 +524,6 @@ proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode =
|
||||||
shadowed.flags.incl(sfShadowed)
|
shadowed.flags.incl(sfShadowed)
|
||||||
if shadowed.kind == skResult and sfGenSym notin v.flags:
|
if shadowed.kind == skResult and sfGenSym notin v.flags:
|
||||||
message(c.config, a.info, warnResultShadowed)
|
message(c.config, a.info, warnResultShadowed)
|
||||||
# a shadowed variable is an error unless it appears on the right
|
|
||||||
# side of the '=':
|
|
||||||
if warnShadowIdent in c.config.notes and not identWithin(def, v.name):
|
|
||||||
message(c.config, a.info, warnShadowIdent, v.name.s)
|
|
||||||
if a.kind != nkVarTuple:
|
if a.kind != nkVarTuple:
|
||||||
if def.kind != nkEmpty:
|
if def.kind != nkEmpty:
|
||||||
if sfThread in v.flags: localError(c.config, def.info, errThreadvarCannotInit)
|
if sfThread in v.flags: localError(c.config, def.info, errThreadvarCannotInit)
|
||||||
|
|
@ -651,14 +647,6 @@ proc semConst(c: PContext, n: PNode): PNode =
|
||||||
|
|
||||||
include semfields
|
include semfields
|
||||||
|
|
||||||
proc addForVarDecl(c: PContext, v: PSym) =
|
|
||||||
if warnShadowIdent in c.config.notes:
|
|
||||||
let shadowed = findShadowedVar(c, v)
|
|
||||||
if shadowed != nil:
|
|
||||||
# XXX should we do this here?
|
|
||||||
#shadowed.flags.incl(sfShadowed)
|
|
||||||
message(c.config, v.info, warnShadowIdent, v.name.s)
|
|
||||||
addDecl(c, v)
|
|
||||||
|
|
||||||
proc symForVar(c: PContext, n: PNode): PSym =
|
proc symForVar(c: PContext, n: PNode): PSym =
|
||||||
let m = if n.kind == nkPragmaExpr: n.sons[0] else: n
|
let m = if n.kind == nkPragmaExpr: n.sons[0] else: n
|
||||||
|
|
@ -693,7 +681,7 @@ proc semForVars(c: PContext, n: PNode; flags: TExprFlags): PNode =
|
||||||
else:
|
else:
|
||||||
v.typ = iter.sons[i]
|
v.typ = iter.sons[i]
|
||||||
n.sons[0][i] = newSymNode(v)
|
n.sons[0][i] = newSymNode(v)
|
||||||
if sfGenSym notin v.flags: addForVarDecl(c, v)
|
if sfGenSym notin v.flags: addDecl(c, v)
|
||||||
elif v.owner == nil: v.owner = getCurrOwner(c)
|
elif v.owner == nil: v.owner = getCurrOwner(c)
|
||||||
else:
|
else:
|
||||||
var v = symForVar(c, n.sons[0])
|
var v = symForVar(c, n.sons[0])
|
||||||
|
|
@ -703,7 +691,7 @@ proc semForVars(c: PContext, n: PNode; flags: TExprFlags): PNode =
|
||||||
# for an example:
|
# for an example:
|
||||||
v.typ = iterBase
|
v.typ = iterBase
|
||||||
n.sons[0] = newSymNode(v)
|
n.sons[0] = newSymNode(v)
|
||||||
if sfGenSym notin v.flags: addForVarDecl(c, v)
|
if sfGenSym notin v.flags: addDecl(c, v)
|
||||||
elif v.owner == nil: v.owner = getCurrOwner(c)
|
elif v.owner == nil: v.owner = getCurrOwner(c)
|
||||||
else:
|
else:
|
||||||
localError(c.config, n.info, errWrongNumberOfVariables)
|
localError(c.config, n.info, errWrongNumberOfVariables)
|
||||||
|
|
@ -727,7 +715,7 @@ proc semForVars(c: PContext, n: PNode; flags: TExprFlags): PNode =
|
||||||
else:
|
else:
|
||||||
v.typ = iter[i][j]
|
v.typ = iter[i][j]
|
||||||
n.sons[i][j] = newSymNode(v)
|
n.sons[i][j] = newSymNode(v)
|
||||||
if not isDiscardUnderscore(v): addForVarDecl(c, v)
|
if not isDiscardUnderscore(v): addDecl(c, v)
|
||||||
elif v.owner == nil: v.owner = getCurrOwner(c)
|
elif v.owner == nil: v.owner = getCurrOwner(c)
|
||||||
else:
|
else:
|
||||||
var v = symForVar(c, n.sons[i])
|
var v = symForVar(c, n.sons[i])
|
||||||
|
|
@ -735,7 +723,7 @@ proc semForVars(c: PContext, n: PNode; flags: TExprFlags): PNode =
|
||||||
v.typ = iter.sons[i]
|
v.typ = iter.sons[i]
|
||||||
n.sons[i] = newSymNode(v)
|
n.sons[i] = newSymNode(v)
|
||||||
if sfGenSym notin v.flags:
|
if sfGenSym notin v.flags:
|
||||||
if not isDiscardUnderscore(v): addForVarDecl(c, v)
|
if not isDiscardUnderscore(v): addDecl(c, v)
|
||||||
elif v.owner == nil: v.owner = getCurrOwner(c)
|
elif v.owner == nil: v.owner = getCurrOwner(c)
|
||||||
inc(c.p.nestedLoopCounter)
|
inc(c.p.nestedLoopCounter)
|
||||||
openScope(c)
|
openScope(c)
|
||||||
|
|
|
||||||
|
|
@ -62,8 +62,6 @@ SmallLshouldNotBeUsed The letter 'l' should not be used as an
|
||||||
identifier.
|
identifier.
|
||||||
EachIdentIsTuple The code contains a confusing ``var``
|
EachIdentIsTuple The code contains a confusing ``var``
|
||||||
declaration.
|
declaration.
|
||||||
ShadowIdent A local variable shadows another local
|
|
||||||
variable of an outer scope.
|
|
||||||
User Some user defined warning.
|
User Some user defined warning.
|
||||||
========================== ============================================
|
========================== ============================================
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,7 @@ type
|
||||||
warnFieldXNotSupported, warnCommentXIgnored,
|
warnFieldXNotSupported, warnCommentXIgnored,
|
||||||
warnNilStatement, warnTypelessParam,
|
warnNilStatement, warnTypelessParam,
|
||||||
warnDifferentHeaps, warnWriteToForeignHeap, warnUnsafeCode,
|
warnDifferentHeaps, warnWriteToForeignHeap, warnUnsafeCode,
|
||||||
warnEachIdentIsTuple, warnShadowIdent,
|
warnEachIdentIsTuple
|
||||||
warnProveInit, warnProveField, warnProveIndex, warnGcUnsafe, warnGcUnsafe2,
|
warnProveInit, warnProveField, warnProveIndex, warnGcUnsafe, warnGcUnsafe2,
|
||||||
warnUninit, warnGcMem, warnDestructor, warnLockLevel, warnResultShadowed,
|
warnUninit, warnGcMem, warnDestructor, warnLockLevel, warnResultShadowed,
|
||||||
warnUser,
|
warnUser,
|
||||||
|
|
|
||||||
|
|
@ -169,7 +169,7 @@ type
|
||||||
warnFieldXNotSupported, warnCommentXIgnored,
|
warnFieldXNotSupported, warnCommentXIgnored,
|
||||||
warnNilStatement, warnTypelessParam,
|
warnNilStatement, warnTypelessParam,
|
||||||
warnDifferentHeaps, warnWriteToForeignHeap, warnUnsafeCode,
|
warnDifferentHeaps, warnWriteToForeignHeap, warnUnsafeCode,
|
||||||
warnEachIdentIsTuple, warnShadowIdent,
|
warnEachIdentIsTuple,
|
||||||
warnProveInit, warnProveField, warnProveIndex, warnGcUnsafe, warnGcUnsafe2,
|
warnProveInit, warnProveField, warnProveIndex, warnGcUnsafe, warnGcUnsafe2,
|
||||||
warnUninit, warnGcMem, warnDestructor, warnLockLevel, warnResultShadowed,
|
warnUninit, warnGcMem, warnDestructor, warnLockLevel, warnResultShadowed,
|
||||||
warnUser,
|
warnUser,
|
||||||
|
|
@ -196,8 +196,7 @@ type
|
||||||
|
|
||||||
var
|
var
|
||||||
gNotes*: TNoteKinds = {low(TNoteKind)..high(TNoteKind)} -
|
gNotes*: TNoteKinds = {low(TNoteKind)..high(TNoteKind)} -
|
||||||
{warnShadowIdent, warnUninit,
|
{warnUninit, warnProveField, warnProveIndex, warnGcUnsafe}
|
||||||
warnProveField, warnProveIndex, warnGcUnsafe}
|
|
||||||
|
|
||||||
|
|
||||||
#import compiler.msgs
|
#import compiler.msgs
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue