mirror of
https://github.com/nim-lang/Nim.git
synced 2026-09-01 11:23:40 +00:00
Compare commits
5 Commits
pr_distinc
...
pr_shadowi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3e6a2a13d9 | ||
|
|
8af81e3d24 | ||
|
|
aca59572c7 | ||
|
|
07463c00fc | ||
|
|
1c79ef1090 |
@@ -17,8 +17,9 @@ type
|
||||
field: PSym
|
||||
replaceByFieldName: bool
|
||||
c: PContext
|
||||
leftPartOfDefinition: bool
|
||||
|
||||
proc instFieldLoopBody(c: TFieldInstCtx, n: PNode, forLoop: PNode): PNode =
|
||||
proc instFieldLoopBody(c: var TFieldInstCtx, n: PNode, forLoop: PNode): PNode =
|
||||
if c.field != nil and isEmptyType(c.field.typ):
|
||||
result = newNode(nkEmpty)
|
||||
return
|
||||
@@ -29,6 +30,9 @@ proc instFieldLoopBody(c: TFieldInstCtx, n: PNode, forLoop: PNode): PNode =
|
||||
let ident = considerQuotedIdent(c.c, n)
|
||||
if c.replaceByFieldName:
|
||||
if ident.id == considerQuotedIdent(c.c, forLoop[0]).id:
|
||||
if c.leftPartOfDefinition:
|
||||
localError(c.c.config, n.info,
|
||||
"redefine field variable '$1' in a 'fields' loop" % [ident.s])
|
||||
let fieldName = if c.tupleType.isNil: c.field.name.s
|
||||
elif c.tupleType.n.isNil: "Field" & $c.tupleIndex
|
||||
else: c.tupleType.n[c.tupleIndex].sym.name.s
|
||||
@@ -37,6 +41,9 @@ proc instFieldLoopBody(c: TFieldInstCtx, n: PNode, forLoop: PNode): PNode =
|
||||
# other fields:
|
||||
for i in ord(c.replaceByFieldName)..<forLoop.len-2:
|
||||
if ident.id == considerQuotedIdent(c.c, forLoop[i]).id:
|
||||
if c.leftPartOfDefinition:
|
||||
localError(c.c.config, n.info,
|
||||
"redefine field variable '$1' in a 'fields' loop" % [ident.s])
|
||||
var call = forLoop[^2]
|
||||
var tupl = call[i+1-ord(c.replaceByFieldName)]
|
||||
if c.field.isNil:
|
||||
@@ -48,6 +55,13 @@ proc instFieldLoopBody(c: TFieldInstCtx, n: PNode, forLoop: PNode): PNode =
|
||||
result.add(tupl)
|
||||
result.add(newSymNode(c.field, n.info))
|
||||
break
|
||||
of nkIdentDefs, nkVarTuple, nkConstDef:
|
||||
result = shallowCopy(n)
|
||||
c.leftPartOfDefinition = true
|
||||
result[0] = instFieldLoopBody(c, n[0], forLoop)
|
||||
c.leftPartOfDefinition = false
|
||||
for i in 1..<n.len:
|
||||
result[i] = instFieldLoopBody(c, n[i], forLoop)
|
||||
else:
|
||||
if n.kind == nkContinueStmt:
|
||||
localError(c.c.config, n.info,
|
||||
|
||||
@@ -306,10 +306,10 @@ else:
|
||||
type
|
||||
# Atomic*[T] {.importcpp: "_Atomic('0)".} = object
|
||||
|
||||
AtomicInt8 {.importc: "_Atomic NI8".} = distinct int8
|
||||
AtomicInt16 {.importc: "_Atomic NI16".} = distinct int16
|
||||
AtomicInt32 {.importc: "_Atomic NI32".} = distinct int32
|
||||
AtomicInt64 {.importc: "_Atomic NI64".} = distinct int64
|
||||
AtomicInt8 {.importc: "_Atomic NI8".} = int8
|
||||
AtomicInt16 {.importc: "_Atomic NI16".} = int16
|
||||
AtomicInt32 {.importc: "_Atomic NI32".} = int32
|
||||
AtomicInt64 {.importc: "_Atomic NI64".} = int64
|
||||
|
||||
type
|
||||
AtomicFlag* {.importc: "atomic_flag".maybeWrapStd, size: 1.} = object
|
||||
|
||||
Reference in New Issue
Block a user