|  |  |  | @ -549,6 +549,7 @@ void codegen(ast *node) | 
			
		
	
		
			
				
					|  |  |  |  | 	int hasdefault; | 
			
		
	
		
			
				
					|  |  |  |  | 	int i; | 
			
		
	
		
			
				
					|  |  |  |  | 	int savedlineno; | 
			
		
	
		
			
				
					|  |  |  |  | 	int ncallargs; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	union { | 
			
		
	
		
			
				
					|  |  |  |  | 		int i; | 
			
		
	
	
		
			
				
					|  |  |  | @ -616,9 +617,11 @@ void codegen(ast *node) | 
			
		
	
		
			
				
					|  |  |  |  | 				 * Arguments on the stack directly above | 
			
		
	
		
			
				
					|  |  |  |  | 				 * local variables, and then return address | 
			
		
	
		
			
				
					|  |  |  |  | 				 */ | 
			
		
	
		
			
				
					|  |  |  |  | 				printf("(argument)\n"); | 
			
		
	
		
			
				
					|  |  |  |  | 				emit_instr_imm_const(OP_LOAD, | 
			
		
	
		
			
				
					|  |  |  |  | 				    sp + 1 + nargs - var.addr, fnconst); | 
			
		
	
		
			
				
					|  |  |  |  | 			} else { | 
			
		
	
		
			
				
					|  |  |  |  | 				printf("(non-argument)\n"); | 
			
		
	
		
			
				
					|  |  |  |  | 				emit_instr_imm_const(OP_LOAD, sp - var.addr - 1, fnconst); | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 			sp++; | 
			
		
	
	
		
			
				
					|  |  |  | @ -777,14 +780,14 @@ void codegen(ast *node) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | //			printf("savedsp = %d\n", savedsp);
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 			nargs = 0; | 
			
		
	
		
			
				
					|  |  |  |  | 			ncallargs = 0; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 			/* Evaluate the arguments first */ | 
			
		
	
		
			
				
					|  |  |  |  | 			for (ptr = | 
			
		
	
		
			
				
					|  |  |  |  | 			    node->info.node.head->next->elem->info.node.head; | 
			
		
	
		
			
				
					|  |  |  |  | 			    ptr; ptr = ptr->next) { | 
			
		
	
		
			
				
					|  |  |  |  | 				codegen(ptr->elem); | 
			
		
	
		
			
				
					|  |  |  |  | 				nargs++; | 
			
		
	
		
			
				
					|  |  |  |  | 				ncallargs++; | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | //			printf("sp = %d\n", sp);
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -800,7 +803,7 @@ void codegen(ast *node) | 
			
		
	
		
			
				
					|  |  |  |  | 				 * This is something only supported for | 
			
		
	
		
			
				
					|  |  |  |  | 				 * builtin functions at present. | 
			
		
	
		
			
				
					|  |  |  |  | 				 */ | 
			
		
	
		
			
				
					|  |  |  |  | 				emit_instr_immediate(OP_PUSH, nargs); | 
			
		
	
		
			
				
					|  |  |  |  | 				emit_instr_immediate(OP_PUSH, ncallargs); | 
			
		
	
		
			
				
					|  |  |  |  | 				sp++; | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |