cleaned up some magics to make room for new magics; added '..<' and '..^' templates
This commit is contained in:
parent
c69d74818e
commit
aacaa8f171
7 changed files with 23 additions and 21 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# The Nim Compiler
|
# The Nim Compiler
|
||||||
# (c) Copyright 2013 Andreas Rumpf
|
# (c) Copyright 2015 Andreas Rumpf
|
||||||
#
|
#
|
||||||
# See the file "copying.txt", included in this
|
# See the file "copying.txt", included in this
|
||||||
# distribution, for details about the copyright.
|
# distribution, for details about the copyright.
|
||||||
|
|
@ -542,7 +542,7 @@ type
|
||||||
mAddF64, mSubF64, mMulF64, mDivF64,
|
mAddF64, mSubF64, mMulF64, mDivF64,
|
||||||
|
|
||||||
mShrI, mShlI, mBitandI, mBitorI, mBitxorI, mMinI, mMaxI,
|
mShrI, mShlI, mBitandI, mBitorI, mBitxorI, mMinI, mMaxI,
|
||||||
mShrI64, mShlI64, mBitandI64, mBitorI64, mBitxorI64, mMinI64, mMaxI64,
|
mShrI64, mShlI64, mBitandI64, mBitorI64, mBitxorI64,
|
||||||
mMinF64, mMaxF64, mAddU, mSubU, mMulU,
|
mMinF64, mMaxF64, mAddU, mSubU, mMulU,
|
||||||
mDivU, mModU, mEqI, mLeI,
|
mDivU, mModU, mEqI, mLeI,
|
||||||
mLtI,
|
mLtI,
|
||||||
|
|
@ -551,7 +551,7 @@ type
|
||||||
mEqEnum, mLeEnum, mLtEnum, mEqCh, mLeCh, mLtCh, mEqB, mLeB, mLtB, mEqRef,
|
mEqEnum, mLeEnum, mLtEnum, mEqCh, mLeCh, mLtCh, mEqB, mLeB, mLtB, mEqRef,
|
||||||
mEqUntracedRef, mLePtr, mLtPtr, mEqCString, mXor, mEqProc, mUnaryMinusI,
|
mEqUntracedRef, mLePtr, mLtPtr, mEqCString, mXor, mEqProc, mUnaryMinusI,
|
||||||
mUnaryMinusI64, mAbsI, mAbsI64, mNot,
|
mUnaryMinusI64, mAbsI, mAbsI64, mNot,
|
||||||
mUnaryPlusI, mBitnotI, mUnaryPlusI64,
|
mUnaryPlusI, mBitnotI,
|
||||||
mBitnotI64, mUnaryPlusF64, mUnaryMinusF64, mAbsF64, mZe8ToI, mZe8ToI64,
|
mBitnotI64, mUnaryPlusF64, mUnaryMinusF64, mAbsF64, mZe8ToI, mZe8ToI64,
|
||||||
mZe16ToI, mZe16ToI64, mZe32ToI64, mZeIToI64, mToU8, mToU16, mToU32,
|
mZe16ToI, mZe16ToI64, mZe32ToI64, mZeIToI64, mToU8, mToU16, mToU32,
|
||||||
mToFloat, mToBiggestFloat, mToInt, mToBiggestInt, mCharToStr, mBoolToStr,
|
mToFloat, mToBiggestFloat, mToInt, mToBiggestInt, mCharToStr, mBoolToStr,
|
||||||
|
|
@ -594,7 +594,7 @@ const
|
||||||
mAddI, mSubI, mMulI, mDivI, mModI, mAddI64, mSubI64, mMulI64,
|
mAddI, mSubI, mMulI, mDivI, mModI, mAddI64, mSubI64, mMulI64,
|
||||||
mDivI64, mModI64, mAddF64, mSubF64, mMulF64, mDivF64,
|
mDivI64, mModI64, mAddF64, mSubF64, mMulF64, mDivF64,
|
||||||
mShrI, mShlI, mBitandI, mBitorI, mBitxorI, mMinI, mMaxI,
|
mShrI, mShlI, mBitandI, mBitorI, mBitxorI, mMinI, mMaxI,
|
||||||
mShrI64, mShlI64, mBitandI64, mBitorI64, mBitxorI64, mMinI64, mMaxI64,
|
mShrI64, mShlI64, mBitandI64, mBitorI64, mBitxorI64,
|
||||||
mMinF64, mMaxF64, mAddU, mSubU, mMulU,
|
mMinF64, mMaxF64, mAddU, mSubU, mMulU,
|
||||||
mDivU, mModU, mEqI, mLeI,
|
mDivU, mModU, mEqI, mLeI,
|
||||||
mLtI,
|
mLtI,
|
||||||
|
|
@ -603,7 +603,7 @@ const
|
||||||
mEqEnum, mLeEnum, mLtEnum, mEqCh, mLeCh, mLtCh, mEqB, mLeB, mLtB, mEqRef,
|
mEqEnum, mLeEnum, mLtEnum, mEqCh, mLeCh, mLtCh, mEqB, mLeB, mLtB, mEqRef,
|
||||||
mEqProc, mEqUntracedRef, mLePtr, mLtPtr, mEqCString, mXor, mUnaryMinusI,
|
mEqProc, mEqUntracedRef, mLePtr, mLtPtr, mEqCString, mXor, mUnaryMinusI,
|
||||||
mUnaryMinusI64, mAbsI, mAbsI64, mNot,
|
mUnaryMinusI64, mAbsI, mAbsI64, mNot,
|
||||||
mUnaryPlusI, mBitnotI, mUnaryPlusI64,
|
mUnaryPlusI, mBitnotI,
|
||||||
mBitnotI64, mUnaryPlusF64, mUnaryMinusF64, mAbsF64, mZe8ToI, mZe8ToI64,
|
mBitnotI64, mUnaryPlusF64, mUnaryMinusF64, mAbsF64, mZe8ToI, mZe8ToI64,
|
||||||
mZe16ToI, mZe16ToI64, mZe32ToI64, mZeIToI64, mToU8, mToU16, mToU32,
|
mZe16ToI, mZe16ToI64, mZe32ToI64, mZeIToI64, mToU8, mToU16, mToU32,
|
||||||
mToFloat, mToBiggestFloat, mToInt, mToBiggestInt, mCharToStr, mBoolToStr,
|
mToFloat, mToBiggestFloat, mToInt, mToBiggestInt, mCharToStr, mBoolToStr,
|
||||||
|
|
|
||||||
|
|
@ -566,8 +566,6 @@ proc binaryArith(p: BProc, e: PNode, d: var TLoc, op: TMagic) =
|
||||||
"($4)($1 & $2)", # BitandI64
|
"($4)($1 & $2)", # BitandI64
|
||||||
"($4)($1 | $2)", # BitorI64
|
"($4)($1 | $2)", # BitorI64
|
||||||
"($4)($1 ^ $2)", # BitxorI64
|
"($4)($1 ^ $2)", # BitxorI64
|
||||||
"(($1 <= $2) ? $1 : $2)", # MinI64
|
|
||||||
"(($1 >= $2) ? $1 : $2)", # MaxI64
|
|
||||||
"(($1 <= $2) ? $1 : $2)", # MinF64
|
"(($1 <= $2) ? $1 : $2)", # MinF64
|
||||||
"(($1 >= $2) ? $1 : $2)", # MaxF64
|
"(($1 >= $2) ? $1 : $2)", # MaxF64
|
||||||
"($4)((NU$3)($1) + (NU$3)($2))", # AddU
|
"($4)((NU$3)($1) + (NU$3)($2))", # AddU
|
||||||
|
|
@ -640,7 +638,6 @@ proc unaryArith(p: BProc, e: PNode, d: var TLoc, op: TMagic) =
|
||||||
unArithTab: array[mNot..mToBiggestInt, string] = ["!($1)", # Not
|
unArithTab: array[mNot..mToBiggestInt, string] = ["!($1)", # Not
|
||||||
"$1", # UnaryPlusI
|
"$1", # UnaryPlusI
|
||||||
"($3)((NU$2) ~($1))", # BitnotI
|
"($3)((NU$2) ~($1))", # BitnotI
|
||||||
"$1", # UnaryPlusI64
|
|
||||||
"($3)((NU$2) ~($1))", # BitnotI64
|
"($3)((NU$2) ~($1))", # BitnotI64
|
||||||
"$1", # UnaryPlusF64
|
"$1", # UnaryPlusF64
|
||||||
"-($1)", # UnaryMinusF64
|
"-($1)", # UnaryMinusF64
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,8 @@ const
|
||||||
someMul = {mMulI, mMulI64, mMulF64}
|
someMul = {mMulI, mMulI64, mMulF64}
|
||||||
someDiv = {mDivI, mDivI64, mDivF64}
|
someDiv = {mDivI, mDivI64, mDivF64}
|
||||||
someMod = {mModI, mModI64}
|
someMod = {mModI, mModI64}
|
||||||
someMax = {mMaxI, mMaxI64, mMaxF64}
|
someMax = {mMaxI, mMaxF64}
|
||||||
someMin = {mMinI, mMinI64, mMinF64}
|
someMin = {mMinI, mMinF64}
|
||||||
|
|
||||||
proc isValue(n: PNode): bool = n.kind in {nkCharLit..nkNilLit}
|
proc isValue(n: PNode): bool = n.kind in {nkCharLit..nkNilLit}
|
||||||
proc isLocation(n: PNode): bool = not n.isValue
|
proc isLocation(n: PNode): bool = not n.isValue
|
||||||
|
|
|
||||||
|
|
@ -281,8 +281,6 @@ const # magic checked op; magic unchecked op; checked op; unchecked op
|
||||||
["", "", "($1 & $2)", "($1 & $2)"], # BitandI64
|
["", "", "($1 & $2)", "($1 & $2)"], # BitandI64
|
||||||
["", "", "($1 | $2)", "($1 | $2)"], # BitorI64
|
["", "", "($1 | $2)", "($1 | $2)"], # BitorI64
|
||||||
["", "", "($1 ^ $2)", "($1 ^ $2)"], # BitxorI64
|
["", "", "($1 ^ $2)", "($1 ^ $2)"], # BitxorI64
|
||||||
["nimMin", "nimMin", "nimMin($1, $2)", "nimMin($1, $2)"], # MinI64
|
|
||||||
["nimMax", "nimMax", "nimMax($1, $2)", "nimMax($1, $2)"], # MaxI64
|
|
||||||
["nimMin", "nimMin", "nimMin($1, $2)", "nimMin($1, $2)"], # MinF64
|
["nimMin", "nimMin", "nimMin($1, $2)", "nimMin($1, $2)"], # MinF64
|
||||||
["nimMax", "nimMax", "nimMax($1, $2)", "nimMax($1, $2)"], # MaxF64
|
["nimMax", "nimMax", "nimMax($1, $2)", "nimMax($1, $2)"], # MaxF64
|
||||||
["addU", "addU", "addU($1, $2)", "addU($1, $2)"], # addU
|
["addU", "addU", "addU($1, $2)", "addU($1, $2)"], # addU
|
||||||
|
|
@ -326,7 +324,6 @@ const # magic checked op; magic unchecked op; checked op; unchecked op
|
||||||
["", "", "!($1)", "!($1)"], # Not
|
["", "", "!($1)", "!($1)"], # Not
|
||||||
["", "", "+($1)", "+($1)"], # UnaryPlusI
|
["", "", "+($1)", "+($1)"], # UnaryPlusI
|
||||||
["", "", "~($1)", "~($1)"], # BitnotI
|
["", "", "~($1)", "~($1)"], # BitnotI
|
||||||
["", "", "+($1)", "+($1)"], # UnaryPlusI64
|
|
||||||
["", "", "~($1)", "~($1)"], # BitnotI64
|
["", "", "~($1)", "~($1)"], # BitnotI64
|
||||||
["", "", "+($1)", "+($1)"], # UnaryPlusF64
|
["", "", "+($1)", "+($1)"], # UnaryPlusF64
|
||||||
["", "", "-($1)", "-($1)"], # UnaryMinusF64
|
["", "", "-($1)", "-($1)"], # UnaryMinusF64
|
||||||
|
|
@ -383,8 +380,6 @@ const # magic checked op; magic unchecked op; checked op; unchecked op
|
||||||
["", "", "($1 & $2)", "($1 & $2)"], # BitandI64
|
["", "", "($1 & $2)", "($1 & $2)"], # BitandI64
|
||||||
["", "", "($1 | $2)", "($1 | $2)"], # BitorI64
|
["", "", "($1 | $2)", "($1 | $2)"], # BitorI64
|
||||||
["", "", "($1 ^ $2)", "($1 ^ $2)"], # BitxorI64
|
["", "", "($1 ^ $2)", "($1 ^ $2)"], # BitxorI64
|
||||||
["nimMin", "nimMin", "nimMin($1, $2)", "nimMin($1, $2)"], # MinI64
|
|
||||||
["nimMax", "nimMax", "nimMax($1, $2)", "nimMax($1, $2)"], # MaxI64
|
|
||||||
["nimMin", "nimMin", "nimMin($1, $2)", "nimMin($1, $2)"], # MinF64
|
["nimMin", "nimMin", "nimMin($1, $2)", "nimMin($1, $2)"], # MinF64
|
||||||
["nimMax", "nimMax", "nimMax($1, $2)", "nimMax($1, $2)"], # MaxF64
|
["nimMax", "nimMax", "nimMax($1, $2)", "nimMax($1, $2)"], # MaxF64
|
||||||
["addU", "addU", "addU($1, $2)", "addU($1, $2)"], # addU
|
["addU", "addU", "addU($1, $2)", "addU($1, $2)"], # addU
|
||||||
|
|
@ -428,7 +423,6 @@ const # magic checked op; magic unchecked op; checked op; unchecked op
|
||||||
["", "", "not ($1)", "not ($1)"], # Not
|
["", "", "not ($1)", "not ($1)"], # Not
|
||||||
["", "", "+($1)", "+($1)"], # UnaryPlusI
|
["", "", "+($1)", "+($1)"], # UnaryPlusI
|
||||||
["", "", "~($1)", "~($1)"], # BitnotI
|
["", "", "~($1)", "~($1)"], # BitnotI
|
||||||
["", "", "+($1)", "+($1)"], # UnaryPlusI64
|
|
||||||
["", "", "~($1)", "~($1)"], # BitnotI64
|
["", "", "~($1)", "~($1)"], # BitnotI64
|
||||||
["", "", "+($1)", "+($1)"], # UnaryPlusF64
|
["", "", "+($1)", "+($1)"], # UnaryPlusF64
|
||||||
["", "", "-($1)", "-($1)"], # UnaryMinusF64
|
["", "", "-($1)", "-($1)"], # UnaryMinusF64
|
||||||
|
|
|
||||||
|
|
@ -791,7 +791,7 @@ proc genMagic(c: PCtx; n: PNode; dest: var TDest) =
|
||||||
genUnaryABC(c, n, dest, opcUnaryMinusInt)
|
genUnaryABC(c, n, dest, opcUnaryMinusInt)
|
||||||
genNarrow(c, n, dest)
|
genNarrow(c, n, dest)
|
||||||
of mUnaryMinusF64: genUnaryABC(c, n, dest, opcUnaryMinusFloat)
|
of mUnaryMinusF64: genUnaryABC(c, n, dest, opcUnaryMinusFloat)
|
||||||
of mUnaryPlusI, mUnaryPlusI64, mUnaryPlusF64: gen(c, n.sons[1], dest)
|
of mUnaryPlusI, mUnaryPlusF64: gen(c, n.sons[1], dest)
|
||||||
of mBitnotI, mBitnotI64:
|
of mBitnotI, mBitnotI64:
|
||||||
genUnaryABC(c, n, dest, opcBitnotInt)
|
genUnaryABC(c, n, dest, opcBitnotInt)
|
||||||
genNarrowU(c, n, dest)
|
genNarrowU(c, n, dest)
|
||||||
|
|
@ -1008,7 +1008,7 @@ proc genMagic(c: PCtx; n: PNode; dest: var TDest) =
|
||||||
if dest < 0: dest = c.getTemp(n.typ)
|
if dest < 0: dest = c.getTemp(n.typ)
|
||||||
c.gABC(n, opcCallSite, dest)
|
c.gABC(n, opcCallSite, dest)
|
||||||
of mNGenSym: genBinaryABC(c, n, dest, opcGenSym)
|
of mNGenSym: genBinaryABC(c, n, dest, opcGenSym)
|
||||||
of mMinI, mMaxI, mMinI64, mMaxI64, mAbsF64, mMinF64, mMaxF64, mAbsI,
|
of mMinI, mMaxI, mAbsF64, mMinF64, mMaxF64, mAbsI,
|
||||||
mAbsI64, mDotDot:
|
mAbsI64, mDotDot:
|
||||||
c.genCall(n, dest)
|
c.genCall(n, dest)
|
||||||
of mExpandToAst:
|
of mExpandToAst:
|
||||||
|
|
|
||||||
|
|
@ -663,7 +663,7 @@ proc `+` *(x: int): int {.magic: "UnaryPlusI", noSideEffect.}
|
||||||
proc `+` *(x: int8): int8 {.magic: "UnaryPlusI", noSideEffect.}
|
proc `+` *(x: int8): int8 {.magic: "UnaryPlusI", noSideEffect.}
|
||||||
proc `+` *(x: int16): int16 {.magic: "UnaryPlusI", noSideEffect.}
|
proc `+` *(x: int16): int16 {.magic: "UnaryPlusI", noSideEffect.}
|
||||||
proc `+` *(x: int32): int32 {.magic: "UnaryPlusI", noSideEffect.}
|
proc `+` *(x: int32): int32 {.magic: "UnaryPlusI", noSideEffect.}
|
||||||
proc `+` *(x: int64): int64 {.magic: "UnaryPlusI64", noSideEffect.}
|
proc `+` *(x: int64): int64 {.magic: "UnaryPlusI", noSideEffect.}
|
||||||
## Unary `+` operator for an integer. Has no effect.
|
## Unary `+` operator for an integer. Has no effect.
|
||||||
|
|
||||||
proc `-` *(x: int): int {.magic: "UnaryMinusI", noSideEffect.}
|
proc `-` *(x: int): int {.magic: "UnaryMinusI", noSideEffect.}
|
||||||
|
|
@ -1638,7 +1638,7 @@ proc min*(x, y: int16): int16 {.magic: "MinI", noSideEffect.} =
|
||||||
if x <= y: x else: y
|
if x <= y: x else: y
|
||||||
proc min*(x, y: int32): int32 {.magic: "MinI", noSideEffect.} =
|
proc min*(x, y: int32): int32 {.magic: "MinI", noSideEffect.} =
|
||||||
if x <= y: x else: y
|
if x <= y: x else: y
|
||||||
proc min*(x, y: int64): int64 {.magic: "MinI64", noSideEffect.} =
|
proc min*(x, y: int64): int64 {.magic: "MinI", noSideEffect.} =
|
||||||
## The minimum value of two integers.
|
## The minimum value of two integers.
|
||||||
if x <= y: x else: y
|
if x <= y: x else: y
|
||||||
|
|
||||||
|
|
@ -1656,7 +1656,7 @@ proc max*(x, y: int16): int16 {.magic: "MaxI", noSideEffect.} =
|
||||||
if y <= x: x else: y
|
if y <= x: x else: y
|
||||||
proc max*(x, y: int32): int32 {.magic: "MaxI", noSideEffect.} =
|
proc max*(x, y: int32): int32 {.magic: "MaxI", noSideEffect.} =
|
||||||
if y <= x: x else: y
|
if y <= x: x else: y
|
||||||
proc max*(x, y: int64): int64 {.magic: "MaxI64", noSideEffect.} =
|
proc max*(x, y: int64): int64 {.magic: "MaxI", noSideEffect.} =
|
||||||
## The maximum value of two integers.
|
## The maximum value of two integers.
|
||||||
if y <= x: x else: y
|
if y <= x: x else: y
|
||||||
|
|
||||||
|
|
@ -3256,4 +3256,14 @@ proc `^`*(x: int): int {.noSideEffect, magic: "Roof".} =
|
||||||
## overloaded ``[]`` or ``[]=`` accessors.
|
## overloaded ``[]`` or ``[]=`` accessors.
|
||||||
discard
|
discard
|
||||||
|
|
||||||
|
template `..^`*(a, b: expr): expr =
|
||||||
|
## a shortcut for '.. ^' to avoid the common gotcha that a space between
|
||||||
|
## '..' and '^' is required.
|
||||||
|
a .. ^b
|
||||||
|
|
||||||
|
template `..<`*(a, b: expr): expr =
|
||||||
|
## a shortcut for '.. <' to avoid the common gotcha that a space between
|
||||||
|
## '..' and '<' is required.
|
||||||
|
a .. <b
|
||||||
|
|
||||||
{.pop.} #{.push warning[GcMem]: off.}
|
{.pop.} #{.push warning[GcMem]: off.}
|
||||||
|
|
|
||||||
1
todo.txt
1
todo.txt
|
|
@ -2,6 +2,7 @@ version 0.10.4
|
||||||
==============
|
==============
|
||||||
|
|
||||||
- make 'nil' work for 'add' and 'len'
|
- make 'nil' work for 'add' and 'len'
|
||||||
|
- add '..^' and '..<' operators to system
|
||||||
|
|
||||||
version 1.0
|
version 1.0
|
||||||
===========
|
===========
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue