diff options
author | Arne Döring <arne.doering@gmx.net> | 2019-08-27 12:21:04 +0200 |
---|---|---|
committer | Arne Döring <arne.doering@gmx.net> | 2019-08-27 12:28:18 +0200 |
commit | ab8241ad42635693df8a50326ebb24d52343059a (patch) | |
tree | 7c5eb88281855f31d62d84d2c068a4bdba7d3149 /compiler | |
parent | a562de2d9189706a9b7b9045c8abf9b821549692 (diff) | |
download | Nim-ab8241ad42635693df8a50326ebb24d52343059a.tar.gz |
minor stuff
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/semtypes.nim | 2 | ||||
-rw-r--r-- | compiler/transf.nim | 2 | ||||
-rw-r--r-- | compiler/types.nim | 4 | ||||
-rw-r--r-- | compiler/vmgen.nim | 14 |
4 files changed, 8 insertions, 14 deletions
diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index 33285e6f4..84611a0bc 100644 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -223,7 +223,7 @@ proc semRangeAux(c: PContext, n: PNode, prev: PType): PType = if not hasUnknownTypes: if not sameType(rangeT[0].skipTypes({tyRange}), rangeT[1].skipTypes({tyRange})): localError(c.config, n.info, "type mismatch") - elif not rangeT[0].isOrdinalType(allowUint=true) and rangeT[0].kind notin tyFloat..tyFloat128 or + elif not isOrdinalType(rangeT[0]) and rangeT[0].kind notin tyFloat..tyFloat128 or rangeT[0].kind == tyBool: localError(c.config, n.info, "ordinal or float type expected") elif enumHasHoles(rangeT[0]): diff --git a/compiler/transf.nim b/compiler/transf.nim index 555583685..6be688ace 100644 --- a/compiler/transf.nim +++ b/compiler/transf.nim @@ -718,7 +718,7 @@ proc transformCase(c: PTransf, n: PNode): PTransNode = result.add(elseBranch) elif result.PNode.lastSon.kind != nkElse and not ( skipTypes(n.sons[0].typ, abstractVarRange).kind in - {tyInt..tyInt64, tyChar, tyEnum, tyUInt..tyUInt32}): + {tyInt..tyInt64, tyChar, tyEnum, tyUInt..tyUInt64}): # fix a stupid code gen bug by normalizing: var elseBranch = newTransNode(nkElse, n.info, 1) elseBranch[0] = newTransNode(nkNilLit, n.info, 0) diff --git a/compiler/types.nim b/compiler/types.nim index 671ee622c..17df70f27 100644 --- a/compiler/types.nim +++ b/compiler/types.nim @@ -158,9 +158,9 @@ proc enumHasHoles*(t: PType): bool = proc isOrdinalType*(t: PType, allowEnumWithHoles: bool = false): bool = assert(t != nil) const - baseKinds = {tyChar,tyInt..tyUInt64,tyBool,tyEnum} + baseKinds = {tyChar,tyInt..tyInt64,tyUInt..tyUInt64,tyBool,tyEnum} parentKinds = {tyRange, tyOrdinal, tyGenericInst, tyAlias, tySink, tyDistinct} - result = (t.kind in baseKinds and not (t.enumHasHoles and not allowEnumWithHoles)) or + result = (t.kind in baseKinds and (not t.enumHasHoles or allowEnumWithHoles)) or (t.kind in parentKinds and isOrdinalType(t.lastSon, allowEnumWithHoles)) proc iterOverTypeAux(marker: var IntSet, t: PType, iter: TTypeIter, diff --git a/compiler/vmgen.nim b/compiler/vmgen.nim index 9cd3b841e..33ba471bd 100644 --- a/compiler/vmgen.nim +++ b/compiler/vmgen.nim @@ -682,6 +682,7 @@ proc genUnaryABI(c: PCtx; n: PNode; dest: var TDest; opc: TOpcode; imm: BiggestI c.gABI(n, opc, dest, tmp, imm) c.freeTemp(tmp) + proc genBinaryABC(c: PCtx; n: PNode; dest: var TDest; opc: TOpcode) = let tmp = c.genx(n.sons[1]) @@ -999,22 +1000,15 @@ proc genMagic(c: PCtx; n: PNode; dest: var TDest; m: TMagic) = of mMulF64: genBinaryABC(c, n, dest, opcMulFloat) of mDivF64: genBinaryABC(c, n, dest, opcDivFloat) of mShrI: - # the idea here is to narrow type if needed before executing right shift - # inlined modified: genNarrowU(c, n, dest) - let t = skipTypes(n.typ, abstractVar-{tyTypeDesc}) - # uint is uint64 in the VM, we we only need to mask the result for - # other unsigned types: + # modified: genBinaryABC(c, n, dest, opcShrInt) + # narrowU is applied to the left operandthe idea here is to narrow the left operand let tmp = c.genx(n.sons[1]) - if t.kind in {tyUInt8..tyUInt32, tyInt8..tyInt32}: - c.gABC(n, opcNarrowU, tmp, TRegister(t.size*8)) - - # inlined modified: genBinaryABC(c, n, dest, opcShrInt) + c.genNarrowU(n, tmp) let tmp2 = c.genx(n.sons[2]) if dest < 0: dest = c.getTemp(n.typ) c.gABC(n, opcShrInt, dest, tmp, tmp2) c.freeTemp(tmp) c.freeTemp(tmp2) - of mShlI: genBinaryABC(c, n, dest, opcShlInt) # genNarrowU modified |