Skip to content

Commit 4d35793

Browse files
committed
address comments
1 parent 978f6a8 commit 4d35793

File tree

5 files changed

+21
-13
lines changed

5 files changed

+21
-13
lines changed

compiler/options.nim

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ type
134134
## This requires building nim with `-d:nimHasLibFFI`
135135
## which itself requires `nimble install libffi`, see #10150
136136
## Note: this feature can't be localized with {.push.}
137+
aliasSym,
138+
## enable `Alias` magic to alias symbols
137139

138140
SymbolFilesOption* = enum
139141
disabledSf, writeOnlySf, readOnlySf, v2Sf

compiler/semexprs.nim

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2244,7 +2244,10 @@ proc semMagic(c: PContext, n: PNode, s: PSym, flags: TExprFlags): PNode =
22442244
of mSizeOf: result =
22452245
semSizeof(c, setMs(n, s))
22462246
of mAlias:
2247-
result = semAlias(c, n, s, flags)
2247+
if aliasSym in c.features:
2248+
result = semAlias(c, n, s, flags)
2249+
else:
2250+
globalError(c.config, n.info, "requires --experimental:aliasSym")
22482251
else:
22492252
result = semDirectOp(c, n, flags)
22502253

lib/pure/sugar.nim

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,3 +238,15 @@ macro distinctBase*(T: typedesc): untyped =
238238
while typeSym.typeKind == ntyDistinct:
239239
typeSym = getTypeImpl(typeSym)[0]
240240
typeSym.freshIdentNodes
241+
242+
when defined(nimHasAlias):
243+
proc aliasImpl[T1, T2](name: T1, expr: T2) {.magic: "Alias".}
244+
245+
template `:=`*(name, expr) =
246+
## Declares `a` as alias of `expr`, which must resolve to a symbol.
247+
runnableExamples:
248+
echo2:=system.echo
249+
echo2 "hello"
250+
declared2:=system.declared
251+
doAssert declared2(echo2)
252+
aliasImpl(name, expr)

lib/system.nim

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -149,18 +149,6 @@ else:
149149
template runnableExamples*(body: untyped) =
150150
discard
151151

152-
when defined(nimHasAlias):
153-
proc aliasImpl[T1, T2](name: T1, expr: T2) {.magic: "Alias".}
154-
155-
template `:=`*(name, expr) =
156-
## Declares `a` as alias of `expr`, which must resolve to a symbol.
157-
runnableExamples:
158-
echo2:=system.echo
159-
echo2 "hello"
160-
declared2:=system.declared
161-
doAssert declared2(echo2)
162-
aliasImpl(name, expr)
163-
164152
proc declared*(x: untyped): bool {.magic: "Defined", noSideEffect, compileTime.}
165153
## Special compile-time procedure that checks whether `x` is
166154
## declared. `x` has to be an identifier or a qualified identifier.

tests/magics/talias2.nim

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import std/macros
2+
import std/sugar
3+
4+
{.push experimental: "aliasSym".}
25

36
proc fun0(a: int): auto = $a
47
template fun3(a: int): untyped = $a

0 commit comments

Comments
 (0)