preparations for better handling of 'a[i]' in generics; stmt lists can be lvalues
This commit is contained in:
parent
565c385824
commit
5aaf2f0c31
2 changed files with 13 additions and 2 deletions
|
|
@ -537,7 +537,7 @@ const
|
||||||
type
|
type
|
||||||
TMagic* = enum # symbols that require compiler magic:
|
TMagic* = enum # symbols that require compiler magic:
|
||||||
mNone,
|
mNone,
|
||||||
mDefined, mDefinedInScope, mCompiles,
|
mDefined, mDefinedInScope, mCompiles, mArrGet, mArrPut, mAsgn,
|
||||||
mLow, mHigh, mSizeOf, mTypeTrait, mIs, mOf, mAddr, mTypeOf, mRoof, mPlugin,
|
mLow, mHigh, mSizeOf, mTypeTrait, mIs, mOf, mAddr, mTypeOf, mRoof, mPlugin,
|
||||||
mEcho, mShallowCopy, mSlurp, mStaticExec,
|
mEcho, mShallowCopy, mSlurp, mStaticExec,
|
||||||
mParseExprToAst, mParseStmtToAst, mExpandToAst, mQuoteAst,
|
mParseExprToAst, mParseStmtToAst, mExpandToAst, mQuoteAst,
|
||||||
|
|
@ -614,6 +614,7 @@ const
|
||||||
ctfeWhitelist* = {mNone, mUnaryLt, mSucc,
|
ctfeWhitelist* = {mNone, mUnaryLt, mSucc,
|
||||||
mPred, mInc, mDec, mOrd, mLengthOpenArray,
|
mPred, mInc, mDec, mOrd, mLengthOpenArray,
|
||||||
mLengthStr, mLengthArray, mLengthSeq, mXLenStr, mXLenSeq,
|
mLengthStr, mLengthArray, mLengthSeq, mXLenStr, mXLenSeq,
|
||||||
|
mArrGet, mArrPut, mAsgn,
|
||||||
mIncl, mExcl, mCard, mChr,
|
mIncl, mExcl, mCard, mChr,
|
||||||
mAddI, mSubI, mMulI, mDivI, mModI,
|
mAddI, mSubI, mMulI, mDivI, mModI,
|
||||||
mAddF64, mSubF64, mMulF64, mDivF64,
|
mAddF64, mSubF64, mMulF64, mDivF64,
|
||||||
|
|
@ -1586,3 +1587,10 @@ proc createMagic*(name: string, m: TMagic): PSym =
|
||||||
let
|
let
|
||||||
opNot* = createMagic("not", mNot)
|
opNot* = createMagic("not", mNot)
|
||||||
opContains* = createMagic("contains", mInSet)
|
opContains* = createMagic("contains", mInSet)
|
||||||
|
|
||||||
|
when false:
|
||||||
|
proc containsNil*(n: PNode): bool =
|
||||||
|
# only for debugging
|
||||||
|
if n.isNil: return true
|
||||||
|
for i in 0 ..< n.safeLen:
|
||||||
|
if n[i].containsNil: return true
|
||||||
|
|
|
||||||
|
|
@ -225,8 +225,11 @@ proc isAssignable*(owner: PSym, n: PNode; isUnsafeAddr=false): TAssignableResult
|
||||||
result = isAssignable(owner, n.sons[0], isUnsafeAddr)
|
result = isAssignable(owner, n.sons[0], isUnsafeAddr)
|
||||||
of nkCallKinds:
|
of nkCallKinds:
|
||||||
# builtin slice keeps lvalue-ness:
|
# builtin slice keeps lvalue-ness:
|
||||||
if getMagic(n) == mSlice:
|
if getMagic(n) in {mArrGet, mSlice}:
|
||||||
result = isAssignable(owner, n.sons[1], isUnsafeAddr)
|
result = isAssignable(owner, n.sons[1], isUnsafeAddr)
|
||||||
|
of nkStmtList, nkStmtListExpr:
|
||||||
|
if n.typ != nil:
|
||||||
|
result = isAssignable(owner, n.lastSon, isUnsafeAddr)
|
||||||
else:
|
else:
|
||||||
discard
|
discard
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue