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