1 #ifndef AVOID_PRECOMPILED
2 /* C file produced by GAC */
3 #include "compiled.h"
4 #define FILE_CRC  "-77878372"
5 
6 /* global variables used in handlers */
7 static GVar G_REREADING;
8 static Obj  GC_REREADING;
9 static GVar G_SHALLOW__COPY__OBJ;
10 static Obj  GF_SHALLOW__COPY__OBJ;
11 static GVar G_PRINT__OBJ;
12 static Obj  GC_PRINT__OBJ;
13 static GVar G_GAPInfo;
14 static Obj  GC_GAPInfo;
15 static GVar G_TYPE__FUNCTION__WITH__NAME;
16 static Obj  GC_TYPE__FUNCTION__WITH__NAME;
17 static GVar G_TYPE__OPERATION__WITH__NAME;
18 static Obj  GC_TYPE__OPERATION__WITH__NAME;
19 static GVar G_IS__FUNCTION;
20 static Obj  GF_IS__FUNCTION;
21 static GVar G_NAME__FUNC;
22 static Obj  GF_NAME__FUNC;
23 static GVar G_SET__NAME__FUNC;
24 static Obj  GF_SET__NAME__FUNC;
25 static GVar G_NARG__FUNC;
26 static Obj  GF_NARG__FUNC;
27 static GVar G_IS__OPERATION;
28 static Obj  GF_IS__OPERATION;
29 static GVar G_AINV;
30 static Obj  GF_AINV;
31 static GVar G_IS__INT;
32 static Obj  GF_IS__INT;
33 static GVar G_IS__LIST;
34 static Obj  GF_IS__LIST;
35 static GVar G_ADD__LIST;
36 static Obj  GF_ADD__LIST;
37 static GVar G_IS__STRING__REP;
38 static Obj  GF_IS__STRING__REP;
39 static GVar G_Error;
40 static Obj  GF_Error;
41 static GVar G_VAL__GVAR;
42 static Obj  GF_VAL__GVAR;
43 static GVar G_TYPE__OBJ;
44 static Obj  GF_TYPE__OBJ;
45 static GVar G_IMMUTABLE__COPY__OBJ;
46 static Obj  GF_IMMUTABLE__COPY__OBJ;
47 static GVar G_IS__IDENTICAL__OBJ;
48 static Obj  GF_IS__IDENTICAL__OBJ;
49 static GVar G_MakeImmutable;
50 static Obj  GF_MakeImmutable;
51 static GVar G_INPUT__FILENAME;
52 static Obj  GF_INPUT__FILENAME;
53 static GVar G_INPUT__LINENUMBER;
54 static Obj  GF_INPUT__LINENUMBER;
55 static GVar G_IS__OBJECT;
56 static Obj  GC_IS__OBJECT;
57 static GVar G_TRY__NEXT__METHOD;
58 static Obj  GC_TRY__NEXT__METHOD;
59 static GVar G_SUB__FLAGS;
60 static Obj  GF_SUB__FLAGS;
61 static GVar G_WITH__HIDDEN__IMPS__FLAGS;
62 static Obj  GF_WITH__HIDDEN__IMPS__FLAGS;
63 static GVar G_WITH__IMPS__FLAGS;
64 static Obj  GF_WITH__IMPS__FLAGS;
65 static GVar G_IS__SUBSET__FLAGS;
66 static Obj  GF_IS__SUBSET__FLAGS;
67 static GVar G_TRUES__FLAGS;
68 static Obj  GF_TRUES__FLAGS;
69 static GVar G_FLAG1__FILTER;
70 static Obj  GF_FLAG1__FILTER;
71 static GVar G_FLAGS__FILTER;
72 static Obj  GF_FLAGS__FILTER;
73 static GVar G_METHODS__OPERATION;
74 static Obj  GF_METHODS__OPERATION;
75 static GVar G_SET__METHODS__OPERATION;
76 static Obj  GF_SET__METHODS__OPERATION;
77 static GVar G_DO__NOTHING__SETTER;
78 static Obj  GC_DO__NOTHING__SETTER;
79 static GVar G_IS__CONSTRUCTOR;
80 static Obj  GF_IS__CONSTRUCTOR;
81 static GVar G_QUO__INT;
82 static Obj  GF_QUO__INT;
83 static GVar G_fail;
84 static Obj  GC_fail;
85 static GVar G_RETURN__TRUE;
86 static Obj  GC_RETURN__TRUE;
87 static GVar G_RETURN__FALSE;
88 static Obj  GC_RETURN__FALSE;
89 static GVar G_LEN__LIST;
90 static Obj  GF_LEN__LIST;
91 static GVar G_APPEND__LIST__INTR;
92 static Obj  GF_APPEND__LIST__INTR;
93 static GVar G_COPY__LIST__ENTRIES;
94 static Obj  GF_COPY__LIST__ENTRIES;
95 static GVar G_CONV__STRING;
96 static Obj  GF_CONV__STRING;
97 static GVar G_Print;
98 static Obj  GF_Print;
99 static GVar G_ViewObj;
100 static Obj  GC_ViewObj;
101 static GVar G_WRITE__LOCK;
102 static Obj  GF_WRITE__LOCK;
103 static GVar G_READ__LOCK;
104 static Obj  GF_READ__LOCK;
105 static GVar G_UNLOCK;
106 static Obj  GF_UNLOCK;
107 static GVar G_MakeReadOnlySingleObj;
108 static Obj  GF_MakeReadOnlySingleObj;
109 static GVar G_RUN__IMMEDIATE__METHODS__RUNS;
110 static Obj  GC_RUN__IMMEDIATE__METHODS__RUNS;
111 static GVar G_RUN__IMMEDIATE__METHODS__CHECKS;
112 static Obj  GC_RUN__IMMEDIATE__METHODS__CHECKS;
113 static GVar G_RUN__IMMEDIATE__METHODS__HITS;
114 static Obj  GC_RUN__IMMEDIATE__METHODS__HITS;
115 static GVar G_BIND__GLOBAL;
116 static Obj  GF_BIND__GLOBAL;
117 static GVar G_IGNORE__IMMEDIATE__METHODS;
118 static Obj  GC_IGNORE__IMMEDIATE__METHODS;
119 static GVar G_IMM__FLAGS;
120 static Obj  GC_IMM__FLAGS;
121 static GVar G_TRACE__IMMEDIATE__METHODS;
122 static Obj  GC_TRACE__IMMEDIATE__METHODS;
123 static GVar G_IMMEDIATES;
124 static Obj  GC_IMMEDIATES;
125 static GVar G_SIZE__IMMEDIATE__METHOD__ENTRY;
126 static Obj  GC_SIZE__IMMEDIATE__METHOD__ENTRY;
127 static GVar G_IMMEDIATE__METHODS;
128 static Obj  GC_IMMEDIATE__METHODS;
129 static GVar G_NewSpecialRegion;
130 static Obj  GF_NewSpecialRegion;
131 static GVar G_METHODS__OPERATION__REGION;
132 static Obj  GC_METHODS__OPERATION__REGION;
133 static GVar G_RankFilter;
134 static Obj  GF_RankFilter;
135 static GVar G_CHECK__INSTALL__METHOD;
136 static Obj  GC_CHECK__INSTALL__METHOD;
137 static GVar G_READEVALCOMMAND__LINENUMBER;
138 static Obj  GC_READEVALCOMMAND__LINENUMBER;
139 static GVar G_INSTALL__METHOD;
140 static Obj  GF_INSTALL__METHOD;
141 static GVar G_DeclareGlobalFunction;
142 static Obj  GF_DeclareGlobalFunction;
143 static GVar G_OPERATIONS__REGION;
144 static Obj  GC_OPERATIONS__REGION;
145 static GVar G_EvalString;
146 static Obj  GF_EvalString;
147 static GVar G_WRAPPER__OPERATIONS;
148 static Obj  GC_WRAPPER__OPERATIONS;
149 static GVar G_INFO__DEBUG;
150 static Obj  GF_INFO__DEBUG;
151 static GVar G_GET__OPER__FLAGS;
152 static Obj  GF_GET__OPER__FLAGS;
153 static GVar G_NamesFilter;
154 static Obj  GF_NamesFilter;
155 static GVar G_Ordinal;
156 static Obj  GF_Ordinal;
157 static GVar G_HasNameFunction;
158 static Obj  GC_HasNameFunction;
159 static GVar G_INSTALL__METHOD__FLAGS;
160 static Obj  GF_INSTALL__METHOD__FLAGS;
161 static GVar G_LENGTH__SETTER__METHODS__2;
162 static Obj  GC_LENGTH__SETTER__METHODS__2;
163 static GVar G_InstallAttributeFunction;
164 static Obj  GF_InstallAttributeFunction;
165 static GVar G_FILTER__REGION;
166 static Obj  GC_FILTER__REGION;
167 static GVar G_INFO__FILTERS;
168 static Obj  GC_INFO__FILTERS;
169 static GVar G_FNUM__CATS__AND__REPS;
170 static Obj  GC_FNUM__CATS__AND__REPS;
171 static GVar G_FILTERS;
172 static Obj  GC_FILTERS;
173 static GVar G_FNUM__PROS;
174 static Obj  GC_FNUM__PROS;
175 static GVar G_InstallOtherMethod;
176 static Obj  GF_InstallOtherMethod;
177 static GVar G_Tester;
178 static Obj  GF_Tester;
179 static GVar G_IsPrimeInt;
180 static Obj  GF_IsPrimeInt;
181 static GVar G_DeclareOperation;
182 static Obj  GF_DeclareOperation;
183 static GVar G_VALUE__GLOBAL;
184 static Obj  GF_VALUE__GLOBAL;
185 static GVar G_DeclareAttribute;
186 static Obj  GF_DeclareAttribute;
187 static GVar G_InstallMethod;
188 static Obj  GF_InstallMethod;
189 static GVar G_PositionSortedOddPositions;
190 static Obj  GF_PositionSortedOddPositions;
191 static GVar G_CallFuncList;
192 static Obj  GF_CallFuncList;
193 
194 /* record names used in handlers */
195 static RNam R_MaxNrArgsMethod;
196 static RNam R_CommandLineOptions;
197 static RNam R_N;
198 
199 /* information for the functions */
200 static Obj  NameFunc[19];
201 static Obj FileName;
202 
203 /* handler for function 2 */
HdlrFunc2(Obj self,Obj a_obj,Obj a_flags)204 static Obj  HdlrFunc2 (
205  Obj  self,
206  Obj  a_obj,
207  Obj  a_flags )
208 {
209  Obj l_flagspos = 0;
210  Obj l_tried = 0;
211  Obj l_type = 0;
212  Obj l_j = 0;
213  Obj l_imm = 0;
214  Obj l_i = 0;
215  Obj l_meth = 0;
216  Obj l_res = 0;
217  Obj l_loc = 0;
218  Obj l_newflags = 0;
219  Obj t_1 = 0;
220  Obj t_2 = 0;
221  Obj t_3 = 0;
222  Obj t_4 = 0;
223  Obj t_5 = 0;
224  Obj t_6 = 0;
225  Obj t_7 = 0;
226  Obj t_8 = 0;
227  Obj t_9 = 0;
228  Obj t_10 = 0;
229  Obj t_11 = 0;
230  Obj t_12 = 0;
231  Obj t_13 = 0;
232  Obj t_14 = 0;
233  Obj t_15 = 0;
234  Obj t_16 = 0;
235  Obj t_17 = 0;
236  (void)l_flagspos;
237  (void)l_tried;
238  (void)l_type;
239  (void)l_j;
240  (void)l_imm;
241  (void)l_i;
242  (void)l_meth;
243  (void)l_res;
244  (void)l_loc;
245  (void)l_newflags;
246  Bag oldFrame;
247 
248  /* allocate new stack frame */
249  SWITCH_TO_NEW_FRAME(self,0,0,oldFrame);
250 
251  /* if IGNORE_IMMEDIATE_METHODS then */
252  t_2 = GC_IGNORE__IMMEDIATE__METHODS;
253  CHECK_BOUND( t_2, "IGNORE_IMMEDIATE_METHODS" );
254  CHECK_BOOL( t_2 );
255  t_1 = (Obj)(UInt)(t_2 != False);
256  if ( t_1 ) {
257 
258   /* return; */
259   SWITCH_TO_OLD_FRAME(oldFrame);
260   return 0;
261 
262  }
263  /* fi */
264 
265  /* if IS_SUBSET_FLAGS( IMM_FLAGS, flags ) then */
266  t_3 = GF_IS__SUBSET__FLAGS;
267  t_4 = GC_IMM__FLAGS;
268  CHECK_BOUND( t_4, "IMM_FLAGS" );
269  if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
270   t_2 = CALL_2ARGS( t_3, t_4, a_flags );
271  }
272  else {
273   t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( t_4, a_flags ) );
274  }
275  CHECK_FUNC_RESULT( t_2 );
276  CHECK_BOOL( t_2 );
277  t_1 = (Obj)(UInt)(t_2 != False);
278  if ( t_1 ) {
279 
280   /* return; */
281   SWITCH_TO_OLD_FRAME(oldFrame);
282   return 0;
283 
284  }
285  /* fi */
286 
287  /* flags := SUB_FLAGS( flags, IMM_FLAGS ); */
288  t_2 = GF_SUB__FLAGS;
289  t_3 = GC_IMM__FLAGS;
290  CHECK_BOUND( t_3, "IMM_FLAGS" );
291  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
292   t_1 = CALL_2ARGS( t_2, a_flags, t_3 );
293  }
294  else {
295   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( a_flags, t_3 ) );
296  }
297  CHECK_FUNC_RESULT( t_1 );
298  a_flags = t_1;
299 
300  /* flagspos := SHALLOW_COPY_OBJ( TRUES_FLAGS( flags ) ); */
301  t_2 = GF_SHALLOW__COPY__OBJ;
302  t_4 = GF_TRUES__FLAGS;
303  if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
304   t_3 = CALL_1ARGS( t_4, a_flags );
305  }
306  else {
307   t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( a_flags ) );
308  }
309  CHECK_FUNC_RESULT( t_3 );
310  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
311   t_1 = CALL_1ARGS( t_2, t_3 );
312  }
313  else {
314   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( t_3 ) );
315  }
316  CHECK_FUNC_RESULT( t_1 );
317  l_flagspos = t_1;
318 
319  /* tried := [  ]; */
320  t_1 = NEW_PLIST( T_PLIST, 0 );
321  SET_LEN_PLIST( t_1, 0 );
322  l_tried = t_1;
323 
324  /* type := TYPE_OBJ( obj ); */
325  t_2 = GF_TYPE__OBJ;
326  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
327   t_1 = CALL_1ARGS( t_2, a_obj );
328  }
329  else {
330   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( a_obj ) );
331  }
332  CHECK_FUNC_RESULT( t_1 );
333  l_type = t_1;
334 
335  /* flags := type![2]; */
336  t_1 = ElmPosObj( l_type, 2 );
337  a_flags = t_1;
338 
339  /* RUN_IMMEDIATE_METHODS_RUNS := RUN_IMMEDIATE_METHODS_RUNS + 1; */
340  t_2 = GC_RUN__IMMEDIATE__METHODS__RUNS;
341  CHECK_BOUND( t_2, "RUN_IMMEDIATE_METHODS_RUNS" );
342  C_SUM_FIA( t_1, t_2, INTOBJ_INT(1) )
343  AssGVar( G_RUN__IMMEDIATE__METHODS__RUNS, t_1 );
344 
345  /* if TRACE_IMMEDIATE_METHODS then */
346  t_2 = GC_TRACE__IMMEDIATE__METHODS;
347  CHECK_BOUND( t_2, "TRACE_IMMEDIATE_METHODS" );
348  CHECK_BOOL( t_2 );
349  t_1 = (Obj)(UInt)(t_2 != False);
350  if ( t_1 ) {
351 
352   /* Print( "#I RunImmediateMethods\n" ); */
353   t_1 = GF_Print;
354   t_2 = MakeString( "#I RunImmediateMethods\n" );
355   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
356    CALL_1ARGS( t_1, t_2 );
357   }
358   else {
359    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2 ) );
360   }
361 
362  }
363  /* fi */
364 
365  /* for j in flagspos do */
366  t_4 = l_flagspos;
367  if ( IS_SMALL_LIST(t_4) ) {
368   t_3 = (Obj)(UInt)1;
369   t_1 = INTOBJ_INT(1);
370  }
371  else {
372   t_3 = (Obj)(UInt)0;
373   t_1 = CALL_1ARGS( GF_ITERATOR, t_4 );
374  }
375  while ( 1 ) {
376   if ( t_3 ) {
377    if ( LEN_LIST(t_4) < INT_INTOBJ(t_1) )  break;
378    t_2 = ELMV0_LIST( t_4, INT_INTOBJ(t_1) );
379    t_1 = (Obj)(((UInt)t_1)+4);
380    if ( t_2 == 0 )  continue;
381   }
382   else {
383    if ( CALL_1ARGS( GF_IS_DONE_ITER, t_1 ) != False )  break;
384    t_2 = CALL_1ARGS( GF_NEXT_ITER, t_1 );
385   }
386   l_j = t_2;
387 
388   /* if IsBound( IMMEDIATES[j] ) then */
389   t_7 = GC_IMMEDIATES;
390   CHECK_BOUND( t_7, "IMMEDIATES" );
391   CHECK_INT_POS( l_j );
392   t_6 = C_ISB_LIST( t_7, l_j );
393   t_5 = (Obj)(UInt)(t_6 != False);
394   if ( t_5 ) {
395 
396    /* imm := IMMEDIATES[j]; */
397    t_6 = GC_IMMEDIATES;
398    CHECK_BOUND( t_6, "IMMEDIATES" );
399    C_ELM_LIST_FPL( t_5, t_6, l_j )
400    l_imm = t_5;
401 
402    /* for i in [ 0, SIZE_IMMEDIATE_METHOD_ENTRY .. LEN_LIST( imm ) - SIZE_IMMEDIATE_METHOD_ENTRY ] do */
403    t_9 = GC_SIZE__IMMEDIATE__METHOD__ENTRY;
404    CHECK_BOUND( t_9, "SIZE_IMMEDIATE_METHOD_ENTRY" );
405    t_12 = GF_LEN__LIST;
406    if ( TNUM_OBJ( t_12 ) == T_FUNCTION ) {
407     t_11 = CALL_1ARGS( t_12, l_imm );
408    }
409    else {
410     t_11 = DoOperation2Args( CallFuncListOper, t_12, NewPlistFromArgs( l_imm ) );
411    }
412    CHECK_FUNC_RESULT( t_11 );
413    t_12 = GC_SIZE__IMMEDIATE__METHOD__ENTRY;
414    CHECK_BOUND( t_12, "SIZE_IMMEDIATE_METHOD_ENTRY" );
415    C_DIFF_FIA( t_10, t_11, t_12 )
416    t_8 = Range3Check( INTOBJ_INT(0), t_9, t_10 );
417    if ( IS_SMALL_LIST(t_8) ) {
418     t_7 = (Obj)(UInt)1;
419     t_5 = INTOBJ_INT(1);
420    }
421    else {
422     t_7 = (Obj)(UInt)0;
423     t_5 = CALL_1ARGS( GF_ITERATOR, t_8 );
424    }
425    while ( 1 ) {
426     if ( t_7 ) {
427      if ( LEN_LIST(t_8) < INT_INTOBJ(t_5) )  break;
428      t_6 = ELMV0_LIST( t_8, INT_INTOBJ(t_5) );
429      t_5 = (Obj)(((UInt)t_5)+4);
430      if ( t_6 == 0 )  continue;
431     }
432     else {
433      if ( CALL_1ARGS( GF_IS_DONE_ITER, t_5 ) != False )  break;
434      t_6 = CALL_1ARGS( GF_NEXT_ITER, t_5 );
435     }
436     l_i = t_6;
437 
438     /* if IS_SUBSET_FLAGS( flags, imm[i + 4] ) and not IS_SUBSET_FLAGS( flags, imm[i + 3] ) and not imm[i + 6] in tried then */
439     t_13 = GF_IS__SUBSET__FLAGS;
440     C_SUM_FIA( t_15, l_i, INTOBJ_INT(4) )
441     CHECK_INT_POS( t_15 );
442     C_ELM_LIST_FPL( t_14, l_imm, t_15 )
443     if ( TNUM_OBJ( t_13 ) == T_FUNCTION ) {
444      t_12 = CALL_2ARGS( t_13, a_flags, t_14 );
445     }
446     else {
447      t_12 = DoOperation2Args( CallFuncListOper, t_13, NewPlistFromArgs( a_flags, t_14 ) );
448     }
449     CHECK_FUNC_RESULT( t_12 );
450     CHECK_BOOL( t_12 );
451     t_11 = (Obj)(UInt)(t_12 != False);
452     t_10 = t_11;
453     if ( t_10 ) {
454      t_15 = GF_IS__SUBSET__FLAGS;
455      C_SUM_FIA( t_17, l_i, INTOBJ_INT(3) )
456      CHECK_INT_POS( t_17 );
457      C_ELM_LIST_FPL( t_16, l_imm, t_17 )
458      if ( TNUM_OBJ( t_15 ) == T_FUNCTION ) {
459       t_14 = CALL_2ARGS( t_15, a_flags, t_16 );
460      }
461      else {
462       t_14 = DoOperation2Args( CallFuncListOper, t_15, NewPlistFromArgs( a_flags, t_16 ) );
463      }
464      CHECK_FUNC_RESULT( t_14 );
465      CHECK_BOOL( t_14 );
466      t_13 = (Obj)(UInt)(t_14 != False);
467      t_12 = (Obj)(UInt)( ! ((Int)t_13) );
468      t_10 = t_12;
469     }
470     t_9 = t_10;
471     if ( t_9 ) {
472      C_SUM_FIA( t_14, l_i, INTOBJ_INT(6) )
473      CHECK_INT_POS( t_14 );
474      C_ELM_LIST_FPL( t_13, l_imm, t_14 )
475      t_12 = (Obj)(UInt)(IN( t_13, l_tried ));
476      t_11 = (Obj)(UInt)( ! ((Int)t_12) );
477      t_9 = t_11;
478     }
479     if ( t_9 ) {
480 
481      /* meth := IMMEDIATE_METHODS[imm[i + 6]]; */
482      t_10 = GC_IMMEDIATE__METHODS;
483      CHECK_BOUND( t_10, "IMMEDIATE_METHODS" );
484      C_SUM_FIA( t_12, l_i, INTOBJ_INT(6) )
485      CHECK_INT_POS( t_12 );
486      C_ELM_LIST_FPL( t_11, l_imm, t_12 )
487      CHECK_INT_POS( t_11 );
488      C_ELM_LIST_FPL( t_9, t_10, t_11 )
489      l_meth = t_9;
490 
491      /* res := meth( obj ); */
492      if ( TNUM_OBJ( l_meth ) == T_FUNCTION ) {
493       t_9 = CALL_1ARGS( l_meth, a_obj );
494      }
495      else {
496       t_9 = DoOperation2Args( CallFuncListOper, l_meth, NewPlistFromArgs( a_obj ) );
497      }
498      CHECK_FUNC_RESULT( t_9 );
499      l_res = t_9;
500 
501      /* ADD_LIST( tried, imm[i + 6] ); */
502      t_9 = GF_ADD__LIST;
503      C_SUM_FIA( t_11, l_i, INTOBJ_INT(6) )
504      CHECK_INT_POS( t_11 );
505      C_ELM_LIST_FPL( t_10, l_imm, t_11 )
506      if ( TNUM_OBJ( t_9 ) == T_FUNCTION ) {
507       CALL_2ARGS( t_9, l_tried, t_10 );
508      }
509      else {
510       DoOperation2Args( CallFuncListOper, t_9, NewPlistFromArgs( l_tried, t_10 ) );
511      }
512 
513      /* RUN_IMMEDIATE_METHODS_CHECKS := RUN_IMMEDIATE_METHODS_CHECKS + 1; */
514      t_10 = GC_RUN__IMMEDIATE__METHODS__CHECKS;
515      CHECK_BOUND( t_10, "RUN_IMMEDIATE_METHODS_CHECKS" );
516      C_SUM_FIA( t_9, t_10, INTOBJ_INT(1) )
517      AssGVar( G_RUN__IMMEDIATE__METHODS__CHECKS, t_9 );
518 
519      /* if TRACE_IMMEDIATE_METHODS then */
520      t_10 = GC_TRACE__IMMEDIATE__METHODS;
521      CHECK_BOUND( t_10, "TRACE_IMMEDIATE_METHODS" );
522      CHECK_BOOL( t_10 );
523      t_9 = (Obj)(UInt)(t_10 != False);
524      if ( t_9 ) {
525 
526       /* Print( "#I  immediate: ", NAME_FUNC( imm[i + 1] ) ); */
527       t_9 = GF_Print;
528       t_10 = MakeString( "#I  immediate: " );
529       t_12 = GF_NAME__FUNC;
530       C_SUM_FIA( t_14, l_i, INTOBJ_INT(1) )
531       CHECK_INT_POS( t_14 );
532       C_ELM_LIST_FPL( t_13, l_imm, t_14 )
533       if ( TNUM_OBJ( t_12 ) == T_FUNCTION ) {
534        t_11 = CALL_1ARGS( t_12, t_13 );
535       }
536       else {
537        t_11 = DoOperation2Args( CallFuncListOper, t_12, NewPlistFromArgs( t_13 ) );
538       }
539       CHECK_FUNC_RESULT( t_11 );
540       if ( TNUM_OBJ( t_9 ) == T_FUNCTION ) {
541        CALL_2ARGS( t_9, t_10, t_11 );
542       }
543       else {
544        DoOperation2Args( CallFuncListOper, t_9, NewPlistFromArgs( t_10, t_11 ) );
545       }
546 
547       /* if imm[i + 7] <> false then */
548       C_SUM_FIA( t_11, l_i, INTOBJ_INT(7) )
549       CHECK_INT_POS( t_11 );
550       C_ELM_LIST_FPL( t_10, l_imm, t_11 )
551       t_11 = False;
552       t_9 = (Obj)(UInt)( ! EQ( t_10, t_11 ));
553       if ( t_9 ) {
554 
555        /* Print( ": ", imm[i + 7] ); */
556        t_9 = GF_Print;
557        t_10 = MakeString( ": " );
558        C_SUM_FIA( t_12, l_i, INTOBJ_INT(7) )
559        CHECK_INT_POS( t_12 );
560        C_ELM_LIST_FPL( t_11, l_imm, t_12 )
561        if ( TNUM_OBJ( t_9 ) == T_FUNCTION ) {
562         CALL_2ARGS( t_9, t_10, t_11 );
563        }
564        else {
565         DoOperation2Args( CallFuncListOper, t_9, NewPlistFromArgs( t_10, t_11 ) );
566        }
567 
568       }
569       /* fi */
570 
571       /* Print( " at ", imm[i + 8][1], ":", imm[i + 8][2], "\n" ); */
572       t_9 = GF_Print;
573       t_10 = MakeString( " at " );
574       C_SUM_FIA( t_13, l_i, INTOBJ_INT(8) )
575       CHECK_INT_POS( t_13 );
576       C_ELM_LIST_FPL( t_12, l_imm, t_13 )
577       C_ELM_LIST_FPL( t_11, t_12, INTOBJ_INT(1) )
578       t_12 = MakeString( ":" );
579       C_SUM_FIA( t_15, l_i, INTOBJ_INT(8) )
580       CHECK_INT_POS( t_15 );
581       C_ELM_LIST_FPL( t_14, l_imm, t_15 )
582       C_ELM_LIST_FPL( t_13, t_14, INTOBJ_INT(2) )
583       t_14 = MakeString( "\n" );
584       if ( TNUM_OBJ( t_9 ) == T_FUNCTION ) {
585        CALL_5ARGS( t_9, t_10, t_11, t_12, t_13, t_14 );
586       }
587       else {
588        DoOperation2Args( CallFuncListOper, t_9, NewPlistFromArgs( t_10, t_11, t_12, t_13, t_14 ) );
589       }
590 
591      }
592      /* fi */
593 
594      /* if res <> TRY_NEXT_METHOD then */
595      t_10 = GC_TRY__NEXT__METHOD;
596      CHECK_BOUND( t_10, "TRY_NEXT_METHOD" );
597      t_9 = (Obj)(UInt)( ! EQ( l_res, t_10 ));
598      if ( t_9 ) {
599 
600       /* IGNORE_IMMEDIATE_METHODS := true; */
601       t_9 = True;
602       AssGVar( G_IGNORE__IMMEDIATE__METHODS, t_9 );
603 
604       /* imm[i + 2]( obj, res ); */
605       C_SUM_FIA( t_10, l_i, INTOBJ_INT(2) )
606       CHECK_INT_POS( t_10 );
607       C_ELM_LIST_FPL( t_9, l_imm, t_10 )
608       if ( TNUM_OBJ( t_9 ) == T_FUNCTION ) {
609        CALL_2ARGS( t_9, a_obj, l_res );
610       }
611       else {
612        DoOperation2Args( CallFuncListOper, t_9, NewPlistFromArgs( a_obj, l_res ) );
613       }
614 
615       /* IGNORE_IMMEDIATE_METHODS := false; */
616       t_9 = False;
617       AssGVar( G_IGNORE__IMMEDIATE__METHODS, t_9 );
618 
619       /* RUN_IMMEDIATE_METHODS_HITS := RUN_IMMEDIATE_METHODS_HITS + 1; */
620       t_10 = GC_RUN__IMMEDIATE__METHODS__HITS;
621       CHECK_BOUND( t_10, "RUN_IMMEDIATE_METHODS_HITS" );
622       C_SUM_FIA( t_9, t_10, INTOBJ_INT(1) )
623       AssGVar( G_RUN__IMMEDIATE__METHODS__HITS, t_9 );
624 
625       /* if not IS_IDENTICAL_OBJ( TYPE_OBJ( obj ), type ) then */
626       t_12 = GF_IS__IDENTICAL__OBJ;
627       t_14 = GF_TYPE__OBJ;
628       if ( TNUM_OBJ( t_14 ) == T_FUNCTION ) {
629        t_13 = CALL_1ARGS( t_14, a_obj );
630       }
631       else {
632        t_13 = DoOperation2Args( CallFuncListOper, t_14, NewPlistFromArgs( a_obj ) );
633       }
634       CHECK_FUNC_RESULT( t_13 );
635       if ( TNUM_OBJ( t_12 ) == T_FUNCTION ) {
636        t_11 = CALL_2ARGS( t_12, t_13, l_type );
637       }
638       else {
639        t_11 = DoOperation2Args( CallFuncListOper, t_12, NewPlistFromArgs( t_13, l_type ) );
640       }
641       CHECK_FUNC_RESULT( t_11 );
642       CHECK_BOOL( t_11 );
643       t_10 = (Obj)(UInt)(t_11 != False);
644       t_9 = (Obj)(UInt)( ! ((Int)t_10) );
645       if ( t_9 ) {
646 
647        /* type := TYPE_OBJ( obj ); */
648        t_10 = GF_TYPE__OBJ;
649        if ( TNUM_OBJ( t_10 ) == T_FUNCTION ) {
650         t_9 = CALL_1ARGS( t_10, a_obj );
651        }
652        else {
653         t_9 = DoOperation2Args( CallFuncListOper, t_10, NewPlistFromArgs( a_obj ) );
654        }
655        CHECK_FUNC_RESULT( t_9 );
656        l_type = t_9;
657 
658        /* newflags := SUB_FLAGS( type![2], IMM_FLAGS ); */
659        t_10 = GF_SUB__FLAGS;
660        t_11 = ElmPosObj( l_type, 2 );
661        t_12 = GC_IMM__FLAGS;
662        CHECK_BOUND( t_12, "IMM_FLAGS" );
663        if ( TNUM_OBJ( t_10 ) == T_FUNCTION ) {
664         t_9 = CALL_2ARGS( t_10, t_11, t_12 );
665        }
666        else {
667         t_9 = DoOperation2Args( CallFuncListOper, t_10, NewPlistFromArgs( t_11, t_12 ) );
668        }
669        CHECK_FUNC_RESULT( t_9 );
670        l_newflags = t_9;
671 
672        /* newflags := SUB_FLAGS( newflags, flags ); */
673        t_10 = GF_SUB__FLAGS;
674        if ( TNUM_OBJ( t_10 ) == T_FUNCTION ) {
675         t_9 = CALL_2ARGS( t_10, l_newflags, a_flags );
676        }
677        else {
678         t_9 = DoOperation2Args( CallFuncListOper, t_10, NewPlistFromArgs( l_newflags, a_flags ) );
679        }
680        CHECK_FUNC_RESULT( t_9 );
681        l_newflags = t_9;
682 
683        /* APPEND_LIST_INTR( flagspos, TRUES_FLAGS( newflags ) ); */
684        t_9 = GF_APPEND__LIST__INTR;
685        t_11 = GF_TRUES__FLAGS;
686        if ( TNUM_OBJ( t_11 ) == T_FUNCTION ) {
687         t_10 = CALL_1ARGS( t_11, l_newflags );
688        }
689        else {
690         t_10 = DoOperation2Args( CallFuncListOper, t_11, NewPlistFromArgs( l_newflags ) );
691        }
692        CHECK_FUNC_RESULT( t_10 );
693        if ( TNUM_OBJ( t_9 ) == T_FUNCTION ) {
694         CALL_2ARGS( t_9, l_flagspos, t_10 );
695        }
696        else {
697         DoOperation2Args( CallFuncListOper, t_9, NewPlistFromArgs( l_flagspos, t_10 ) );
698        }
699 
700        /* flags := type![2]; */
701        t_9 = ElmPosObj( l_type, 2 );
702        a_flags = t_9;
703 
704       }
705       /* fi */
706 
707      }
708      /* fi */
709 
710     }
711     /* fi */
712 
713    }
714    /* od */
715 
716   }
717   /* fi */
718 
719  }
720  /* od */
721 
722  /* return; */
723  SWITCH_TO_OLD_FRAME(oldFrame);
724  return 0;
725 
726  /* return; */
727  SWITCH_TO_OLD_FRAME(oldFrame);
728  return 0;
729 }
730 
731 /* handler for function 3 */
HdlrFunc3(Obj self,Obj a_opr,Obj a_info,Obj a_rel,Obj a_flags,Obj a_baserank,Obj a_method)732 static Obj  HdlrFunc3 (
733  Obj  self,
734  Obj  a_opr,
735  Obj  a_info,
736  Obj  a_rel,
737  Obj  a_flags,
738  Obj  a_baserank,
739  Obj  a_method )
740 {
741  Obj l_methods = 0;
742  Obj l_narg = 0;
743  Obj l_i = 0;
744  Obj l_k = 0;
745  Obj l_tmp = 0;
746  Obj l_replace = 0;
747  Obj l_match = 0;
748  Obj l_j = 0;
749  Obj l_lk = 0;
750  Obj l_rank = 0;
751  Obj t_1 = 0;
752  Obj t_2 = 0;
753  Obj t_3 = 0;
754  Obj t_4 = 0;
755  Obj t_5 = 0;
756  Obj t_6 = 0;
757  Obj t_7 = 0;
758  Obj t_8 = 0;
759  (void)l_methods;
760  (void)l_narg;
761  (void)l_i;
762  (void)l_k;
763  (void)l_tmp;
764  (void)l_replace;
765  (void)l_match;
766  (void)l_j;
767  (void)l_lk;
768  (void)l_rank;
769  Bag oldFrame;
770 
771  /* allocate new stack frame */
772  SWITCH_TO_NEW_FRAME(self,0,0,oldFrame);
773 
774  /* lk := WRITE_LOCK( METHODS_OPERATION_REGION ); */
775  t_2 = GF_WRITE__LOCK;
776  t_3 = GC_METHODS__OPERATION__REGION;
777  CHECK_BOUND( t_3, "METHODS_OPERATION_REGION" );
778  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
779   t_1 = CALL_1ARGS( t_2, t_3 );
780  }
781  else {
782   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( t_3 ) );
783  }
784  CHECK_FUNC_RESULT( t_1 );
785  l_lk = t_1;
786 
787  /* if IS_FUNCTION( baserank ) then */
788  t_3 = GF_IS__FUNCTION;
789  if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
790   t_2 = CALL_1ARGS( t_3, a_baserank );
791  }
792  else {
793   t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( a_baserank ) );
794  }
795  CHECK_FUNC_RESULT( t_2 );
796  CHECK_BOOL( t_2 );
797  t_1 = (Obj)(UInt)(t_2 != False);
798  if ( t_1 ) {
799 
800   /* rank := baserank(  ); */
801   if ( TNUM_OBJ( a_baserank ) == T_FUNCTION ) {
802    t_1 = CALL_0ARGS( a_baserank );
803   }
804   else {
805    t_1 = DoOperation2Args( CallFuncListOper, a_baserank, NewPlistFromArgs( ) );
806   }
807   CHECK_FUNC_RESULT( t_1 );
808   l_rank = t_1;
809 
810  }
811 
812  /* else */
813  else {
814 
815   /* rank := baserank; */
816   l_rank = a_baserank;
817 
818  }
819  /* fi */
820 
821  /* if IS_CONSTRUCTOR( opr ) then */
822  t_3 = GF_IS__CONSTRUCTOR;
823  if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
824   t_2 = CALL_1ARGS( t_3, a_opr );
825  }
826  else {
827   t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( a_opr ) );
828  }
829  CHECK_FUNC_RESULT( t_2 );
830  CHECK_BOOL( t_2 );
831  t_1 = (Obj)(UInt)(t_2 != False);
832  if ( t_1 ) {
833 
834   /* if 0 = LEN_LIST( flags ) then */
835   t_3 = GF_LEN__LIST;
836   if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
837    t_2 = CALL_1ARGS( t_3, a_flags );
838   }
839   else {
840    t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( a_flags ) );
841   }
842   CHECK_FUNC_RESULT( t_2 );
843   t_1 = (Obj)(UInt)(EQ( INTOBJ_INT(0), t_2 ));
844   if ( t_1 ) {
845 
846    /* Error( NAME_FUNC( opr ), ": constructors must have at least one argument" ); */
847    t_1 = GF_Error;
848    t_3 = GF_NAME__FUNC;
849    if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
850     t_2 = CALL_1ARGS( t_3, a_opr );
851    }
852    else {
853     t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( a_opr ) );
854    }
855    CHECK_FUNC_RESULT( t_2 );
856    t_3 = MakeString( ": constructors must have at least one argument" );
857    if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
858     CALL_2ARGS( t_1, t_2, t_3 );
859    }
860    else {
861     DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
862    }
863 
864   }
865   /* fi */
866 
867   /* rank := rank - RankFilter( flags[1] ); */
868   t_3 = GF_RankFilter;
869   C_ELM_LIST_FPL( t_4, a_flags, INTOBJ_INT(1) )
870   if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
871    t_2 = CALL_1ARGS( t_3, t_4 );
872   }
873   else {
874    t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( t_4 ) );
875   }
876   CHECK_FUNC_RESULT( t_2 );
877   C_DIFF_FIA( t_1, l_rank, t_2 )
878   l_rank = t_1;
879 
880  }
881 
882  /* else */
883  else {
884 
885   /* for i in flags do */
886   t_4 = a_flags;
887   if ( IS_SMALL_LIST(t_4) ) {
888    t_3 = (Obj)(UInt)1;
889    t_1 = INTOBJ_INT(1);
890   }
891   else {
892    t_3 = (Obj)(UInt)0;
893    t_1 = CALL_1ARGS( GF_ITERATOR, t_4 );
894   }
895   while ( 1 ) {
896    if ( t_3 ) {
897     if ( LEN_LIST(t_4) < INT_INTOBJ(t_1) )  break;
898     t_2 = ELMV0_LIST( t_4, INT_INTOBJ(t_1) );
899     t_1 = (Obj)(((UInt)t_1)+4);
900     if ( t_2 == 0 )  continue;
901    }
902    else {
903     if ( CALL_1ARGS( GF_IS_DONE_ITER, t_1 ) != False )  break;
904     t_2 = CALL_1ARGS( GF_NEXT_ITER, t_1 );
905    }
906    l_i = t_2;
907 
908    /* rank := rank + RankFilter( i ); */
909    t_7 = GF_RankFilter;
910    if ( TNUM_OBJ( t_7 ) == T_FUNCTION ) {
911     t_6 = CALL_1ARGS( t_7, l_i );
912    }
913    else {
914     t_6 = DoOperation2Args( CallFuncListOper, t_7, NewPlistFromArgs( l_i ) );
915    }
916    CHECK_FUNC_RESULT( t_6 );
917    C_SUM_FIA( t_5, l_rank, t_6 )
918    l_rank = t_5;
919 
920   }
921   /* od */
922 
923  }
924  /* fi */
925 
926  /* narg := LEN_LIST( flags ); */
927  t_2 = GF_LEN__LIST;
928  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
929   t_1 = CALL_1ARGS( t_2, a_flags );
930  }
931  else {
932   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( a_flags ) );
933  }
934  CHECK_FUNC_RESULT( t_1 );
935  l_narg = t_1;
936 
937  /* methods := METHODS_OPERATION( opr, narg ); */
938  t_2 = GF_METHODS__OPERATION;
939  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
940   t_1 = CALL_2ARGS( t_2, a_opr, l_narg );
941  }
942  else {
943   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( a_opr, l_narg ) );
944  }
945  CHECK_FUNC_RESULT( t_1 );
946  l_methods = t_1;
947 
948  /* methods := methods{[ 1 .. LEN_LIST( methods ) ]}; */
949  t_4 = GF_LEN__LIST;
950  if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
951   t_3 = CALL_1ARGS( t_4, l_methods );
952  }
953  else {
954   t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_methods ) );
955  }
956  CHECK_FUNC_RESULT( t_3 );
957  t_2 = Range2Check( INTOBJ_INT(1), t_3 );
958  t_1 = ElmsListCheck( l_methods, t_2 );
959  l_methods = t_1;
960 
961  /* if info = false then */
962  t_2 = False;
963  t_1 = (Obj)(UInt)(EQ( a_info, t_2 ));
964  if ( t_1 ) {
965 
966   /* info := NAME_FUNC( opr ); */
967   t_2 = GF_NAME__FUNC;
968   if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
969    t_1 = CALL_1ARGS( t_2, a_opr );
970   }
971   else {
972    t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( a_opr ) );
973   }
974   CHECK_FUNC_RESULT( t_1 );
975   a_info = t_1;
976 
977  }
978 
979  /* else */
980  else {
981 
982   /* k := SHALLOW_COPY_OBJ( NAME_FUNC( opr ) ); */
983   t_2 = GF_SHALLOW__COPY__OBJ;
984   t_4 = GF_NAME__FUNC;
985   if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
986    t_3 = CALL_1ARGS( t_4, a_opr );
987   }
988   else {
989    t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( a_opr ) );
990   }
991   CHECK_FUNC_RESULT( t_3 );
992   if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
993    t_1 = CALL_1ARGS( t_2, t_3 );
994   }
995   else {
996    t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( t_3 ) );
997   }
998   CHECK_FUNC_RESULT( t_1 );
999   l_k = t_1;
1000 
1001   /* APPEND_LIST_INTR( k, ": " ); */
1002   t_1 = GF_APPEND__LIST__INTR;
1003   t_2 = MakeString( ": " );
1004   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
1005    CALL_2ARGS( t_1, l_k, t_2 );
1006   }
1007   else {
1008    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_k, t_2 ) );
1009   }
1010 
1011   /* APPEND_LIST_INTR( k, info ); */
1012   t_1 = GF_APPEND__LIST__INTR;
1013   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
1014    CALL_2ARGS( t_1, l_k, a_info );
1015   }
1016   else {
1017    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_k, a_info ) );
1018   }
1019 
1020   /* info := k; */
1021   a_info = l_k;
1022 
1023   /* CONV_STRING( info ); */
1024   t_1 = GF_CONV__STRING;
1025   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
1026    CALL_1ARGS( t_1, a_info );
1027   }
1028   else {
1029    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( a_info ) );
1030   }
1031 
1032  }
1033  /* fi */
1034 
1035  /* i := 0; */
1036  l_i = INTOBJ_INT(0);
1037 
1038  /* while i < LEN_LIST( methods ) and rank < methods[i + (narg + 3)] do */
1039  while ( 1 ) {
1040   t_4 = GF_LEN__LIST;
1041   if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
1042    t_3 = CALL_1ARGS( t_4, l_methods );
1043   }
1044   else {
1045    t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_methods ) );
1046   }
1047   CHECK_FUNC_RESULT( t_3 );
1048   t_2 = (Obj)(UInt)(LT( l_i, t_3 ));
1049   t_1 = t_2;
1050   if ( t_1 ) {
1051    C_SUM_FIA( t_6, l_narg, INTOBJ_INT(3) )
1052    C_SUM_FIA( t_5, l_i, t_6 )
1053    CHECK_INT_POS( t_5 );
1054    C_ELM_LIST_FPL( t_4, l_methods, t_5 )
1055    t_3 = (Obj)(UInt)(LT( l_rank, t_4 ));
1056    t_1 = t_3;
1057   }
1058   if ( ! t_1 ) break;
1059 
1060   /* i := i + (narg + 6); */
1061   C_SUM_FIA( t_2, l_narg, INTOBJ_INT(6) )
1062   C_SUM_FIA( t_1, l_i, t_2 )
1063   l_i = t_1;
1064 
1065  }
1066  /* od */
1067 
1068  /* replace := false; */
1069  t_1 = False;
1070  l_replace = t_1;
1071 
1072  /* if REREADING then */
1073  t_2 = GC_REREADING;
1074  CHECK_BOUND( t_2, "REREADING" );
1075  CHECK_BOOL( t_2 );
1076  t_1 = (Obj)(UInt)(t_2 != False);
1077  if ( t_1 ) {
1078 
1079   /* k := i; */
1080   l_k = l_i;
1081 
1082   /* while k < LEN_LIST( methods ) and rank = methods[k + narg + 3] do */
1083   while ( 1 ) {
1084    t_4 = GF_LEN__LIST;
1085    if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
1086     t_3 = CALL_1ARGS( t_4, l_methods );
1087    }
1088    else {
1089     t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_methods ) );
1090    }
1091    CHECK_FUNC_RESULT( t_3 );
1092    t_2 = (Obj)(UInt)(LT( l_k, t_3 ));
1093    t_1 = t_2;
1094    if ( t_1 ) {
1095     C_SUM_FIA( t_6, l_k, l_narg )
1096     C_SUM_FIA( t_5, t_6, INTOBJ_INT(3) )
1097     CHECK_INT_POS( t_5 );
1098     C_ELM_LIST_FPL( t_4, l_methods, t_5 )
1099     t_3 = (Obj)(UInt)(EQ( l_rank, t_4 ));
1100     t_1 = t_3;
1101    }
1102    if ( ! t_1 ) break;
1103 
1104    /* if info = methods[k + narg + 4] then */
1105    C_SUM_FIA( t_4, l_k, l_narg )
1106    C_SUM_FIA( t_3, t_4, INTOBJ_INT(4) )
1107    CHECK_INT_POS( t_3 );
1108    C_ELM_LIST_FPL( t_2, l_methods, t_3 )
1109    t_1 = (Obj)(UInt)(EQ( a_info, t_2 ));
1110    if ( t_1 ) {
1111 
1112     /* match := true; */
1113     t_1 = True;
1114     l_match = t_1;
1115 
1116     /* for j in [ 1 .. narg ] do */
1117     CHECK_INT_SMALL( l_narg );
1118     t_2 = l_narg;
1119     for ( t_1 = INTOBJ_INT(1);
1120           ((Int)t_1) <= ((Int)t_2);
1121           t_1 = (Obj)(((UInt)t_1)+4) ) {
1122      l_j = t_1;
1123 
1124      /* match := match and methods[k + j + 1] = flags[j]; */
1125      if ( l_match == False ) {
1126       t_3 = l_match;
1127      }
1128      else if ( l_match == True ) {
1129       C_SUM_FIA( t_7, l_k, l_j )
1130       C_SUM_FIA( t_6, t_7, INTOBJ_INT(1) )
1131       CHECK_INT_POS( t_6 );
1132       C_ELM_LIST_FPL( t_5, l_methods, t_6 )
1133       C_ELM_LIST_FPL( t_6, a_flags, l_j )
1134       t_4 = (EQ( t_5, t_6 ) ? True : False);
1135       t_3 = t_4;
1136      }
1137      else if (IS_FILTER( l_match ) ) {
1138       C_SUM_FIA( t_8, l_k, l_j )
1139       C_SUM_FIA( t_7, t_8, INTOBJ_INT(1) )
1140       CHECK_INT_POS( t_7 );
1141       C_ELM_LIST_FPL( t_6, l_methods, t_7 )
1142       C_ELM_LIST_FPL( t_7, a_flags, l_j )
1143       t_5 = (EQ( t_6, t_7 ) ? True : False);
1144       t_3 = NewAndFilter( l_match, t_5 );
1145      }
1146      else {
1147       RequireArgumentEx(0, l_match, "<expr>",
1148       "must be 'true' or 'false' or a filter" );
1149      }
1150      l_match = t_3;
1151 
1152     }
1153     /* od */
1154 
1155     /* if match then */
1156     CHECK_BOOL( l_match );
1157     t_1 = (Obj)(UInt)(l_match != False);
1158     if ( t_1 ) {
1159 
1160      /* replace := true; */
1161      t_1 = True;
1162      l_replace = t_1;
1163 
1164      /* i := k; */
1165      l_i = l_k;
1166 
1167      /* break; */
1168      break;
1169 
1170     }
1171     /* fi */
1172 
1173    }
1174    /* fi */
1175 
1176    /* k := k + narg + 6; */
1177    C_SUM_FIA( t_2, l_k, l_narg )
1178    C_SUM_FIA( t_1, t_2, INTOBJ_INT(6) )
1179    l_k = t_1;
1180 
1181   }
1182   /* od */
1183 
1184  }
1185  /* fi */
1186 
1187  /* if not REREADING or not replace then */
1188  t_4 = GC_REREADING;
1189  CHECK_BOUND( t_4, "REREADING" );
1190  CHECK_BOOL( t_4 );
1191  t_3 = (Obj)(UInt)(t_4 != False);
1192  t_2 = (Obj)(UInt)( ! ((Int)t_3) );
1193  t_1 = t_2;
1194  if ( ! t_1 ) {
1195   t_4 = (Obj)(UInt)(l_replace != False);
1196   t_3 = (Obj)(UInt)( ! ((Int)t_4) );
1197   t_1 = t_3;
1198  }
1199  if ( t_1 ) {
1200 
1201   /* COPY_LIST_ENTRIES( methods, i + 1, 1, methods, narg + 6 + i + 1, 1, LEN_LIST( methods ) - i ); */
1202   t_1 = GF_COPY__LIST__ENTRIES;
1203   t_2 = NEW_PLIST( T_PLIST, 7 );
1204   SET_LEN_PLIST( t_2, 7 );
1205   SET_ELM_PLIST( t_2, 1, l_methods );
1206   CHANGED_BAG( t_2 );
1207   C_SUM_FIA( t_3, l_i, INTOBJ_INT(1) )
1208   SET_ELM_PLIST( t_2, 2, t_3 );
1209   CHANGED_BAG( t_2 );
1210   SET_ELM_PLIST( t_2, 3, INTOBJ_INT(1) );
1211   SET_ELM_PLIST( t_2, 4, l_methods );
1212   CHANGED_BAG( t_2 );
1213   C_SUM_FIA( t_5, l_narg, INTOBJ_INT(6) )
1214   C_SUM_FIA( t_4, t_5, l_i )
1215   C_SUM_FIA( t_3, t_4, INTOBJ_INT(1) )
1216   SET_ELM_PLIST( t_2, 5, t_3 );
1217   CHANGED_BAG( t_2 );
1218   SET_ELM_PLIST( t_2, 6, INTOBJ_INT(1) );
1219   t_5 = GF_LEN__LIST;
1220   if ( TNUM_OBJ( t_5 ) == T_FUNCTION ) {
1221    t_4 = CALL_1ARGS( t_5, l_methods );
1222   }
1223   else {
1224    t_4 = DoOperation2Args( CallFuncListOper, t_5, NewPlistFromArgs( l_methods ) );
1225   }
1226   CHECK_FUNC_RESULT( t_4 );
1227   C_DIFF_FIA( t_3, t_4, l_i )
1228   SET_ELM_PLIST( t_2, 7, t_3 );
1229   CHANGED_BAG( t_2 );
1230   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
1231    CALL_XARGS( t_1, t_2 );
1232   }
1233   else {
1234    DoOperation2Args( CallFuncListOper, t_1, t_2 );
1235   }
1236 
1237  }
1238  /* fi */
1239 
1240  /* if rel = true then */
1241  t_2 = True;
1242  t_1 = (Obj)(UInt)(EQ( a_rel, t_2 ));
1243  if ( t_1 ) {
1244 
1245   /* rel := RETURN_TRUE; */
1246   t_1 = GC_RETURN__TRUE;
1247   CHECK_BOUND( t_1, "RETURN_TRUE" );
1248   a_rel = t_1;
1249 
1250  }
1251 
1252  /* elif rel = false then */
1253  else {
1254   t_2 = False;
1255   t_1 = (Obj)(UInt)(EQ( a_rel, t_2 ));
1256   if ( t_1 ) {
1257 
1258    /* rel := RETURN_FALSE; */
1259    t_1 = GC_RETURN__FALSE;
1260    CHECK_BOUND( t_1, "RETURN_FALSE" );
1261    a_rel = t_1;
1262 
1263   }
1264 
1265   /* elif IS_FUNCTION( rel ) then */
1266   else {
1267    t_3 = GF_IS__FUNCTION;
1268    if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
1269     t_2 = CALL_1ARGS( t_3, a_rel );
1270    }
1271    else {
1272     t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( a_rel ) );
1273    }
1274    CHECK_FUNC_RESULT( t_2 );
1275    CHECK_BOOL( t_2 );
1276    t_1 = (Obj)(UInt)(t_2 != False);
1277    if ( t_1 ) {
1278 
1279     /* if CHECK_INSTALL_METHOD then */
1280     t_2 = GC_CHECK__INSTALL__METHOD;
1281     CHECK_BOUND( t_2, "CHECK_INSTALL_METHOD" );
1282     CHECK_BOOL( t_2 );
1283     t_1 = (Obj)(UInt)(t_2 != False);
1284     if ( t_1 ) {
1285 
1286      /* tmp := NARG_FUNC( rel ); */
1287      t_2 = GF_NARG__FUNC;
1288      if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
1289       t_1 = CALL_1ARGS( t_2, a_rel );
1290      }
1291      else {
1292       t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( a_rel ) );
1293      }
1294      CHECK_FUNC_RESULT( t_1 );
1295      l_tmp = t_1;
1296 
1297      /* if tmp < AINV( narg ) - 1 or tmp >= 0 and tmp <> narg then */
1298      t_5 = GF_AINV;
1299      if ( TNUM_OBJ( t_5 ) == T_FUNCTION ) {
1300       t_4 = CALL_1ARGS( t_5, l_narg );
1301      }
1302      else {
1303       t_4 = DoOperation2Args( CallFuncListOper, t_5, NewPlistFromArgs( l_narg ) );
1304      }
1305      CHECK_FUNC_RESULT( t_4 );
1306      C_DIFF_FIA( t_3, t_4, INTOBJ_INT(1) )
1307      t_2 = (Obj)(UInt)(LT( l_tmp, t_3 ));
1308      t_1 = t_2;
1309      if ( ! t_1 ) {
1310       t_4 = (Obj)(UInt)(! LT( l_tmp, INTOBJ_INT(0) ));
1311       t_3 = t_4;
1312       if ( t_3 ) {
1313        t_5 = (Obj)(UInt)( ! EQ( l_tmp, l_narg ));
1314        t_3 = t_5;
1315       }
1316       t_1 = t_3;
1317      }
1318      if ( t_1 ) {
1319 
1320       /* Error( NAME_FUNC( opr ), ": <famrel> must accept ", narg, " arguments" ); */
1321       t_1 = GF_Error;
1322       t_3 = GF_NAME__FUNC;
1323       if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
1324        t_2 = CALL_1ARGS( t_3, a_opr );
1325       }
1326       else {
1327        t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( a_opr ) );
1328       }
1329       CHECK_FUNC_RESULT( t_2 );
1330       t_3 = MakeString( ": <famrel> must accept " );
1331       t_4 = MakeString( " arguments" );
1332       if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
1333        CALL_4ARGS( t_1, t_2, t_3, l_narg, t_4 );
1334       }
1335       else {
1336        DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3, l_narg, t_4 ) );
1337       }
1338 
1339      }
1340      /* fi */
1341 
1342     }
1343     /* fi */
1344 
1345    }
1346 
1347    /* else */
1348    else {
1349 
1350     /* Error( NAME_FUNC( opr ), ": <famrel> must be a function, `true', or `false'" ); */
1351     t_1 = GF_Error;
1352     t_3 = GF_NAME__FUNC;
1353     if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
1354      t_2 = CALL_1ARGS( t_3, a_opr );
1355     }
1356     else {
1357      t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( a_opr ) );
1358     }
1359     CHECK_FUNC_RESULT( t_2 );
1360     t_3 = MakeString( ": <famrel> must be a function, `true', or `false'" );
1361     if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
1362      CALL_2ARGS( t_1, t_2, t_3 );
1363     }
1364     else {
1365      DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
1366     }
1367 
1368    }
1369   }
1370  }
1371  /* fi */
1372 
1373  /* if method = true then */
1374  t_2 = True;
1375  t_1 = (Obj)(UInt)(EQ( a_method, t_2 ));
1376  if ( t_1 ) {
1377 
1378   /* method := RETURN_TRUE; */
1379   t_1 = GC_RETURN__TRUE;
1380   CHECK_BOUND( t_1, "RETURN_TRUE" );
1381   a_method = t_1;
1382 
1383  }
1384 
1385  /* elif method = false then */
1386  else {
1387   t_2 = False;
1388   t_1 = (Obj)(UInt)(EQ( a_method, t_2 ));
1389   if ( t_1 ) {
1390 
1391    /* method := RETURN_FALSE; */
1392    t_1 = GC_RETURN__FALSE;
1393    CHECK_BOUND( t_1, "RETURN_FALSE" );
1394    a_method = t_1;
1395 
1396   }
1397 
1398   /* elif IS_FUNCTION( method ) then */
1399   else {
1400    t_3 = GF_IS__FUNCTION;
1401    if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
1402     t_2 = CALL_1ARGS( t_3, a_method );
1403    }
1404    else {
1405     t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( a_method ) );
1406    }
1407    CHECK_FUNC_RESULT( t_2 );
1408    CHECK_BOOL( t_2 );
1409    t_1 = (Obj)(UInt)(t_2 != False);
1410    if ( t_1 ) {
1411 
1412     /* if CHECK_INSTALL_METHOD and not IS_OPERATION( method ) then */
1413     t_3 = GC_CHECK__INSTALL__METHOD;
1414     CHECK_BOUND( t_3, "CHECK_INSTALL_METHOD" );
1415     CHECK_BOOL( t_3 );
1416     t_2 = (Obj)(UInt)(t_3 != False);
1417     t_1 = t_2;
1418     if ( t_1 ) {
1419      t_6 = GF_IS__OPERATION;
1420      if ( TNUM_OBJ( t_6 ) == T_FUNCTION ) {
1421       t_5 = CALL_1ARGS( t_6, a_method );
1422      }
1423      else {
1424       t_5 = DoOperation2Args( CallFuncListOper, t_6, NewPlistFromArgs( a_method ) );
1425      }
1426      CHECK_FUNC_RESULT( t_5 );
1427      CHECK_BOOL( t_5 );
1428      t_4 = (Obj)(UInt)(t_5 != False);
1429      t_3 = (Obj)(UInt)( ! ((Int)t_4) );
1430      t_1 = t_3;
1431     }
1432     if ( t_1 ) {
1433 
1434      /* tmp := NARG_FUNC( method ); */
1435      t_2 = GF_NARG__FUNC;
1436      if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
1437       t_1 = CALL_1ARGS( t_2, a_method );
1438      }
1439      else {
1440       t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( a_method ) );
1441      }
1442      CHECK_FUNC_RESULT( t_1 );
1443      l_tmp = t_1;
1444 
1445      /* if tmp < AINV( narg ) - 1 or tmp >= 0 and tmp <> narg then */
1446      t_5 = GF_AINV;
1447      if ( TNUM_OBJ( t_5 ) == T_FUNCTION ) {
1448       t_4 = CALL_1ARGS( t_5, l_narg );
1449      }
1450      else {
1451       t_4 = DoOperation2Args( CallFuncListOper, t_5, NewPlistFromArgs( l_narg ) );
1452      }
1453      CHECK_FUNC_RESULT( t_4 );
1454      C_DIFF_FIA( t_3, t_4, INTOBJ_INT(1) )
1455      t_2 = (Obj)(UInt)(LT( l_tmp, t_3 ));
1456      t_1 = t_2;
1457      if ( ! t_1 ) {
1458       t_4 = (Obj)(UInt)(! LT( l_tmp, INTOBJ_INT(0) ));
1459       t_3 = t_4;
1460       if ( t_3 ) {
1461        t_5 = (Obj)(UInt)( ! EQ( l_tmp, l_narg ));
1462        t_3 = t_5;
1463       }
1464       t_1 = t_3;
1465      }
1466      if ( t_1 ) {
1467 
1468       /* Error( NAME_FUNC( opr ), ": <method> must accept ", narg, " arguments" ); */
1469       t_1 = GF_Error;
1470       t_3 = GF_NAME__FUNC;
1471       if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
1472        t_2 = CALL_1ARGS( t_3, a_opr );
1473       }
1474       else {
1475        t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( a_opr ) );
1476       }
1477       CHECK_FUNC_RESULT( t_2 );
1478       t_3 = MakeString( ": <method> must accept " );
1479       t_4 = MakeString( " arguments" );
1480       if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
1481        CALL_4ARGS( t_1, t_2, t_3, l_narg, t_4 );
1482       }
1483       else {
1484        DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3, l_narg, t_4 ) );
1485       }
1486 
1487      }
1488      /* fi */
1489 
1490     }
1491     /* fi */
1492 
1493    }
1494 
1495    /* else */
1496    else {
1497 
1498     /* Error( NAME_FUNC( opr ), ": <method> must be a function, `true', or `false'" ); */
1499     t_1 = GF_Error;
1500     t_3 = GF_NAME__FUNC;
1501     if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
1502      t_2 = CALL_1ARGS( t_3, a_opr );
1503     }
1504     else {
1505      t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( a_opr ) );
1506     }
1507     CHECK_FUNC_RESULT( t_2 );
1508     t_3 = MakeString( ": <method> must be a function, `true', or `false'" );
1509     if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
1510      CALL_2ARGS( t_1, t_2, t_3 );
1511     }
1512     else {
1513      DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
1514     }
1515 
1516    }
1517   }
1518  }
1519  /* fi */
1520 
1521  /* methods[i + 1] := rel; */
1522  C_SUM_FIA( t_1, l_i, INTOBJ_INT(1) )
1523  CHECK_INT_POS( t_1 );
1524  C_ASS_LIST_FPL( l_methods, t_1, a_rel )
1525 
1526  /* for k in [ 1 .. narg ] do */
1527  CHECK_INT_SMALL( l_narg );
1528  t_2 = l_narg;
1529  for ( t_1 = INTOBJ_INT(1);
1530        ((Int)t_1) <= ((Int)t_2);
1531        t_1 = (Obj)(((UInt)t_1)+4) ) {
1532   l_k = t_1;
1533 
1534   /* methods[i + k + 1] := flags[k]; */
1535   C_SUM_FIA( t_4, l_i, l_k )
1536   C_SUM_FIA( t_3, t_4, INTOBJ_INT(1) )
1537   CHECK_INT_POS( t_3 );
1538   C_ELM_LIST_FPL( t_4, a_flags, l_k )
1539   C_ASS_LIST_FPL( l_methods, t_3, t_4 )
1540 
1541  }
1542  /* od */
1543 
1544  /* methods[i + (narg + 2)] := method; */
1545  C_SUM_INTOBJS( t_2, l_narg, INTOBJ_INT(2) )
1546  C_SUM_FIA( t_1, l_i, t_2 )
1547  CHECK_INT_POS( t_1 );
1548  C_ASS_LIST_FPL( l_methods, t_1, a_method )
1549 
1550  /* methods[i + (narg + 3)] := rank; */
1551  C_SUM_INTOBJS( t_2, l_narg, INTOBJ_INT(3) )
1552  C_SUM_FIA( t_1, l_i, t_2 )
1553  CHECK_INT_POS( t_1 );
1554  C_ASS_LIST_FPL( l_methods, t_1, l_rank )
1555 
1556  /* methods[i + (narg + 4)] := IMMUTABLE_COPY_OBJ( info ); */
1557  C_SUM_INTOBJS( t_2, l_narg, INTOBJ_INT(4) )
1558  C_SUM_FIA( t_1, l_i, t_2 )
1559  CHECK_INT_POS( t_1 );
1560  t_3 = GF_IMMUTABLE__COPY__OBJ;
1561  if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
1562   t_2 = CALL_1ARGS( t_3, a_info );
1563  }
1564  else {
1565   t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( a_info ) );
1566  }
1567  CHECK_FUNC_RESULT( t_2 );
1568  C_ASS_LIST_FPL( l_methods, t_1, t_2 )
1569 
1570  /* if 6 >= 5 then */
1571  t_1 = (Obj)(UInt)(((Int)INTOBJ_INT(6)) >= ((Int)INTOBJ_INT(5)));
1572  if ( t_1 ) {
1573 
1574   /* methods[i + (narg + 5)] := MakeImmutable( [ INPUT_FILENAME(  ), READEVALCOMMAND_LINENUMBER, INPUT_LINENUMBER(  ) ] ); */
1575   C_SUM_INTOBJS( t_2, l_narg, INTOBJ_INT(5) )
1576   C_SUM_FIA( t_1, l_i, t_2 )
1577   CHECK_INT_POS( t_1 );
1578   t_3 = GF_MakeImmutable;
1579   t_4 = NEW_PLIST( T_PLIST, 3 );
1580   SET_LEN_PLIST( t_4, 3 );
1581   t_6 = GF_INPUT__FILENAME;
1582   if ( TNUM_OBJ( t_6 ) == T_FUNCTION ) {
1583    t_5 = CALL_0ARGS( t_6 );
1584   }
1585   else {
1586    t_5 = DoOperation2Args( CallFuncListOper, t_6, NewPlistFromArgs( ) );
1587   }
1588   CHECK_FUNC_RESULT( t_5 );
1589   SET_ELM_PLIST( t_4, 1, t_5 );
1590   CHANGED_BAG( t_4 );
1591   t_5 = GC_READEVALCOMMAND__LINENUMBER;
1592   CHECK_BOUND( t_5, "READEVALCOMMAND_LINENUMBER" );
1593   SET_ELM_PLIST( t_4, 2, t_5 );
1594   CHANGED_BAG( t_4 );
1595   t_6 = GF_INPUT__LINENUMBER;
1596   if ( TNUM_OBJ( t_6 ) == T_FUNCTION ) {
1597    t_5 = CALL_0ARGS( t_6 );
1598   }
1599   else {
1600    t_5 = DoOperation2Args( CallFuncListOper, t_6, NewPlistFromArgs( ) );
1601   }
1602   CHECK_FUNC_RESULT( t_5 );
1603   SET_ELM_PLIST( t_4, 3, t_5 );
1604   CHANGED_BAG( t_4 );
1605   if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
1606    t_2 = CALL_1ARGS( t_3, t_4 );
1607   }
1608   else {
1609    t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( t_4 ) );
1610   }
1611   CHECK_FUNC_RESULT( t_2 );
1612   C_ASS_LIST_FPL( l_methods, t_1, t_2 )
1613 
1614  }
1615  /* fi */
1616 
1617  /* if 6 >= 6 then */
1618  t_1 = (Obj)(UInt)(((Int)INTOBJ_INT(6)) >= ((Int)INTOBJ_INT(6)));
1619  if ( t_1 ) {
1620 
1621   /* methods[i + (narg + 6)] := baserank; */
1622   C_SUM_INTOBJS( t_2, l_narg, INTOBJ_INT(6) )
1623   C_SUM_FIA( t_1, l_i, t_2 )
1624   CHECK_INT_POS( t_1 );
1625   C_ASS_LIST_FPL( l_methods, t_1, a_baserank )
1626 
1627  }
1628  /* fi */
1629 
1630  /* SET_METHODS_OPERATION( opr, narg, MakeReadOnlySingleObj( methods ) ); */
1631  t_1 = GF_SET__METHODS__OPERATION;
1632  t_3 = GF_MakeReadOnlySingleObj;
1633  if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
1634   t_2 = CALL_1ARGS( t_3, l_methods );
1635  }
1636  else {
1637   t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( l_methods ) );
1638  }
1639  CHECK_FUNC_RESULT( t_2 );
1640  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
1641   CALL_3ARGS( t_1, a_opr, l_narg, t_2 );
1642  }
1643  else {
1644   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( a_opr, l_narg, t_2 ) );
1645  }
1646 
1647  /* UNLOCK( lk ); */
1648  t_1 = GF_UNLOCK;
1649  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
1650   CALL_1ARGS( t_1, l_lk );
1651  }
1652  else {
1653   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_lk ) );
1654  }
1655 
1656  /* return; */
1657  SWITCH_TO_OLD_FRAME(oldFrame);
1658  return 0;
1659 
1660  /* return; */
1661  SWITCH_TO_OLD_FRAME(oldFrame);
1662  return 0;
1663 }
1664 
1665 /* handler for function 4 */
HdlrFunc4(Obj self,Obj a_arg)1666 static Obj  HdlrFunc4 (
1667  Obj  self,
1668  Obj  a_arg )
1669 {
1670  Obj t_1 = 0;
1671  Obj t_2 = 0;
1672  Bag oldFrame;
1673 
1674  /* allocate new stack frame */
1675  SWITCH_TO_NEW_FRAME(self,0,0,oldFrame);
1676 
1677  /* INSTALL_METHOD( arg, true ); */
1678  t_1 = GF_INSTALL__METHOD;
1679  t_2 = True;
1680  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
1681   CALL_2ARGS( t_1, a_arg, t_2 );
1682  }
1683  else {
1684   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( a_arg, t_2 ) );
1685  }
1686 
1687  /* return; */
1688  SWITCH_TO_OLD_FRAME(oldFrame);
1689  return 0;
1690 
1691  /* return; */
1692  SWITCH_TO_OLD_FRAME(oldFrame);
1693  return 0;
1694 }
1695 
1696 /* handler for function 5 */
HdlrFunc5(Obj self,Obj a_arg)1697 static Obj  HdlrFunc5 (
1698  Obj  self,
1699  Obj  a_arg )
1700 {
1701  Obj t_1 = 0;
1702  Obj t_2 = 0;
1703  Bag oldFrame;
1704 
1705  /* allocate new stack frame */
1706  SWITCH_TO_NEW_FRAME(self,0,0,oldFrame);
1707 
1708  /* INSTALL_METHOD( arg, false ); */
1709  t_1 = GF_INSTALL__METHOD;
1710  t_2 = False;
1711  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
1712   CALL_2ARGS( t_1, a_arg, t_2 );
1713  }
1714  else {
1715   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( a_arg, t_2 ) );
1716  }
1717 
1718  /* return; */
1719  SWITCH_TO_OLD_FRAME(oldFrame);
1720  return 0;
1721 
1722  /* return; */
1723  SWITCH_TO_OLD_FRAME(oldFrame);
1724  return 0;
1725 }
1726 
1727 /* handler for function 6 */
HdlrFunc6(Obj self,Obj a_arglist,Obj a_check)1728 static Obj  HdlrFunc6 (
1729  Obj  self,
1730  Obj  a_arglist,
1731  Obj  a_check )
1732 {
1733  Obj l_len = 0;
1734  Obj l_opr = 0;
1735  Obj l_info = 0;
1736  Obj l_pos = 0;
1737  Obj l_rel = 0;
1738  Obj l_filters = 0;
1739  Obj l_info1 = 0;
1740  Obj l_isstr = 0;
1741  Obj l_flags = 0;
1742  Obj l_i = 0;
1743  Obj l_rank = 0;
1744  Obj l_method = 0;
1745  Obj l_oreqs = 0;
1746  Obj l_req = 0;
1747  Obj l_reqs = 0;
1748  Obj l_match = 0;
1749  Obj l_j = 0;
1750  Obj l_k = 0;
1751  Obj l_imp = 0;
1752  Obj l_notmatch = 0;
1753  Obj l_lk = 0;
1754  Obj l_funcname = 0;
1755  Obj t_1 = 0;
1756  Obj t_2 = 0;
1757  Obj t_3 = 0;
1758  Obj t_4 = 0;
1759  Obj t_5 = 0;
1760  Obj t_6 = 0;
1761  Obj t_7 = 0;
1762  Obj t_8 = 0;
1763  Obj t_9 = 0;
1764  Obj t_10 = 0;
1765  Obj t_11 = 0;
1766  (void)l_len;
1767  (void)l_opr;
1768  (void)l_info;
1769  (void)l_pos;
1770  (void)l_rel;
1771  (void)l_filters;
1772  (void)l_info1;
1773  (void)l_isstr;
1774  (void)l_flags;
1775  (void)l_i;
1776  (void)l_rank;
1777  (void)l_method;
1778  (void)l_oreqs;
1779  (void)l_req;
1780  (void)l_reqs;
1781  (void)l_match;
1782  (void)l_j;
1783  (void)l_k;
1784  (void)l_imp;
1785  (void)l_notmatch;
1786  (void)l_lk;
1787  (void)l_funcname;
1788  Bag oldFrame;
1789 
1790  /* allocate new stack frame */
1791  SWITCH_TO_NEW_FRAME(self,0,0,oldFrame);
1792 
1793  /* lk := READ_LOCK( OPERATIONS_REGION ); */
1794  t_2 = GF_READ__LOCK;
1795  t_3 = GC_OPERATIONS__REGION;
1796  CHECK_BOUND( t_3, "OPERATIONS_REGION" );
1797  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
1798   t_1 = CALL_1ARGS( t_2, t_3 );
1799  }
1800  else {
1801   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( t_3 ) );
1802  }
1803  CHECK_FUNC_RESULT( t_1 );
1804  l_lk = t_1;
1805 
1806  /* len := LEN_LIST( arglist ); */
1807  t_2 = GF_LEN__LIST;
1808  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
1809   t_1 = CALL_1ARGS( t_2, a_arglist );
1810  }
1811  else {
1812   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( a_arglist ) );
1813  }
1814  CHECK_FUNC_RESULT( t_1 );
1815  l_len = t_1;
1816 
1817  /* if len < 3 then */
1818  t_1 = (Obj)(UInt)(LT( l_len, INTOBJ_INT(3) ));
1819  if ( t_1 ) {
1820 
1821   /* Error( "too few arguments given in <arglist>" ); */
1822   t_1 = GF_Error;
1823   t_2 = MakeString( "too few arguments given in <arglist>" );
1824   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
1825    CALL_1ARGS( t_1, t_2 );
1826   }
1827   else {
1828    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2 ) );
1829   }
1830 
1831  }
1832  /* fi */
1833 
1834  /* opr := arglist[1]; */
1835  C_ELM_LIST_FPL( t_1, a_arglist, INTOBJ_INT(1) )
1836  l_opr = t_1;
1837 
1838  /* if not IS_OPERATION( opr ) then */
1839  t_4 = GF_IS__OPERATION;
1840  if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
1841   t_3 = CALL_1ARGS( t_4, l_opr );
1842  }
1843  else {
1844   t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_opr ) );
1845  }
1846  CHECK_FUNC_RESULT( t_3 );
1847  CHECK_BOOL( t_3 );
1848  t_2 = (Obj)(UInt)(t_3 != False);
1849  t_1 = (Obj)(UInt)( ! ((Int)t_2) );
1850  if ( t_1 ) {
1851 
1852   /* Error( "<opr> is not an operation" ); */
1853   t_1 = GF_Error;
1854   t_2 = MakeString( "<opr> is not an operation" );
1855   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
1856    CALL_1ARGS( t_1, t_2 );
1857   }
1858   else {
1859    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2 ) );
1860   }
1861 
1862  }
1863  /* fi */
1864 
1865  /* if IS_STRING_REP( arglist[2] ) or arglist[2] = false then */
1866  t_4 = GF_IS__STRING__REP;
1867  C_ELM_LIST_FPL( t_5, a_arglist, INTOBJ_INT(2) )
1868  if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
1869   t_3 = CALL_1ARGS( t_4, t_5 );
1870  }
1871  else {
1872   t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( t_5 ) );
1873  }
1874  CHECK_FUNC_RESULT( t_3 );
1875  CHECK_BOOL( t_3 );
1876  t_2 = (Obj)(UInt)(t_3 != False);
1877  t_1 = t_2;
1878  if ( ! t_1 ) {
1879   C_ELM_LIST_FPL( t_4, a_arglist, INTOBJ_INT(2) )
1880   t_5 = False;
1881   t_3 = (Obj)(UInt)(EQ( t_4, t_5 ));
1882   t_1 = t_3;
1883  }
1884  if ( t_1 ) {
1885 
1886   /* info := arglist[2]; */
1887   C_ELM_LIST_FPL( t_1, a_arglist, INTOBJ_INT(2) )
1888   l_info = t_1;
1889 
1890   /* pos := 3; */
1891   l_pos = INTOBJ_INT(3);
1892 
1893  }
1894 
1895  /* else */
1896  else {
1897 
1898   /* info := false; */
1899   t_1 = False;
1900   l_info = t_1;
1901 
1902   /* pos := 2; */
1903   l_pos = INTOBJ_INT(2);
1904 
1905  }
1906  /* fi */
1907 
1908  /* if arglist[pos] = true or IS_FUNCTION( arglist[pos] ) then */
1909  C_ELM_LIST_FPL( t_3, a_arglist, l_pos )
1910  t_4 = True;
1911  t_2 = (Obj)(UInt)(EQ( t_3, t_4 ));
1912  t_1 = t_2;
1913  if ( ! t_1 ) {
1914   t_5 = GF_IS__FUNCTION;
1915   C_ELM_LIST_FPL( t_6, a_arglist, l_pos )
1916   if ( TNUM_OBJ( t_5 ) == T_FUNCTION ) {
1917    t_4 = CALL_1ARGS( t_5, t_6 );
1918   }
1919   else {
1920    t_4 = DoOperation2Args( CallFuncListOper, t_5, NewPlistFromArgs( t_6 ) );
1921   }
1922   CHECK_FUNC_RESULT( t_4 );
1923   CHECK_BOOL( t_4 );
1924   t_3 = (Obj)(UInt)(t_4 != False);
1925   t_1 = t_3;
1926  }
1927  if ( t_1 ) {
1928 
1929   /* rel := arglist[pos]; */
1930   C_ELM_LIST_FPL( t_1, a_arglist, l_pos )
1931   l_rel = t_1;
1932 
1933   /* pos := pos + 1; */
1934   C_SUM_INTOBJS( t_1, l_pos, INTOBJ_INT(1) )
1935   l_pos = t_1;
1936 
1937  }
1938 
1939  /* else */
1940  else {
1941 
1942   /* rel := true; */
1943   t_1 = True;
1944   l_rel = t_1;
1945 
1946  }
1947  /* fi */
1948 
1949  /* if not IsBound( arglist[pos] ) or not IS_LIST( arglist[pos] ) then */
1950  CHECK_INT_POS( l_pos );
1951  t_4 = C_ISB_LIST( a_arglist, l_pos );
1952  t_3 = (Obj)(UInt)(t_4 != False);
1953  t_2 = (Obj)(UInt)( ! ((Int)t_3) );
1954  t_1 = t_2;
1955  if ( ! t_1 ) {
1956   t_6 = GF_IS__LIST;
1957   C_ELM_LIST_FPL( t_7, a_arglist, l_pos )
1958   if ( TNUM_OBJ( t_6 ) == T_FUNCTION ) {
1959    t_5 = CALL_1ARGS( t_6, t_7 );
1960   }
1961   else {
1962    t_5 = DoOperation2Args( CallFuncListOper, t_6, NewPlistFromArgs( t_7 ) );
1963   }
1964   CHECK_FUNC_RESULT( t_5 );
1965   CHECK_BOOL( t_5 );
1966   t_4 = (Obj)(UInt)(t_5 != False);
1967   t_3 = (Obj)(UInt)( ! ((Int)t_4) );
1968   t_1 = t_3;
1969  }
1970  if ( t_1 ) {
1971 
1972   /* Error( "<arglist>[", pos, "] must be a list of filters" ); */
1973   t_1 = GF_Error;
1974   t_2 = MakeString( "<arglist>[" );
1975   t_3 = MakeString( "] must be a list of filters" );
1976   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
1977    CALL_3ARGS( t_1, t_2, l_pos, t_3 );
1978   }
1979   else {
1980    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, l_pos, t_3 ) );
1981   }
1982 
1983  }
1984  /* fi */
1985 
1986  /* filters := arglist[pos]; */
1987  C_ELM_LIST_FPL( t_1, a_arglist, l_pos )
1988  l_filters = t_1;
1989 
1990  /* if GAPInfo.MaxNrArgsMethod < LEN_LIST( filters ) then */
1991  t_3 = GC_GAPInfo;
1992  CHECK_BOUND( t_3, "GAPInfo" );
1993  t_2 = ELM_REC( t_3, R_MaxNrArgsMethod );
1994  t_4 = GF_LEN__LIST;
1995  if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
1996   t_3 = CALL_1ARGS( t_4, l_filters );
1997  }
1998  else {
1999   t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_filters ) );
2000  }
2001  CHECK_FUNC_RESULT( t_3 );
2002  t_1 = (Obj)(UInt)(LT( t_2, t_3 ));
2003  if ( t_1 ) {
2004 
2005   /* Error( "methods can have at most ", GAPInfo.MaxNrArgsMethod, " arguments" ); */
2006   t_1 = GF_Error;
2007   t_2 = MakeString( "methods can have at most " );
2008   t_4 = GC_GAPInfo;
2009   CHECK_BOUND( t_4, "GAPInfo" );
2010   t_3 = ELM_REC( t_4, R_MaxNrArgsMethod );
2011   t_4 = MakeString( " arguments" );
2012   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
2013    CALL_3ARGS( t_1, t_2, t_3, t_4 );
2014   }
2015   else {
2016    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3, t_4 ) );
2017   }
2018 
2019  }
2020  /* fi */
2021 
2022  /* if 0 < LEN_LIST( filters ) then */
2023  t_3 = GF_LEN__LIST;
2024  if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
2025   t_2 = CALL_1ARGS( t_3, l_filters );
2026  }
2027  else {
2028   t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( l_filters ) );
2029  }
2030  CHECK_FUNC_RESULT( t_2 );
2031  t_1 = (Obj)(UInt)(LT( INTOBJ_INT(0), t_2 ));
2032  if ( t_1 ) {
2033 
2034   /* info1 := "[ "; */
2035   t_1 = MakeString( "[ " );
2036   l_info1 = t_1;
2037 
2038   /* isstr := true; */
2039   t_1 = True;
2040   l_isstr = t_1;
2041 
2042   /* for i in [ 1 .. LEN_LIST( filters ) ] do */
2043   t_3 = GF_LEN__LIST;
2044   if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
2045    t_2 = CALL_1ARGS( t_3, l_filters );
2046   }
2047   else {
2048    t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( l_filters ) );
2049   }
2050   CHECK_FUNC_RESULT( t_2 );
2051   CHECK_INT_SMALL( t_2 );
2052   for ( t_1 = INTOBJ_INT(1);
2053         ((Int)t_1) <= ((Int)t_2);
2054         t_1 = (Obj)(((UInt)t_1)+4) ) {
2055    l_i = t_1;
2056 
2057    /* if IS_STRING_REP( filters[i] ) then */
2058    t_5 = GF_IS__STRING__REP;
2059    C_ELM_LIST_FPL( t_6, l_filters, l_i )
2060    if ( TNUM_OBJ( t_5 ) == T_FUNCTION ) {
2061     t_4 = CALL_1ARGS( t_5, t_6 );
2062    }
2063    else {
2064     t_4 = DoOperation2Args( CallFuncListOper, t_5, NewPlistFromArgs( t_6 ) );
2065    }
2066    CHECK_FUNC_RESULT( t_4 );
2067    CHECK_BOOL( t_4 );
2068    t_3 = (Obj)(UInt)(t_4 != False);
2069    if ( t_3 ) {
2070 
2071     /* APPEND_LIST_INTR( info1, filters[i] ); */
2072     t_3 = GF_APPEND__LIST__INTR;
2073     C_ELM_LIST_FPL( t_4, l_filters, l_i )
2074     if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
2075      CALL_2ARGS( t_3, l_info1, t_4 );
2076     }
2077     else {
2078      DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( l_info1, t_4 ) );
2079     }
2080 
2081     /* APPEND_LIST_INTR( info1, ", " ); */
2082     t_3 = GF_APPEND__LIST__INTR;
2083     t_4 = MakeString( ", " );
2084     if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
2085      CALL_2ARGS( t_3, l_info1, t_4 );
2086     }
2087     else {
2088      DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( l_info1, t_4 ) );
2089     }
2090 
2091     /* filters[i] := EvalString( filters[i] ); */
2092     t_4 = GF_EvalString;
2093     C_ELM_LIST_FPL( t_5, l_filters, l_i )
2094     if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
2095      t_3 = CALL_1ARGS( t_4, t_5 );
2096     }
2097     else {
2098      t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( t_5 ) );
2099     }
2100     CHECK_FUNC_RESULT( t_3 );
2101     C_ASS_LIST_FPL( l_filters, l_i, t_3 )
2102 
2103     /* if not IS_FUNCTION( filters[i] ) then */
2104     t_6 = GF_IS__FUNCTION;
2105     C_ELM_LIST_FPL( t_7, l_filters, l_i )
2106     if ( TNUM_OBJ( t_6 ) == T_FUNCTION ) {
2107      t_5 = CALL_1ARGS( t_6, t_7 );
2108     }
2109     else {
2110      t_5 = DoOperation2Args( CallFuncListOper, t_6, NewPlistFromArgs( t_7 ) );
2111     }
2112     CHECK_FUNC_RESULT( t_5 );
2113     CHECK_BOOL( t_5 );
2114     t_4 = (Obj)(UInt)(t_5 != False);
2115     t_3 = (Obj)(UInt)( ! ((Int)t_4) );
2116     if ( t_3 ) {
2117 
2118      /* Error( "string does not evaluate to a function" ); */
2119      t_3 = GF_Error;
2120      t_4 = MakeString( "string does not evaluate to a function" );
2121      if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
2122       CALL_1ARGS( t_3, t_4 );
2123      }
2124      else {
2125       DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( t_4 ) );
2126      }
2127 
2128     }
2129     /* fi */
2130 
2131    }
2132 
2133    /* else */
2134    else {
2135 
2136     /* isstr := false; */
2137     t_3 = False;
2138     l_isstr = t_3;
2139 
2140     /* break; */
2141     break;
2142 
2143    }
2144    /* fi */
2145 
2146   }
2147   /* od */
2148 
2149   /* if isstr and info = false then */
2150   t_2 = (Obj)(UInt)(l_isstr != False);
2151   t_1 = t_2;
2152   if ( t_1 ) {
2153    t_4 = False;
2154    t_3 = (Obj)(UInt)(EQ( l_info, t_4 ));
2155    t_1 = t_3;
2156   }
2157   if ( t_1 ) {
2158 
2159    /* info1[LEN_LIST( info1 ) - 1] := ' '; */
2160    t_3 = GF_LEN__LIST;
2161    if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
2162     t_2 = CALL_1ARGS( t_3, l_info1 );
2163    }
2164    else {
2165     t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( l_info1 ) );
2166    }
2167    CHECK_FUNC_RESULT( t_2 );
2168    C_DIFF_FIA( t_1, t_2, INTOBJ_INT(1) )
2169    CHECK_INT_POS( t_1 );
2170    t_2 = ObjsChar[32];
2171    C_ASS_LIST_FPL( l_info1, t_1, t_2 )
2172 
2173    /* info1[LEN_LIST( info1 )] := ']'; */
2174    t_2 = GF_LEN__LIST;
2175    if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
2176     t_1 = CALL_1ARGS( t_2, l_info1 );
2177    }
2178    else {
2179     t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( l_info1 ) );
2180    }
2181    CHECK_FUNC_RESULT( t_1 );
2182    CHECK_INT_POS( t_1 );
2183    t_2 = ObjsChar[93];
2184    C_ASS_LIST_FPL( l_info1, t_1, t_2 )
2185 
2186    /* info := info1; */
2187    l_info = l_info1;
2188 
2189   }
2190   /* fi */
2191 
2192  }
2193  /* fi */
2194 
2195  /* pos := pos + 1; */
2196  C_SUM_FIA( t_1, l_pos, INTOBJ_INT(1) )
2197  l_pos = t_1;
2198 
2199  /* flags := [  ]; */
2200  t_1 = NEW_PLIST( T_PLIST, 0 );
2201  SET_LEN_PLIST( t_1, 0 );
2202  l_flags = t_1;
2203 
2204  /* for i in filters do */
2205  t_4 = l_filters;
2206  if ( IS_SMALL_LIST(t_4) ) {
2207   t_3 = (Obj)(UInt)1;
2208   t_1 = INTOBJ_INT(1);
2209  }
2210  else {
2211   t_3 = (Obj)(UInt)0;
2212   t_1 = CALL_1ARGS( GF_ITERATOR, t_4 );
2213  }
2214  while ( 1 ) {
2215   if ( t_3 ) {
2216    if ( LEN_LIST(t_4) < INT_INTOBJ(t_1) )  break;
2217    t_2 = ELMV0_LIST( t_4, INT_INTOBJ(t_1) );
2218    t_1 = (Obj)(((UInt)t_1)+4);
2219    if ( t_2 == 0 )  continue;
2220   }
2221   else {
2222    if ( CALL_1ARGS( GF_IS_DONE_ITER, t_1 ) != False )  break;
2223    t_2 = CALL_1ARGS( GF_NEXT_ITER, t_1 );
2224   }
2225   l_i = t_2;
2226 
2227   /* ADD_LIST( flags, FLAGS_FILTER( i ) ); */
2228   t_5 = GF_ADD__LIST;
2229   t_7 = GF_FLAGS__FILTER;
2230   if ( TNUM_OBJ( t_7 ) == T_FUNCTION ) {
2231    t_6 = CALL_1ARGS( t_7, l_i );
2232   }
2233   else {
2234    t_6 = DoOperation2Args( CallFuncListOper, t_7, NewPlistFromArgs( l_i ) );
2235   }
2236   CHECK_FUNC_RESULT( t_6 );
2237   if ( TNUM_OBJ( t_5 ) == T_FUNCTION ) {
2238    CALL_2ARGS( t_5, l_flags, t_6 );
2239   }
2240   else {
2241    DoOperation2Args( CallFuncListOper, t_5, NewPlistFromArgs( l_flags, t_6 ) );
2242   }
2243 
2244  }
2245  /* od */
2246 
2247  /* if not IsBound( arglist[pos] ) then */
2248  CHECK_INT_POS( l_pos );
2249  t_3 = C_ISB_LIST( a_arglist, l_pos );
2250  t_2 = (Obj)(UInt)(t_3 != False);
2251  t_1 = (Obj)(UInt)( ! ((Int)t_2) );
2252  if ( t_1 ) {
2253 
2254   /* Error( "the method is missing in <arglist>" ); */
2255   t_1 = GF_Error;
2256   t_2 = MakeString( "the method is missing in <arglist>" );
2257   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
2258    CALL_1ARGS( t_1, t_2 );
2259   }
2260   else {
2261    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2 ) );
2262   }
2263 
2264  }
2265 
2266  /* elif IS_INT( arglist[pos] ) or IS_FUNCTION( arglist[pos] ) and NARG_FUNC( arglist[pos] ) = 0 and pos < LEN_LIST( arglist ) then */
2267  else {
2268   t_4 = GF_IS__INT;
2269   C_ELM_LIST_FPL( t_5, a_arglist, l_pos )
2270   if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
2271    t_3 = CALL_1ARGS( t_4, t_5 );
2272   }
2273   else {
2274    t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( t_5 ) );
2275   }
2276   CHECK_FUNC_RESULT( t_3 );
2277   CHECK_BOOL( t_3 );
2278   t_2 = (Obj)(UInt)(t_3 != False);
2279   t_1 = t_2;
2280   if ( ! t_1 ) {
2281    t_7 = GF_IS__FUNCTION;
2282    C_ELM_LIST_FPL( t_8, a_arglist, l_pos )
2283    if ( TNUM_OBJ( t_7 ) == T_FUNCTION ) {
2284     t_6 = CALL_1ARGS( t_7, t_8 );
2285    }
2286    else {
2287     t_6 = DoOperation2Args( CallFuncListOper, t_7, NewPlistFromArgs( t_8 ) );
2288    }
2289    CHECK_FUNC_RESULT( t_6 );
2290    CHECK_BOOL( t_6 );
2291    t_5 = (Obj)(UInt)(t_6 != False);
2292    t_4 = t_5;
2293    if ( t_4 ) {
2294     t_8 = GF_NARG__FUNC;
2295     C_ELM_LIST_FPL( t_9, a_arglist, l_pos )
2296     if ( TNUM_OBJ( t_8 ) == T_FUNCTION ) {
2297      t_7 = CALL_1ARGS( t_8, t_9 );
2298     }
2299     else {
2300      t_7 = DoOperation2Args( CallFuncListOper, t_8, NewPlistFromArgs( t_9 ) );
2301     }
2302     CHECK_FUNC_RESULT( t_7 );
2303     t_6 = (Obj)(UInt)(EQ( t_7, INTOBJ_INT(0) ));
2304     t_4 = t_6;
2305    }
2306    t_3 = t_4;
2307    if ( t_3 ) {
2308     t_7 = GF_LEN__LIST;
2309     if ( TNUM_OBJ( t_7 ) == T_FUNCTION ) {
2310      t_6 = CALL_1ARGS( t_7, a_arglist );
2311     }
2312     else {
2313      t_6 = DoOperation2Args( CallFuncListOper, t_7, NewPlistFromArgs( a_arglist ) );
2314     }
2315     CHECK_FUNC_RESULT( t_6 );
2316     t_5 = (Obj)(UInt)(LT( l_pos, t_6 ));
2317     t_3 = t_5;
2318    }
2319    t_1 = t_3;
2320   }
2321   if ( t_1 ) {
2322 
2323    /* rank := arglist[pos]; */
2324    C_ELM_LIST_FPL( t_1, a_arglist, l_pos )
2325    l_rank = t_1;
2326 
2327    /* pos := pos + 1; */
2328    C_SUM_FIA( t_1, l_pos, INTOBJ_INT(1) )
2329    l_pos = t_1;
2330 
2331   }
2332 
2333   /* else */
2334   else {
2335 
2336    /* rank := 0; */
2337    l_rank = INTOBJ_INT(0);
2338 
2339   }
2340  }
2341  /* fi */
2342 
2343  /* if not IsBound( arglist[pos] ) then */
2344  CHECK_INT_POS( l_pos );
2345  t_3 = C_ISB_LIST( a_arglist, l_pos );
2346  t_2 = (Obj)(UInt)(t_3 != False);
2347  t_1 = (Obj)(UInt)( ! ((Int)t_2) );
2348  if ( t_1 ) {
2349 
2350   /* Error( "the method is missing in <arglist>" ); */
2351   t_1 = GF_Error;
2352   t_2 = MakeString( "the method is missing in <arglist>" );
2353   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
2354    CALL_1ARGS( t_1, t_2 );
2355   }
2356   else {
2357    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2 ) );
2358   }
2359 
2360  }
2361  /* fi */
2362 
2363  /* method := arglist[pos]; */
2364  C_ELM_LIST_FPL( t_1, a_arglist, l_pos )
2365  l_method = t_1;
2366 
2367  /* if FLAG1_FILTER( opr ) <> 0 and (rel = true or rel = RETURN_TRUE) and LEN_LIST( filters ) = 1 and (method = true or method = RETURN_TRUE) then */
2368  t_6 = GF_FLAG1__FILTER;
2369  if ( TNUM_OBJ( t_6 ) == T_FUNCTION ) {
2370   t_5 = CALL_1ARGS( t_6, l_opr );
2371  }
2372  else {
2373   t_5 = DoOperation2Args( CallFuncListOper, t_6, NewPlistFromArgs( l_opr ) );
2374  }
2375  CHECK_FUNC_RESULT( t_5 );
2376  t_4 = (Obj)(UInt)( ! EQ( t_5, INTOBJ_INT(0) ));
2377  t_3 = t_4;
2378  if ( t_3 ) {
2379   t_7 = True;
2380   t_6 = (Obj)(UInt)(EQ( l_rel, t_7 ));
2381   t_5 = t_6;
2382   if ( ! t_5 ) {
2383    t_8 = GC_RETURN__TRUE;
2384    CHECK_BOUND( t_8, "RETURN_TRUE" );
2385    t_7 = (Obj)(UInt)(EQ( l_rel, t_8 ));
2386    t_5 = t_7;
2387   }
2388   t_3 = t_5;
2389  }
2390  t_2 = t_3;
2391  if ( t_2 ) {
2392   t_6 = GF_LEN__LIST;
2393   if ( TNUM_OBJ( t_6 ) == T_FUNCTION ) {
2394    t_5 = CALL_1ARGS( t_6, l_filters );
2395   }
2396   else {
2397    t_5 = DoOperation2Args( CallFuncListOper, t_6, NewPlistFromArgs( l_filters ) );
2398   }
2399   CHECK_FUNC_RESULT( t_5 );
2400   t_4 = (Obj)(UInt)(EQ( t_5, INTOBJ_INT(1) ));
2401   t_2 = t_4;
2402  }
2403  t_1 = t_2;
2404  if ( t_1 ) {
2405   t_5 = True;
2406   t_4 = (Obj)(UInt)(EQ( l_method, t_5 ));
2407   t_3 = t_4;
2408   if ( ! t_3 ) {
2409    t_6 = GC_RETURN__TRUE;
2410    CHECK_BOUND( t_6, "RETURN_TRUE" );
2411    t_5 = (Obj)(UInt)(EQ( l_method, t_6 ));
2412    t_3 = t_5;
2413   }
2414   t_1 = t_3;
2415  }
2416  if ( t_1 ) {
2417 
2418   /* Error( NAME_FUNC( opr ), ": use `InstallTrueMethod' for <opr>" ); */
2419   t_1 = GF_Error;
2420   t_3 = GF_NAME__FUNC;
2421   if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
2422    t_2 = CALL_1ARGS( t_3, l_opr );
2423   }
2424   else {
2425    t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( l_opr ) );
2426   }
2427   CHECK_FUNC_RESULT( t_2 );
2428   t_3 = MakeString( ": use `InstallTrueMethod' for <opr>" );
2429   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
2430    CALL_2ARGS( t_1, t_2, t_3 );
2431   }
2432   else {
2433    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
2434   }
2435 
2436  }
2437  /* fi */
2438 
2439  /* if CHECK_INSTALL_METHOD and check then */
2440  t_3 = GC_CHECK__INSTALL__METHOD;
2441  CHECK_BOUND( t_3, "CHECK_INSTALL_METHOD" );
2442  CHECK_BOOL( t_3 );
2443  t_2 = (Obj)(UInt)(t_3 != False);
2444  t_1 = t_2;
2445  if ( t_1 ) {
2446   CHECK_BOOL( a_check );
2447   t_3 = (Obj)(UInt)(a_check != False);
2448   t_1 = t_3;
2449  }
2450  if ( t_1 ) {
2451 
2452   /* if opr in WRAPPER_OPERATIONS then */
2453   t_2 = GC_WRAPPER__OPERATIONS;
2454   CHECK_BOUND( t_2, "WRAPPER_OPERATIONS" );
2455   t_1 = (Obj)(UInt)(IN( l_opr, t_2 ));
2456   if ( t_1 ) {
2457 
2458    /* INFO_DEBUG( 1, "a method is installed for the wrapper operation ", NAME_FUNC( opr ), "\n", "#I  probably it should be installed for (one of) its\n", "#I  underlying operation(s)" ); */
2459    t_1 = GF_INFO__DEBUG;
2460    t_2 = MakeString( "a method is installed for the wrapper operation " );
2461    t_4 = GF_NAME__FUNC;
2462    if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
2463     t_3 = CALL_1ARGS( t_4, l_opr );
2464    }
2465    else {
2466     t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_opr ) );
2467    }
2468    CHECK_FUNC_RESULT( t_3 );
2469    t_4 = MakeString( "\n" );
2470    t_5 = MakeString( "#I  probably it should be installed for (one of) its\n" );
2471    t_6 = MakeString( "#I  underlying operation(s)" );
2472    if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
2473     CALL_6ARGS( t_1, INTOBJ_INT(1), t_2, t_3, t_4, t_5, t_6 );
2474    }
2475    else {
2476     DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( INTOBJ_INT(1), t_2, t_3, t_4, t_5, t_6 ) );
2477    }
2478 
2479   }
2480   /* fi */
2481 
2482   /* req := GET_OPER_FLAGS( opr ); */
2483   t_2 = GF_GET__OPER__FLAGS;
2484   if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
2485    t_1 = CALL_1ARGS( t_2, l_opr );
2486   }
2487   else {
2488    t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( l_opr ) );
2489   }
2490   CHECK_FUNC_RESULT( t_1 );
2491   l_req = t_1;
2492 
2493   /* if req = fail then */
2494   t_2 = GC_fail;
2495   CHECK_BOUND( t_2, "fail" );
2496   t_1 = (Obj)(UInt)(EQ( l_req, t_2 ));
2497   if ( t_1 ) {
2498 
2499    /* Error( "unknown operation ", NAME_FUNC( opr ) ); */
2500    t_1 = GF_Error;
2501    t_2 = MakeString( "unknown operation " );
2502    t_4 = GF_NAME__FUNC;
2503    if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
2504     t_3 = CALL_1ARGS( t_4, l_opr );
2505    }
2506    else {
2507     t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_opr ) );
2508    }
2509    CHECK_FUNC_RESULT( t_3 );
2510    if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
2511     CALL_2ARGS( t_1, t_2, t_3 );
2512    }
2513    else {
2514     DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
2515    }
2516 
2517   }
2518   /* fi */
2519 
2520   /* imp := [  ]; */
2521   t_1 = NEW_PLIST( T_PLIST, 0 );
2522   SET_LEN_PLIST( t_1, 0 );
2523   l_imp = t_1;
2524 
2525   /* for i in flags do */
2526   t_4 = l_flags;
2527   if ( IS_SMALL_LIST(t_4) ) {
2528    t_3 = (Obj)(UInt)1;
2529    t_1 = INTOBJ_INT(1);
2530   }
2531   else {
2532    t_3 = (Obj)(UInt)0;
2533    t_1 = CALL_1ARGS( GF_ITERATOR, t_4 );
2534   }
2535   while ( 1 ) {
2536    if ( t_3 ) {
2537     if ( LEN_LIST(t_4) < INT_INTOBJ(t_1) )  break;
2538     t_2 = ELMV0_LIST( t_4, INT_INTOBJ(t_1) );
2539     t_1 = (Obj)(((UInt)t_1)+4);
2540     if ( t_2 == 0 )  continue;
2541    }
2542    else {
2543     if ( CALL_1ARGS( GF_IS_DONE_ITER, t_1 ) != False )  break;
2544     t_2 = CALL_1ARGS( GF_NEXT_ITER, t_1 );
2545    }
2546    l_i = t_2;
2547 
2548    /* if not GAPInfo.CommandLineOptions.N then */
2549    t_9 = GC_GAPInfo;
2550    CHECK_BOUND( t_9, "GAPInfo" );
2551    t_8 = ELM_REC( t_9, R_CommandLineOptions );
2552    t_7 = ELM_REC( t_8, R_N );
2553    CHECK_BOOL( t_7 );
2554    t_6 = (Obj)(UInt)(t_7 != False);
2555    t_5 = (Obj)(UInt)( ! ((Int)t_6) );
2556    if ( t_5 ) {
2557 
2558     /* ADD_LIST( imp, WITH_HIDDEN_IMPS_FLAGS( i ) ); */
2559     t_5 = GF_ADD__LIST;
2560     t_7 = GF_WITH__HIDDEN__IMPS__FLAGS;
2561     if ( TNUM_OBJ( t_7 ) == T_FUNCTION ) {
2562      t_6 = CALL_1ARGS( t_7, l_i );
2563     }
2564     else {
2565      t_6 = DoOperation2Args( CallFuncListOper, t_7, NewPlistFromArgs( l_i ) );
2566     }
2567     CHECK_FUNC_RESULT( t_6 );
2568     if ( TNUM_OBJ( t_5 ) == T_FUNCTION ) {
2569      CALL_2ARGS( t_5, l_imp, t_6 );
2570     }
2571     else {
2572      DoOperation2Args( CallFuncListOper, t_5, NewPlistFromArgs( l_imp, t_6 ) );
2573     }
2574 
2575    }
2576 
2577    /* else */
2578    else {
2579 
2580     /* ADD_LIST( imp, WITH_IMPS_FLAGS( i ) ); */
2581     t_5 = GF_ADD__LIST;
2582     t_7 = GF_WITH__IMPS__FLAGS;
2583     if ( TNUM_OBJ( t_7 ) == T_FUNCTION ) {
2584      t_6 = CALL_1ARGS( t_7, l_i );
2585     }
2586     else {
2587      t_6 = DoOperation2Args( CallFuncListOper, t_7, NewPlistFromArgs( l_i ) );
2588     }
2589     CHECK_FUNC_RESULT( t_6 );
2590     if ( TNUM_OBJ( t_5 ) == T_FUNCTION ) {
2591      CALL_2ARGS( t_5, l_imp, t_6 );
2592     }
2593     else {
2594      DoOperation2Args( CallFuncListOper, t_5, NewPlistFromArgs( l_imp, t_6 ) );
2595     }
2596 
2597    }
2598    /* fi */
2599 
2600   }
2601   /* od */
2602 
2603   /* j := 0; */
2604   l_j = INTOBJ_INT(0);
2605 
2606   /* match := false; */
2607   t_1 = False;
2608   l_match = t_1;
2609 
2610   /* notmatch := 0; */
2611   l_notmatch = INTOBJ_INT(0);
2612 
2613   /* while j < LEN_LIST( req ) and not match do */
2614   while ( 1 ) {
2615    t_4 = GF_LEN__LIST;
2616    if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
2617     t_3 = CALL_1ARGS( t_4, l_req );
2618    }
2619    else {
2620     t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_req ) );
2621    }
2622    CHECK_FUNC_RESULT( t_3 );
2623    t_2 = (Obj)(UInt)(LT( l_j, t_3 ));
2624    t_1 = t_2;
2625    if ( t_1 ) {
2626     t_4 = (Obj)(UInt)(l_match != False);
2627     t_3 = (Obj)(UInt)( ! ((Int)t_4) );
2628     t_1 = t_3;
2629    }
2630    if ( ! t_1 ) break;
2631 
2632    /* j := j + 1; */
2633    C_SUM_FIA( t_1, l_j, INTOBJ_INT(1) )
2634    l_j = t_1;
2635 
2636    /* reqs := req[j]; */
2637    CHECK_INT_POS( l_j );
2638    C_ELM_LIST_FPL( t_1, l_req, l_j )
2639    l_reqs = t_1;
2640 
2641    /* if LEN_LIST( reqs ) = LEN_LIST( imp ) then */
2642    t_3 = GF_LEN__LIST;
2643    if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
2644     t_2 = CALL_1ARGS( t_3, l_reqs );
2645    }
2646    else {
2647     t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( l_reqs ) );
2648    }
2649    CHECK_FUNC_RESULT( t_2 );
2650    t_4 = GF_LEN__LIST;
2651    if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
2652     t_3 = CALL_1ARGS( t_4, l_imp );
2653    }
2654    else {
2655     t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_imp ) );
2656    }
2657    CHECK_FUNC_RESULT( t_3 );
2658    t_1 = (Obj)(UInt)(EQ( t_2, t_3 ));
2659    if ( t_1 ) {
2660 
2661     /* match := true; */
2662     t_1 = True;
2663     l_match = t_1;
2664 
2665     /* for i in [ 1 .. LEN_LIST( reqs ) ] do */
2666     t_3 = GF_LEN__LIST;
2667     if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
2668      t_2 = CALL_1ARGS( t_3, l_reqs );
2669     }
2670     else {
2671      t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( l_reqs ) );
2672     }
2673     CHECK_FUNC_RESULT( t_2 );
2674     CHECK_INT_SMALL( t_2 );
2675     for ( t_1 = INTOBJ_INT(1);
2676           ((Int)t_1) <= ((Int)t_2);
2677           t_1 = (Obj)(((UInt)t_1)+4) ) {
2678      l_i = t_1;
2679 
2680      /* if not IS_SUBSET_FLAGS( imp[i], reqs[i] ) then */
2681      t_6 = GF_IS__SUBSET__FLAGS;
2682      C_ELM_LIST_FPL( t_7, l_imp, l_i )
2683      C_ELM_LIST_FPL( t_8, l_reqs, l_i )
2684      if ( TNUM_OBJ( t_6 ) == T_FUNCTION ) {
2685       t_5 = CALL_2ARGS( t_6, t_7, t_8 );
2686      }
2687      else {
2688       t_5 = DoOperation2Args( CallFuncListOper, t_6, NewPlistFromArgs( t_7, t_8 ) );
2689      }
2690      CHECK_FUNC_RESULT( t_5 );
2691      CHECK_BOOL( t_5 );
2692      t_4 = (Obj)(UInt)(t_5 != False);
2693      t_3 = (Obj)(UInt)( ! ((Int)t_4) );
2694      if ( t_3 ) {
2695 
2696       /* match := false; */
2697       t_3 = False;
2698       l_match = t_3;
2699 
2700       /* notmatch := i; */
2701       l_notmatch = l_i;
2702 
2703       /* break; */
2704       break;
2705 
2706      }
2707      /* fi */
2708 
2709     }
2710     /* od */
2711 
2712     /* if match then */
2713     t_1 = (Obj)(UInt)(l_match != False);
2714     if ( t_1 ) {
2715 
2716      /* break; */
2717      break;
2718 
2719     }
2720     /* fi */
2721 
2722    }
2723    /* fi */
2724 
2725   }
2726   /* od */
2727 
2728   /* if not match then */
2729   t_2 = (Obj)(UInt)(l_match != False);
2730   t_1 = (Obj)(UInt)( ! ((Int)t_2) );
2731   if ( t_1 ) {
2732 
2733    /* if notmatch = 0 then */
2734    t_1 = (Obj)(UInt)(((Int)l_notmatch) == ((Int)INTOBJ_INT(0)));
2735    if ( t_1 ) {
2736 
2737     /* if not GAPInfo.CommandLineOptions.N then */
2738     t_5 = GC_GAPInfo;
2739     CHECK_BOUND( t_5, "GAPInfo" );
2740     t_4 = ELM_REC( t_5, R_CommandLineOptions );
2741     t_3 = ELM_REC( t_4, R_N );
2742     CHECK_BOOL( t_3 );
2743     t_2 = (Obj)(UInt)(t_3 != False);
2744     t_1 = (Obj)(UInt)( ! ((Int)t_2) );
2745     if ( t_1 ) {
2746 
2747      /* Error( "the number of arguments does not match a declaration of ", NAME_FUNC( opr ) ); */
2748      t_1 = GF_Error;
2749      t_2 = MakeString( "the number of arguments does not match a declaration of " );
2750      t_4 = GF_NAME__FUNC;
2751      if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
2752       t_3 = CALL_1ARGS( t_4, l_opr );
2753      }
2754      else {
2755       t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_opr ) );
2756      }
2757      CHECK_FUNC_RESULT( t_3 );
2758      if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
2759       CALL_2ARGS( t_1, t_2, t_3 );
2760      }
2761      else {
2762       DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
2763      }
2764 
2765     }
2766 
2767     /* else */
2768     else {
2769 
2770      /* Print( "InstallMethod warning:  nr of args does not ", "match a declaration of ", NAME_FUNC( opr ), "\n" ); */
2771      t_1 = GF_Print;
2772      t_2 = MakeString( "InstallMethod warning:  nr of args does not " );
2773      t_3 = MakeString( "match a declaration of " );
2774      t_5 = GF_NAME__FUNC;
2775      if ( TNUM_OBJ( t_5 ) == T_FUNCTION ) {
2776       t_4 = CALL_1ARGS( t_5, l_opr );
2777      }
2778      else {
2779       t_4 = DoOperation2Args( CallFuncListOper, t_5, NewPlistFromArgs( l_opr ) );
2780      }
2781      CHECK_FUNC_RESULT( t_4 );
2782      t_5 = MakeString( "\n" );
2783      if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
2784       CALL_4ARGS( t_1, t_2, t_3, t_4, t_5 );
2785      }
2786      else {
2787       DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3, t_4, t_5 ) );
2788      }
2789 
2790     }
2791     /* fi */
2792 
2793    }
2794 
2795    /* else */
2796    else {
2797 
2798     /* if not GAPInfo.CommandLineOptions.N then */
2799     t_5 = GC_GAPInfo;
2800     CHECK_BOUND( t_5, "GAPInfo" );
2801     t_4 = ELM_REC( t_5, R_CommandLineOptions );
2802     t_3 = ELM_REC( t_4, R_N );
2803     CHECK_BOOL( t_3 );
2804     t_2 = (Obj)(UInt)(t_3 != False);
2805     t_1 = (Obj)(UInt)( ! ((Int)t_2) );
2806     if ( t_1 ) {
2807 
2808      /* Error( "required filters ", NamesFilter( imp[notmatch] ), "\nfor ", Ordinal( notmatch ), " argument do not match a declaration of ", NAME_FUNC( opr ) ); */
2809      t_1 = GF_Error;
2810      t_2 = MakeString( "required filters " );
2811      t_4 = GF_NamesFilter;
2812      CHECK_INT_POS( l_notmatch );
2813      C_ELM_LIST_FPL( t_5, l_imp, l_notmatch )
2814      if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
2815       t_3 = CALL_1ARGS( t_4, t_5 );
2816      }
2817      else {
2818       t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( t_5 ) );
2819      }
2820      CHECK_FUNC_RESULT( t_3 );
2821      t_4 = MakeString( "\nfor " );
2822      t_6 = GF_Ordinal;
2823      if ( TNUM_OBJ( t_6 ) == T_FUNCTION ) {
2824       t_5 = CALL_1ARGS( t_6, l_notmatch );
2825      }
2826      else {
2827       t_5 = DoOperation2Args( CallFuncListOper, t_6, NewPlistFromArgs( l_notmatch ) );
2828      }
2829      CHECK_FUNC_RESULT( t_5 );
2830      t_6 = MakeString( " argument do not match a declaration of " );
2831      t_8 = GF_NAME__FUNC;
2832      if ( TNUM_OBJ( t_8 ) == T_FUNCTION ) {
2833       t_7 = CALL_1ARGS( t_8, l_opr );
2834      }
2835      else {
2836       t_7 = DoOperation2Args( CallFuncListOper, t_8, NewPlistFromArgs( l_opr ) );
2837      }
2838      CHECK_FUNC_RESULT( t_7 );
2839      if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
2840       CALL_6ARGS( t_1, t_2, t_3, t_4, t_5, t_6, t_7 );
2841      }
2842      else {
2843       DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3, t_4, t_5, t_6, t_7 ) );
2844      }
2845 
2846     }
2847 
2848     /* else */
2849     else {
2850 
2851      /* Print( "InstallMethod warning: ", NAME_FUNC( opr ), " at \c", INPUT_FILENAME(  ), ":", INPUT_LINENUMBER(  ), " \c", "required filter \c", NAME_FUNC( filters[notmatch] ), " for ", Ordinal( notmatch ), " argument does not match any ",
2852  "declaration\n" ); */
2853      t_1 = GF_Print;
2854      t_2 = NEW_PLIST( T_PLIST, 13 );
2855      SET_LEN_PLIST( t_2, 13 );
2856      t_3 = MakeString( "InstallMethod warning: " );
2857      SET_ELM_PLIST( t_2, 1, t_3 );
2858      CHANGED_BAG( t_2 );
2859      t_4 = GF_NAME__FUNC;
2860      if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
2861       t_3 = CALL_1ARGS( t_4, l_opr );
2862      }
2863      else {
2864       t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_opr ) );
2865      }
2866      CHECK_FUNC_RESULT( t_3 );
2867      SET_ELM_PLIST( t_2, 2, t_3 );
2868      CHANGED_BAG( t_2 );
2869      t_3 = MakeString( " at \03" );
2870      SET_ELM_PLIST( t_2, 3, t_3 );
2871      CHANGED_BAG( t_2 );
2872      t_4 = GF_INPUT__FILENAME;
2873      if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
2874       t_3 = CALL_0ARGS( t_4 );
2875      }
2876      else {
2877       t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( ) );
2878      }
2879      CHECK_FUNC_RESULT( t_3 );
2880      SET_ELM_PLIST( t_2, 4, t_3 );
2881      CHANGED_BAG( t_2 );
2882      t_3 = MakeString( ":" );
2883      SET_ELM_PLIST( t_2, 5, t_3 );
2884      CHANGED_BAG( t_2 );
2885      t_4 = GF_INPUT__LINENUMBER;
2886      if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
2887       t_3 = CALL_0ARGS( t_4 );
2888      }
2889      else {
2890       t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( ) );
2891      }
2892      CHECK_FUNC_RESULT( t_3 );
2893      SET_ELM_PLIST( t_2, 6, t_3 );
2894      CHANGED_BAG( t_2 );
2895      t_3 = MakeString( " \03" );
2896      SET_ELM_PLIST( t_2, 7, t_3 );
2897      CHANGED_BAG( t_2 );
2898      t_3 = MakeString( "required filter \03" );
2899      SET_ELM_PLIST( t_2, 8, t_3 );
2900      CHANGED_BAG( t_2 );
2901      t_4 = GF_NAME__FUNC;
2902      CHECK_INT_POS( l_notmatch );
2903      C_ELM_LIST_FPL( t_5, l_filters, l_notmatch )
2904      if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
2905       t_3 = CALL_1ARGS( t_4, t_5 );
2906      }
2907      else {
2908       t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( t_5 ) );
2909      }
2910      CHECK_FUNC_RESULT( t_3 );
2911      SET_ELM_PLIST( t_2, 9, t_3 );
2912      CHANGED_BAG( t_2 );
2913      t_3 = MakeString( " for " );
2914      SET_ELM_PLIST( t_2, 10, t_3 );
2915      CHANGED_BAG( t_2 );
2916      t_4 = GF_Ordinal;
2917      if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
2918       t_3 = CALL_1ARGS( t_4, l_notmatch );
2919      }
2920      else {
2921       t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_notmatch ) );
2922      }
2923      CHECK_FUNC_RESULT( t_3 );
2924      SET_ELM_PLIST( t_2, 11, t_3 );
2925      CHANGED_BAG( t_2 );
2926      t_3 = MakeString( " argument does not match any " );
2927      SET_ELM_PLIST( t_2, 12, t_3 );
2928      CHANGED_BAG( t_2 );
2929      t_3 = MakeString( "declaration\n" );
2930      SET_ELM_PLIST( t_2, 13, t_3 );
2931      CHANGED_BAG( t_2 );
2932      if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
2933       CALL_XARGS( t_1, t_2 );
2934      }
2935      else {
2936       DoOperation2Args( CallFuncListOper, t_1, t_2 );
2937      }
2938 
2939     }
2940     /* fi */
2941 
2942    }
2943    /* fi */
2944 
2945   }
2946 
2947   /* else */
2948   else {
2949 
2950    /* oreqs := reqs; */
2951    l_oreqs = l_reqs;
2952 
2953    /* for k in [ j + 1 .. LEN_LIST( req ) ] do */
2954    C_SUM_FIA( t_2, l_j, INTOBJ_INT(1) )
2955    CHECK_INT_SMALL( t_2 );
2956    t_4 = GF_LEN__LIST;
2957    if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
2958     t_3 = CALL_1ARGS( t_4, l_req );
2959    }
2960    else {
2961     t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_req ) );
2962    }
2963    CHECK_FUNC_RESULT( t_3 );
2964    CHECK_INT_SMALL( t_3 );
2965    for ( t_1 = t_2;
2966          ((Int)t_1) <= ((Int)t_3);
2967          t_1 = (Obj)(((UInt)t_1)+4) ) {
2968     l_k = t_1;
2969 
2970     /* reqs := req[k]; */
2971     CHECK_INT_POS( l_k );
2972     C_ELM_LIST_FPL( t_4, l_req, l_k )
2973     l_reqs = t_4;
2974 
2975     /* if LEN_LIST( reqs ) = LEN_LIST( imp ) then */
2976     t_6 = GF_LEN__LIST;
2977     if ( TNUM_OBJ( t_6 ) == T_FUNCTION ) {
2978      t_5 = CALL_1ARGS( t_6, l_reqs );
2979     }
2980     else {
2981      t_5 = DoOperation2Args( CallFuncListOper, t_6, NewPlistFromArgs( l_reqs ) );
2982     }
2983     CHECK_FUNC_RESULT( t_5 );
2984     t_7 = GF_LEN__LIST;
2985     if ( TNUM_OBJ( t_7 ) == T_FUNCTION ) {
2986      t_6 = CALL_1ARGS( t_7, l_imp );
2987     }
2988     else {
2989      t_6 = DoOperation2Args( CallFuncListOper, t_7, NewPlistFromArgs( l_imp ) );
2990     }
2991     CHECK_FUNC_RESULT( t_6 );
2992     t_4 = (Obj)(UInt)(EQ( t_5, t_6 ));
2993     if ( t_4 ) {
2994 
2995      /* match := true; */
2996      t_4 = True;
2997      l_match = t_4;
2998 
2999      /* for i in [ 1 .. LEN_LIST( reqs ) ] do */
3000      t_6 = GF_LEN__LIST;
3001      if ( TNUM_OBJ( t_6 ) == T_FUNCTION ) {
3002       t_5 = CALL_1ARGS( t_6, l_reqs );
3003      }
3004      else {
3005       t_5 = DoOperation2Args( CallFuncListOper, t_6, NewPlistFromArgs( l_reqs ) );
3006      }
3007      CHECK_FUNC_RESULT( t_5 );
3008      CHECK_INT_SMALL( t_5 );
3009      for ( t_4 = INTOBJ_INT(1);
3010            ((Int)t_4) <= ((Int)t_5);
3011            t_4 = (Obj)(((UInt)t_4)+4) ) {
3012       l_i = t_4;
3013 
3014       /* if not IS_SUBSET_FLAGS( imp[i], reqs[i] ) then */
3015       t_9 = GF_IS__SUBSET__FLAGS;
3016       C_ELM_LIST_FPL( t_10, l_imp, l_i )
3017       C_ELM_LIST_FPL( t_11, l_reqs, l_i )
3018       if ( TNUM_OBJ( t_9 ) == T_FUNCTION ) {
3019        t_8 = CALL_2ARGS( t_9, t_10, t_11 );
3020       }
3021       else {
3022        t_8 = DoOperation2Args( CallFuncListOper, t_9, NewPlistFromArgs( t_10, t_11 ) );
3023       }
3024       CHECK_FUNC_RESULT( t_8 );
3025       CHECK_BOOL( t_8 );
3026       t_7 = (Obj)(UInt)(t_8 != False);
3027       t_6 = (Obj)(UInt)( ! ((Int)t_7) );
3028       if ( t_6 ) {
3029 
3030        /* match := false; */
3031        t_6 = False;
3032        l_match = t_6;
3033 
3034        /* break; */
3035        break;
3036 
3037       }
3038       /* fi */
3039 
3040      }
3041      /* od */
3042 
3043      /* if match and reqs <> oreqs then */
3044      t_5 = (Obj)(UInt)(l_match != False);
3045      t_4 = t_5;
3046      if ( t_4 ) {
3047       t_6 = (Obj)(UInt)( ! EQ( l_reqs, l_oreqs ));
3048       t_4 = t_6;
3049      }
3050      if ( t_4 ) {
3051 
3052       /* INFO_DEBUG( 1, "method installed for ", NAME_FUNC( opr ), " matches more than one declaration" ); */
3053       t_4 = GF_INFO__DEBUG;
3054       t_5 = MakeString( "method installed for " );
3055       t_7 = GF_NAME__FUNC;
3056       if ( TNUM_OBJ( t_7 ) == T_FUNCTION ) {
3057        t_6 = CALL_1ARGS( t_7, l_opr );
3058       }
3059       else {
3060        t_6 = DoOperation2Args( CallFuncListOper, t_7, NewPlistFromArgs( l_opr ) );
3061       }
3062       CHECK_FUNC_RESULT( t_6 );
3063       t_7 = MakeString( " matches more than one declaration" );
3064       if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
3065        CALL_4ARGS( t_4, INTOBJ_INT(1), t_5, t_6, t_7 );
3066       }
3067       else {
3068        DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( INTOBJ_INT(1), t_5, t_6, t_7 ) );
3069       }
3070 
3071      }
3072      /* fi */
3073 
3074     }
3075     /* fi */
3076 
3077    }
3078    /* od */
3079 
3080   }
3081   /* fi */
3082 
3083  }
3084  /* fi */
3085 
3086  /* if IS_FUNCTION( method ) and IsBound( HasNameFunction ) and IsBound( TYPE_FUNCTION_WITH_NAME ) and IsBound( TYPE_OPERATION_WITH_NAME ) and not VAL_GVAR( "HasNameFunction" )( method ) then */
3087  t_7 = GF_IS__FUNCTION;
3088  if ( TNUM_OBJ( t_7 ) == T_FUNCTION ) {
3089   t_6 = CALL_1ARGS( t_7, l_method );
3090  }
3091  else {
3092   t_6 = DoOperation2Args( CallFuncListOper, t_7, NewPlistFromArgs( l_method ) );
3093  }
3094  CHECK_FUNC_RESULT( t_6 );
3095  CHECK_BOOL( t_6 );
3096  t_5 = (Obj)(UInt)(t_6 != False);
3097  t_4 = t_5;
3098  if ( t_4 ) {
3099   t_8 = GC_HasNameFunction;
3100   t_7 = ((t_8 != 0) ? True : False);
3101   t_6 = (Obj)(UInt)(t_7 != False);
3102   t_4 = t_6;
3103  }
3104  t_3 = t_4;
3105  if ( t_3 ) {
3106   t_7 = GC_TYPE__FUNCTION__WITH__NAME;
3107   t_6 = ((t_7 != 0) ? True : False);
3108   t_5 = (Obj)(UInt)(t_6 != False);
3109   t_3 = t_5;
3110  }
3111  t_2 = t_3;
3112  if ( t_2 ) {
3113   t_6 = GC_TYPE__OPERATION__WITH__NAME;
3114   t_5 = ((t_6 != 0) ? True : False);
3115   t_4 = (Obj)(UInt)(t_5 != False);
3116   t_2 = t_4;
3117  }
3118  t_1 = t_2;
3119  if ( t_1 ) {
3120   t_7 = GF_VAL__GVAR;
3121   t_8 = MakeString( "HasNameFunction" );
3122   if ( TNUM_OBJ( t_7 ) == T_FUNCTION ) {
3123    t_6 = CALL_1ARGS( t_7, t_8 );
3124   }
3125   else {
3126    t_6 = DoOperation2Args( CallFuncListOper, t_7, NewPlistFromArgs( t_8 ) );
3127   }
3128   CHECK_FUNC_RESULT( t_6 );
3129   if ( TNUM_OBJ( t_6 ) == T_FUNCTION ) {
3130    t_5 = CALL_1ARGS( t_6, l_method );
3131   }
3132   else {
3133    t_5 = DoOperation2Args( CallFuncListOper, t_6, NewPlistFromArgs( l_method ) );
3134   }
3135   CHECK_FUNC_RESULT( t_5 );
3136   CHECK_BOOL( t_5 );
3137   t_4 = (Obj)(UInt)(t_5 != False);
3138   t_3 = (Obj)(UInt)( ! ((Int)t_4) );
3139   t_1 = t_3;
3140  }
3141  if ( t_1 ) {
3142 
3143   /* funcname := SHALLOW_COPY_OBJ( NAME_FUNC( opr ) ); */
3144   t_2 = GF_SHALLOW__COPY__OBJ;
3145   t_4 = GF_NAME__FUNC;
3146   if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
3147    t_3 = CALL_1ARGS( t_4, l_opr );
3148   }
3149   else {
3150    t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_opr ) );
3151   }
3152   CHECK_FUNC_RESULT( t_3 );
3153   if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
3154    t_1 = CALL_1ARGS( t_2, t_3 );
3155   }
3156   else {
3157    t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( t_3 ) );
3158   }
3159   CHECK_FUNC_RESULT( t_1 );
3160   l_funcname = t_1;
3161 
3162   /* APPEND_LIST_INTR( funcname, " " ); */
3163   t_1 = GF_APPEND__LIST__INTR;
3164   t_2 = MakeString( " " );
3165   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
3166    CALL_2ARGS( t_1, l_funcname, t_2 );
3167   }
3168   else {
3169    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_funcname, t_2 ) );
3170   }
3171 
3172   /* if info <> false then */
3173   t_2 = False;
3174   t_1 = (Obj)(UInt)( ! EQ( l_info, t_2 ));
3175   if ( t_1 ) {
3176 
3177    /* APPEND_LIST_INTR( funcname, info ); */
3178    t_1 = GF_APPEND__LIST__INTR;
3179    if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
3180     CALL_2ARGS( t_1, l_funcname, l_info );
3181    }
3182    else {
3183     DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_funcname, l_info ) );
3184    }
3185 
3186   }
3187 
3188   /* else */
3189   else {
3190 
3191    /* APPEND_LIST_INTR( funcname, "method" ); */
3192    t_1 = GF_APPEND__LIST__INTR;
3193    t_2 = MakeString( "method" );
3194    if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
3195     CALL_2ARGS( t_1, l_funcname, t_2 );
3196    }
3197    else {
3198     DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_funcname, t_2 ) );
3199    }
3200 
3201   }
3202   /* fi */
3203 
3204   /* SET_NAME_FUNC( method, funcname ); */
3205   t_1 = GF_SET__NAME__FUNC;
3206   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
3207    CALL_2ARGS( t_1, l_method, l_funcname );
3208   }
3209   else {
3210    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_method, l_funcname ) );
3211   }
3212 
3213  }
3214  /* fi */
3215 
3216  /* if IS_FUNCTION( rank ) and IsBound( HasNameFunction ) and IsBound( TYPE_FUNCTION_WITH_NAME ) and IsBound( TYPE_OPERATION_WITH_NAME ) and not VAL_GVAR( "HasNameFunction" )( rank ) then */
3217  t_7 = GF_IS__FUNCTION;
3218  CHECK_BOUND( l_rank, "rank" );
3219  if ( TNUM_OBJ( t_7 ) == T_FUNCTION ) {
3220   t_6 = CALL_1ARGS( t_7, l_rank );
3221  }
3222  else {
3223   t_6 = DoOperation2Args( CallFuncListOper, t_7, NewPlistFromArgs( l_rank ) );
3224  }
3225  CHECK_FUNC_RESULT( t_6 );
3226  CHECK_BOOL( t_6 );
3227  t_5 = (Obj)(UInt)(t_6 != False);
3228  t_4 = t_5;
3229  if ( t_4 ) {
3230   t_8 = GC_HasNameFunction;
3231   t_7 = ((t_8 != 0) ? True : False);
3232   t_6 = (Obj)(UInt)(t_7 != False);
3233   t_4 = t_6;
3234  }
3235  t_3 = t_4;
3236  if ( t_3 ) {
3237   t_7 = GC_TYPE__FUNCTION__WITH__NAME;
3238   t_6 = ((t_7 != 0) ? True : False);
3239   t_5 = (Obj)(UInt)(t_6 != False);
3240   t_3 = t_5;
3241  }
3242  t_2 = t_3;
3243  if ( t_2 ) {
3244   t_6 = GC_TYPE__OPERATION__WITH__NAME;
3245   t_5 = ((t_6 != 0) ? True : False);
3246   t_4 = (Obj)(UInt)(t_5 != False);
3247   t_2 = t_4;
3248  }
3249  t_1 = t_2;
3250  if ( t_1 ) {
3251   t_7 = GF_VAL__GVAR;
3252   t_8 = MakeString( "HasNameFunction" );
3253   if ( TNUM_OBJ( t_7 ) == T_FUNCTION ) {
3254    t_6 = CALL_1ARGS( t_7, t_8 );
3255   }
3256   else {
3257    t_6 = DoOperation2Args( CallFuncListOper, t_7, NewPlistFromArgs( t_8 ) );
3258   }
3259   CHECK_FUNC_RESULT( t_6 );
3260   if ( TNUM_OBJ( t_6 ) == T_FUNCTION ) {
3261    t_5 = CALL_1ARGS( t_6, l_rank );
3262   }
3263   else {
3264    t_5 = DoOperation2Args( CallFuncListOper, t_6, NewPlistFromArgs( l_rank ) );
3265   }
3266   CHECK_FUNC_RESULT( t_5 );
3267   CHECK_BOOL( t_5 );
3268   t_4 = (Obj)(UInt)(t_5 != False);
3269   t_3 = (Obj)(UInt)( ! ((Int)t_4) );
3270   t_1 = t_3;
3271  }
3272  if ( t_1 ) {
3273 
3274   /* funcname := "Priority calculation for "; */
3275   t_1 = MakeString( "Priority calculation for " );
3276   l_funcname = t_1;
3277 
3278   /* APPEND_LIST_INTR( funcname, NAME_FUNC( opr ) ); */
3279   t_1 = GF_APPEND__LIST__INTR;
3280   t_3 = GF_NAME__FUNC;
3281   if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
3282    t_2 = CALL_1ARGS( t_3, l_opr );
3283   }
3284   else {
3285    t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( l_opr ) );
3286   }
3287   CHECK_FUNC_RESULT( t_2 );
3288   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
3289    CALL_2ARGS( t_1, l_funcname, t_2 );
3290   }
3291   else {
3292    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_funcname, t_2 ) );
3293   }
3294 
3295   /* if info <> false then */
3296   t_2 = False;
3297   t_1 = (Obj)(UInt)( ! EQ( l_info, t_2 ));
3298   if ( t_1 ) {
3299 
3300    /* APPEND_LIST_INTR( funcname, " " ); */
3301    t_1 = GF_APPEND__LIST__INTR;
3302    t_2 = MakeString( " " );
3303    if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
3304     CALL_2ARGS( t_1, l_funcname, t_2 );
3305    }
3306    else {
3307     DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_funcname, t_2 ) );
3308    }
3309 
3310    /* APPEND_LIST_INTR( funcname, info ); */
3311    t_1 = GF_APPEND__LIST__INTR;
3312    if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
3313     CALL_2ARGS( t_1, l_funcname, l_info );
3314    }
3315    else {
3316     DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_funcname, l_info ) );
3317    }
3318 
3319   }
3320   /* fi */
3321 
3322   /* SET_NAME_FUNC( rank, funcname ); */
3323   t_1 = GF_SET__NAME__FUNC;
3324   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
3325    CALL_2ARGS( t_1, l_rank, l_funcname );
3326   }
3327   else {
3328    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_rank, l_funcname ) );
3329   }
3330 
3331  }
3332  /* fi */
3333 
3334  /* INSTALL_METHOD_FLAGS( opr, info, rel, flags, rank, method ); */
3335  t_1 = GF_INSTALL__METHOD__FLAGS;
3336  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
3337   CALL_6ARGS( t_1, l_opr, l_info, l_rel, l_flags, l_rank, l_method );
3338  }
3339  else {
3340   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_opr, l_info, l_rel, l_flags, l_rank, l_method ) );
3341  }
3342 
3343  /* UNLOCK( lk ); */
3344  t_1 = GF_UNLOCK;
3345  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
3346   CALL_1ARGS( t_1, l_lk );
3347  }
3348  else {
3349   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_lk ) );
3350  }
3351 
3352  /* return; */
3353  SWITCH_TO_OLD_FRAME(oldFrame);
3354  return 0;
3355 
3356  /* return; */
3357  SWITCH_TO_OLD_FRAME(oldFrame);
3358  return 0;
3359 }
3360 
3361 /* handler for function 8 */
HdlrFunc8(Obj self,Obj a_obj)3362 static Obj  HdlrFunc8 (
3363  Obj  self,
3364  Obj  a_obj )
3365 {
3366  Obj l_found = 0;
3367  Obj l_prop = 0;
3368  Obj t_1 = 0;
3369  Obj t_2 = 0;
3370  Obj t_3 = 0;
3371  Obj t_4 = 0;
3372  Obj t_5 = 0;
3373  Obj t_6 = 0;
3374  Obj t_7 = 0;
3375  Obj t_8 = 0;
3376  Obj t_9 = 0;
3377  Obj t_10 = 0;
3378  Obj t_11 = 0;
3379  (void)l_found;
3380  (void)l_prop;
3381  Bag oldFrame;
3382 
3383  /* allocate new stack frame */
3384  SWITCH_TO_NEW_FRAME(self,0,0,oldFrame);
3385 
3386  /* found := false; */
3387  t_1 = False;
3388  l_found = t_1;
3389 
3390  /* for prop in props do */
3391  t_4 = OBJ_HVAR( (1 << 16) | 2 );
3392  CHECK_BOUND( t_4, "props" );
3393  if ( IS_SMALL_LIST(t_4) ) {
3394   t_3 = (Obj)(UInt)1;
3395   t_1 = INTOBJ_INT(1);
3396  }
3397  else {
3398   t_3 = (Obj)(UInt)0;
3399   t_1 = CALL_1ARGS( GF_ITERATOR, t_4 );
3400  }
3401  while ( 1 ) {
3402   if ( t_3 ) {
3403    if ( LEN_LIST(t_4) < INT_INTOBJ(t_1) )  break;
3404    t_2 = ELMV0_LIST( t_4, INT_INTOBJ(t_1) );
3405    t_1 = (Obj)(((UInt)t_1)+4);
3406    if ( t_2 == 0 )  continue;
3407   }
3408   else {
3409    if ( CALL_1ARGS( GF_IS_DONE_ITER, t_1 ) != False )  break;
3410    t_2 = CALL_1ARGS( GF_NEXT_ITER, t_1 );
3411   }
3412   l_prop = t_2;
3413 
3414   /* if not Tester( prop )( obj ) then */
3415   t_9 = GF_Tester;
3416   if ( TNUM_OBJ( t_9 ) == T_FUNCTION ) {
3417    t_8 = CALL_1ARGS( t_9, l_prop );
3418   }
3419   else {
3420    t_8 = DoOperation2Args( CallFuncListOper, t_9, NewPlistFromArgs( l_prop ) );
3421   }
3422   CHECK_FUNC_RESULT( t_8 );
3423   if ( TNUM_OBJ( t_8 ) == T_FUNCTION ) {
3424    t_7 = CALL_1ARGS( t_8, a_obj );
3425   }
3426   else {
3427    t_7 = DoOperation2Args( CallFuncListOper, t_8, NewPlistFromArgs( a_obj ) );
3428   }
3429   CHECK_FUNC_RESULT( t_7 );
3430   CHECK_BOOL( t_7 );
3431   t_6 = (Obj)(UInt)(t_7 != False);
3432   t_5 = (Obj)(UInt)( ! ((Int)t_6) );
3433   if ( t_5 ) {
3434 
3435    /* found := true; */
3436    t_5 = True;
3437    l_found = t_5;
3438 
3439    /* if not (prop( obj ) and Tester( prop )( obj )) then */
3440    if ( TNUM_OBJ( l_prop ) == T_FUNCTION ) {
3441     t_8 = CALL_1ARGS( l_prop, a_obj );
3442    }
3443    else {
3444     t_8 = DoOperation2Args( CallFuncListOper, l_prop, NewPlistFromArgs( a_obj ) );
3445    }
3446    CHECK_FUNC_RESULT( t_8 );
3447    CHECK_BOOL( t_8 );
3448    t_7 = (Obj)(UInt)(t_8 != False);
3449    t_6 = t_7;
3450    if ( t_6 ) {
3451     t_11 = GF_Tester;
3452     if ( TNUM_OBJ( t_11 ) == T_FUNCTION ) {
3453      t_10 = CALL_1ARGS( t_11, l_prop );
3454     }
3455     else {
3456      t_10 = DoOperation2Args( CallFuncListOper, t_11, NewPlistFromArgs( l_prop ) );
3457     }
3458     CHECK_FUNC_RESULT( t_10 );
3459     if ( TNUM_OBJ( t_10 ) == T_FUNCTION ) {
3460      t_9 = CALL_1ARGS( t_10, a_obj );
3461     }
3462     else {
3463      t_9 = DoOperation2Args( CallFuncListOper, t_10, NewPlistFromArgs( a_obj ) );
3464     }
3465     CHECK_FUNC_RESULT( t_9 );
3466     CHECK_BOOL( t_9 );
3467     t_8 = (Obj)(UInt)(t_9 != False);
3468     t_6 = t_8;
3469    }
3470    t_5 = (Obj)(UInt)( ! ((Int)t_6) );
3471    if ( t_5 ) {
3472 
3473     /* TryNextMethod(); */
3474     t_5 = GC_TRY__NEXT__METHOD;
3475     CHECK_BOUND( t_5, "TRY_NEXT_METHOD" );
3476     SWITCH_TO_OLD_FRAME(oldFrame);
3477     return t_5;
3478 
3479    }
3480    /* fi */
3481 
3482   }
3483   /* fi */
3484 
3485  }
3486  /* od */
3487 
3488  /* if found then */
3489  t_1 = (Obj)(UInt)(l_found != False);
3490  if ( t_1 ) {
3491 
3492   /* return getter( obj ); */
3493   t_2 = OBJ_HVAR( (1 << 16) | 1 );
3494   CHECK_BOUND( t_2, "getter" );
3495   if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
3496    t_1 = CALL_1ARGS( t_2, a_obj );
3497   }
3498   else {
3499    t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( a_obj ) );
3500   }
3501   CHECK_FUNC_RESULT( t_1 );
3502   SWITCH_TO_OLD_FRAME(oldFrame);
3503   return t_1;
3504 
3505  }
3506 
3507  /* else */
3508  else {
3509 
3510   /* TryNextMethod(); */
3511   t_1 = GC_TRY__NEXT__METHOD;
3512   CHECK_BOUND( t_1, "TRY_NEXT_METHOD" );
3513   SWITCH_TO_OLD_FRAME(oldFrame);
3514   return t_1;
3515 
3516  }
3517  /* fi */
3518 
3519  /* return; */
3520  SWITCH_TO_OLD_FRAME(oldFrame);
3521  return 0;
3522 
3523  /* return; */
3524  SWITCH_TO_OLD_FRAME(oldFrame);
3525  return 0;
3526 }
3527 
3528 /* handler for function 7 */
HdlrFunc7(Obj self,Obj a_name,Obj a_filter,Obj a_getter,Obj a_setter,Obj a_tester,Obj a_mutflag)3529 static Obj  HdlrFunc7 (
3530  Obj  self,
3531  Obj  a_name,
3532  Obj  a_filter,
3533  Obj  a_getter,
3534  Obj  a_setter,
3535  Obj  a_tester,
3536  Obj  a_mutflag )
3537 {
3538  Obj l_flags = 0;
3539  Obj l_rank = 0;
3540  Obj l_cats = 0;
3541  Obj l_i = 0;
3542  Obj l_lk = 0;
3543  Obj t_1 = 0;
3544  Obj t_2 = 0;
3545  Obj t_3 = 0;
3546  Obj t_4 = 0;
3547  Obj t_5 = 0;
3548  Obj t_6 = 0;
3549  Obj t_7 = 0;
3550  Obj t_8 = 0;
3551  Obj t_9 = 0;
3552  (void)l_flags;
3553  (void)l_rank;
3554  (void)l_cats;
3555  (void)l_i;
3556  (void)l_lk;
3557  Bag oldFrame;
3558 
3559  /* allocate new stack frame */
3560  SWITCH_TO_NEW_FRAME(self,2,0,oldFrame);
3561  MakeHighVars(STATE(CurrLVars));
3562  ASS_LVAR( 1, a_getter );
3563 
3564  /* if not IS_IDENTICAL_OBJ( filter, IS_OBJECT ) then */
3565  t_4 = GF_IS__IDENTICAL__OBJ;
3566  t_5 = GC_IS__OBJECT;
3567  CHECK_BOUND( t_5, "IS_OBJECT" );
3568  if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
3569   t_3 = CALL_2ARGS( t_4, a_filter, t_5 );
3570  }
3571  else {
3572   t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( a_filter, t_5 ) );
3573  }
3574  CHECK_FUNC_RESULT( t_3 );
3575  CHECK_BOOL( t_3 );
3576  t_2 = (Obj)(UInt)(t_3 != False);
3577  t_1 = (Obj)(UInt)( ! ((Int)t_2) );
3578  if ( t_1 ) {
3579 
3580   /* flags := FLAGS_FILTER( filter ); */
3581   t_2 = GF_FLAGS__FILTER;
3582   if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
3583    t_1 = CALL_1ARGS( t_2, a_filter );
3584   }
3585   else {
3586    t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( a_filter ) );
3587   }
3588   CHECK_FUNC_RESULT( t_1 );
3589   l_flags = t_1;
3590 
3591   /* rank := 0; */
3592   l_rank = INTOBJ_INT(0);
3593 
3594   /* cats := IS_OBJECT; */
3595   t_1 = GC_IS__OBJECT;
3596   CHECK_BOUND( t_1, "IS_OBJECT" );
3597   l_cats = t_1;
3598 
3599   /* props := [  ]; */
3600   t_1 = NEW_PLIST( T_PLIST, 0 );
3601   SET_LEN_PLIST( t_1, 0 );
3602   ASS_LVAR( 2, t_1 );
3603 
3604   /* lk := READ_LOCK( FILTER_REGION ); */
3605   t_2 = GF_READ__LOCK;
3606   t_3 = GC_FILTER__REGION;
3607   CHECK_BOUND( t_3, "FILTER_REGION" );
3608   if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
3609    t_1 = CALL_1ARGS( t_2, t_3 );
3610   }
3611   else {
3612    t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( t_3 ) );
3613   }
3614   CHECK_FUNC_RESULT( t_1 );
3615   l_lk = t_1;
3616 
3617   /* for i in TRUES_FLAGS( flags ) do */
3618   t_5 = GF_TRUES__FLAGS;
3619   if ( TNUM_OBJ( t_5 ) == T_FUNCTION ) {
3620    t_4 = CALL_1ARGS( t_5, l_flags );
3621   }
3622   else {
3623    t_4 = DoOperation2Args( CallFuncListOper, t_5, NewPlistFromArgs( l_flags ) );
3624   }
3625   CHECK_FUNC_RESULT( t_4 );
3626   if ( IS_SMALL_LIST(t_4) ) {
3627    t_3 = (Obj)(UInt)1;
3628    t_1 = INTOBJ_INT(1);
3629   }
3630   else {
3631    t_3 = (Obj)(UInt)0;
3632    t_1 = CALL_1ARGS( GF_ITERATOR, t_4 );
3633   }
3634   while ( 1 ) {
3635    if ( t_3 ) {
3636     if ( LEN_LIST(t_4) < INT_INTOBJ(t_1) )  break;
3637     t_2 = ELMV0_LIST( t_4, INT_INTOBJ(t_1) );
3638     t_1 = (Obj)(((UInt)t_1)+4);
3639     if ( t_2 == 0 )  continue;
3640    }
3641    else {
3642     if ( CALL_1ARGS( GF_IS_DONE_ITER, t_1 ) != False )  break;
3643     t_2 = CALL_1ARGS( GF_NEXT_ITER, t_1 );
3644    }
3645    l_i = t_2;
3646 
3647    /* if INFO_FILTERS[i] in FNUM_CATS_AND_REPS then */
3648    t_7 = GC_INFO__FILTERS;
3649    CHECK_BOUND( t_7, "INFO_FILTERS" );
3650    CHECK_INT_POS( l_i );
3651    C_ELM_LIST_FPL( t_6, t_7, l_i )
3652    t_7 = GC_FNUM__CATS__AND__REPS;
3653    CHECK_BOUND( t_7, "FNUM_CATS_AND_REPS" );
3654    t_5 = (Obj)(UInt)(IN( t_6, t_7 ));
3655    if ( t_5 ) {
3656 
3657     /* cats := cats and FILTERS[i]; */
3658     if ( l_cats == False ) {
3659      t_5 = l_cats;
3660     }
3661     else if ( l_cats == True ) {
3662      t_7 = GC_FILTERS;
3663      CHECK_BOUND( t_7, "FILTERS" );
3664      C_ELM_LIST_FPL( t_6, t_7, l_i )
3665      CHECK_BOOL( t_6 );
3666      t_5 = t_6;
3667     }
3668     else if (IS_FILTER( l_cats ) ) {
3669      t_8 = GC_FILTERS;
3670      CHECK_BOUND( t_8, "FILTERS" );
3671      C_ELM_LIST_FPL( t_7, t_8, l_i )
3672      t_5 = NewAndFilter( l_cats, t_7 );
3673     }
3674     else {
3675      RequireArgumentEx(0, l_cats, "<expr>",
3676      "must be 'true' or 'false' or a filter" );
3677     }
3678     l_cats = t_5;
3679 
3680     /* rank := rank - RankFilter( FILTERS[i] ); */
3681     t_7 = GF_RankFilter;
3682     t_9 = GC_FILTERS;
3683     CHECK_BOUND( t_9, "FILTERS" );
3684     C_ELM_LIST_FPL( t_8, t_9, l_i )
3685     if ( TNUM_OBJ( t_7 ) == T_FUNCTION ) {
3686      t_6 = CALL_1ARGS( t_7, t_8 );
3687     }
3688     else {
3689      t_6 = DoOperation2Args( CallFuncListOper, t_7, NewPlistFromArgs( t_8 ) );
3690     }
3691     CHECK_FUNC_RESULT( t_6 );
3692     C_DIFF_FIA( t_5, l_rank, t_6 )
3693     l_rank = t_5;
3694 
3695    }
3696 
3697    /* elif INFO_FILTERS[i] in FNUM_PROS then */
3698    else {
3699     t_7 = GC_INFO__FILTERS;
3700     CHECK_BOUND( t_7, "INFO_FILTERS" );
3701     C_ELM_LIST_FPL( t_6, t_7, l_i )
3702     t_7 = GC_FNUM__PROS;
3703     CHECK_BOUND( t_7, "FNUM_PROS" );
3704     t_5 = (Obj)(UInt)(IN( t_6, t_7 ));
3705     if ( t_5 ) {
3706 
3707      /* ADD_LIST( props, FILTERS[i] ); */
3708      t_5 = GF_ADD__LIST;
3709      t_6 = OBJ_LVAR( 2 );
3710      CHECK_BOUND( t_6, "props" );
3711      t_8 = GC_FILTERS;
3712      CHECK_BOUND( t_8, "FILTERS" );
3713      C_ELM_LIST_FPL( t_7, t_8, l_i )
3714      if ( TNUM_OBJ( t_5 ) == T_FUNCTION ) {
3715       CALL_2ARGS( t_5, t_6, t_7 );
3716      }
3717      else {
3718       DoOperation2Args( CallFuncListOper, t_5, NewPlistFromArgs( t_6, t_7 ) );
3719      }
3720 
3721     }
3722    }
3723    /* fi */
3724 
3725   }
3726   /* od */
3727 
3728   /* UNLOCK( lk ); */
3729   t_1 = GF_UNLOCK;
3730   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
3731    CALL_1ARGS( t_1, l_lk );
3732   }
3733   else {
3734    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_lk ) );
3735   }
3736 
3737   /* MakeImmutable( props ); */
3738   t_1 = GF_MakeImmutable;
3739   t_2 = OBJ_LVAR( 2 );
3740   CHECK_BOUND( t_2, "props" );
3741   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
3742    CALL_1ARGS( t_1, t_2 );
3743   }
3744   else {
3745    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2 ) );
3746   }
3747 
3748   /* if 0 < LEN_LIST( props ) then */
3749   t_3 = GF_LEN__LIST;
3750   t_4 = OBJ_LVAR( 2 );
3751   CHECK_BOUND( t_4, "props" );
3752   if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
3753    t_2 = CALL_1ARGS( t_3, t_4 );
3754   }
3755   else {
3756    t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( t_4 ) );
3757   }
3758   CHECK_FUNC_RESULT( t_2 );
3759   t_1 = (Obj)(UInt)(LT( INTOBJ_INT(0), t_2 ));
3760   if ( t_1 ) {
3761 
3762    /* InstallOtherMethod( getter, "default method requiring categories and checking properties", true, [ cats ], rank, function ( obj )
3763       local found, prop;
3764       found := false;
3765       for prop in props do
3766           if not Tester( prop )( obj ) then
3767               found := true;
3768               if not (prop( obj ) and Tester( prop )( obj )) then
3769                   TryNextMethod();
3770               fi;
3771           fi;
3772       od;
3773       if found then
3774           return getter( obj );
3775       else
3776           TryNextMethod();
3777       fi;
3778       return;
3779   end ); */
3780    t_1 = GF_InstallOtherMethod;
3781    t_2 = OBJ_LVAR( 1 );
3782    CHECK_BOUND( t_2, "getter" );
3783    t_3 = MakeString( "default method requiring categories and checking properties" );
3784    t_4 = True;
3785    t_5 = NEW_PLIST( T_PLIST, 1 );
3786    SET_LEN_PLIST( t_5, 1 );
3787    SET_ELM_PLIST( t_5, 1, l_cats );
3788    CHANGED_BAG( t_5 );
3789    t_6 = NewFunction( NameFunc[8], 1, ArgStringToList("obj"), HdlrFunc8 );
3790    SET_ENVI_FUNC( t_6, STATE(CurrLVars) );
3791    t_7 = NewFunctionBody();
3792    SET_STARTLINE_BODY(t_7, 694);
3793    SET_ENDLINE_BODY(t_7, 712);
3794    SET_FILENAME_BODY(t_7, FileName);
3795    SET_BODY_FUNC(t_6, t_7);
3796    if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
3797     CALL_6ARGS( t_1, t_2, t_3, t_4, t_5, l_rank, t_6 );
3798    }
3799    else {
3800     DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3, t_4, t_5, l_rank, t_6 ) );
3801    }
3802 
3803   }
3804   /* fi */
3805 
3806  }
3807  /* fi */
3808 
3809  /* return; */
3810  SWITCH_TO_OLD_FRAME(oldFrame);
3811  return 0;
3812 
3813  /* return; */
3814  SWITCH_TO_OLD_FRAME(oldFrame);
3815  return 0;
3816 }
3817 
3818 /* handler for function 9 */
HdlrFunc9(Obj self,Obj a_name,Obj a_filter,Obj a_getter,Obj a_setter,Obj a_tester,Obj a_mutflag)3819 static Obj  HdlrFunc9 (
3820  Obj  self,
3821  Obj  a_name,
3822  Obj  a_filter,
3823  Obj  a_getter,
3824  Obj  a_setter,
3825  Obj  a_tester,
3826  Obj  a_mutflag )
3827 {
3828  Obj t_1 = 0;
3829  Obj t_2 = 0;
3830  Obj t_3 = 0;
3831  Obj t_4 = 0;
3832  Obj t_5 = 0;
3833  Bag oldFrame;
3834 
3835  /* allocate new stack frame */
3836  SWITCH_TO_NEW_FRAME(self,0,0,oldFrame);
3837 
3838  /* InstallOtherMethod( setter, "default method, does nothing", true, [ IS_OBJECT, IS_OBJECT ], 0, DO_NOTHING_SETTER ); */
3839  t_1 = GF_InstallOtherMethod;
3840  t_2 = MakeString( "default method, does nothing" );
3841  t_3 = True;
3842  t_4 = NEW_PLIST( T_PLIST, 2 );
3843  SET_LEN_PLIST( t_4, 2 );
3844  t_5 = GC_IS__OBJECT;
3845  CHECK_BOUND( t_5, "IS_OBJECT" );
3846  SET_ELM_PLIST( t_4, 1, t_5 );
3847  CHANGED_BAG( t_4 );
3848  t_5 = GC_IS__OBJECT;
3849  CHECK_BOUND( t_5, "IS_OBJECT" );
3850  SET_ELM_PLIST( t_4, 2, t_5 );
3851  CHANGED_BAG( t_4 );
3852  t_5 = GC_DO__NOTHING__SETTER;
3853  CHECK_BOUND( t_5, "DO_NOTHING_SETTER" );
3854  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
3855   CALL_6ARGS( t_1, a_setter, t_2, t_3, t_4, INTOBJ_INT(0), t_5 );
3856  }
3857  else {
3858   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( a_setter, t_2, t_3, t_4, INTOBJ_INT(0), t_5 ) );
3859  }
3860 
3861  /* return; */
3862  SWITCH_TO_OLD_FRAME(oldFrame);
3863  return 0;
3864 
3865  /* return; */
3866  SWITCH_TO_OLD_FRAME(oldFrame);
3867  return 0;
3868 }
3869 
3870 /* handler for function 10 */
HdlrFunc10(Obj self,Obj a_list,Obj a_elm)3871 static Obj  HdlrFunc10 (
3872  Obj  self,
3873  Obj  a_list,
3874  Obj  a_elm )
3875 {
3876  Obj l_i = 0;
3877  Obj l_j = 0;
3878  Obj l_k = 0;
3879  Obj t_1 = 0;
3880  Obj t_2 = 0;
3881  Obj t_3 = 0;
3882  Obj t_4 = 0;
3883  Obj t_5 = 0;
3884  Obj t_6 = 0;
3885  (void)l_i;
3886  (void)l_j;
3887  (void)l_k;
3888  Bag oldFrame;
3889 
3890  /* allocate new stack frame */
3891  SWITCH_TO_NEW_FRAME(self,0,0,oldFrame);
3892 
3893  /* k := LEN_LIST( list ) + 1; */
3894  t_3 = GF_LEN__LIST;
3895  if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
3896   t_2 = CALL_1ARGS( t_3, a_list );
3897  }
3898  else {
3899   t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( a_list ) );
3900  }
3901  CHECK_FUNC_RESULT( t_2 );
3902  C_SUM_FIA( t_1, t_2, INTOBJ_INT(1) )
3903  l_k = t_1;
3904 
3905  /* if k mod 2 = 0 then */
3906  t_2 = MOD( l_k, INTOBJ_INT(2) );
3907  t_1 = (Obj)(UInt)(EQ( t_2, INTOBJ_INT(0) ));
3908  if ( t_1 ) {
3909 
3910   /* k := k + 1; */
3911   C_SUM_FIA( t_1, l_k, INTOBJ_INT(1) )
3912   l_k = t_1;
3913 
3914  }
3915  /* fi */
3916 
3917  /* i := -1; */
3918  l_i = INTOBJ_INT(-1);
3919 
3920  /* while i + 2 < k do */
3921  while ( 1 ) {
3922   C_SUM_FIA( t_2, l_i, INTOBJ_INT(2) )
3923   t_1 = (Obj)(UInt)(LT( t_2, l_k ));
3924   if ( ! t_1 ) break;
3925 
3926   /* j := 2 * QUO_INT( (i + k + 2), 4 ) - 1; */
3927   t_4 = GF_QUO__INT;
3928   C_SUM_FIA( t_6, l_i, l_k )
3929   C_SUM_FIA( t_5, t_6, INTOBJ_INT(2) )
3930   if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
3931    t_3 = CALL_2ARGS( t_4, t_5, INTOBJ_INT(4) );
3932   }
3933   else {
3934    t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( t_5, INTOBJ_INT(4) ) );
3935   }
3936   CHECK_FUNC_RESULT( t_3 );
3937   C_PROD_FIA( t_2, INTOBJ_INT(2), t_3 )
3938   C_DIFF_FIA( t_1, t_2, INTOBJ_INT(1) )
3939   l_j = t_1;
3940 
3941   /* if list[j] < elm then */
3942   CHECK_INT_POS( l_j );
3943   C_ELM_LIST_FPL( t_2, a_list, l_j )
3944   t_1 = (Obj)(UInt)(LT( t_2, a_elm ));
3945   if ( t_1 ) {
3946 
3947    /* i := j; */
3948    l_i = l_j;
3949 
3950   }
3951 
3952   /* else */
3953   else {
3954 
3955    /* k := j; */
3956    l_k = l_j;
3957 
3958   }
3959   /* fi */
3960 
3961  }
3962  /* od */
3963 
3964  /* return k; */
3965  SWITCH_TO_OLD_FRAME(oldFrame);
3966  return l_k;
3967 
3968  /* return; */
3969  SWITCH_TO_OLD_FRAME(oldFrame);
3970  return 0;
3971 }
3972 
3973 /* handler for function 12 */
HdlrFunc12(Obj self,Obj a_key)3974 static Obj  HdlrFunc12 (
3975  Obj  self,
3976  Obj  a_key )
3977 {
3978  Obj t_1 = 0;
3979  Obj t_2 = 0;
3980  Obj t_3 = 0;
3981  Obj t_4 = 0;
3982  Bag oldFrame;
3983 
3984  /* allocate new stack frame */
3985  SWITCH_TO_NEW_FRAME(self,0,0,oldFrame);
3986 
3987  /* if not IsPrimeInt( key ) then */
3988  t_4 = GF_IsPrimeInt;
3989  if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
3990   t_3 = CALL_1ARGS( t_4, a_key );
3991  }
3992  else {
3993   t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( a_key ) );
3994  }
3995  CHECK_FUNC_RESULT( t_3 );
3996  CHECK_BOOL( t_3 );
3997  t_2 = (Obj)(UInt)(t_3 != False);
3998  t_1 = (Obj)(UInt)( ! ((Int)t_2) );
3999  if ( t_1 ) {
4000 
4001   /* Error( name, ": <p> must be a prime" ); */
4002   t_1 = GF_Error;
4003   t_2 = OBJ_HVAR( (1 << 16) | 1 );
4004   CHECK_BOUND( t_2, "name" );
4005   t_3 = MakeString( ": <p> must be a prime" );
4006   if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4007    CALL_2ARGS( t_1, t_2, t_3 );
4008   }
4009   else {
4010    DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
4011   }
4012 
4013  }
4014  /* fi */
4015 
4016  /* return; */
4017  SWITCH_TO_OLD_FRAME(oldFrame);
4018  return 0;
4019 
4020  /* return; */
4021  SWITCH_TO_OLD_FRAME(oldFrame);
4022  return 0;
4023 }
4024 
4025 /* handler for function 13 */
HdlrFunc13(Obj self,Obj a_D)4026 static Obj  HdlrFunc13 (
4027  Obj  self,
4028  Obj  a_D )
4029 {
4030  Obj t_1 = 0;
4031  Bag oldFrame;
4032 
4033  /* allocate new stack frame */
4034  SWITCH_TO_NEW_FRAME(self,0,0,oldFrame);
4035 
4036  /* return [  ]; */
4037  t_1 = NEW_PLIST( T_PLIST, 0 );
4038  SET_LEN_PLIST( t_1, 0 );
4039  SWITCH_TO_OLD_FRAME(oldFrame);
4040  return t_1;
4041 
4042  /* return; */
4043  SWITCH_TO_OLD_FRAME(oldFrame);
4044  return 0;
4045 }
4046 
4047 /* handler for function 14 */
HdlrFunc14(Obj self,Obj a_D,Obj a_key)4048 static Obj  HdlrFunc14 (
4049  Obj  self,
4050  Obj  a_D,
4051  Obj  a_key )
4052 {
4053  Obj l_known = 0;
4054  Obj l_i = 0;
4055  Obj l_erg = 0;
4056  Obj t_1 = 0;
4057  Obj t_2 = 0;
4058  Obj t_3 = 0;
4059  Obj t_4 = 0;
4060  Obj t_5 = 0;
4061  (void)l_known;
4062  (void)l_i;
4063  (void)l_erg;
4064  Bag oldFrame;
4065 
4066  /* allocate new stack frame */
4067  SWITCH_TO_NEW_FRAME(self,0,0,oldFrame);
4068 
4069  /* keytest( key ); */
4070  t_1 = OBJ_HVAR( (1 << 16) | 2 );
4071  CHECK_BOUND( t_1, "keytest" );
4072  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4073   CALL_1ARGS( t_1, a_key );
4074  }
4075  else {
4076   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( a_key ) );
4077  }
4078 
4079  /* known := attr( D ); */
4080  t_2 = OBJ_HVAR( (1 << 16) | 4 );
4081  CHECK_BOUND( t_2, "attr" );
4082  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
4083   t_1 = CALL_1ARGS( t_2, a_D );
4084  }
4085  else {
4086   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( a_D ) );
4087  }
4088  CHECK_FUNC_RESULT( t_1 );
4089  l_known = t_1;
4090 
4091  /* i := PositionSortedOddPositions( known, key ); */
4092  t_2 = GF_PositionSortedOddPositions;
4093  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
4094   t_1 = CALL_2ARGS( t_2, l_known, a_key );
4095  }
4096  else {
4097   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( l_known, a_key ) );
4098  }
4099  CHECK_FUNC_RESULT( t_1 );
4100  l_i = t_1;
4101 
4102  /* if LEN_LIST( known ) < i or known[i] <> key then */
4103  t_4 = GF_LEN__LIST;
4104  if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
4105   t_3 = CALL_1ARGS( t_4, l_known );
4106  }
4107  else {
4108   t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_known ) );
4109  }
4110  CHECK_FUNC_RESULT( t_3 );
4111  t_2 = (Obj)(UInt)(LT( t_3, l_i ));
4112  t_1 = t_2;
4113  if ( ! t_1 ) {
4114   CHECK_INT_POS( l_i );
4115   C_ELM_LIST_FPL( t_4, l_known, l_i )
4116   t_3 = (Obj)(UInt)( ! EQ( t_4, a_key ));
4117   t_1 = t_3;
4118  }
4119  if ( t_1 ) {
4120 
4121   /* erg := oper( D, key ); */
4122   t_2 = OBJ_HVAR( (1 << 16) | 3 );
4123   CHECK_BOUND( t_2, "oper" );
4124   if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
4125    t_1 = CALL_2ARGS( t_2, a_D, a_key );
4126   }
4127   else {
4128    t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( a_D, a_key ) );
4129   }
4130   CHECK_FUNC_RESULT( t_1 );
4131   l_erg = t_1;
4132 
4133   /* i := PositionSortedOddPositions( known, key ); */
4134   t_2 = GF_PositionSortedOddPositions;
4135   if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
4136    t_1 = CALL_2ARGS( t_2, l_known, a_key );
4137   }
4138   else {
4139    t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( l_known, a_key ) );
4140   }
4141   CHECK_FUNC_RESULT( t_1 );
4142   l_i = t_1;
4143 
4144   /* if LEN_LIST( known ) < i or known[i] <> key then */
4145   t_4 = GF_LEN__LIST;
4146   if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
4147    t_3 = CALL_1ARGS( t_4, l_known );
4148   }
4149   else {
4150    t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_known ) );
4151   }
4152   CHECK_FUNC_RESULT( t_3 );
4153   t_2 = (Obj)(UInt)(LT( t_3, l_i ));
4154   t_1 = t_2;
4155   if ( ! t_1 ) {
4156    CHECK_INT_POS( l_i );
4157    C_ELM_LIST_FPL( t_4, l_known, l_i )
4158    t_3 = (Obj)(UInt)( ! EQ( t_4, a_key ));
4159    t_1 = t_3;
4160   }
4161   if ( t_1 ) {
4162 
4163    /* known{[ i + 2 .. LEN_LIST( known ) + 2 ]} := known{[ i .. LEN_LIST( known ) ]}; */
4164    C_SUM_FIA( t_2, l_i, INTOBJ_INT(2) )
4165    t_5 = GF_LEN__LIST;
4166    if ( TNUM_OBJ( t_5 ) == T_FUNCTION ) {
4167     t_4 = CALL_1ARGS( t_5, l_known );
4168    }
4169    else {
4170     t_4 = DoOperation2Args( CallFuncListOper, t_5, NewPlistFromArgs( l_known ) );
4171    }
4172    CHECK_FUNC_RESULT( t_4 );
4173    C_SUM_FIA( t_3, t_4, INTOBJ_INT(2) )
4174    t_1 = Range2Check( t_2, t_3 );
4175    t_5 = GF_LEN__LIST;
4176    if ( TNUM_OBJ( t_5 ) == T_FUNCTION ) {
4177     t_4 = CALL_1ARGS( t_5, l_known );
4178    }
4179    else {
4180     t_4 = DoOperation2Args( CallFuncListOper, t_5, NewPlistFromArgs( l_known ) );
4181    }
4182    CHECK_FUNC_RESULT( t_4 );
4183    t_3 = Range2Check( l_i, t_4 );
4184    t_2 = ElmsListCheck( l_known, t_3 );
4185    AsssListCheck( l_known, t_1, t_2 );
4186 
4187    /* known[i] := IMMUTABLE_COPY_OBJ( key ); */
4188    CHECK_INT_POS( l_i );
4189    t_2 = GF_IMMUTABLE__COPY__OBJ;
4190    if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
4191     t_1 = CALL_1ARGS( t_2, a_key );
4192    }
4193    else {
4194     t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( a_key ) );
4195    }
4196    CHECK_FUNC_RESULT( t_1 );
4197    C_ASS_LIST_FPL( l_known, l_i, t_1 )
4198 
4199    /* known[i + 1] := IMMUTABLE_COPY_OBJ( erg ); */
4200    C_SUM_FIA( t_1, l_i, INTOBJ_INT(1) )
4201    CHECK_INT_POS( t_1 );
4202    t_3 = GF_IMMUTABLE__COPY__OBJ;
4203    if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
4204     t_2 = CALL_1ARGS( t_3, l_erg );
4205    }
4206    else {
4207     t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( l_erg ) );
4208    }
4209    CHECK_FUNC_RESULT( t_2 );
4210    C_ASS_LIST_FPL( l_known, t_1, t_2 )
4211 
4212   }
4213   /* fi */
4214 
4215  }
4216  /* fi */
4217 
4218  /* return known[i + 1]; */
4219  C_SUM_FIA( t_2, l_i, INTOBJ_INT(1) )
4220  CHECK_INT_POS( t_2 );
4221  C_ELM_LIST_FPL( t_1, l_known, t_2 )
4222  SWITCH_TO_OLD_FRAME(oldFrame);
4223  return t_1;
4224 
4225  /* return; */
4226  SWITCH_TO_OLD_FRAME(oldFrame);
4227  return 0;
4228 }
4229 
4230 /* handler for function 15 */
HdlrFunc15(Obj self,Obj a_D,Obj a_key)4231 static Obj  HdlrFunc15 (
4232  Obj  self,
4233  Obj  a_D,
4234  Obj  a_key )
4235 {
4236  Obj l_known = 0;
4237  Obj l_i = 0;
4238  Obj t_1 = 0;
4239  Obj t_2 = 0;
4240  Obj t_3 = 0;
4241  Obj t_4 = 0;
4242  Obj t_5 = 0;
4243  (void)l_known;
4244  (void)l_i;
4245  Bag oldFrame;
4246 
4247  /* allocate new stack frame */
4248  SWITCH_TO_NEW_FRAME(self,0,0,oldFrame);
4249 
4250  /* keytest( key ); */
4251  t_1 = OBJ_HVAR( (1 << 16) | 2 );
4252  CHECK_BOUND( t_1, "keytest" );
4253  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4254   CALL_1ARGS( t_1, a_key );
4255  }
4256  else {
4257   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( a_key ) );
4258  }
4259 
4260  /* known := attr( D ); */
4261  t_2 = OBJ_HVAR( (1 << 16) | 4 );
4262  CHECK_BOUND( t_2, "attr" );
4263  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
4264   t_1 = CALL_1ARGS( t_2, a_D );
4265  }
4266  else {
4267   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( a_D ) );
4268  }
4269  CHECK_FUNC_RESULT( t_1 );
4270  l_known = t_1;
4271 
4272  /* i := PositionSortedOddPositions( known, key ); */
4273  t_2 = GF_PositionSortedOddPositions;
4274  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
4275   t_1 = CALL_2ARGS( t_2, l_known, a_key );
4276  }
4277  else {
4278   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( l_known, a_key ) );
4279  }
4280  CHECK_FUNC_RESULT( t_1 );
4281  l_i = t_1;
4282 
4283  /* return i <= LEN_LIST( known ) and known[i] = key; */
4284  t_4 = GF_LEN__LIST;
4285  if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
4286   t_3 = CALL_1ARGS( t_4, l_known );
4287  }
4288  else {
4289   t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_known ) );
4290  }
4291  CHECK_FUNC_RESULT( t_3 );
4292  t_2 = (LT( t_3, l_i ) ?  False : True);
4293  if ( t_2 == False ) {
4294   t_1 = t_2;
4295  }
4296  else if ( t_2 == True ) {
4297   CHECK_INT_POS( l_i );
4298   C_ELM_LIST_FPL( t_4, l_known, l_i )
4299   t_3 = (EQ( t_4, a_key ) ? True : False);
4300   t_1 = t_3;
4301  }
4302  else if (IS_FILTER( t_2 ) ) {
4303   C_ELM_LIST_FPL( t_5, l_known, l_i )
4304   t_4 = (EQ( t_5, a_key ) ? True : False);
4305   t_1 = NewAndFilter( t_2, t_4 );
4306  }
4307  else {
4308   RequireArgumentEx(0, t_2, "<expr>",
4309   "must be 'true' or 'false' or a filter" );
4310  }
4311  SWITCH_TO_OLD_FRAME(oldFrame);
4312  return t_1;
4313 
4314  /* return; */
4315  SWITCH_TO_OLD_FRAME(oldFrame);
4316  return 0;
4317 }
4318 
4319 /* handler for function 16 */
HdlrFunc16(Obj self,Obj a_D,Obj a_key,Obj a_obj)4320 static Obj  HdlrFunc16 (
4321  Obj  self,
4322  Obj  a_D,
4323  Obj  a_key,
4324  Obj  a_obj )
4325 {
4326  Obj l_known = 0;
4327  Obj l_i = 0;
4328  Obj t_1 = 0;
4329  Obj t_2 = 0;
4330  Obj t_3 = 0;
4331  Obj t_4 = 0;
4332  Obj t_5 = 0;
4333  (void)l_known;
4334  (void)l_i;
4335  Bag oldFrame;
4336 
4337  /* allocate new stack frame */
4338  SWITCH_TO_NEW_FRAME(self,0,0,oldFrame);
4339 
4340  /* keytest( key ); */
4341  t_1 = OBJ_HVAR( (1 << 16) | 2 );
4342  CHECK_BOUND( t_1, "keytest" );
4343  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4344   CALL_1ARGS( t_1, a_key );
4345  }
4346  else {
4347   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( a_key ) );
4348  }
4349 
4350  /* known := attr( D ); */
4351  t_2 = OBJ_HVAR( (1 << 16) | 4 );
4352  CHECK_BOUND( t_2, "attr" );
4353  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
4354   t_1 = CALL_1ARGS( t_2, a_D );
4355  }
4356  else {
4357   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( a_D ) );
4358  }
4359  CHECK_FUNC_RESULT( t_1 );
4360  l_known = t_1;
4361 
4362  /* i := PositionSortedOddPositions( known, key ); */
4363  t_2 = GF_PositionSortedOddPositions;
4364  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
4365   t_1 = CALL_2ARGS( t_2, l_known, a_key );
4366  }
4367  else {
4368   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( l_known, a_key ) );
4369  }
4370  CHECK_FUNC_RESULT( t_1 );
4371  l_i = t_1;
4372 
4373  /* if LEN_LIST( known ) < i or known[i] <> key then */
4374  t_4 = GF_LEN__LIST;
4375  if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
4376   t_3 = CALL_1ARGS( t_4, l_known );
4377  }
4378  else {
4379   t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( l_known ) );
4380  }
4381  CHECK_FUNC_RESULT( t_3 );
4382  t_2 = (Obj)(UInt)(LT( t_3, l_i ));
4383  t_1 = t_2;
4384  if ( ! t_1 ) {
4385   CHECK_INT_POS( l_i );
4386   C_ELM_LIST_FPL( t_4, l_known, l_i )
4387   t_3 = (Obj)(UInt)( ! EQ( t_4, a_key ));
4388   t_1 = t_3;
4389  }
4390  if ( t_1 ) {
4391 
4392   /* known{[ i + 2 .. LEN_LIST( known ) + 2 ]} := known{[ i .. LEN_LIST( known ) ]}; */
4393   C_SUM_FIA( t_2, l_i, INTOBJ_INT(2) )
4394   t_5 = GF_LEN__LIST;
4395   if ( TNUM_OBJ( t_5 ) == T_FUNCTION ) {
4396    t_4 = CALL_1ARGS( t_5, l_known );
4397   }
4398   else {
4399    t_4 = DoOperation2Args( CallFuncListOper, t_5, NewPlistFromArgs( l_known ) );
4400   }
4401   CHECK_FUNC_RESULT( t_4 );
4402   C_SUM_FIA( t_3, t_4, INTOBJ_INT(2) )
4403   t_1 = Range2Check( t_2, t_3 );
4404   t_5 = GF_LEN__LIST;
4405   if ( TNUM_OBJ( t_5 ) == T_FUNCTION ) {
4406    t_4 = CALL_1ARGS( t_5, l_known );
4407   }
4408   else {
4409    t_4 = DoOperation2Args( CallFuncListOper, t_5, NewPlistFromArgs( l_known ) );
4410   }
4411   CHECK_FUNC_RESULT( t_4 );
4412   t_3 = Range2Check( l_i, t_4 );
4413   t_2 = ElmsListCheck( l_known, t_3 );
4414   AsssListCheck( l_known, t_1, t_2 );
4415 
4416   /* known[i] := IMMUTABLE_COPY_OBJ( key ); */
4417   CHECK_INT_POS( l_i );
4418   t_2 = GF_IMMUTABLE__COPY__OBJ;
4419   if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
4420    t_1 = CALL_1ARGS( t_2, a_key );
4421   }
4422   else {
4423    t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( a_key ) );
4424   }
4425   CHECK_FUNC_RESULT( t_1 );
4426   C_ASS_LIST_FPL( l_known, l_i, t_1 )
4427 
4428   /* known[i + 1] := IMMUTABLE_COPY_OBJ( obj ); */
4429   C_SUM_FIA( t_1, l_i, INTOBJ_INT(1) )
4430   CHECK_INT_POS( t_1 );
4431   t_3 = GF_IMMUTABLE__COPY__OBJ;
4432   if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
4433    t_2 = CALL_1ARGS( t_3, a_obj );
4434   }
4435   else {
4436    t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( a_obj ) );
4437   }
4438   CHECK_FUNC_RESULT( t_2 );
4439   C_ASS_LIST_FPL( l_known, t_1, t_2 )
4440 
4441  }
4442  /* fi */
4443 
4444  /* return; */
4445  SWITCH_TO_OLD_FRAME(oldFrame);
4446  return 0;
4447 
4448  /* return; */
4449  SWITCH_TO_OLD_FRAME(oldFrame);
4450  return 0;
4451 }
4452 
4453 /* handler for function 11 */
HdlrFunc11(Obj self,Obj a_name,Obj a_domreq,Obj a_keyreq,Obj a_keytest)4454 static Obj  HdlrFunc11 (
4455  Obj  self,
4456  Obj  a_name,
4457  Obj  a_domreq,
4458  Obj  a_keyreq,
4459  Obj  a_keytest )
4460 {
4461  Obj l_str = 0;
4462  Obj l_lk = 0;
4463  Obj t_1 = 0;
4464  Obj t_2 = 0;
4465  Obj t_3 = 0;
4466  Obj t_4 = 0;
4467  Obj t_5 = 0;
4468  Obj t_6 = 0;
4469  Obj t_7 = 0;
4470  (void)l_str;
4471  (void)l_lk;
4472  Bag oldFrame;
4473 
4474  /* allocate new stack frame */
4475  SWITCH_TO_NEW_FRAME(self,4,0,oldFrame);
4476  MakeHighVars(STATE(CurrLVars));
4477  ASS_LVAR( 1, a_name );
4478  ASS_LVAR( 2, a_keytest );
4479 
4480  /* if keytest = "prime" then */
4481  t_2 = OBJ_LVAR( 2 );
4482  CHECK_BOUND( t_2, "keytest" );
4483  t_3 = MakeString( "prime" );
4484  t_1 = (Obj)(UInt)(EQ( t_2, t_3 ));
4485  if ( t_1 ) {
4486 
4487   /* keytest := function ( key )
4488       if not IsPrimeInt( key ) then
4489           Error( name, ": <p> must be a prime" );
4490       fi;
4491       return;
4492   end; */
4493   t_1 = NewFunction( NameFunc[12], 1, ArgStringToList("key"), HdlrFunc12 );
4494   SET_ENVI_FUNC( t_1, STATE(CurrLVars) );
4495   t_2 = NewFunctionBody();
4496   SET_STARTLINE_BODY(t_2, 891);
4497   SET_ENDLINE_BODY(t_2, 895);
4498   SET_FILENAME_BODY(t_2, FileName);
4499   SET_BODY_FUNC(t_1, t_2);
4500   ASS_LVAR( 2, t_1 );
4501 
4502  }
4503  /* fi */
4504 
4505  /* str := SHALLOW_COPY_OBJ( name ); */
4506  t_2 = GF_SHALLOW__COPY__OBJ;
4507  t_3 = OBJ_LVAR( 1 );
4508  CHECK_BOUND( t_3, "name" );
4509  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
4510   t_1 = CALL_1ARGS( t_2, t_3 );
4511  }
4512  else {
4513   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( t_3 ) );
4514  }
4515  CHECK_FUNC_RESULT( t_1 );
4516  l_str = t_1;
4517 
4518  /* APPEND_LIST_INTR( str, "Op" ); */
4519  t_1 = GF_APPEND__LIST__INTR;
4520  t_2 = MakeString( "Op" );
4521  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4522   CALL_2ARGS( t_1, l_str, t_2 );
4523  }
4524  else {
4525   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_str, t_2 ) );
4526  }
4527 
4528  /* DeclareOperation( str, [ domreq, keyreq ] ); */
4529  t_1 = GF_DeclareOperation;
4530  t_2 = NEW_PLIST( T_PLIST, 2 );
4531  SET_LEN_PLIST( t_2, 2 );
4532  SET_ELM_PLIST( t_2, 1, a_domreq );
4533  CHANGED_BAG( t_2 );
4534  SET_ELM_PLIST( t_2, 2, a_keyreq );
4535  CHANGED_BAG( t_2 );
4536  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4537   CALL_2ARGS( t_1, l_str, t_2 );
4538  }
4539  else {
4540   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_str, t_2 ) );
4541  }
4542 
4543  /* oper := VALUE_GLOBAL( str ); */
4544  t_2 = GF_VALUE__GLOBAL;
4545  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
4546   t_1 = CALL_1ARGS( t_2, l_str );
4547  }
4548  else {
4549   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( l_str ) );
4550  }
4551  CHECK_FUNC_RESULT( t_1 );
4552  ASS_LVAR( 3, t_1 );
4553 
4554  /* str := "Computed"; */
4555  t_1 = MakeString( "Computed" );
4556  l_str = t_1;
4557 
4558  /* APPEND_LIST_INTR( str, name ); */
4559  t_1 = GF_APPEND__LIST__INTR;
4560  t_2 = OBJ_LVAR( 1 );
4561  CHECK_BOUND( t_2, "name" );
4562  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4563   CALL_2ARGS( t_1, l_str, t_2 );
4564  }
4565  else {
4566   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_str, t_2 ) );
4567  }
4568 
4569  /* APPEND_LIST_INTR( str, "s" ); */
4570  t_1 = GF_APPEND__LIST__INTR;
4571  t_2 = MakeString( "s" );
4572  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4573   CALL_2ARGS( t_1, l_str, t_2 );
4574  }
4575  else {
4576   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_str, t_2 ) );
4577  }
4578 
4579  /* DeclareAttribute( str, domreq, "mutable" ); */
4580  t_1 = GF_DeclareAttribute;
4581  t_2 = MakeString( "mutable" );
4582  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4583   CALL_3ARGS( t_1, l_str, a_domreq, t_2 );
4584  }
4585  else {
4586   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_str, a_domreq, t_2 ) );
4587  }
4588 
4589  /* attr := VALUE_GLOBAL( str ); */
4590  t_2 = GF_VALUE__GLOBAL;
4591  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
4592   t_1 = CALL_1ARGS( t_2, l_str );
4593  }
4594  else {
4595   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( l_str ) );
4596  }
4597  CHECK_FUNC_RESULT( t_1 );
4598  ASS_LVAR( 4, t_1 );
4599 
4600  /* InstallMethod( attr, "default method", true, [ domreq ], 0, function ( D )
4601       return [  ];
4602   end ); */
4603  t_1 = GF_InstallMethod;
4604  t_2 = OBJ_LVAR( 4 );
4605  CHECK_BOUND( t_2, "attr" );
4606  t_3 = MakeString( "default method" );
4607  t_4 = True;
4608  t_5 = NEW_PLIST( T_PLIST, 1 );
4609  SET_LEN_PLIST( t_5, 1 );
4610  SET_ELM_PLIST( t_5, 1, a_domreq );
4611  CHANGED_BAG( t_5 );
4612  t_6 = NewFunction( NameFunc[13], 1, ArgStringToList("D"), HdlrFunc13 );
4613  SET_ENVI_FUNC( t_6, STATE(CurrLVars) );
4614  t_7 = NewFunctionBody();
4615  SET_STARTLINE_BODY(t_7, 912);
4616  SET_ENDLINE_BODY(t_7, 912);
4617  SET_FILENAME_BODY(t_7, FileName);
4618  SET_BODY_FUNC(t_6, t_7);
4619  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4620   CALL_6ARGS( t_1, t_2, t_3, t_4, t_5, INTOBJ_INT(0), t_6 );
4621  }
4622  else {
4623   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3, t_4, t_5, INTOBJ_INT(0), t_6 ) );
4624  }
4625 
4626  /* DeclareOperation( name, [ domreq, keyreq ] ); */
4627  t_1 = GF_DeclareOperation;
4628  t_2 = OBJ_LVAR( 1 );
4629  CHECK_BOUND( t_2, "name" );
4630  t_3 = NEW_PLIST( T_PLIST, 2 );
4631  SET_LEN_PLIST( t_3, 2 );
4632  SET_ELM_PLIST( t_3, 1, a_domreq );
4633  CHANGED_BAG( t_3 );
4634  SET_ELM_PLIST( t_3, 2, a_keyreq );
4635  CHANGED_BAG( t_3 );
4636  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4637   CALL_2ARGS( t_1, t_2, t_3 );
4638  }
4639  else {
4640   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
4641  }
4642 
4643  /* lk := WRITE_LOCK( OPERATIONS_REGION ); */
4644  t_2 = GF_WRITE__LOCK;
4645  t_3 = GC_OPERATIONS__REGION;
4646  CHECK_BOUND( t_3, "OPERATIONS_REGION" );
4647  if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
4648   t_1 = CALL_1ARGS( t_2, t_3 );
4649  }
4650  else {
4651   t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( t_3 ) );
4652  }
4653  CHECK_FUNC_RESULT( t_1 );
4654  l_lk = t_1;
4655 
4656  /* ADD_LIST( WRAPPER_OPERATIONS, VALUE_GLOBAL( name ) ); */
4657  t_1 = GF_ADD__LIST;
4658  t_2 = GC_WRAPPER__OPERATIONS;
4659  CHECK_BOUND( t_2, "WRAPPER_OPERATIONS" );
4660  t_4 = GF_VALUE__GLOBAL;
4661  t_5 = OBJ_LVAR( 1 );
4662  CHECK_BOUND( t_5, "name" );
4663  if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
4664   t_3 = CALL_1ARGS( t_4, t_5 );
4665  }
4666  else {
4667   t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( t_5 ) );
4668  }
4669  CHECK_FUNC_RESULT( t_3 );
4670  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4671   CALL_2ARGS( t_1, t_2, t_3 );
4672  }
4673  else {
4674   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
4675  }
4676 
4677  /* UNLOCK( lk ); */
4678  t_1 = GF_UNLOCK;
4679  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4680   CALL_1ARGS( t_1, l_lk );
4681  }
4682  else {
4683   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_lk ) );
4684  }
4685 
4686  /* InstallOtherMethod( VALUE_GLOBAL( name ), "default method", true, [ domreq, keyreq ], 0, function ( D, key )
4687       local known, i, erg;
4688       keytest( key );
4689       known := attr( D );
4690       i := PositionSortedOddPositions( known, key );
4691       if LEN_LIST( known ) < i or known[i] <> key then
4692           erg := oper( D, key );
4693           i := PositionSortedOddPositions( known, key );
4694           if LEN_LIST( known ) < i or known[i] <> key then
4695               known{[ i + 2 .. LEN_LIST( known ) + 2 ]} := known{[ i .. LEN_LIST( known ) ]};
4696               known[i] := IMMUTABLE_COPY_OBJ( key );
4697               known[i + 1] := IMMUTABLE_COPY_OBJ( erg );
4698           fi;
4699       fi;
4700       return known[i + 1];
4701   end ); */
4702  t_1 = GF_InstallOtherMethod;
4703  t_3 = GF_VALUE__GLOBAL;
4704  t_4 = OBJ_LVAR( 1 );
4705  CHECK_BOUND( t_4, "name" );
4706  if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
4707   t_2 = CALL_1ARGS( t_3, t_4 );
4708  }
4709  else {
4710   t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( t_4 ) );
4711  }
4712  CHECK_FUNC_RESULT( t_2 );
4713  t_3 = MakeString( "default method" );
4714  t_4 = True;
4715  t_5 = NEW_PLIST( T_PLIST, 2 );
4716  SET_LEN_PLIST( t_5, 2 );
4717  SET_ELM_PLIST( t_5, 1, a_domreq );
4718  CHANGED_BAG( t_5 );
4719  SET_ELM_PLIST( t_5, 2, a_keyreq );
4720  CHANGED_BAG( t_5 );
4721  t_6 = NewFunction( NameFunc[14], 2, ArgStringToList("D,key"), HdlrFunc14 );
4722  SET_ENVI_FUNC( t_6, STATE(CurrLVars) );
4723  t_7 = NewFunctionBody();
4724  SET_STARTLINE_BODY(t_7, 934);
4725  SET_ENDLINE_BODY(t_7, 957);
4726  SET_FILENAME_BODY(t_7, FileName);
4727  SET_BODY_FUNC(t_6, t_7);
4728  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4729   CALL_6ARGS( t_1, t_2, t_3, t_4, t_5, INTOBJ_INT(0), t_6 );
4730  }
4731  else {
4732   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3, t_4, t_5, INTOBJ_INT(0), t_6 ) );
4733  }
4734 
4735  /* str := "Has"; */
4736  t_1 = MakeString( "Has" );
4737  l_str = t_1;
4738 
4739  /* APPEND_LIST_INTR( str, name ); */
4740  t_1 = GF_APPEND__LIST__INTR;
4741  t_2 = OBJ_LVAR( 1 );
4742  CHECK_BOUND( t_2, "name" );
4743  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4744   CALL_2ARGS( t_1, l_str, t_2 );
4745  }
4746  else {
4747   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_str, t_2 ) );
4748  }
4749 
4750  /* DeclareOperation( str, [ domreq, keyreq ] ); */
4751  t_1 = GF_DeclareOperation;
4752  t_2 = NEW_PLIST( T_PLIST, 2 );
4753  SET_LEN_PLIST( t_2, 2 );
4754  SET_ELM_PLIST( t_2, 1, a_domreq );
4755  CHANGED_BAG( t_2 );
4756  SET_ELM_PLIST( t_2, 2, a_keyreq );
4757  CHANGED_BAG( t_2 );
4758  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4759   CALL_2ARGS( t_1, l_str, t_2 );
4760  }
4761  else {
4762   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_str, t_2 ) );
4763  }
4764 
4765  /* InstallOtherMethod( VALUE_GLOBAL( str ), "default method", true, [ domreq, keyreq ], 0, function ( D, key )
4766       local known, i;
4767       keytest( key );
4768       known := attr( D );
4769       i := PositionSortedOddPositions( known, key );
4770       return i <= LEN_LIST( known ) and known[i] = key;
4771   end ); */
4772  t_1 = GF_InstallOtherMethod;
4773  t_3 = GF_VALUE__GLOBAL;
4774  if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
4775   t_2 = CALL_1ARGS( t_3, l_str );
4776  }
4777  else {
4778   t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( l_str ) );
4779  }
4780  CHECK_FUNC_RESULT( t_2 );
4781  t_3 = MakeString( "default method" );
4782  t_4 = True;
4783  t_5 = NEW_PLIST( T_PLIST, 2 );
4784  SET_LEN_PLIST( t_5, 2 );
4785  SET_ELM_PLIST( t_5, 1, a_domreq );
4786  CHANGED_BAG( t_5 );
4787  SET_ELM_PLIST( t_5, 2, a_keyreq );
4788  CHANGED_BAG( t_5 );
4789  t_6 = NewFunction( NameFunc[15], 2, ArgStringToList("D,key"), HdlrFunc15 );
4790  SET_ENVI_FUNC( t_6, STATE(CurrLVars) );
4791  t_7 = NewFunctionBody();
4792  SET_STARTLINE_BODY(t_7, 967);
4793  SET_ENDLINE_BODY(t_7, 975);
4794  SET_FILENAME_BODY(t_7, FileName);
4795  SET_BODY_FUNC(t_6, t_7);
4796  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4797   CALL_6ARGS( t_1, t_2, t_3, t_4, t_5, INTOBJ_INT(0), t_6 );
4798  }
4799  else {
4800   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3, t_4, t_5, INTOBJ_INT(0), t_6 ) );
4801  }
4802 
4803  /* str := "Set"; */
4804  t_1 = MakeString( "Set" );
4805  l_str = t_1;
4806 
4807  /* APPEND_LIST_INTR( str, name ); */
4808  t_1 = GF_APPEND__LIST__INTR;
4809  t_2 = OBJ_LVAR( 1 );
4810  CHECK_BOUND( t_2, "name" );
4811  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4812   CALL_2ARGS( t_1, l_str, t_2 );
4813  }
4814  else {
4815   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_str, t_2 ) );
4816  }
4817 
4818  /* DeclareOperation( str, [ domreq, keyreq, IS_OBJECT ] ); */
4819  t_1 = GF_DeclareOperation;
4820  t_2 = NEW_PLIST( T_PLIST, 3 );
4821  SET_LEN_PLIST( t_2, 3 );
4822  SET_ELM_PLIST( t_2, 1, a_domreq );
4823  CHANGED_BAG( t_2 );
4824  SET_ELM_PLIST( t_2, 2, a_keyreq );
4825  CHANGED_BAG( t_2 );
4826  t_3 = GC_IS__OBJECT;
4827  CHECK_BOUND( t_3, "IS_OBJECT" );
4828  SET_ELM_PLIST( t_2, 3, t_3 );
4829  CHANGED_BAG( t_2 );
4830  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4831   CALL_2ARGS( t_1, l_str, t_2 );
4832  }
4833  else {
4834   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( l_str, t_2 ) );
4835  }
4836 
4837  /* InstallOtherMethod( VALUE_GLOBAL( str ), "default method", true, [ domreq, keyreq, IS_OBJECT ], 0, function ( D, key, obj )
4838       local known, i;
4839       keytest( key );
4840       known := attr( D );
4841       i := PositionSortedOddPositions( known, key );
4842       if LEN_LIST( known ) < i or known[i] <> key then
4843           known{[ i + 2 .. LEN_LIST( known ) + 2 ]} := known{[ i .. LEN_LIST( known ) ]};
4844           known[i] := IMMUTABLE_COPY_OBJ( key );
4845           known[i + 1] := IMMUTABLE_COPY_OBJ( obj );
4846       fi;
4847       return;
4848   end ); */
4849  t_1 = GF_InstallOtherMethod;
4850  t_3 = GF_VALUE__GLOBAL;
4851  if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
4852   t_2 = CALL_1ARGS( t_3, l_str );
4853  }
4854  else {
4855   t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( l_str ) );
4856  }
4857  CHECK_FUNC_RESULT( t_2 );
4858  t_3 = MakeString( "default method" );
4859  t_4 = True;
4860  t_5 = NEW_PLIST( T_PLIST, 3 );
4861  SET_LEN_PLIST( t_5, 3 );
4862  SET_ELM_PLIST( t_5, 1, a_domreq );
4863  CHANGED_BAG( t_5 );
4864  SET_ELM_PLIST( t_5, 2, a_keyreq );
4865  CHANGED_BAG( t_5 );
4866  t_6 = GC_IS__OBJECT;
4867  CHECK_BOUND( t_6, "IS_OBJECT" );
4868  SET_ELM_PLIST( t_5, 3, t_6 );
4869  CHANGED_BAG( t_5 );
4870  t_6 = NewFunction( NameFunc[16], 3, ArgStringToList("D,key,obj"), HdlrFunc16 );
4871  SET_ENVI_FUNC( t_6, STATE(CurrLVars) );
4872  t_7 = NewFunctionBody();
4873  SET_STARTLINE_BODY(t_7, 984);
4874  SET_ENDLINE_BODY(t_7, 997);
4875  SET_FILENAME_BODY(t_7, FileName);
4876  SET_BODY_FUNC(t_6, t_7);
4877  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
4878   CALL_6ARGS( t_1, t_2, t_3, t_4, t_5, INTOBJ_INT(0), t_6 );
4879  }
4880  else {
4881   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3, t_4, t_5, INTOBJ_INT(0), t_6 ) );
4882  }
4883 
4884  /* return; */
4885  SWITCH_TO_OLD_FRAME(oldFrame);
4886  return 0;
4887 
4888  /* return; */
4889  SWITCH_TO_OLD_FRAME(oldFrame);
4890  return 0;
4891 }
4892 
4893 /* handler for function 18 */
HdlrFunc18(Obj self,Obj a_arg)4894 static Obj  HdlrFunc18 (
4895  Obj  self,
4896  Obj  a_arg )
4897 {
4898  Obj t_1 = 0;
4899  Obj t_2 = 0;
4900  Obj t_3 = 0;
4901  Obj t_4 = 0;
4902  Obj t_5 = 0;
4903  Obj t_6 = 0;
4904  Obj t_7 = 0;
4905  Obj t_8 = 0;
4906  Obj t_9 = 0;
4907  Obj t_10 = 0;
4908  Obj t_11 = 0;
4909  Obj t_12 = 0;
4910  Obj t_13 = 0;
4911  Obj t_14 = 0;
4912  Obj t_15 = 0;
4913  Obj t_16 = 0;
4914  Obj t_17 = 0;
4915  Obj t_18 = 0;
4916  Bag oldFrame;
4917 
4918  /* allocate new stack frame */
4919  SWITCH_TO_NEW_FRAME(self,0,0,oldFrame);
4920 
4921  /* re := false; */
4922  t_1 = False;
4923  ASS_HVAR( (1 << 16) | 4, t_1 );
4924 
4925  /* for i in [ 1 .. LEN_LIST( reqs ) ] do */
4926  t_6 = GF_LEN__LIST;
4927  t_7 = OBJ_HVAR( (1 << 16) | 2 );
4928  CHECK_BOUND( t_7, "reqs" );
4929  if ( TNUM_OBJ( t_6 ) == T_FUNCTION ) {
4930   t_5 = CALL_1ARGS( t_6, t_7 );
4931  }
4932  else {
4933   t_5 = DoOperation2Args( CallFuncListOper, t_6, NewPlistFromArgs( t_7 ) );
4934  }
4935  CHECK_FUNC_RESULT( t_5 );
4936  t_4 = Range2Check( INTOBJ_INT(1), t_5 );
4937  if ( IS_SMALL_LIST(t_4) ) {
4938   t_3 = (Obj)(UInt)1;
4939   t_1 = INTOBJ_INT(1);
4940  }
4941  else {
4942   t_3 = (Obj)(UInt)0;
4943   t_1 = CALL_1ARGS( GF_ITERATOR, t_4 );
4944  }
4945  while ( 1 ) {
4946   if ( t_3 ) {
4947    if ( LEN_LIST(t_4) < INT_INTOBJ(t_1) )  break;
4948    t_2 = ELMV0_LIST( t_4, INT_INTOBJ(t_1) );
4949    t_1 = (Obj)(((UInt)t_1)+4);
4950    if ( t_2 == 0 )  continue;
4951   }
4952   else {
4953    if ( CALL_1ARGS( GF_IS_DONE_ITER, t_1 ) != False )  break;
4954    t_2 = CALL_1ARGS( GF_NEXT_ITER, t_1 );
4955   }
4956   ASS_HVAR( (1 << 16) | 5, t_2 );
4957 
4958   /* re := re or IsBound( cond[i] ) and not Tester( cond[i] )( arg[i] ) and cond[i]( arg[i] ) and Tester( cond[i] )( arg[i] ); */
4959   t_7 = OBJ_HVAR( (1 << 16) | 4 );
4960   CHECK_BOUND( t_7, "re" );
4961   CHECK_BOOL( t_7 );
4962   t_6 = (Obj)(UInt)(t_7 != False);
4963   t_5 = (t_6 ? True : False);
4964   if ( t_5 == False ) {
4965    t_12 = OBJ_HVAR( (1 << 16) | 3 );
4966    CHECK_BOUND( t_12, "cond" );
4967    t_13 = OBJ_HVAR( (1 << 16) | 5 );
4968    CHECK_BOUND( t_13, "i" );
4969    CHECK_INT_POS( t_13 );
4970    t_11 = C_ISB_LIST( t_12, t_13 );
4971    t_10 = (Obj)(UInt)(t_11 != False);
4972    t_9 = t_10;
4973    if ( t_9 ) {
4974     t_15 = GF_Tester;
4975     t_17 = OBJ_HVAR( (1 << 16) | 3 );
4976     CHECK_BOUND( t_17, "cond" );
4977     t_18 = OBJ_HVAR( (1 << 16) | 5 );
4978     CHECK_BOUND( t_18, "i" );
4979     CHECK_INT_POS( t_18 );
4980     C_ELM_LIST_FPL( t_16, t_17, t_18 )
4981     if ( TNUM_OBJ( t_15 ) == T_FUNCTION ) {
4982      t_14 = CALL_1ARGS( t_15, t_16 );
4983     }
4984     else {
4985      t_14 = DoOperation2Args( CallFuncListOper, t_15, NewPlistFromArgs( t_16 ) );
4986     }
4987     CHECK_FUNC_RESULT( t_14 );
4988     t_16 = OBJ_HVAR( (1 << 16) | 5 );
4989     CHECK_BOUND( t_16, "i" );
4990     CHECK_INT_POS( t_16 );
4991     C_ELM_LIST_FPL( t_15, a_arg, t_16 )
4992     if ( TNUM_OBJ( t_14 ) == T_FUNCTION ) {
4993      t_13 = CALL_1ARGS( t_14, t_15 );
4994     }
4995     else {
4996      t_13 = DoOperation2Args( CallFuncListOper, t_14, NewPlistFromArgs( t_15 ) );
4997     }
4998     CHECK_FUNC_RESULT( t_13 );
4999     CHECK_BOOL( t_13 );
5000     t_12 = (Obj)(UInt)(t_13 != False);
5001     t_11 = (Obj)(UInt)( ! ((Int)t_12) );
5002     t_9 = t_11;
5003    }
5004    t_8 = t_9;
5005    if ( t_8 ) {
5006     t_13 = OBJ_HVAR( (1 << 16) | 3 );
5007     CHECK_BOUND( t_13, "cond" );
5008     t_14 = OBJ_HVAR( (1 << 16) | 5 );
5009     CHECK_BOUND( t_14, "i" );
5010     CHECK_INT_POS( t_14 );
5011     C_ELM_LIST_FPL( t_12, t_13, t_14 )
5012     t_14 = OBJ_HVAR( (1 << 16) | 5 );
5013     CHECK_BOUND( t_14, "i" );
5014     CHECK_INT_POS( t_14 );
5015     C_ELM_LIST_FPL( t_13, a_arg, t_14 )
5016     if ( TNUM_OBJ( t_12 ) == T_FUNCTION ) {
5017      t_11 = CALL_1ARGS( t_12, t_13 );
5018     }
5019     else {
5020      t_11 = DoOperation2Args( CallFuncListOper, t_12, NewPlistFromArgs( t_13 ) );
5021     }
5022     CHECK_FUNC_RESULT( t_11 );
5023     CHECK_BOOL( t_11 );
5024     t_10 = (Obj)(UInt)(t_11 != False);
5025     t_8 = t_10;
5026    }
5027    t_7 = t_8;
5028    if ( t_7 ) {
5029     t_12 = GF_Tester;
5030     t_14 = OBJ_HVAR( (1 << 16) | 3 );
5031     CHECK_BOUND( t_14, "cond" );
5032     t_15 = OBJ_HVAR( (1 << 16) | 5 );
5033     CHECK_BOUND( t_15, "i" );
5034     CHECK_INT_POS( t_15 );
5035     C_ELM_LIST_FPL( t_13, t_14, t_15 )
5036     if ( TNUM_OBJ( t_12 ) == T_FUNCTION ) {
5037      t_11 = CALL_1ARGS( t_12, t_13 );
5038     }
5039     else {
5040      t_11 = DoOperation2Args( CallFuncListOper, t_12, NewPlistFromArgs( t_13 ) );
5041     }
5042     CHECK_FUNC_RESULT( t_11 );
5043     t_13 = OBJ_HVAR( (1 << 16) | 5 );
5044     CHECK_BOUND( t_13, "i" );
5045     CHECK_INT_POS( t_13 );
5046     C_ELM_LIST_FPL( t_12, a_arg, t_13 )
5047     if ( TNUM_OBJ( t_11 ) == T_FUNCTION ) {
5048      t_10 = CALL_1ARGS( t_11, t_12 );
5049     }
5050     else {
5051      t_10 = DoOperation2Args( CallFuncListOper, t_11, NewPlistFromArgs( t_12 ) );
5052     }
5053     CHECK_FUNC_RESULT( t_10 );
5054     CHECK_BOOL( t_10 );
5055     t_9 = (Obj)(UInt)(t_10 != False);
5056     t_7 = t_9;
5057    }
5058    t_5 = (t_7 ? True : False);
5059   }
5060   ASS_HVAR( (1 << 16) | 4, t_5 );
5061 
5062  }
5063  /* od */
5064 
5065  /* if re then */
5066  t_2 = OBJ_HVAR( (1 << 16) | 4 );
5067  CHECK_BOUND( t_2, "re" );
5068  CHECK_BOOL( t_2 );
5069  t_1 = (Obj)(UInt)(t_2 != False);
5070  if ( t_1 ) {
5071 
5072   /* return CallFuncList( oper, arg ); */
5073   t_2 = GF_CallFuncList;
5074   t_3 = OBJ_HVAR( (1 << 16) | 1 );
5075   CHECK_BOUND( t_3, "oper" );
5076   if ( TNUM_OBJ( t_2 ) == T_FUNCTION ) {
5077    t_1 = CALL_2ARGS( t_2, t_3, a_arg );
5078   }
5079   else {
5080    t_1 = DoOperation2Args( CallFuncListOper, t_2, NewPlistFromArgs( t_3, a_arg ) );
5081   }
5082   CHECK_FUNC_RESULT( t_1 );
5083   SWITCH_TO_OLD_FRAME(oldFrame);
5084   return t_1;
5085 
5086  }
5087 
5088  /* else */
5089  else {
5090 
5091   /* TryNextMethod(); */
5092   t_1 = GC_TRY__NEXT__METHOD;
5093   CHECK_BOUND( t_1, "TRY_NEXT_METHOD" );
5094   SWITCH_TO_OLD_FRAME(oldFrame);
5095   return t_1;
5096 
5097  }
5098  /* fi */
5099 
5100  /* return; */
5101  SWITCH_TO_OLD_FRAME(oldFrame);
5102  return 0;
5103 
5104  /* return; */
5105  SWITCH_TO_OLD_FRAME(oldFrame);
5106  return 0;
5107 }
5108 
5109 /* handler for function 17 */
HdlrFunc17(Obj self,Obj a_arg)5110 static Obj  HdlrFunc17 (
5111  Obj  self,
5112  Obj  a_arg )
5113 {
5114  Obj l_info = 0;
5115  Obj l_fampred = 0;
5116  Obj l_val = 0;
5117  Obj t_1 = 0;
5118  Obj t_2 = 0;
5119  Obj t_3 = 0;
5120  Obj t_4 = 0;
5121  Obj t_5 = 0;
5122  Obj t_6 = 0;
5123  Obj t_7 = 0;
5124  Obj t_8 = 0;
5125  (void)l_info;
5126  (void)l_fampred;
5127  (void)l_val;
5128  Bag oldFrame;
5129 
5130  /* allocate new stack frame */
5131  SWITCH_TO_NEW_FRAME(self,5,0,oldFrame);
5132  MakeHighVars(STATE(CurrLVars));
5133 
5134  /* if LEN_LIST( arg ) = 5 then */
5135  t_3 = GF_LEN__LIST;
5136  if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
5137   t_2 = CALL_1ARGS( t_3, a_arg );
5138  }
5139  else {
5140   t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( a_arg ) );
5141  }
5142  CHECK_FUNC_RESULT( t_2 );
5143  t_1 = (Obj)(UInt)(EQ( t_2, INTOBJ_INT(5) ));
5144  if ( t_1 ) {
5145 
5146   /* oper := arg[1]; */
5147   C_ELM_LIST_FPL( t_1, a_arg, INTOBJ_INT(1) )
5148   ASS_LVAR( 1, t_1 );
5149 
5150   /* info := " fallback method to test conditions"; */
5151   t_1 = MakeString( " fallback method to test conditions" );
5152   l_info = t_1;
5153 
5154   /* fampred := arg[2]; */
5155   C_ELM_LIST_FPL( t_1, a_arg, INTOBJ_INT(2) )
5156   l_fampred = t_1;
5157 
5158   /* reqs := arg[3]; */
5159   C_ELM_LIST_FPL( t_1, a_arg, INTOBJ_INT(3) )
5160   ASS_LVAR( 2, t_1 );
5161 
5162   /* cond := arg[4]; */
5163   C_ELM_LIST_FPL( t_1, a_arg, INTOBJ_INT(4) )
5164   ASS_LVAR( 3, t_1 );
5165 
5166   /* val := arg[5]; */
5167   C_ELM_LIST_FPL( t_1, a_arg, INTOBJ_INT(5) )
5168   l_val = t_1;
5169 
5170  }
5171 
5172  /* elif LEN_LIST( arg ) = 6 then */
5173  else {
5174   t_3 = GF_LEN__LIST;
5175   if ( TNUM_OBJ( t_3 ) == T_FUNCTION ) {
5176    t_2 = CALL_1ARGS( t_3, a_arg );
5177   }
5178   else {
5179    t_2 = DoOperation2Args( CallFuncListOper, t_3, NewPlistFromArgs( a_arg ) );
5180   }
5181   CHECK_FUNC_RESULT( t_2 );
5182   t_1 = (Obj)(UInt)(EQ( t_2, INTOBJ_INT(6) ));
5183   if ( t_1 ) {
5184 
5185    /* oper := arg[1]; */
5186    C_ELM_LIST_FPL( t_1, a_arg, INTOBJ_INT(1) )
5187    ASS_LVAR( 1, t_1 );
5188 
5189    /* info := arg[2]; */
5190    C_ELM_LIST_FPL( t_1, a_arg, INTOBJ_INT(2) )
5191    l_info = t_1;
5192 
5193    /* fampred := arg[3]; */
5194    C_ELM_LIST_FPL( t_1, a_arg, INTOBJ_INT(3) )
5195    l_fampred = t_1;
5196 
5197    /* reqs := arg[4]; */
5198    C_ELM_LIST_FPL( t_1, a_arg, INTOBJ_INT(4) )
5199    ASS_LVAR( 2, t_1 );
5200 
5201    /* cond := arg[5]; */
5202    C_ELM_LIST_FPL( t_1, a_arg, INTOBJ_INT(5) )
5203    ASS_LVAR( 3, t_1 );
5204 
5205    /* val := arg[6]; */
5206    C_ELM_LIST_FPL( t_1, a_arg, INTOBJ_INT(6) )
5207    l_val = t_1;
5208 
5209   }
5210 
5211   /* else */
5212   else {
5213 
5214    /* Error( "Usage: RedispatchOnCondition(oper[,info],fampred,reqs,cond,val)" ); */
5215    t_1 = GF_Error;
5216    t_2 = MakeString( "Usage: RedispatchOnCondition(oper[,info],fampred,reqs,cond,val)" );
5217    if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
5218     CALL_1ARGS( t_1, t_2 );
5219    }
5220    else {
5221     DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2 ) );
5222    }
5223 
5224   }
5225  }
5226  /* fi */
5227 
5228  /* for i in reqs do */
5229  t_4 = OBJ_LVAR( 2 );
5230  CHECK_BOUND( t_4, "reqs" );
5231  if ( IS_SMALL_LIST(t_4) ) {
5232   t_3 = (Obj)(UInt)1;
5233   t_1 = INTOBJ_INT(1);
5234  }
5235  else {
5236   t_3 = (Obj)(UInt)0;
5237   t_1 = CALL_1ARGS( GF_ITERATOR, t_4 );
5238  }
5239  while ( 1 ) {
5240   if ( t_3 ) {
5241    if ( LEN_LIST(t_4) < INT_INTOBJ(t_1) )  break;
5242    t_2 = ELMV0_LIST( t_4, INT_INTOBJ(t_1) );
5243    t_1 = (Obj)(((UInt)t_1)+4);
5244    if ( t_2 == 0 )  continue;
5245   }
5246   else {
5247    if ( CALL_1ARGS( GF_IS_DONE_ITER, t_1 ) != False )  break;
5248    t_2 = CALL_1ARGS( GF_NEXT_ITER, t_1 );
5249   }
5250   ASS_LVAR( 5, t_2 );
5251 
5252   /* val := val - RankFilter( i ); */
5253   CHECK_BOUND( l_val, "val" );
5254   t_7 = GF_RankFilter;
5255   t_8 = OBJ_LVAR( 5 );
5256   CHECK_BOUND( t_8, "i" );
5257   if ( TNUM_OBJ( t_7 ) == T_FUNCTION ) {
5258    t_6 = CALL_1ARGS( t_7, t_8 );
5259   }
5260   else {
5261    t_6 = DoOperation2Args( CallFuncListOper, t_7, NewPlistFromArgs( t_8 ) );
5262   }
5263   CHECK_FUNC_RESULT( t_6 );
5264   C_DIFF_FIA( t_5, l_val, t_6 )
5265   l_val = t_5;
5266 
5267  }
5268  /* od */
5269 
5270  /* InstallOtherMethod( oper, info, fampred, reqs, val, function ( arg... )
5271       re := false;
5272       for i in [ 1 .. LEN_LIST( reqs ) ] do
5273           re := re or IsBound( cond[i] ) and not Tester( cond[i] )( arg[i] ) and cond[i]( arg[i] ) and Tester( cond[i] )( arg[i] );
5274       od;
5275       if re then
5276           return CallFuncList( oper, arg );
5277       else
5278           TryNextMethod();
5279       fi;
5280       return;
5281   end ); */
5282  t_1 = GF_InstallOtherMethod;
5283  t_2 = OBJ_LVAR( 1 );
5284  CHECK_BOUND( t_2, "oper" );
5285  CHECK_BOUND( l_info, "info" );
5286  CHECK_BOUND( l_fampred, "fampred" );
5287  t_3 = OBJ_LVAR( 2 );
5288  CHECK_BOUND( t_3, "reqs" );
5289  t_4 = NewFunction( NameFunc[18], -1, ArgStringToList("arg"), HdlrFunc18 );
5290  SET_ENVI_FUNC( t_4, STATE(CurrLVars) );
5291  t_5 = NewFunctionBody();
5292  SET_STARTLINE_BODY(t_5, 1063);
5293  SET_ENDLINE_BODY(t_5, 1079);
5294  SET_FILENAME_BODY(t_5, FileName);
5295  SET_BODY_FUNC(t_4, t_5);
5296  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
5297   CALL_6ARGS( t_1, t_2, l_info, l_fampred, t_3, l_val, t_4 );
5298  }
5299  else {
5300   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, l_info, l_fampred, t_3, l_val, t_4 ) );
5301  }
5302 
5303  /* return; */
5304  SWITCH_TO_OLD_FRAME(oldFrame);
5305  return 0;
5306 
5307  /* return; */
5308  SWITCH_TO_OLD_FRAME(oldFrame);
5309  return 0;
5310 }
5311 
5312 /* handler for function 1 */
HdlrFunc1(Obj self)5313 static Obj  HdlrFunc1 (
5314  Obj  self )
5315 {
5316  Obj t_1 = 0;
5317  Obj t_2 = 0;
5318  Obj t_3 = 0;
5319  Obj t_4 = 0;
5320  Obj t_5 = 0;
5321  Obj t_6 = 0;
5322  Bag oldFrame;
5323 
5324  /* allocate new stack frame */
5325  SWITCH_TO_NEW_FRAME(self,0,0,oldFrame);
5326 
5327  /* RUN_IMMEDIATE_METHODS_RUNS := 0; */
5328  AssGVar( G_RUN__IMMEDIATE__METHODS__RUNS, INTOBJ_INT(0) );
5329 
5330  /* RUN_IMMEDIATE_METHODS_CHECKS := 0; */
5331  AssGVar( G_RUN__IMMEDIATE__METHODS__CHECKS, INTOBJ_INT(0) );
5332 
5333  /* RUN_IMMEDIATE_METHODS_HITS := 0; */
5334  AssGVar( G_RUN__IMMEDIATE__METHODS__HITS, INTOBJ_INT(0) );
5335 
5336  /* BIND_GLOBAL( "RunImmediateMethods", function ( obj, flags )
5337       local flagspos, tried, type, j, imm, i, meth, res, loc, newflags;
5338       if IGNORE_IMMEDIATE_METHODS then
5339           return;
5340       fi;
5341       if IS_SUBSET_FLAGS( IMM_FLAGS, flags ) then
5342           return;
5343       fi;
5344       flags := SUB_FLAGS( flags, IMM_FLAGS );
5345       flagspos := SHALLOW_COPY_OBJ( TRUES_FLAGS( flags ) );
5346       tried := [  ];
5347       type := TYPE_OBJ( obj );
5348       flags := type![2];
5349       RUN_IMMEDIATE_METHODS_RUNS := RUN_IMMEDIATE_METHODS_RUNS + 1;
5350       if TRACE_IMMEDIATE_METHODS then
5351           Print( "#I RunImmediateMethods\n" );
5352       fi;
5353       for j in flagspos do
5354           if IsBound( IMMEDIATES[j] ) then
5355               imm := IMMEDIATES[j];
5356               for i in [ 0, SIZE_IMMEDIATE_METHOD_ENTRY .. LEN_LIST( imm ) - SIZE_IMMEDIATE_METHOD_ENTRY ] do
5357                   if IS_SUBSET_FLAGS( flags, imm[i + 4] ) and not IS_SUBSET_FLAGS( flags, imm[i + 3] ) and not imm[i + 6] in tried then
5358                       meth := IMMEDIATE_METHODS[imm[i + 6]];
5359                       res := meth( obj );
5360                       ADD_LIST( tried, imm[i + 6] );
5361                       RUN_IMMEDIATE_METHODS_CHECKS := RUN_IMMEDIATE_METHODS_CHECKS + 1;
5362                       if TRACE_IMMEDIATE_METHODS then
5363                           Print( "#I  immediate: ", NAME_FUNC( imm[i + 1] ) );
5364                           if imm[i + 7] <> false then
5365                               Print( ": ", imm[i + 7] );
5366                           fi;
5367                           Print( " at ", imm[i + 8][1], ":", imm[i + 8][2], "\n" );
5368                       fi;
5369                       if res <> TRY_NEXT_METHOD then
5370                           IGNORE_IMMEDIATE_METHODS := true;
5371                           imm[i + 2]( obj, res );
5372                           IGNORE_IMMEDIATE_METHODS := false;
5373                           RUN_IMMEDIATE_METHODS_HITS := RUN_IMMEDIATE_METHODS_HITS + 1;
5374                           if not IS_IDENTICAL_OBJ( TYPE_OBJ( obj ), type ) then
5375                               type := TYPE_OBJ( obj );
5376                               newflags := SUB_FLAGS( type![2], IMM_FLAGS );
5377                               newflags := SUB_FLAGS( newflags, flags );
5378                               APPEND_LIST_INTR( flagspos, TRUES_FLAGS( newflags ) );
5379                               flags := type![2];
5380                           fi;
5381                       fi;
5382                   fi;
5383               od;
5384           fi;
5385       od;
5386       return;
5387   end ); */
5388  t_1 = GF_BIND__GLOBAL;
5389  t_2 = MakeString( "RunImmediateMethods" );
5390  t_3 = NewFunction( NameFunc[2], 2, ArgStringToList("obj,flags"), HdlrFunc2 );
5391  SET_ENVI_FUNC( t_3, STATE(CurrLVars) );
5392  t_4 = NewFunctionBody();
5393  SET_STARTLINE_BODY(t_4, 28);
5394  SET_ENDLINE_BODY(t_4, 127);
5395  SET_FILENAME_BODY(t_4, FileName);
5396  SET_BODY_FUNC(t_3, t_4);
5397  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
5398   CALL_2ARGS( t_1, t_2, t_3 );
5399  }
5400  else {
5401   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
5402  }
5403 
5404  /* BIND_GLOBAL( "METHODS_OPERATION_REGION", NewSpecialRegion( "operation methods" ) ); */
5405  t_1 = GF_BIND__GLOBAL;
5406  t_2 = MakeString( "METHODS_OPERATION_REGION" );
5407  t_4 = GF_NewSpecialRegion;
5408  t_5 = MakeString( "operation methods" );
5409  if ( TNUM_OBJ( t_4 ) == T_FUNCTION ) {
5410   t_3 = CALL_1ARGS( t_4, t_5 );
5411  }
5412  else {
5413   t_3 = DoOperation2Args( CallFuncListOper, t_4, NewPlistFromArgs( t_5 ) );
5414  }
5415  CHECK_FUNC_RESULT( t_3 );
5416  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
5417   CALL_2ARGS( t_1, t_2, t_3 );
5418  }
5419  else {
5420   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
5421  }
5422 
5423  /* BIND_GLOBAL( "INSTALL_METHOD_FLAGS", function ( opr, info, rel, flags, baserank, method )
5424       local methods, narg, i, k, tmp, replace, match, j, lk, rank;
5425       lk := WRITE_LOCK( METHODS_OPERATION_REGION );
5426       if IS_FUNCTION( baserank ) then
5427           rank := baserank(  );
5428       else
5429           rank := baserank;
5430       fi;
5431       if IS_CONSTRUCTOR( opr ) then
5432           if 0 = LEN_LIST( flags ) then
5433               Error( NAME_FUNC( opr ), ": constructors must have at least one argument" );
5434           fi;
5435           rank := rank - RankFilter( flags[1] );
5436       else
5437           for i in flags do
5438               rank := rank + RankFilter( i );
5439           od;
5440       fi;
5441       narg := LEN_LIST( flags );
5442       methods := METHODS_OPERATION( opr, narg );
5443       methods := methods{[ 1 .. LEN_LIST( methods ) ]};
5444       if info = false then
5445           info := NAME_FUNC( opr );
5446       else
5447           k := SHALLOW_COPY_OBJ( NAME_FUNC( opr ) );
5448           APPEND_LIST_INTR( k, ": " );
5449           APPEND_LIST_INTR( k, info );
5450           info := k;
5451           CONV_STRING( info );
5452       fi;
5453       i := 0;
5454       while i < LEN_LIST( methods ) and rank < methods[i + (narg + 3)] do
5455           i := i + (narg + 6);
5456       od;
5457       replace := false;
5458       if REREADING then
5459           k := i;
5460           while k < LEN_LIST( methods ) and rank = methods[k + narg + 3] do
5461               if info = methods[k + narg + 4] then
5462                   match := true;
5463                   for j in [ 1 .. narg ] do
5464                       match := match and methods[k + j + 1] = flags[j];
5465                   od;
5466                   if match then
5467                       replace := true;
5468                       i := k;
5469                       break;
5470                   fi;
5471               fi;
5472               k := k + narg + 6;
5473           od;
5474       fi;
5475       if not REREADING or not replace then
5476           COPY_LIST_ENTRIES( methods, i + 1, 1, methods, narg + 6 + i + 1, 1, LEN_LIST( methods ) - i );
5477       fi;
5478       if rel = true then
5479           rel := RETURN_TRUE;
5480       elif rel = false then
5481           rel := RETURN_FALSE;
5482       elif IS_FUNCTION( rel ) then
5483           if CHECK_INSTALL_METHOD then
5484               tmp := NARG_FUNC( rel );
5485               if tmp < AINV( narg ) - 1 or tmp >= 0 and tmp <> narg then
5486                   Error( NAME_FUNC( opr ), ": <famrel> must accept ", narg, " arguments" );
5487               fi;
5488           fi;
5489       else
5490           Error( NAME_FUNC( opr ), ": <famrel> must be a function, `true', or `false'" );
5491       fi;
5492       if method = true then
5493           method := RETURN_TRUE;
5494       elif method = false then
5495           method := RETURN_FALSE;
5496       elif IS_FUNCTION( method ) then
5497           if CHECK_INSTALL_METHOD and not IS_OPERATION( method ) then
5498               tmp := NARG_FUNC( method );
5499               if tmp < AINV( narg ) - 1 or tmp >= 0 and tmp <> narg then
5500                   Error( NAME_FUNC( opr ), ": <method> must accept ", narg, " arguments" );
5501               fi;
5502           fi;
5503       else
5504           Error( NAME_FUNC( opr ), ": <method> must be a function, `true', or `false'" );
5505       fi;
5506       methods[i + 1] := rel;
5507       for k in [ 1 .. narg ] do
5508           methods[i + k + 1] := flags[k];
5509       od;
5510       methods[i + (narg + 2)] := method;
5511       methods[i + (narg + 3)] := rank;
5512       methods[i + (narg + 4)] := IMMUTABLE_COPY_OBJ( info );
5513       if 6 >= 5 then
5514           methods[i + (narg + 5)] := MakeImmutable( [ INPUT_FILENAME(  ), READEVALCOMMAND_LINENUMBER, INPUT_LINENUMBER(  ) ] );
5515       fi;
5516       if 6 >= 6 then
5517           methods[i + (narg + 6)] := baserank;
5518       fi;
5519       SET_METHODS_OPERATION( opr, narg, MakeReadOnlySingleObj( methods ) );
5520       UNLOCK( lk );
5521       return;
5522   end ); */
5523  t_1 = GF_BIND__GLOBAL;
5524  t_2 = MakeString( "INSTALL_METHOD_FLAGS" );
5525  t_3 = NewFunction( NameFunc[3], 6, ArgStringToList("opr,info,rel,flags,baserank,method"), HdlrFunc3 );
5526  SET_ENVI_FUNC( t_3, STATE(CurrLVars) );
5527  t_4 = NewFunctionBody();
5528  SET_STARTLINE_BODY(t_4, 147);
5529  SET_ENDLINE_BODY(t_4, 289);
5530  SET_FILENAME_BODY(t_4, FileName);
5531  SET_BODY_FUNC(t_3, t_4);
5532  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
5533   CALL_2ARGS( t_1, t_2, t_3 );
5534  }
5535  else {
5536   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
5537  }
5538 
5539  /* BIND_GLOBAL( "InstallMethod", function ( arg... )
5540       INSTALL_METHOD( arg, true );
5541       return;
5542   end ); */
5543  t_1 = GF_BIND__GLOBAL;
5544  t_2 = MakeString( "InstallMethod" );
5545  t_3 = NewFunction( NameFunc[4], -1, ArgStringToList("arg"), HdlrFunc4 );
5546  SET_ENVI_FUNC( t_3, STATE(CurrLVars) );
5547  t_4 = NewFunctionBody();
5548  SET_STARTLINE_BODY(t_4, 338);
5549  SET_ENDLINE_BODY(t_4, 340);
5550  SET_FILENAME_BODY(t_4, FileName);
5551  SET_BODY_FUNC(t_3, t_4);
5552  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
5553   CALL_2ARGS( t_1, t_2, t_3 );
5554  }
5555  else {
5556   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
5557  }
5558 
5559  /* BIND_GLOBAL( "InstallOtherMethod", function ( arg... )
5560       INSTALL_METHOD( arg, false );
5561       return;
5562   end ); */
5563  t_1 = GF_BIND__GLOBAL;
5564  t_2 = MakeString( "InstallOtherMethod" );
5565  t_3 = NewFunction( NameFunc[5], -1, ArgStringToList("arg"), HdlrFunc5 );
5566  SET_ENVI_FUNC( t_3, STATE(CurrLVars) );
5567  t_4 = NewFunctionBody();
5568  SET_STARTLINE_BODY(t_4, 365);
5569  SET_ENDLINE_BODY(t_4, 367);
5570  SET_FILENAME_BODY(t_4, FileName);
5571  SET_BODY_FUNC(t_3, t_4);
5572  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
5573   CALL_2ARGS( t_1, t_2, t_3 );
5574  }
5575  else {
5576   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
5577  }
5578 
5579  /* DeclareGlobalFunction( "EvalString" ); */
5580  t_1 = GF_DeclareGlobalFunction;
5581  t_2 = MakeString( "EvalString" );
5582  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
5583   CALL_1ARGS( t_1, t_2 );
5584  }
5585  else {
5586   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2 ) );
5587  }
5588 
5589  /* Unbind( INSTALL_METHOD ); */
5590  AssGVar( G_INSTALL__METHOD, 0 );
5591 
5592  /* BIND_GLOBAL( "INSTALL_METHOD", function ( arglist, check )
5593       local len, opr, info, pos, rel, filters, info1, isstr, flags, i, rank, method, oreqs, req, reqs, match, j, k, imp, notmatch, lk, funcname;
5594       lk := READ_LOCK( OPERATIONS_REGION );
5595       len := LEN_LIST( arglist );
5596       if len < 3 then
5597           Error( "too few arguments given in <arglist>" );
5598       fi;
5599       opr := arglist[1];
5600       if not IS_OPERATION( opr ) then
5601           Error( "<opr> is not an operation" );
5602       fi;
5603       if IS_STRING_REP( arglist[2] ) or arglist[2] = false then
5604           info := arglist[2];
5605           pos := 3;
5606       else
5607           info := false;
5608           pos := 2;
5609       fi;
5610       if arglist[pos] = true or IS_FUNCTION( arglist[pos] ) then
5611           rel := arglist[pos];
5612           pos := pos + 1;
5613       else
5614           rel := true;
5615       fi;
5616       if not IsBound( arglist[pos] ) or not IS_LIST( arglist[pos] ) then
5617           Error( "<arglist>[", pos, "] must be a list of filters" );
5618       fi;
5619       filters := arglist[pos];
5620       if GAPInfo.MaxNrArgsMethod < LEN_LIST( filters ) then
5621           Error( "methods can have at most ", GAPInfo.MaxNrArgsMethod, " arguments" );
5622       fi;
5623       if 0 < LEN_LIST( filters ) then
5624           info1 := "[ ";
5625           isstr := true;
5626           for i in [ 1 .. LEN_LIST( filters ) ] do
5627               if IS_STRING_REP( filters[i] ) then
5628                   APPEND_LIST_INTR( info1, filters[i] );
5629                   APPEND_LIST_INTR( info1, ", " );
5630                   filters[i] := EvalString( filters[i] );
5631                   if not IS_FUNCTION( filters[i] ) then
5632                       Error( "string does not evaluate to a function" );
5633                   fi;
5634               else
5635                   isstr := false;
5636                   break;
5637               fi;
5638           od;
5639           if isstr and info = false then
5640               info1[LEN_LIST( info1 ) - 1] := ' ';
5641               info1[LEN_LIST( info1 )] := ']';
5642               info := info1;
5643           fi;
5644       fi;
5645       pos := pos + 1;
5646       flags := [  ];
5647       for i in filters do
5648           ADD_LIST( flags, FLAGS_FILTER( i ) );
5649       od;
5650       if not IsBound( arglist[pos] ) then
5651           Error( "the method is missing in <arglist>" );
5652       elif IS_INT( arglist[pos] ) or IS_FUNCTION( arglist[pos] ) and NARG_FUNC( arglist[pos] ) = 0 and pos < LEN_LIST( arglist ) then
5653           rank := arglist[pos];
5654           pos := pos + 1;
5655       else
5656           rank := 0;
5657       fi;
5658       if not IsBound( arglist[pos] ) then
5659           Error( "the method is missing in <arglist>" );
5660       fi;
5661       method := arglist[pos];
5662       if FLAG1_FILTER( opr ) <> 0 and (rel = true or rel = RETURN_TRUE) and LEN_LIST( filters ) = 1 and (method = true or method = RETURN_TRUE) then
5663           Error( NAME_FUNC( opr ), ": use `InstallTrueMethod' for <opr>" );
5664       fi;
5665       if CHECK_INSTALL_METHOD and check then
5666           if opr in WRAPPER_OPERATIONS then
5667               INFO_DEBUG( 1, "a method is installed for the wrapper operation ", NAME_FUNC( opr ), "\n", "#I  probably it should be installed for (one of) its\n", "#I  underlying operation(s)" );
5668           fi;
5669           req := GET_OPER_FLAGS( opr );
5670           if req = fail then
5671               Error( "unknown operation ", NAME_FUNC( opr ) );
5672           fi;
5673           imp := [  ];
5674           for i in flags do
5675               if not GAPInfo.CommandLineOptions.N then
5676                   ADD_LIST( imp, WITH_HIDDEN_IMPS_FLAGS( i ) );
5677               else
5678                   ADD_LIST( imp, WITH_IMPS_FLAGS( i ) );
5679               fi;
5680           od;
5681           j := 0;
5682           match := false;
5683           notmatch := 0;
5684           while j < LEN_LIST( req ) and not match do
5685               j := j + 1;
5686               reqs := req[j];
5687               if LEN_LIST( reqs ) = LEN_LIST( imp ) then
5688                   match := true;
5689                   for i in [ 1 .. LEN_LIST( reqs ) ] do
5690                       if not IS_SUBSET_FLAGS( imp[i], reqs[i] ) then
5691                           match := false;
5692                           notmatch := i;
5693                           break;
5694                       fi;
5695                   od;
5696                   if match then
5697                       break;
5698                   fi;
5699               fi;
5700           od;
5701           if not match then
5702               if notmatch = 0 then
5703                   if not GAPInfo.CommandLineOptions.N then
5704                       Error( "the number of arguments does not match a declaration of ", NAME_FUNC( opr ) );
5705                   else
5706                       Print( "InstallMethod warning:  nr of args does not ", "match a declaration of ", NAME_FUNC( opr ), "\n" );
5707                   fi;
5708               else
5709                   if not GAPInfo.CommandLineOptions.N then
5710                       Error( "required filters ", NamesFilter( imp[notmatch] ), "\nfor ", Ordinal( notmatch ), " argument do not match a declaration of ", NAME_FUNC( opr ) );
5711                   else
5712                       Print( "InstallMethod warning: ", NAME_FUNC( opr ), " at \c", INPUT_FILENAME(  ), ":", INPUT_LINENUMBER(  ), " \c", "required filter \c", NAME_FUNC( filters[notmatch] ), " for ", Ordinal( notmatch ), " argument does not match any "
5713                         , "declaration\n" );
5714                   fi;
5715               fi;
5716           else
5717               oreqs := reqs;
5718               for k in [ j + 1 .. LEN_LIST( req ) ] do
5719                   reqs := req[k];
5720                   if LEN_LIST( reqs ) = LEN_LIST( imp ) then
5721                       match := true;
5722                       for i in [ 1 .. LEN_LIST( reqs ) ] do
5723                           if not IS_SUBSET_FLAGS( imp[i], reqs[i] ) then
5724                               match := false;
5725                               break;
5726                           fi;
5727                       od;
5728                       if match and reqs <> oreqs then
5729                           INFO_DEBUG( 1, "method installed for ", NAME_FUNC( opr ), " matches more than one declaration" );
5730                       fi;
5731                   fi;
5732               od;
5733           fi;
5734       fi;
5735       if IS_FUNCTION( method ) and IsBound( HasNameFunction ) and IsBound( TYPE_FUNCTION_WITH_NAME ) and IsBound( TYPE_OPERATION_WITH_NAME ) and not VAL_GVAR( "HasNameFunction" )( method ) then
5736           funcname := SHALLOW_COPY_OBJ( NAME_FUNC( opr ) );
5737           APPEND_LIST_INTR( funcname, " " );
5738           if info <> false then
5739               APPEND_LIST_INTR( funcname, info );
5740           else
5741               APPEND_LIST_INTR( funcname, "method" );
5742           fi;
5743           SET_NAME_FUNC( method, funcname );
5744       fi;
5745       if IS_FUNCTION( rank ) and IsBound( HasNameFunction ) and IsBound( TYPE_FUNCTION_WITH_NAME ) and IsBound( TYPE_OPERATION_WITH_NAME ) and not VAL_GVAR( "HasNameFunction" )( rank ) then
5746           funcname := "Priority calculation for ";
5747           APPEND_LIST_INTR( funcname, NAME_FUNC( opr ) );
5748           if info <> false then
5749               APPEND_LIST_INTR( funcname, " " );
5750               APPEND_LIST_INTR( funcname, info );
5751           fi;
5752           SET_NAME_FUNC( rank, funcname );
5753       fi;
5754       INSTALL_METHOD_FLAGS( opr, info, rel, flags, rank, method );
5755       UNLOCK( lk );
5756       return;
5757   end ); */
5758  t_1 = GF_BIND__GLOBAL;
5759  t_2 = MakeString( "INSTALL_METHOD" );
5760  t_3 = NewFunction( NameFunc[6], 2, ArgStringToList("arglist,check"), HdlrFunc6 );
5761  SET_ENVI_FUNC( t_3, STATE(CurrLVars) );
5762  t_4 = NewFunctionBody();
5763  SET_STARTLINE_BODY(t_4, 378);
5764  SET_ENDLINE_BODY(t_4, 633);
5765  SET_FILENAME_BODY(t_4, FileName);
5766  SET_BODY_FUNC(t_3, t_4);
5767  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
5768   CALL_2ARGS( t_1, t_2, t_3 );
5769  }
5770  else {
5771   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
5772  }
5773 
5774  /* LENGTH_SETTER_METHODS_2 := LENGTH_SETTER_METHODS_2 + (6 + 2); */
5775  t_2 = GC_LENGTH__SETTER__METHODS__2;
5776  CHECK_BOUND( t_2, "LENGTH_SETTER_METHODS_2" );
5777  C_SUM_INTOBJS( t_3, INTOBJ_INT(6), INTOBJ_INT(2) )
5778  C_SUM_FIA( t_1, t_2, t_3 )
5779  AssGVar( G_LENGTH__SETTER__METHODS__2, t_1 );
5780 
5781  /* InstallAttributeFunction( function ( name, filter, getter, setter, tester, mutflag )
5782       local flags, rank, cats, props, i, lk;
5783       if not IS_IDENTICAL_OBJ( filter, IS_OBJECT ) then
5784           flags := FLAGS_FILTER( filter );
5785           rank := 0;
5786           cats := IS_OBJECT;
5787           props := [  ];
5788           lk := READ_LOCK( FILTER_REGION );
5789           for i in TRUES_FLAGS( flags ) do
5790               if INFO_FILTERS[i] in FNUM_CATS_AND_REPS then
5791                   cats := cats and FILTERS[i];
5792                   rank := rank - RankFilter( FILTERS[i] );
5793               elif INFO_FILTERS[i] in FNUM_PROS then
5794                   ADD_LIST( props, FILTERS[i] );
5795               fi;
5796           od;
5797           UNLOCK( lk );
5798           MakeImmutable( props );
5799           if 0 < LEN_LIST( props ) then
5800               InstallOtherMethod( getter, "default method requiring categories and checking properties", true, [ cats ], rank, function ( obj )
5801                     local found, prop;
5802                     found := false;
5803                     for prop in props do
5804                         if not Tester( prop )( obj ) then
5805                             found := true;
5806                             if not (prop( obj ) and Tester( prop )( obj )) then
5807                                 TryNextMethod();
5808                             fi;
5809                         fi;
5810                     od;
5811                     if found then
5812                         return getter( obj );
5813                     else
5814                         TryNextMethod();
5815                     fi;
5816                     return;
5817                 end );
5818           fi;
5819       fi;
5820       return;
5821   end ); */
5822  t_1 = GF_InstallAttributeFunction;
5823  t_2 = NewFunction( NameFunc[7], 6, ArgStringToList("name,filter,getter,setter,tester,mutflag"), HdlrFunc7 );
5824  SET_ENVI_FUNC( t_2, STATE(CurrLVars) );
5825  t_3 = NewFunctionBody();
5826  SET_STARTLINE_BODY(t_3, 652);
5827  SET_ENDLINE_BODY(t_3, 716);
5828  SET_FILENAME_BODY(t_3, FileName);
5829  SET_BODY_FUNC(t_2, t_3);
5830  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
5831   CALL_1ARGS( t_1, t_2 );
5832  }
5833  else {
5834   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2 ) );
5835  }
5836 
5837  /* InstallAttributeFunction( function ( name, filter, getter, setter, tester, mutflag )
5838       InstallOtherMethod( setter, "default method, does nothing", true, [ IS_OBJECT, IS_OBJECT ], 0, DO_NOTHING_SETTER );
5839       return;
5840   end ); */
5841  t_1 = GF_InstallAttributeFunction;
5842  t_2 = NewFunction( NameFunc[9], 6, ArgStringToList("name,filter,getter,setter,tester,mutflag"), HdlrFunc9 );
5843  SET_ENVI_FUNC( t_2, STATE(CurrLVars) );
5844  t_3 = NewFunctionBody();
5845  SET_STARTLINE_BODY(t_3, 719);
5846  SET_ENDLINE_BODY(t_3, 725);
5847  SET_FILENAME_BODY(t_3, FileName);
5848  SET_BODY_FUNC(t_2, t_3);
5849  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
5850   CALL_1ARGS( t_1, t_2 );
5851  }
5852  else {
5853   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2 ) );
5854  }
5855 
5856  /* BIND_GLOBAL( "PositionSortedOddPositions", function ( list, elm )
5857       local i, j, k;
5858       k := LEN_LIST( list ) + 1;
5859       if k mod 2 = 0 then
5860           k := k + 1;
5861       fi;
5862       i := -1;
5863       while i + 2 < k do
5864           j := 2 * QUO_INT( (i + k + 2), 4 ) - 1;
5865           if list[j] < elm then
5866               i := j;
5867           else
5868               k := j;
5869           fi;
5870       od;
5871       return k;
5872   end ); */
5873  t_1 = GF_BIND__GLOBAL;
5874  t_2 = MakeString( "PositionSortedOddPositions" );
5875  t_3 = NewFunction( NameFunc[10], 2, ArgStringToList("list,elm"), HdlrFunc10 );
5876  SET_ENVI_FUNC( t_3, STATE(CurrLVars) );
5877  t_4 = NewFunctionBody();
5878  SET_STARTLINE_BODY(t_4, 738);
5879  SET_ENDLINE_BODY(t_4, 762);
5880  SET_FILENAME_BODY(t_4, FileName);
5881  SET_BODY_FUNC(t_3, t_4);
5882  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
5883   CALL_2ARGS( t_1, t_2, t_3 );
5884  }
5885  else {
5886   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
5887  }
5888 
5889  /* IsPrimeInt := "2b defined"; */
5890  t_1 = MakeString( "2b defined" );
5891  AssGVar( G_IsPrimeInt, t_1 );
5892 
5893  /* BIND_GLOBAL( "KeyDependentOperation", function ( name, domreq, keyreq, keytest )
5894       local str, oper, attr, lk;
5895       if keytest = "prime" then
5896           keytest := function ( key )
5897                 if not IsPrimeInt( key ) then
5898                     Error( name, ": <p> must be a prime" );
5899                 fi;
5900                 return;
5901             end;
5902       fi;
5903       str := SHALLOW_COPY_OBJ( name );
5904       APPEND_LIST_INTR( str, "Op" );
5905       DeclareOperation( str, [ domreq, keyreq ] );
5906       oper := VALUE_GLOBAL( str );
5907       str := "Computed";
5908       APPEND_LIST_INTR( str, name );
5909       APPEND_LIST_INTR( str, "s" );
5910       DeclareAttribute( str, domreq, "mutable" );
5911       attr := VALUE_GLOBAL( str );
5912       InstallMethod( attr, "default method", true, [ domreq ], 0, function ( D )
5913             return [  ];
5914         end );
5915       DeclareOperation( name, [ domreq, keyreq ] );
5916       lk := WRITE_LOCK( OPERATIONS_REGION );
5917       ADD_LIST( WRAPPER_OPERATIONS, VALUE_GLOBAL( name ) );
5918       UNLOCK( lk );
5919       InstallOtherMethod( VALUE_GLOBAL( name ), "default method", true, [ domreq, keyreq ], 0, function ( D, key )
5920             local known, i, erg;
5921             keytest( key );
5922             known := attr( D );
5923             i := PositionSortedOddPositions( known, key );
5924             if LEN_LIST( known ) < i or known[i] <> key then
5925                 erg := oper( D, key );
5926                 i := PositionSortedOddPositions( known, key );
5927                 if LEN_LIST( known ) < i or known[i] <> key then
5928                     known{[ i + 2 .. LEN_LIST( known ) + 2 ]} := known{[ i .. LEN_LIST( known ) ]};
5929                     known[i] := IMMUTABLE_COPY_OBJ( key );
5930                     known[i + 1] := IMMUTABLE_COPY_OBJ( erg );
5931                 fi;
5932             fi;
5933             return known[i + 1];
5934         end );
5935       str := "Has";
5936       APPEND_LIST_INTR( str, name );
5937       DeclareOperation( str, [ domreq, keyreq ] );
5938       InstallOtherMethod( VALUE_GLOBAL( str ), "default method", true, [ domreq, keyreq ], 0, function ( D, key )
5939             local known, i;
5940             keytest( key );
5941             known := attr( D );
5942             i := PositionSortedOddPositions( known, key );
5943             return i <= LEN_LIST( known ) and known[i] = key;
5944         end );
5945       str := "Set";
5946       APPEND_LIST_INTR( str, name );
5947       DeclareOperation( str, [ domreq, keyreq, IS_OBJECT ] );
5948       InstallOtherMethod( VALUE_GLOBAL( str ), "default method", true, [ domreq, keyreq, IS_OBJECT ], 0, function ( D, key, obj )
5949             local known, i;
5950             keytest( key );
5951             known := attr( D );
5952             i := PositionSortedOddPositions( known, key );
5953             if LEN_LIST( known ) < i or known[i] <> key then
5954                 known{[ i + 2 .. LEN_LIST( known ) + 2 ]} := known{[ i .. LEN_LIST( known ) ]};
5955                 known[i] := IMMUTABLE_COPY_OBJ( key );
5956                 known[i + 1] := IMMUTABLE_COPY_OBJ( obj );
5957             fi;
5958             return;
5959         end );
5960       return;
5961   end ); */
5962  t_1 = GF_BIND__GLOBAL;
5963  t_2 = MakeString( "KeyDependentOperation" );
5964  t_3 = NewFunction( NameFunc[11], 4, ArgStringToList("name,domreq,keyreq,keytest"), HdlrFunc11 );
5965  SET_ENVI_FUNC( t_3, STATE(CurrLVars) );
5966  t_4 = NewFunctionBody();
5967  SET_STARTLINE_BODY(t_4, 887);
5968  SET_ENDLINE_BODY(t_4, 998);
5969  SET_FILENAME_BODY(t_4, FileName);
5970  SET_BODY_FUNC(t_3, t_4);
5971  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
5972   CALL_2ARGS( t_1, t_2, t_3 );
5973  }
5974  else {
5975   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
5976  }
5977 
5978  /* CallFuncList := "2b defined"; */
5979  t_1 = MakeString( "2b defined" );
5980  AssGVar( G_CallFuncList, t_1 );
5981 
5982  /* BIND_GLOBAL( "RedispatchOnCondition", function ( arg... )
5983       local oper, info, fampred, reqs, cond, val, re, i;
5984       if LEN_LIST( arg ) = 5 then
5985           oper := arg[1];
5986           info := " fallback method to test conditions";
5987           fampred := arg[2];
5988           reqs := arg[3];
5989           cond := arg[4];
5990           val := arg[5];
5991       elif LEN_LIST( arg ) = 6 then
5992           oper := arg[1];
5993           info := arg[2];
5994           fampred := arg[3];
5995           reqs := arg[4];
5996           cond := arg[5];
5997           val := arg[6];
5998       else
5999           Error( "Usage: RedispatchOnCondition(oper[,info],fampred,reqs,cond,val)" );
6000       fi;
6001       for i in reqs do
6002           val := val - RankFilter( i );
6003       od;
6004       InstallOtherMethod( oper, info, fampred, reqs, val, function ( arg... )
6005             re := false;
6006             for i in [ 1 .. LEN_LIST( reqs ) ] do
6007                 re := re or IsBound( cond[i] ) and not Tester( cond[i] )( arg[i] ) and cond[i]( arg[i] ) and Tester( cond[i] )( arg[i] );
6008             od;
6009             if re then
6010                 return CallFuncList( oper, arg );
6011             else
6012                 TryNextMethod();
6013             fi;
6014             return;
6015         end );
6016       return;
6017   end ); */
6018  t_1 = GF_BIND__GLOBAL;
6019  t_2 = MakeString( "RedispatchOnCondition" );
6020  t_3 = NewFunction( NameFunc[17], -1, ArgStringToList("arg"), HdlrFunc17 );
6021  SET_ENVI_FUNC( t_3, STATE(CurrLVars) );
6022  t_4 = NewFunctionBody();
6023  SET_STARTLINE_BODY(t_4, 1033);
6024  SET_ENDLINE_BODY(t_4, 1080);
6025  SET_FILENAME_BODY(t_4, FileName);
6026  SET_BODY_FUNC(t_3, t_4);
6027  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
6028   CALL_2ARGS( t_1, t_2, t_3 );
6029  }
6030  else {
6031   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3 ) );
6032  }
6033 
6034  /* InstallMethod( ViewObj, "default method using `PrintObj'", true, [ IS_OBJECT ], 0, PRINT_OBJ ); */
6035  t_1 = GF_InstallMethod;
6036  t_2 = GC_ViewObj;
6037  CHECK_BOUND( t_2, "ViewObj" );
6038  t_3 = MakeString( "default method using `PrintObj'" );
6039  t_4 = True;
6040  t_5 = NEW_PLIST( T_PLIST, 1 );
6041  SET_LEN_PLIST( t_5, 1 );
6042  t_6 = GC_IS__OBJECT;
6043  CHECK_BOUND( t_6, "IS_OBJECT" );
6044  SET_ELM_PLIST( t_5, 1, t_6 );
6045  CHANGED_BAG( t_5 );
6046  t_6 = GC_PRINT__OBJ;
6047  CHECK_BOUND( t_6, "PRINT_OBJ" );
6048  if ( TNUM_OBJ( t_1 ) == T_FUNCTION ) {
6049   CALL_6ARGS( t_1, t_2, t_3, t_4, t_5, INTOBJ_INT(0), t_6 );
6050  }
6051  else {
6052   DoOperation2Args( CallFuncListOper, t_1, NewPlistFromArgs( t_2, t_3, t_4, t_5, INTOBJ_INT(0), t_6 ) );
6053  }
6054 
6055  /* return; */
6056  SWITCH_TO_OLD_FRAME(oldFrame);
6057  return 0;
6058 
6059  /* return; */
6060  SWITCH_TO_OLD_FRAME(oldFrame);
6061  return 0;
6062 }
6063 
6064 /* 'PostRestore' restore gvars, rnams, functions */
PostRestore(StructInitInfo * module)6065 static Int PostRestore ( StructInitInfo * module )
6066 {
6067 
6068  /* global variables used in handlers */
6069  G_REREADING = GVarName( "REREADING" );
6070  G_SHALLOW__COPY__OBJ = GVarName( "SHALLOW_COPY_OBJ" );
6071  G_PRINT__OBJ = GVarName( "PRINT_OBJ" );
6072  G_GAPInfo = GVarName( "GAPInfo" );
6073  G_TYPE__FUNCTION__WITH__NAME = GVarName( "TYPE_FUNCTION_WITH_NAME" );
6074  G_TYPE__OPERATION__WITH__NAME = GVarName( "TYPE_OPERATION_WITH_NAME" );
6075  G_IS__FUNCTION = GVarName( "IS_FUNCTION" );
6076  G_NAME__FUNC = GVarName( "NAME_FUNC" );
6077  G_SET__NAME__FUNC = GVarName( "SET_NAME_FUNC" );
6078  G_NARG__FUNC = GVarName( "NARG_FUNC" );
6079  G_IS__OPERATION = GVarName( "IS_OPERATION" );
6080  G_AINV = GVarName( "AINV" );
6081  G_IS__INT = GVarName( "IS_INT" );
6082  G_IS__LIST = GVarName( "IS_LIST" );
6083  G_ADD__LIST = GVarName( "ADD_LIST" );
6084  G_IS__STRING__REP = GVarName( "IS_STRING_REP" );
6085  G_Error = GVarName( "Error" );
6086  G_VAL__GVAR = GVarName( "VAL_GVAR" );
6087  G_TYPE__OBJ = GVarName( "TYPE_OBJ" );
6088  G_IMMUTABLE__COPY__OBJ = GVarName( "IMMUTABLE_COPY_OBJ" );
6089  G_IS__IDENTICAL__OBJ = GVarName( "IS_IDENTICAL_OBJ" );
6090  G_MakeImmutable = GVarName( "MakeImmutable" );
6091  G_INPUT__FILENAME = GVarName( "INPUT_FILENAME" );
6092  G_INPUT__LINENUMBER = GVarName( "INPUT_LINENUMBER" );
6093  G_IS__OBJECT = GVarName( "IS_OBJECT" );
6094  G_TRY__NEXT__METHOD = GVarName( "TRY_NEXT_METHOD" );
6095  G_SUB__FLAGS = GVarName( "SUB_FLAGS" );
6096  G_WITH__HIDDEN__IMPS__FLAGS = GVarName( "WITH_HIDDEN_IMPS_FLAGS" );
6097  G_WITH__IMPS__FLAGS = GVarName( "WITH_IMPS_FLAGS" );
6098  G_IS__SUBSET__FLAGS = GVarName( "IS_SUBSET_FLAGS" );
6099  G_TRUES__FLAGS = GVarName( "TRUES_FLAGS" );
6100  G_FLAG1__FILTER = GVarName( "FLAG1_FILTER" );
6101  G_FLAGS__FILTER = GVarName( "FLAGS_FILTER" );
6102  G_METHODS__OPERATION = GVarName( "METHODS_OPERATION" );
6103  G_SET__METHODS__OPERATION = GVarName( "SET_METHODS_OPERATION" );
6104  G_DO__NOTHING__SETTER = GVarName( "DO_NOTHING_SETTER" );
6105  G_IS__CONSTRUCTOR = GVarName( "IS_CONSTRUCTOR" );
6106  G_QUO__INT = GVarName( "QUO_INT" );
6107  G_fail = GVarName( "fail" );
6108  G_RETURN__TRUE = GVarName( "RETURN_TRUE" );
6109  G_RETURN__FALSE = GVarName( "RETURN_FALSE" );
6110  G_LEN__LIST = GVarName( "LEN_LIST" );
6111  G_APPEND__LIST__INTR = GVarName( "APPEND_LIST_INTR" );
6112  G_COPY__LIST__ENTRIES = GVarName( "COPY_LIST_ENTRIES" );
6113  G_CONV__STRING = GVarName( "CONV_STRING" );
6114  G_Print = GVarName( "Print" );
6115  G_ViewObj = GVarName( "ViewObj" );
6116  G_WRITE__LOCK = GVarName( "WRITE_LOCK" );
6117  G_READ__LOCK = GVarName( "READ_LOCK" );
6118  G_UNLOCK = GVarName( "UNLOCK" );
6119  G_MakeReadOnlySingleObj = GVarName( "MakeReadOnlySingleObj" );
6120  G_RUN__IMMEDIATE__METHODS__RUNS = GVarName( "RUN_IMMEDIATE_METHODS_RUNS" );
6121  G_RUN__IMMEDIATE__METHODS__CHECKS = GVarName( "RUN_IMMEDIATE_METHODS_CHECKS" );
6122  G_RUN__IMMEDIATE__METHODS__HITS = GVarName( "RUN_IMMEDIATE_METHODS_HITS" );
6123  G_BIND__GLOBAL = GVarName( "BIND_GLOBAL" );
6124  G_IGNORE__IMMEDIATE__METHODS = GVarName( "IGNORE_IMMEDIATE_METHODS" );
6125  G_IMM__FLAGS = GVarName( "IMM_FLAGS" );
6126  G_TRACE__IMMEDIATE__METHODS = GVarName( "TRACE_IMMEDIATE_METHODS" );
6127  G_IMMEDIATES = GVarName( "IMMEDIATES" );
6128  G_SIZE__IMMEDIATE__METHOD__ENTRY = GVarName( "SIZE_IMMEDIATE_METHOD_ENTRY" );
6129  G_IMMEDIATE__METHODS = GVarName( "IMMEDIATE_METHODS" );
6130  G_NewSpecialRegion = GVarName( "NewSpecialRegion" );
6131  G_METHODS__OPERATION__REGION = GVarName( "METHODS_OPERATION_REGION" );
6132  G_RankFilter = GVarName( "RankFilter" );
6133  G_CHECK__INSTALL__METHOD = GVarName( "CHECK_INSTALL_METHOD" );
6134  G_READEVALCOMMAND__LINENUMBER = GVarName( "READEVALCOMMAND_LINENUMBER" );
6135  G_INSTALL__METHOD = GVarName( "INSTALL_METHOD" );
6136  G_DeclareGlobalFunction = GVarName( "DeclareGlobalFunction" );
6137  G_OPERATIONS__REGION = GVarName( "OPERATIONS_REGION" );
6138  G_EvalString = GVarName( "EvalString" );
6139  G_WRAPPER__OPERATIONS = GVarName( "WRAPPER_OPERATIONS" );
6140  G_INFO__DEBUG = GVarName( "INFO_DEBUG" );
6141  G_GET__OPER__FLAGS = GVarName( "GET_OPER_FLAGS" );
6142  G_NamesFilter = GVarName( "NamesFilter" );
6143  G_Ordinal = GVarName( "Ordinal" );
6144  G_HasNameFunction = GVarName( "HasNameFunction" );
6145  G_INSTALL__METHOD__FLAGS = GVarName( "INSTALL_METHOD_FLAGS" );
6146  G_LENGTH__SETTER__METHODS__2 = GVarName( "LENGTH_SETTER_METHODS_2" );
6147  G_InstallAttributeFunction = GVarName( "InstallAttributeFunction" );
6148  G_FILTER__REGION = GVarName( "FILTER_REGION" );
6149  G_INFO__FILTERS = GVarName( "INFO_FILTERS" );
6150  G_FNUM__CATS__AND__REPS = GVarName( "FNUM_CATS_AND_REPS" );
6151  G_FILTERS = GVarName( "FILTERS" );
6152  G_FNUM__PROS = GVarName( "FNUM_PROS" );
6153  G_InstallOtherMethod = GVarName( "InstallOtherMethod" );
6154  G_Tester = GVarName( "Tester" );
6155  G_IsPrimeInt = GVarName( "IsPrimeInt" );
6156  G_DeclareOperation = GVarName( "DeclareOperation" );
6157  G_VALUE__GLOBAL = GVarName( "VALUE_GLOBAL" );
6158  G_DeclareAttribute = GVarName( "DeclareAttribute" );
6159  G_InstallMethod = GVarName( "InstallMethod" );
6160  G_PositionSortedOddPositions = GVarName( "PositionSortedOddPositions" );
6161  G_CallFuncList = GVarName( "CallFuncList" );
6162 
6163  /* record names used in handlers */
6164  R_MaxNrArgsMethod = RNamName( "MaxNrArgsMethod" );
6165  R_CommandLineOptions = RNamName( "CommandLineOptions" );
6166  R_N = RNamName( "N" );
6167 
6168  /* information for the functions */
6169  NameFunc[1] = 0;
6170  NameFunc[2] = 0;
6171  NameFunc[3] = 0;
6172  NameFunc[4] = 0;
6173  NameFunc[5] = 0;
6174  NameFunc[6] = 0;
6175  NameFunc[7] = 0;
6176  NameFunc[8] = 0;
6177  NameFunc[9] = 0;
6178  NameFunc[10] = 0;
6179  NameFunc[11] = 0;
6180  NameFunc[12] = 0;
6181  NameFunc[13] = 0;
6182  NameFunc[14] = 0;
6183  NameFunc[15] = 0;
6184  NameFunc[16] = 0;
6185  NameFunc[17] = 0;
6186  NameFunc[18] = 0;
6187 
6188  /* return success */
6189  return 0;
6190 
6191 }
6192 
6193 
6194 /* 'InitKernel' sets up data structures, fopies, copies, handlers */
InitKernel(StructInitInfo * module)6195 static Int InitKernel ( StructInitInfo * module )
6196 {
6197 
6198  /* global variables used in handlers */
6199  InitCopyGVar( "REREADING", &GC_REREADING );
6200  InitFopyGVar( "SHALLOW_COPY_OBJ", &GF_SHALLOW__COPY__OBJ );
6201  InitCopyGVar( "PRINT_OBJ", &GC_PRINT__OBJ );
6202  InitCopyGVar( "GAPInfo", &GC_GAPInfo );
6203  InitCopyGVar( "TYPE_FUNCTION_WITH_NAME", &GC_TYPE__FUNCTION__WITH__NAME );
6204  InitCopyGVar( "TYPE_OPERATION_WITH_NAME", &GC_TYPE__OPERATION__WITH__NAME );
6205  InitFopyGVar( "IS_FUNCTION", &GF_IS__FUNCTION );
6206  InitFopyGVar( "NAME_FUNC", &GF_NAME__FUNC );
6207  InitFopyGVar( "SET_NAME_FUNC", &GF_SET__NAME__FUNC );
6208  InitFopyGVar( "NARG_FUNC", &GF_NARG__FUNC );
6209  InitFopyGVar( "IS_OPERATION", &GF_IS__OPERATION );
6210  InitFopyGVar( "AINV", &GF_AINV );
6211  InitFopyGVar( "IS_INT", &GF_IS__INT );
6212  InitFopyGVar( "IS_LIST", &GF_IS__LIST );
6213  InitFopyGVar( "ADD_LIST", &GF_ADD__LIST );
6214  InitFopyGVar( "IS_STRING_REP", &GF_IS__STRING__REP );
6215  InitFopyGVar( "Error", &GF_Error );
6216  InitFopyGVar( "VAL_GVAR", &GF_VAL__GVAR );
6217  InitFopyGVar( "TYPE_OBJ", &GF_TYPE__OBJ );
6218  InitFopyGVar( "IMMUTABLE_COPY_OBJ", &GF_IMMUTABLE__COPY__OBJ );
6219  InitFopyGVar( "IS_IDENTICAL_OBJ", &GF_IS__IDENTICAL__OBJ );
6220  InitFopyGVar( "MakeImmutable", &GF_MakeImmutable );
6221  InitFopyGVar( "INPUT_FILENAME", &GF_INPUT__FILENAME );
6222  InitFopyGVar( "INPUT_LINENUMBER", &GF_INPUT__LINENUMBER );
6223  InitCopyGVar( "IS_OBJECT", &GC_IS__OBJECT );
6224  InitCopyGVar( "TRY_NEXT_METHOD", &GC_TRY__NEXT__METHOD );
6225  InitFopyGVar( "SUB_FLAGS", &GF_SUB__FLAGS );
6226  InitFopyGVar( "WITH_HIDDEN_IMPS_FLAGS", &GF_WITH__HIDDEN__IMPS__FLAGS );
6227  InitFopyGVar( "WITH_IMPS_FLAGS", &GF_WITH__IMPS__FLAGS );
6228  InitFopyGVar( "IS_SUBSET_FLAGS", &GF_IS__SUBSET__FLAGS );
6229  InitFopyGVar( "TRUES_FLAGS", &GF_TRUES__FLAGS );
6230  InitFopyGVar( "FLAG1_FILTER", &GF_FLAG1__FILTER );
6231  InitFopyGVar( "FLAGS_FILTER", &GF_FLAGS__FILTER );
6232  InitFopyGVar( "METHODS_OPERATION", &GF_METHODS__OPERATION );
6233  InitFopyGVar( "SET_METHODS_OPERATION", &GF_SET__METHODS__OPERATION );
6234  InitCopyGVar( "DO_NOTHING_SETTER", &GC_DO__NOTHING__SETTER );
6235  InitFopyGVar( "IS_CONSTRUCTOR", &GF_IS__CONSTRUCTOR );
6236  InitFopyGVar( "QUO_INT", &GF_QUO__INT );
6237  InitCopyGVar( "fail", &GC_fail );
6238  InitCopyGVar( "RETURN_TRUE", &GC_RETURN__TRUE );
6239  InitCopyGVar( "RETURN_FALSE", &GC_RETURN__FALSE );
6240  InitFopyGVar( "LEN_LIST", &GF_LEN__LIST );
6241  InitFopyGVar( "APPEND_LIST_INTR", &GF_APPEND__LIST__INTR );
6242  InitFopyGVar( "COPY_LIST_ENTRIES", &GF_COPY__LIST__ENTRIES );
6243  InitFopyGVar( "CONV_STRING", &GF_CONV__STRING );
6244  InitFopyGVar( "Print", &GF_Print );
6245  InitCopyGVar( "ViewObj", &GC_ViewObj );
6246  InitFopyGVar( "WRITE_LOCK", &GF_WRITE__LOCK );
6247  InitFopyGVar( "READ_LOCK", &GF_READ__LOCK );
6248  InitFopyGVar( "UNLOCK", &GF_UNLOCK );
6249  InitFopyGVar( "MakeReadOnlySingleObj", &GF_MakeReadOnlySingleObj );
6250  InitCopyGVar( "RUN_IMMEDIATE_METHODS_RUNS", &GC_RUN__IMMEDIATE__METHODS__RUNS );
6251  InitCopyGVar( "RUN_IMMEDIATE_METHODS_CHECKS", &GC_RUN__IMMEDIATE__METHODS__CHECKS );
6252  InitCopyGVar( "RUN_IMMEDIATE_METHODS_HITS", &GC_RUN__IMMEDIATE__METHODS__HITS );
6253  InitFopyGVar( "BIND_GLOBAL", &GF_BIND__GLOBAL );
6254  InitCopyGVar( "IGNORE_IMMEDIATE_METHODS", &GC_IGNORE__IMMEDIATE__METHODS );
6255  InitCopyGVar( "IMM_FLAGS", &GC_IMM__FLAGS );
6256  InitCopyGVar( "TRACE_IMMEDIATE_METHODS", &GC_TRACE__IMMEDIATE__METHODS );
6257  InitCopyGVar( "IMMEDIATES", &GC_IMMEDIATES );
6258  InitCopyGVar( "SIZE_IMMEDIATE_METHOD_ENTRY", &GC_SIZE__IMMEDIATE__METHOD__ENTRY );
6259  InitCopyGVar( "IMMEDIATE_METHODS", &GC_IMMEDIATE__METHODS );
6260  InitFopyGVar( "NewSpecialRegion", &GF_NewSpecialRegion );
6261  InitCopyGVar( "METHODS_OPERATION_REGION", &GC_METHODS__OPERATION__REGION );
6262  InitFopyGVar( "RankFilter", &GF_RankFilter );
6263  InitCopyGVar( "CHECK_INSTALL_METHOD", &GC_CHECK__INSTALL__METHOD );
6264  InitCopyGVar( "READEVALCOMMAND_LINENUMBER", &GC_READEVALCOMMAND__LINENUMBER );
6265  InitFopyGVar( "INSTALL_METHOD", &GF_INSTALL__METHOD );
6266  InitFopyGVar( "DeclareGlobalFunction", &GF_DeclareGlobalFunction );
6267  InitCopyGVar( "OPERATIONS_REGION", &GC_OPERATIONS__REGION );
6268  InitFopyGVar( "EvalString", &GF_EvalString );
6269  InitCopyGVar( "WRAPPER_OPERATIONS", &GC_WRAPPER__OPERATIONS );
6270  InitFopyGVar( "INFO_DEBUG", &GF_INFO__DEBUG );
6271  InitFopyGVar( "GET_OPER_FLAGS", &GF_GET__OPER__FLAGS );
6272  InitFopyGVar( "NamesFilter", &GF_NamesFilter );
6273  InitFopyGVar( "Ordinal", &GF_Ordinal );
6274  InitCopyGVar( "HasNameFunction", &GC_HasNameFunction );
6275  InitFopyGVar( "INSTALL_METHOD_FLAGS", &GF_INSTALL__METHOD__FLAGS );
6276  InitCopyGVar( "LENGTH_SETTER_METHODS_2", &GC_LENGTH__SETTER__METHODS__2 );
6277  InitFopyGVar( "InstallAttributeFunction", &GF_InstallAttributeFunction );
6278  InitCopyGVar( "FILTER_REGION", &GC_FILTER__REGION );
6279  InitCopyGVar( "INFO_FILTERS", &GC_INFO__FILTERS );
6280  InitCopyGVar( "FNUM_CATS_AND_REPS", &GC_FNUM__CATS__AND__REPS );
6281  InitCopyGVar( "FILTERS", &GC_FILTERS );
6282  InitCopyGVar( "FNUM_PROS", &GC_FNUM__PROS );
6283  InitFopyGVar( "InstallOtherMethod", &GF_InstallOtherMethod );
6284  InitFopyGVar( "Tester", &GF_Tester );
6285  InitFopyGVar( "IsPrimeInt", &GF_IsPrimeInt );
6286  InitFopyGVar( "DeclareOperation", &GF_DeclareOperation );
6287  InitFopyGVar( "VALUE_GLOBAL", &GF_VALUE__GLOBAL );
6288  InitFopyGVar( "DeclareAttribute", &GF_DeclareAttribute );
6289  InitFopyGVar( "InstallMethod", &GF_InstallMethod );
6290  InitFopyGVar( "PositionSortedOddPositions", &GF_PositionSortedOddPositions );
6291  InitFopyGVar( "CallFuncList", &GF_CallFuncList );
6292 
6293  /* information for the functions */
6294  InitGlobalBag( &FileName, "GAPROOT/lib/oper1.g:FileName("FILE_CRC")" );
6295  InitHandlerFunc( HdlrFunc1, "GAPROOT/lib/oper1.g:HdlrFunc1("FILE_CRC")" );
6296  InitGlobalBag( &(NameFunc[1]), "GAPROOT/lib/oper1.g:NameFunc[1]("FILE_CRC")" );
6297  InitHandlerFunc( HdlrFunc2, "GAPROOT/lib/oper1.g:HdlrFunc2("FILE_CRC")" );
6298  InitGlobalBag( &(NameFunc[2]), "GAPROOT/lib/oper1.g:NameFunc[2]("FILE_CRC")" );
6299  InitHandlerFunc( HdlrFunc3, "GAPROOT/lib/oper1.g:HdlrFunc3("FILE_CRC")" );
6300  InitGlobalBag( &(NameFunc[3]), "GAPROOT/lib/oper1.g:NameFunc[3]("FILE_CRC")" );
6301  InitHandlerFunc( HdlrFunc4, "GAPROOT/lib/oper1.g:HdlrFunc4("FILE_CRC")" );
6302  InitGlobalBag( &(NameFunc[4]), "GAPROOT/lib/oper1.g:NameFunc[4]("FILE_CRC")" );
6303  InitHandlerFunc( HdlrFunc5, "GAPROOT/lib/oper1.g:HdlrFunc5("FILE_CRC")" );
6304  InitGlobalBag( &(NameFunc[5]), "GAPROOT/lib/oper1.g:NameFunc[5]("FILE_CRC")" );
6305  InitHandlerFunc( HdlrFunc6, "GAPROOT/lib/oper1.g:HdlrFunc6("FILE_CRC")" );
6306  InitGlobalBag( &(NameFunc[6]), "GAPROOT/lib/oper1.g:NameFunc[6]("FILE_CRC")" );
6307  InitHandlerFunc( HdlrFunc7, "GAPROOT/lib/oper1.g:HdlrFunc7("FILE_CRC")" );
6308  InitGlobalBag( &(NameFunc[7]), "GAPROOT/lib/oper1.g:NameFunc[7]("FILE_CRC")" );
6309  InitHandlerFunc( HdlrFunc8, "GAPROOT/lib/oper1.g:HdlrFunc8("FILE_CRC")" );
6310  InitGlobalBag( &(NameFunc[8]), "GAPROOT/lib/oper1.g:NameFunc[8]("FILE_CRC")" );
6311  InitHandlerFunc( HdlrFunc9, "GAPROOT/lib/oper1.g:HdlrFunc9("FILE_CRC")" );
6312  InitGlobalBag( &(NameFunc[9]), "GAPROOT/lib/oper1.g:NameFunc[9]("FILE_CRC")" );
6313  InitHandlerFunc( HdlrFunc10, "GAPROOT/lib/oper1.g:HdlrFunc10("FILE_CRC")" );
6314  InitGlobalBag( &(NameFunc[10]), "GAPROOT/lib/oper1.g:NameFunc[10]("FILE_CRC")" );
6315  InitHandlerFunc( HdlrFunc11, "GAPROOT/lib/oper1.g:HdlrFunc11("FILE_CRC")" );
6316  InitGlobalBag( &(NameFunc[11]), "GAPROOT/lib/oper1.g:NameFunc[11]("FILE_CRC")" );
6317  InitHandlerFunc( HdlrFunc12, "GAPROOT/lib/oper1.g:HdlrFunc12("FILE_CRC")" );
6318  InitGlobalBag( &(NameFunc[12]), "GAPROOT/lib/oper1.g:NameFunc[12]("FILE_CRC")" );
6319  InitHandlerFunc( HdlrFunc13, "GAPROOT/lib/oper1.g:HdlrFunc13("FILE_CRC")" );
6320  InitGlobalBag( &(NameFunc[13]), "GAPROOT/lib/oper1.g:NameFunc[13]("FILE_CRC")" );
6321  InitHandlerFunc( HdlrFunc14, "GAPROOT/lib/oper1.g:HdlrFunc14("FILE_CRC")" );
6322  InitGlobalBag( &(NameFunc[14]), "GAPROOT/lib/oper1.g:NameFunc[14]("FILE_CRC")" );
6323  InitHandlerFunc( HdlrFunc15, "GAPROOT/lib/oper1.g:HdlrFunc15("FILE_CRC")" );
6324  InitGlobalBag( &(NameFunc[15]), "GAPROOT/lib/oper1.g:NameFunc[15]("FILE_CRC")" );
6325  InitHandlerFunc( HdlrFunc16, "GAPROOT/lib/oper1.g:HdlrFunc16("FILE_CRC")" );
6326  InitGlobalBag( &(NameFunc[16]), "GAPROOT/lib/oper1.g:NameFunc[16]("FILE_CRC")" );
6327  InitHandlerFunc( HdlrFunc17, "GAPROOT/lib/oper1.g:HdlrFunc17("FILE_CRC")" );
6328  InitGlobalBag( &(NameFunc[17]), "GAPROOT/lib/oper1.g:NameFunc[17]("FILE_CRC")" );
6329  InitHandlerFunc( HdlrFunc18, "GAPROOT/lib/oper1.g:HdlrFunc18("FILE_CRC")" );
6330  InitGlobalBag( &(NameFunc[18]), "GAPROOT/lib/oper1.g:NameFunc[18]("FILE_CRC")" );
6331 
6332  /* return success */
6333  return 0;
6334 
6335 }
6336 
6337 /* 'InitLibrary' sets up gvars, rnams, functions */
InitLibrary(StructInitInfo * module)6338 static Int InitLibrary ( StructInitInfo * module )
6339 {
6340  Obj func1;
6341  Obj body1;
6342 
6343  /* Complete Copy/Fopy registration */
6344  UpdateCopyFopyInfo();
6345  FileName = MakeImmString( "GAPROOT/lib/oper1.g" );
6346  PostRestore(module);
6347 
6348  /* create all the functions defined in this module */
6349  func1 = NewFunction(NameFunc[1],0,0,HdlrFunc1);
6350  SET_ENVI_FUNC( func1, STATE(CurrLVars) );
6351  body1 = NewFunctionBody();
6352  SET_BODY_FUNC( func1, body1 );
6353  CHANGED_BAG( func1 );
6354  CALL_0ARGS( func1 );
6355 
6356  /* return success */
6357  return 0;
6358 
6359 }
6360 
6361 /* <name> returns the description of this module */
6362 static StructInitInfo module = {
6363  .type        = MODULE_STATIC,
6364  .name        = "GAPROOT/lib/oper1.g",
6365  .crc         = -77878372,
6366  .initKernel  = InitKernel,
6367  .initLibrary = InitLibrary,
6368  .postRestore = PostRestore,
6369 };
6370 
Init__oper1(void)6371 StructInitInfo * Init__oper1 ( void )
6372 {
6373  return &module;
6374 }
6375 
6376 /* compiled code ends here */
6377 #endif
6378