errorcall rather than error in do_set
speed up EnsureLocal by avoiding eval