Addresses issues raised on #947. Refs #800.

* 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:
Grzegorz Adam Hankiewicz 2014-02-22 10:18:33 +01:00
commit 3aa7f65240
2 changed files with 10 additions and 13 deletions

View file

@ -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]",

View file

@ -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) =