/* handler for function 3 */ static Obj HdlrFunc3 ( Obj self, Obj a_a, Obj a_b ) { Obj t_1 = 0; Obj t_2 = 0; Obj t_3 = 0; Obj t_4 = 0; Bag oldFrame; /* allocate new stack frame */ SWITCH_TO_NEW_FRAME(self,0,0,oldFrame); /* Print( "f2:", a, ":", b, "\n" ); */ t_1 = GF_Print; t_2 = MakeString( "f2:" ); t_3 = MakeString( ":" ); t_4 = MakeString( "\n" ); CALL_5ARGS( t_1, t_2, a_a, t_3, a_b, t_4 ); /* return; */ SWITCH_TO_OLD_FRAME(oldFrame); return 0; /* return; */ SWITCH_TO_OLD_FRAME(oldFrame); return 0; }
/* handler for function 5 */ static Obj HdlrFunc5 ( Obj self, Obj args ) { Obj a_a; Obj a_b; Obj t_1 = 0; Obj t_2 = 0; Obj t_3 = 0; Obj t_4 = 0; Bag oldFrame; CHECK_NR_AT_LEAST_ARGS( 2, args ) a_a = ELM_PLIST( args, 1 ); Obj x_temp_range = Range2Check(INTOBJ_INT(2), INTOBJ_INT(LEN_PLIST(args))); a_b = ELMS_LIST(args , x_temp_range); /* allocate new stack frame */ SWITCH_TO_NEW_FRAME(self,0,0,oldFrame); /* Print( "f4:", a, ":", b, "\n" ); */ t_1 = GF_Print; t_2 = MakeString( "f4:" ); t_3 = MakeString( ":" ); t_4 = MakeString( "\n" ); CALL_5ARGS( t_1, t_2, a_a, t_3, a_b, t_4 ); /* return; */ SWITCH_TO_OLD_FRAME(oldFrame); return 0; /* return; */ SWITCH_TO_OLD_FRAME(oldFrame); return 0; }
Obj GAP_CallFuncArray(Obj func, UInt narg, Obj args[]) { Obj result; Obj list; if (TNUM_OBJ(func) == T_FUNCTION) { // call the function switch (narg) { case 0: result = CALL_0ARGS(func); break; case 1: result = CALL_1ARGS(func, args[0]); break; case 2: result = CALL_2ARGS(func, args[0], args[1]); break; case 3: result = CALL_3ARGS(func, args[0], args[1], args[2]); break; case 4: result = CALL_4ARGS(func, args[0], args[1], args[2], args[3]); break; case 5: result = CALL_5ARGS(func, args[0], args[1], args[2], args[3], args[4]); break; case 6: result = CALL_6ARGS(func, args[0], args[1], args[2], args[3], args[4], args[5]); break; default: list = NewPlistFromArray(args, narg); result = CALL_XARGS(func, list); } } else { list = NewPlistFromArray(args, narg); result = DoOperation2Args(CallFuncListOper, func, list); } return result; }