修改LvObject set方法,先检查是否可变再检查类型匹配。更符合直觉

This commit is contained in:
2026-02-08 13:27:59 +08:00
parent 764c4269a5
commit 537011df32

View File

@@ -80,6 +80,10 @@ namespace Fig
if (kind == Kind::Variable)
{
auto s = resolve(slot);
if (isAccessConst(s->am))
{
throw RuntimeError(FString(std::format("Variable `{}` is immutable", s->name.toBasicString())));
}
if (!isTypeMatch(s->declaredType, v, ctx))
{
throw RuntimeError(
@@ -89,11 +93,6 @@ namespace Fig
s->declaredType.toString().toBasicString(),
prettyType(v).toBasicString())));
}
if (isAccessConst(s->am))
{
throw RuntimeError(FString(
std::format("Variable `{}` is immutable", s->name.toBasicString())));
}
s->value = v;
}
else if (kind == Kind::ListElement)