* Uses errGenerated instead of deprecated extending of enums. * Reduces bloat and usefulness of end user error messages. * Limits checks to C, Cpp and Objc targets.
This commit is contained in:
parent
adb390af4b
commit
3aa7f65240
2 changed files with 10 additions and 13 deletions
|
|
@ -105,7 +105,7 @@ type
|
||||||
errThreadvarCannotInit, errWrongSymbolX, errIllegalCaptureX,
|
errThreadvarCannotInit, errWrongSymbolX, errIllegalCaptureX,
|
||||||
errXCannotBeClosure, errXMustBeCompileTime,
|
errXCannotBeClosure, errXMustBeCompileTime,
|
||||||
errCannotInferTypeOfTheLiteral,
|
errCannotInferTypeOfTheLiteral,
|
||||||
errBadExport, errUser
|
errUser,
|
||||||
warnCannotOpenFile,
|
warnCannotOpenFile,
|
||||||
warnOctalEscape, warnXIsNeverRead, warnXmightNotBeenInit,
|
warnOctalEscape, warnXIsNeverRead, warnXmightNotBeenInit,
|
||||||
warnDeprecated, warnConfigDeprecated,
|
warnDeprecated, warnConfigDeprecated,
|
||||||
|
|
@ -350,7 +350,6 @@ const
|
||||||
errXCannotBeClosure: "'$1' cannot have 'closure' calling convention",
|
errXCannotBeClosure: "'$1' cannot have 'closure' calling convention",
|
||||||
errXMustBeCompileTime: "'$1' can only be used in compile-time context",
|
errXMustBeCompileTime: "'$1' can only be used in compile-time context",
|
||||||
errCannotInferTypeOfTheLiteral: "cannot infer the type of the $1",
|
errCannotInferTypeOfTheLiteral: "cannot infer the type of the $1",
|
||||||
errBadExport: "invalid exported symbol, $1",
|
|
||||||
errUser: "$1",
|
errUser: "$1",
|
||||||
warnCannotOpenFile: "cannot open \'$1\' [CannotOpenFile]",
|
warnCannotOpenFile: "cannot open \'$1\' [CannotOpenFile]",
|
||||||
warnOctalEscape: "octal escape sequences do not exist; leading zero is ignored [OctalEscape]",
|
warnOctalEscape: "octal escape sequences do not exist; leading zero is ignored [OctalEscape]",
|
||||||
|
|
|
||||||
|
|
@ -99,25 +99,23 @@ proc makeExternImport(s: PSym, extname: string) =
|
||||||
|
|
||||||
const invalidIdentChars = AllChars - IdentChars
|
const invalidIdentChars = AllChars - IdentChars
|
||||||
|
|
||||||
proc validateExternName(s: PSym, info: TLineInfo) =
|
proc validateExternCName(s: PSym, info: TLineInfo) =
|
||||||
## Validates that the symbol name in s.loc.r is a valid C identifier.
|
## Validates that the symbol name in s.loc.r is a valid C identifier.
|
||||||
##
|
##
|
||||||
## Valid identifiers are those alphanumeric including the underscore not
|
## Valid identifiers are those alphanumeric including the underscore not
|
||||||
## starting with a number. If the check fails, a friendly error will be
|
## starting with a number. If the check fails, a generic error will be
|
||||||
## displayed to the user.
|
## displayed to the user.
|
||||||
let target = ropeToStr(s.loc.r)
|
let target = ropeToStr(s.loc.r)
|
||||||
if target.len < 1:
|
if target.len < 1 or (not (target[0] in IdentStartChars)) or
|
||||||
localError(info, errBadExport, "can't be zero length")
|
(not target.allCharsInSet(IdentChars)):
|
||||||
if not (target[0] in IdentStartChars):
|
localError(info, errGenerated, "invalid exported symbol")
|
||||||
localError(info, errBadExport, "'" & target & "' can't start with a number")
|
|
||||||
if not target.allCharsInSet(IdentChars):
|
|
||||||
let pos = target.find(invalidIdentChars, 1)
|
|
||||||
localError(info, errBadExport, "'" & target &
|
|
||||||
"' contains bad character at byte " & $pos)
|
|
||||||
|
|
||||||
proc makeExternExport(s: PSym, extname: string, info: TLineInfo) =
|
proc makeExternExport(s: PSym, extname: string, info: TLineInfo) =
|
||||||
setExternName(s, extname)
|
setExternName(s, extname)
|
||||||
validateExternName(s, info)
|
case gCmd
|
||||||
|
of cmdCompileToC, cmdCompileToCpp, cmdCompileToOC:
|
||||||
|
validateExternCName(s, info)
|
||||||
|
else: discard
|
||||||
incl(s.flags, sfExportc)
|
incl(s.flags, sfExportc)
|
||||||
|
|
||||||
proc processImportCompilerProc(s: PSym, extname: string) =
|
proc processImportCompilerProc(s: PSym, extname: string) =
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue