patch 8.2.0056: execution stack is incomplete and inefficient

Problem:    Execution stack is incomplete and inefficient.
Solution:   Introduce a proper execution stack and use it instead of
            sourcing_name/sourcing_lnum.  Create a string only when used.
diff --git a/src/main.c b/src/main.c
index eec02ea..51b8970 100644
--- a/src/main.c
+++ b/src/main.c
@@ -911,6 +911,7 @@
     void
 common_init(mparm_T *paramp)
 {
+    estack_init();
     cmdline_init();
 
     (void)mb_init();	// init mb_bytelen_tab[] to ones
@@ -3089,13 +3090,13 @@
     if (cnt > 0)
     {
 	curwin->w_cursor.lnum = 0; // just in case..
-	sourcing_name = (char_u *)_("pre-vimrc command line");
+	estack_push(ETYPE_ARGS, (char_u *)_("pre-vimrc command line"), 0);
 # ifdef FEAT_EVAL
 	current_sctx.sc_sid = SID_CMDARG;
 # endif
 	for (i = 0; i < cnt; ++i)
 	    do_cmdline_cmd(cmds[i]);
-	sourcing_name = NULL;
+	estack_pop();
 # ifdef FEAT_EVAL
 	current_sctx.sc_sid = 0;
 # endif
@@ -3119,7 +3120,7 @@
     msg_scroll = TRUE;
     if (parmp->tagname == NULL && curwin->w_cursor.lnum <= 1)
 	curwin->w_cursor.lnum = 0;
-    sourcing_name = (char_u *)"command line";
+    estack_push(ETYPE_ARGS, (char_u *)"command line", 0);
 #ifdef FEAT_EVAL
     current_sctx.sc_sid = SID_CARG;
     current_sctx.sc_seq = 0;
@@ -3130,7 +3131,7 @@
 	if (parmp->cmds_tofree[i])
 	    vim_free(parmp->commands[i]);
     }
-    sourcing_name = NULL;
+    estack_pop();
 #ifdef FEAT_EVAL
     current_sctx.sc_sid = 0;
 #endif
@@ -3336,8 +3337,6 @@
     int		is_viminit) // when TRUE, called for VIMINIT
 {
     char_u	*initstr;
-    char_u	*save_sourcing_name;
-    linenr_T	save_sourcing_lnum;
 #ifdef FEAT_EVAL
     sctx_T	save_current_sctx;
 #endif
@@ -3346,10 +3345,7 @@
     {
 	if (is_viminit)
 	    vimrc_found(NULL, NULL);
-	save_sourcing_name = sourcing_name;
-	save_sourcing_lnum = sourcing_lnum;
-	sourcing_name = env;
-	sourcing_lnum = 0;
+	estack_push(ETYPE_ENV, env, 0);
 #ifdef FEAT_EVAL
 	save_current_sctx = current_sctx;
 	current_sctx.sc_sid = SID_ENV;
@@ -3358,8 +3354,8 @@
 	current_sctx.sc_version = 1;
 #endif
 	do_cmdline_cmd(initstr);
-	sourcing_name = save_sourcing_name;
-	sourcing_lnum = save_sourcing_lnum;
+
+	estack_pop();
 #ifdef FEAT_EVAL
 	current_sctx = save_current_sctx;
 #endif