don't create duplicate slots
This commit is contained in:
		
							parent
							
								
									88a7d1f2b9
								
							
						
					
					
						commit
						8d63fffe87
					
				
							
								
								
									
										28
									
								
								src/macro.c
								
								
								
								
							
							
						
						
									
										28
									
								
								src/macro.c
								
								
								
								
							|  | @ -287,7 +287,7 @@ macroexpand(pic_state *pic, pic_value expr, struct pic_senv *senv) | |||
| 
 | ||||
|       else if (tag == pic->sDEFINE_SYNTAX) { | ||||
| 	pic_value var, val; | ||||
|         pic_sym rename; | ||||
|         pic_sym sym, rename; | ||||
|         struct pic_macro *mac; | ||||
| 
 | ||||
| 	if (pic_length(pic, expr) != 3) { | ||||
|  | @ -301,7 +301,10 @@ macroexpand(pic_state *pic, pic_value expr, struct pic_senv *senv) | |||
|         if (! pic_sym_p(var)) { | ||||
|           pic_error(pic, "binding to non-symbol object"); | ||||
|         } | ||||
|         rename = pic_add_rename(pic, senv, pic_sym(var)); | ||||
|         sym = pic_sym(var); | ||||
|         if ((rename = pic_find_rename(pic, senv, sym)) == 0) { | ||||
|           rename = pic_add_rename(pic, senv, sym); | ||||
|         } | ||||
| 
 | ||||
| 	val = pic_cadr(pic, pic_cdr(pic, expr)); | ||||
| 
 | ||||
|  | @ -324,7 +327,7 @@ macroexpand(pic_state *pic, pic_value expr, struct pic_senv *senv) | |||
| 
 | ||||
|       else if (tag == pic->sDEFINE_MACRO) { | ||||
| 	pic_value var, val; | ||||
|         pic_sym rename; | ||||
|         pic_sym sym, rename; | ||||
|         struct pic_macro *mac; | ||||
| 
 | ||||
| 	if (pic_length(pic, expr) < 2) { | ||||
|  | @ -348,7 +351,10 @@ macroexpand(pic_state *pic, pic_value expr, struct pic_senv *senv) | |||
| 	if (! pic_sym_p(var)) { | ||||
| 	  pic_error(pic, "syntax error"); | ||||
| 	} | ||||
|         rename = pic_add_rename(pic, senv, pic_sym(var)); | ||||
|         sym = pic_sym(var); | ||||
|         if ((rename = pic_find_rename(pic, senv, sym)) == 0) { | ||||
|           rename = pic_add_rename(pic, senv, sym); | ||||
|         } | ||||
| 
 | ||||
|         pic_try { | ||||
|           v = pic_eval(pic, val); | ||||
|  | @ -381,7 +387,7 @@ macroexpand(pic_state *pic, pic_value expr, struct pic_senv *senv) | |||
|       } | ||||
| 
 | ||||
|       else if (tag == pic->sDEFINE) { | ||||
| 	pic_sym var; | ||||
| 	pic_sym sym; | ||||
| 	pic_value formals; | ||||
| 
 | ||||
| 	if (pic_length(pic, expr) < 2) { | ||||
|  | @ -401,7 +407,10 @@ macroexpand(pic_state *pic, pic_value expr, struct pic_senv *senv) | |||
| 	  if (! pic_sym_p(a)) { | ||||
| 	    pic_error(pic, "binding to non-symbol object"); | ||||
| 	  } | ||||
|           pic_add_rename(pic, senv, pic_sym(a)); | ||||
|           sym = pic_sym(a); | ||||
|           if (pic_find_rename(pic, senv, sym) == 0) { | ||||
|             pic_add_rename(pic, senv, sym); | ||||
|           } | ||||
| 
 | ||||
| 	  /* binding value */ | ||||
| 	  v = pic_cons(pic, car, | ||||
|  | @ -420,10 +429,9 @@ macroexpand(pic_state *pic, pic_value expr, struct pic_senv *senv) | |||
| 	if (! pic_sym_p(formals)) { | ||||
| 	  pic_error(pic, "binding to non-symbol object"); | ||||
| 	} | ||||
|         var = pic_sym(formals); | ||||
|         /* do not make duplicate variable slot */ | ||||
|         if (pic_find_rename(pic, senv, var) == 0) { | ||||
|           pic_add_rename(pic, senv, var); | ||||
|         sym = pic_sym(formals); | ||||
|         if (pic_find_rename(pic, senv, sym) == 0) { | ||||
|           pic_add_rename(pic, senv, sym); | ||||
|         } | ||||
| 
 | ||||
| 	v = pic_cons(pic, pic_symbol_value(tag), | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Yuichi Nishiwaki
						Yuichi Nishiwaki