minor changes for more robust behavior in the face of errors

This commit is contained in:
Vern Paxson 2021-05-30 17:49:08 -07:00
parent b7c9940221
commit 0742d2da29

View file

@ -573,11 +573,17 @@ void NameExpr::ExprDescribe(ODesc* d) const
ConstExpr::ConstExpr(ValPtr arg_val) ConstExpr::ConstExpr(ValPtr arg_val)
: Expr(EXPR_CONST), val(std::move(arg_val)) : Expr(EXPR_CONST), val(std::move(arg_val))
{ {
if ( val->GetType()->Tag() == TYPE_LIST && val->AsListVal()->Length() == 1 ) if ( val )
{
if ( val->GetType()->Tag() == TYPE_LIST &&
val->AsListVal()->Length() == 1 )
val = val->AsListVal()->Idx(0); val = val->AsListVal()->Idx(0);
SetType(val->GetType()); SetType(val->GetType());
} }
else
SetError();
}
void ConstExpr::ExprDescribe(ODesc* d) const void ConstExpr::ExprDescribe(ODesc* d) const
{ {
@ -3785,7 +3791,11 @@ void FieldAssignExpr::ExprDescribe(ODesc* d) const
d->Add("$"); d->Add("$");
d->Add(FieldName()); d->Add(FieldName());
d->Add("="); d->Add("=");
if ( op )
op->Describe(d); op->Describe(d);
else
d->Add("<error>");
} }
ArithCoerceExpr::ArithCoerceExpr(ExprPtr arg_op, TypeTag t) ArithCoerceExpr::ArithCoerceExpr(ExprPtr arg_op, TypeTag t)