aboutsummaryrefslogtreecommitdiff
path: root/gcc/d/dmd/arrayop.d
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/d/dmd/arrayop.d')
-rw-r--r--gcc/d/dmd/arrayop.d31
1 files changed, 16 insertions, 15 deletions
diff --git a/gcc/d/dmd/arrayop.d b/gcc/d/dmd/arrayop.d
index af3875e..7d25e18 100644
--- a/gcc/d/dmd/arrayop.d
+++ b/gcc/d/dmd/arrayop.d
@@ -3,12 +3,12 @@
*
* Specification: $(LINK2 https://dlang.org/spec/arrays.html#array-operations, Array Operations)
*
- * Copyright: Copyright (C) 1999-2024 by The D Language Foundation, All Rights Reserved
+ * Copyright: Copyright (C) 1999-2025 by The D Language Foundation, All Rights Reserved
* Authors: $(LINK2 https://www.digitalmars.com, Walter Bright)
* License: $(LINK2 https://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
- * Source: $(LINK2 https://github.com/dlang/dmd/blob/master/src/dmd/arrayop.d, _arrayop.d)
+ * Source: $(LINK2 https://github.com/dlang/dmd/blob/master/compiler/src/dmd/arrayop.d, _arrayop.d)
* Documentation: https://dlang.org/phobos/dmd_arrayop.html
- * Coverage: https://codecov.io/gh/dlang/dmd/src/master/src/dmd/arrayop.d
+ * Coverage: https://codecov.io/gh/dlang/dmd/src/master/compiler/src/dmd/arrayop.d
*/
module dmd.arrayop;
@@ -16,6 +16,7 @@ module dmd.arrayop;
import core.stdc.stdio;
import dmd.arraytypes;
import dmd.astenums;
+import dmd.dcast : implicitConvTo;
import dmd.declaration;
import dmd.dscope;
import dmd.dsymbol;
@@ -43,12 +44,12 @@ bool isArrayOpValid(Expression e)
if (e.op == EXP.arrayLiteral)
{
Type t = e.type.toBasetype();
- while (t.ty == Tarray || t.ty == Tsarray)
+ while (t.isStaticOrDynamicArray())
t = t.nextOf().toBasetype();
return (t.ty != Tvoid);
}
Type tb = e.type.toBasetype();
- if (tb.ty == Tarray || tb.ty == Tsarray)
+ if (tb.isStaticOrDynamicArray())
{
if (isUnaArrayOp(e.op))
{
@@ -79,7 +80,7 @@ bool isNonAssignmentArrayOp(Expression e)
return isNonAssignmentArrayOp(e.isSliceExp().e1);
Type tb = e.type.toBasetype();
- if (tb.ty == Tarray || tb.ty == Tsarray)
+ if (tb.isStaticOrDynamicArray())
{
return (isUnaArrayOp(e.op) || isBinArrayOp(e.op));
}
@@ -118,7 +119,7 @@ Expression arrayOp(BinExp e, Scope* sc)
{
//printf("BinExp.arrayOp() %s\n", e.toChars());
Type tb = e.type.toBasetype();
- assert(tb.ty == Tarray || tb.ty == Tsarray);
+ assert(tb.isStaticOrDynamicArray());
Type tbn = tb.nextOf().toBasetype();
if (tbn.ty == Tvoid)
{
@@ -145,7 +146,10 @@ Expression arrayOp(BinExp e, Scope* sc)
if (auto te = id.isTemplateExp())
arrayOp = te.td;
else
- ObjectNotFound(idArrayOp); // fatal error
+ {
+ ObjectNotFound(e.loc, idArrayOp); // fatal error
+ return ErrorExp.get();
+ }
}
auto fd = resolveFuncCall(e.loc, sc, arrayOp, tiargs, null, ArgumentList(args), FuncResolveFlag.standard);
@@ -283,9 +287,8 @@ bool isUnaArrayOp(EXP op) @safe
case EXP.tilde:
return true;
default:
- break;
+ return false;
}
- return false;
}
/***********************************************
@@ -306,9 +309,8 @@ bool isBinArrayOp(EXP op) @safe
case EXP.pow:
return true;
default:
- break;
+ return false;
}
- return false;
}
/***********************************************
@@ -329,9 +331,8 @@ bool isBinAssignArrayOp(EXP op) @safe
case EXP.powAssign:
return true;
default:
- break;
+ return false;
}
- return false;
}
/***********************************************
@@ -345,7 +346,7 @@ bool isArrayOpOperand(Expression e)
if (e.op == EXP.arrayLiteral)
{
Type t = e.type.toBasetype();
- while (t.ty == Tarray || t.ty == Tsarray)
+ while (t.isStaticOrDynamicArray())
t = t.nextOf().toBasetype();
return (t.ty != Tvoid);
}