aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGanesh Viswanathan <dev@genotrance.com>2019-01-31 19:43:32 -0600
committerGanesh Viswanathan <dev@genotrance.com>2019-01-31 19:43:32 -0600
commit4152564b398d1cc9214281d274e332d8e4d48012 (patch)
tree2e072952c318b9057c667aa85dfa9f1bbc4f7be4
parent013c925490fa0a524169e557d2bf5936360e5ee9 (diff)
downloadnimterop-4152564b398d1cc9214281d274e332d8e4d48012.tar.gz
nimterop-4152564b398d1cc9214281d274e332d8e4d48012.zip
Fix #95 - error for multiple underscores
-rw-r--r--nimterop/getters.nim26
1 files changed, 16 insertions, 10 deletions
diff --git a/nimterop/getters.nim b/nimterop/getters.nim
index 42dc9f9..9d8da6e 100644
--- a/nimterop/getters.nim
+++ b/nimterop/getters.nim
@@ -87,16 +87,25 @@ proc getType*(str: string): string =
if gTypeMap.hasKey(result):
result = gTypeMap[result]
-template checkUnderscores(name, errmsg: string): untyped =
+proc checkIdentifier(name, kind, parent, origName: string) =
+ let
+ parentStr = if parent.nBl: parent & ":" else: ""
+
if name.len != 0:
- doAssert name[0] != '_' and name[^1] != '_', errmsg
+ let
+ origStr = if name != origName: ", originally '{origName}' before 'cPlugin:onSymbol()', still" else: ""
+ errmsg = &"Identifier '{parentStr}{name}' ({kind}){origStr} contains"
+
+ doAssert name[0] != '_' and name[^1] != '_', errmsg & " leading/trailing underscores '_'"
+
+ doAssert (not name.contains(re"_[_]+")): errmsg & " more than one consecutive underscore '_'"
+
+ if parent.nBl:
+ doAssert name.nBl, &"Blank identifier, originally '{parentStr}{name}' ({kind}), cannot be empty"
proc getIdentifier*(name: string, kind: NimSymKind, parent=""): string =
doAssert name.len != 0, "Blank identifier error"
- let
- parentStr = if parent.nBl: parent & ":" else: ""
-
if name notin gStateRT.symOverride or parent.nBl:
if gStateRT.onSymbol != nil:
var
@@ -104,13 +113,10 @@ proc getIdentifier*(name: string, kind: NimSymKind, parent=""): string =
gStateRT.onSymbol(sym)
result = sym.name
- checkUnderscores(result, &"Identifier '{parentStr}{name}' ({kind}) still contains leading/trailing underscores '_' after 'cPlugin:onSymbol()': result '{result}'")
-
- if parent.nBl:
- doAssert result.nBl, &"Blank identifier, originally '{parentStr}{name}' ({kind}), cannot be empty"
else:
result = name
- checkUnderscores(result, &"Identifier '{parentStr}{result}' ({kind}) contains unsupported leading/trailing underscores '_': use 'cPlugin:onSymbol()' to remove")
+
+ checkIdentifier(result, $kind, parent, name)
if result in gReserved:
result = &"`{result}`"