Table lookups return copy of non-const &default vals (addresses #981).

This prevents unintentional modifications to the &default value itself.
This commit is contained in:
Jon Siwek 2013-05-03 11:22:15 -05:00
parent 8992dc6cff
commit 6a7a242db9
3 changed files with 32 additions and 1 deletions

View file

@ -1749,7 +1749,7 @@ Val* TableVal::Default(Val* index)
if ( def_val->Type()->Tag() != TYPE_FUNC ||
same_type(def_val->Type(), Type()->YieldType()) )
return def_val->Ref();
return def_attr->AttrExpr()->IsConst() ? def_val->Ref() : def_val->Clone();
const Func* f = def_val->AsFunc();
val_list* vl = new val_list();