changeset 505:5d4112735c5c

*** empty log message ***
author kono
date Sat, 24 Dec 2005 12:58:20 +0900
parents 48e4f6e6178c
children 96af6754acd3
files Changes mc-inline.c
diffstat 2 files changed, 13 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/Changes	Fri Dec 23 20:14:15 2005 +0900
+++ b/Changes	Sat Dec 24 12:58:20 2005 +0900
@@ -7483,4 +7483,11 @@
 ST_* 系列は、先に、cadr(e) を評価しちゃうのでif とかswitchとかの
 スコープが狂ってしまう。
 
-
+st_* のcadr(e)の評価は g_expr0 でやっているのでst_*側でやる
+必要はないらしい。pexpr のネストが深いのは気になるが、直し方が
+わからず。大域変数を使うのが良いらしいが。
+   pwhile(int in) {
+    out = list2(out,pexpr(in));
+    return cadr(in);
+  }
+みたいな感じ?
--- a/mc-inline.c	Fri Dec 23 20:14:15 2005 +0900
+++ b/mc-inline.c	Sat Dec 24 12:58:20 2005 +0900
@@ -20,7 +20,6 @@
 st_decl(int e1){
     // NMTBL *n = (NMTBL *)caddr(e1);
     // int stmode = cadddr(e1);
-    g_expr_u(cadr(e1));
 }
  
 extern void
@@ -46,7 +45,6 @@
 	fwddef(l1);
     }
     // conv->if_endif_();
-    g_expr_u(cadr(e1));
 }
 
  
@@ -70,7 +68,6 @@
     fwddef(blabel);
     clabel=scontinue;
     blabel=sbreak;
-    g_expr_u(cadr(e1));
 }
 
  
@@ -100,7 +97,6 @@
     fwddef(blabel);
     clabel=scontinue;
     blabel=sbreak;
-    g_expr_u(cadr(e1));
 }
 
  
@@ -145,7 +141,6 @@
     fwddef(blabel);
     clabel=scontinue;
     blabel=sbreak;
-    g_expr_u(cadr(e1));
 }
 
  
@@ -184,14 +179,12 @@
     fwddef(blabel);
     blabel=sbreak;
     cslist = slist;
-    g_expr_u(cadr(e1));
 }
 
  
 extern void
 st_comp(int e1){
     g_expr_u(caddr(e1));
-    g_expr_u(cadr(e1));
 }
 
  
@@ -201,7 +194,6 @@
     // conv->break_();
     if (control)
 	gen_jmp(blabel);
-    g_expr_u(cadr(e1));
 }
 
  
@@ -210,7 +202,6 @@
     checkret();
     // conv->continue_();
     if (control) gen_jmp(clabel);
-    g_expr_u(cadr(e1));
 }
 
  
@@ -261,7 +252,6 @@
     cmpdimm(car(c),csvalue1,cslabel=fwdlabel(),1);
     if (l) fwddef(l);
 #endif
-    g_expr_u(cadr(e1));
 }
 
  
@@ -272,7 +262,6 @@
     if (dlabel) error(STERR);  // double default:
     dlabel = backdef();
     // conv->case_(0,1);
-    g_expr_u(cadr(e1));
 }
 
  
@@ -313,7 +302,6 @@
     }
     // conv->return_end_();
     retpending = 1;
-    g_expr_u(cadr(e1));
 }
 
  
@@ -327,8 +315,7 @@
     e1 = caddr(e);
     if (car(e1)==RINDIRECT) {
 	gen_indirect_goto(cadr(e1));
-	g_expr_u(cadr(e1));
-	return;
+	return ;
     } else if (car(e1)==FLABEL) {
 	nlist = (NMTBL *)cadr(e1);
 	nptr0 = name_space_search(nlist,0);
@@ -344,8 +331,7 @@
         control=0;
         // conv->sm_();
         // conv->goto_label_(nptr0);
-	g_expr_u(cadr(e1));
-        return;
+        return ;
     } else {
 	/*   CbC continuation */
 	// conv->jump_(env);
@@ -363,8 +349,7 @@
 	gexpr(list3(CODE,e1,env),0);
 	control=0;
 	// conv->sm_();
-	g_expr_u(cadr(e1));
-	return;
+	return ;
     }
 }
 
@@ -374,7 +359,6 @@
 st_asm(int e1){
     checkret();
     g_expr_u(list3(ASM,caddr(e1),cadddr(e1)));
-    g_expr_u(cadr(e1));
 }
 #endif
 
@@ -397,13 +381,11 @@
 	nptr->dsp = backdef();
     }
     // conv->label_();
-    g_expr_u(cadr(e1));
 }
 
 extern void
 st_comment(int e1){
     gen_comment((char *)caddr(e1));
-    g_expr_u(cadr(e1));
 }
 
 /* 
@@ -414,12 +396,12 @@
 p_vartable(int e,int adisp,int ldisp)
 {
     int i;
-    pvartable = getfree(adisp-ldisp); // have to be local heap
+    int pvartable = getfree(adisp-ldisp); // have to be local heap
     pdisp = pvartable+adisp;
     for(i=adisp-ldisp;i>=0;i--) {
 	heap[pvartable+i] = 0;
     }
-    return 0;
+    return pvartable;
 }
 
 static int