changeset 510:2bd6ff6ee9a8

inline continue...
author kono
date Sun, 25 Dec 2005 16:29:40 +0900
parents e58848f6ebc1
children 14c7faf78910
files Changes mc-inline.c
diffstat 2 files changed, 14 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/Changes	Sun Dec 25 16:07:45 2005 +0900
+++ b/Changes	Sun Dec 25 16:29:40 2005 +0900
@@ -7504,4 +7504,10 @@
 じゃないし) 部分的なpartial evaluation は、やってもやらなくても、
 どっちでもいいはず。
 
-
+Sun Dec 25 16:26:03 JST 2005
+
+あぁ、確かに goto のラベルは、inline の中ではlocal なscopeに
+しないといけないのであった。で、どうすれば良いわけ?
+
+
+
--- a/mc-inline.c	Sun Dec 25 16:07:45 2005 +0900
+++ b/mc-inline.c	Sun Dec 25 16:29:40 2005 +0900
@@ -287,18 +287,18 @@
 		    rvalue_t(car(struct_return),caddr(struct_return)));
 		replace_return_struct(cadr(e),
 		    rvalue_t(car(struct_return),caddr(struct_return)));
-		gexpr(cadr(e),0);
+		g_expr_u(cadr(e));
 	    } else {
 		type = caddr(struct_return);
 		// e1 = rvalue_t(cadr(struct_return),INT); /* size */
 		e1 = cadr(struct_return); /* size */
-		gexpr(list4(STASS,rvalue(car(struct_return)),e,e1),0);
+		g_expr_u(list4(STASS,rvalue(car(struct_return)),e,e1));
 	    }
 	} else {
 	    error(TYERR); /* should check compatible */
 	}
     } else {
-	gexpr(correct_type(e,cadr(fnptr->ty)),1);
+	g_expr(correct_type(e,cadr(fnptr->ty)));
     }
     // conv->return_end_();
     retpending = 1;
@@ -962,6 +962,7 @@
 gen_inline(int e)
 {
     int svartable = pvartable;
+    NMTBL *sfnptr = fnptr;
     int sdisp = pdisp;
     int narg,arg;
     NMTBL *n = (NMTBL*)cadr(cadr(e));
@@ -971,6 +972,7 @@
     int e3,t,e4,dots;
     int ret_type = function_type(cadddr(e),&dots);
 
+    fnptr = n;   // st_return see this
     pvartable = p_vartable(e,arg_disp,caddr(e1));
     /* inline function arguments */
     narg = 0;
@@ -992,6 +994,8 @@
     pvartable = svartable;
     // how to handle return value?
     g_expr_u(e);
+    fnptr = sfnptr;
+
     return ret_type;
 }