From 97fefa3f50a7a594d57b25dcda4ef36f88df8364 Mon Sep 17 00:00:00 2001 From: Zahary Karadjov Date: Mon, 17 Sep 2018 18:19:44 +0300 Subject: [PATCH] some simple sub-expression elimination not applied by the previos author --- lib/core/macros.nim | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/core/macros.nim b/lib/core/macros.nim index 0ac46b54d7..e7ef895519 100644 --- a/lib/core/macros.nim +++ b/lib/core/macros.nim @@ -1325,13 +1325,14 @@ proc customPragmaNode(n: NimNode): NimNode = var typDef = getImpl(getTypeInst(if n.kind == nnkCheckedFieldExpr or n[0].kind == nnkHiddenDeref: n[0][0] else: n[0])) while typDef != nil: typDef.expectKind(nnkTypeDef) - typDef[2].expectKind({nnkRefTy, nnkPtrTy, nnkObjectTy}) - let isRef = typDef[2].kind in {nnkRefTy, nnkPtrTy} - if isRef and typDef[2][0].kind in {nnkSym, nnkBracketExpr}: # defines ref type for another object(e.g. X = ref X) - typDef = getImpl(typDef[2][0]) + let typ = typDef[2] + typ.expectKind({nnkRefTy, nnkPtrTy, nnkObjectTy}) + let isRef = typ.kind in {nnkRefTy, nnkPtrTy} + if isRef and typ[0].kind in {nnkSym, nnkBracketExpr}: # defines ref type for another object(e.g. X = ref X) + typDef = getImpl(typ[0]) else: # object definition, maybe an object directly defined as a ref type let - obj = (if isRef: typDef[2][0] else: typDef[2]) + obj = (if isRef: typ[0] else: typ) var identDefsStack = newSeq[NimNode](obj[2].len) for i in 0.. 0: @@ -1339,13 +1340,14 @@ proc customPragmaNode(n: NimNode): NimNode = if identDefs.kind == nnkRecCase: identDefsStack.add(identDefs[0]) for i in 1..