int comma, int void_context_p, int *out_subexp)
{
volatile struct gdb_exception except;
- struct cleanup *old_chain;
+ struct cleanup *old_chain, *inner_chain;
const struct language_defn *lang = NULL;
int subexp;
else
lang = current_language;
+ /* get_current_arch may reset CURRENT_LANGUAGE via select_frame.
+ While we need CURRENT_LANGUAGE to be set to LANG (for lookup_symbol
+ and others called from *.y) ensure CURRENT_LANGUAGE gets restored
+ to the value matching SELECTED_FRAME as set by get_current_arch. */
initialize_expout (10, lang, get_current_arch ());
+ inner_chain = make_cleanup_restore_current_language ();
+ set_language (lang->la_language);
TRY_CATCH (except, RETURN_MASK_ALL)
{
}
}
- discard_cleanups (old_chain);
-
reallocate_expout ();
/* Convert expression from postfix form as generated by yacc
if (expressiondebug)
dump_prefix_expression (expout, gdb_stdlog);
+ do_cleanups (inner_chain);
+ discard_cleanups (old_chain);
+
*stringptr = lexptr;
return expout;
}