| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 415069/****************************************************************************1**2*W code.h GAP source Martin Schönert3**4**5*Y Copyright (C) 1996, Lehrstuhl D für Mathematik, RWTH Aachen, Germany6*Y (C) 1998 School Math and Comp. Sci., University of St Andrews, Scotland7*Y Copyright (C) 2002 The GAP Group8**9** This file declares the functions of the coder package.10**11** The coder package is the part of the interpreter that creates the12** expressions. Its functions are called from the reader.13*/1415#ifndef GAP_CODE_H16#define GAP_CODE_H171819/****************************************************************************20**21*T Stat . . . . . . . . . . . . . . . . . . . . . . . . type of statements22**23** 'Stat' is the type of statements.24**25** If 'Stat' is different from 'Expr', then a lot of things will probably26** break.27*/28#define Stat UInt8293031/****************************************************************************32**33*V PtrBody . . . . . . . . . . . . . . . . . . . . . pointer to current body34**35** 'PtrBody' is a pointer to the current body.36*/37extern Stat * PtrBody;383940/****************************************************************************41**42*V FIRST_STAT_CURR_FUNC . . . . . . . . index of first statement in a body43**44** 'FIRST_STAT_CURR_FUNC' is the index of the first statement in a body.45*/464748#define FILENAME_BODY(body) (ADDR_OBJ(body)[0])49#define STARTLINE_BODY(body) (ADDR_OBJ(body)[1])50#define ENDLINE_BODY(body) (ADDR_OBJ(body)[2])51#define NUMBER_HEADER_ITEMS_BODY 35253#define FIRST_STAT_CURR_FUNC (sizeof(Stat)+NUMBER_HEADER_ITEMS_BODY*sizeof(Bag))5455/****************************************************************************56**57*S T_<name> . . . . . . . . . . . . . . symbolic names for statement types58*S FIRST_STAT_TNUM . . . . . . . . . . . . . . . . . . first statement type59*S LAST_STAT_TNUM . . . . . . . . . . . . . . . . . . . last statement type60**61** For every type of statements there is a symbolic name defined for this62** type.63**64** As long as statements are represented by bags, these types must not65** overlap with the object types, lest Gasman becomes confused.66*/67#define FIRST_STAT_TNUM (0UL)6869#define T_PROCCALL_0ARGS (FIRST_STAT_TNUM+ 0)70#define T_PROCCALL_1ARGS (FIRST_STAT_TNUM+ 1)71#define T_PROCCALL_2ARGS (FIRST_STAT_TNUM+ 2)72#define T_PROCCALL_3ARGS (FIRST_STAT_TNUM+ 3)73#define T_PROCCALL_4ARGS (FIRST_STAT_TNUM+ 4)74#define T_PROCCALL_5ARGS (FIRST_STAT_TNUM+ 5)75#define T_PROCCALL_6ARGS (FIRST_STAT_TNUM+ 6)76#define T_PROCCALL_XARGS (FIRST_STAT_TNUM+ 7)7778#define T_SEQ_STAT (FIRST_STAT_TNUM+ 8)79#define T_SEQ_STAT2 (FIRST_STAT_TNUM+ 9)80#define T_SEQ_STAT3 (FIRST_STAT_TNUM+10)81#define T_SEQ_STAT4 (FIRST_STAT_TNUM+11)82#define T_SEQ_STAT5 (FIRST_STAT_TNUM+12)83#define T_SEQ_STAT6 (FIRST_STAT_TNUM+13)84#define T_SEQ_STAT7 (FIRST_STAT_TNUM+14)85#define T_IF (FIRST_STAT_TNUM+15)86#define T_IF_ELSE (FIRST_STAT_TNUM+16)87#define T_IF_ELIF (FIRST_STAT_TNUM+17)88#define T_IF_ELIF_ELSE (FIRST_STAT_TNUM+18)89#define T_FOR (FIRST_STAT_TNUM+19)90#define T_FOR2 (FIRST_STAT_TNUM+20)91#define T_FOR3 (FIRST_STAT_TNUM+21)92#define T_FOR_RANGE (FIRST_STAT_TNUM+22)93#define T_FOR_RANGE2 (FIRST_STAT_TNUM+23)94#define T_FOR_RANGE3 (FIRST_STAT_TNUM+24)95#define T_WHILE (FIRST_STAT_TNUM+25)96#define T_WHILE2 (FIRST_STAT_TNUM+26)97#define T_WHILE3 (FIRST_STAT_TNUM+27)98#define T_REPEAT (FIRST_STAT_TNUM+28)99#define T_REPEAT2 (FIRST_STAT_TNUM+29)100#define T_REPEAT3 (FIRST_STAT_TNUM+30)101#define T_BREAK (FIRST_STAT_TNUM+31)102#define T_CONTINUE (FIRST_STAT_TNUM+32)103#define T_RETURN_OBJ (FIRST_STAT_TNUM+33)104#define T_RETURN_VOID (FIRST_STAT_TNUM+34)105106#define T_ASS_LVAR (FIRST_STAT_TNUM+35)107#define T_ASS_LVAR_01 (FIRST_STAT_TNUM+36)108#define T_ASS_LVAR_02 (FIRST_STAT_TNUM+37)109#define T_ASS_LVAR_03 (FIRST_STAT_TNUM+38)110#define T_ASS_LVAR_04 (FIRST_STAT_TNUM+39)111#define T_ASS_LVAR_05 (FIRST_STAT_TNUM+40)112#define T_ASS_LVAR_06 (FIRST_STAT_TNUM+41)113#define T_ASS_LVAR_07 (FIRST_STAT_TNUM+42)114#define T_ASS_LVAR_08 (FIRST_STAT_TNUM+43)115#define T_ASS_LVAR_09 (FIRST_STAT_TNUM+44)116#define T_ASS_LVAR_10 (FIRST_STAT_TNUM+45)117#define T_ASS_LVAR_11 (FIRST_STAT_TNUM+46)118#define T_ASS_LVAR_12 (FIRST_STAT_TNUM+47)119#define T_ASS_LVAR_13 (FIRST_STAT_TNUM+48)120#define T_ASS_LVAR_14 (FIRST_STAT_TNUM+49)121#define T_ASS_LVAR_15 (FIRST_STAT_TNUM+50)122#define T_ASS_LVAR_16 (FIRST_STAT_TNUM+51)123#define T_UNB_LVAR (FIRST_STAT_TNUM+52)124#define T_ASS_HVAR (FIRST_STAT_TNUM+53)125#define T_UNB_HVAR (FIRST_STAT_TNUM+54)126#define T_ASS_GVAR (FIRST_STAT_TNUM+55)127#define T_UNB_GVAR (FIRST_STAT_TNUM+56)128#define T_ASS_LIST (FIRST_STAT_TNUM+57)129#define T_ASSS_LIST (FIRST_STAT_TNUM+58)130#define T_ASS_LIST_LEV (FIRST_STAT_TNUM+59)131#define T_ASSS_LIST_LEV (FIRST_STAT_TNUM+60)132#define T_UNB_LIST (FIRST_STAT_TNUM+61)133#define T_ASS_REC_NAME (FIRST_STAT_TNUM+62)134#define T_ASS_REC_EXPR (FIRST_STAT_TNUM+63)135#define T_UNB_REC_NAME (FIRST_STAT_TNUM+64)136#define T_UNB_REC_EXPR (FIRST_STAT_TNUM+65)137#define T_ASS_POSOBJ (FIRST_STAT_TNUM+66)138#define T_ASSS_POSOBJ (FIRST_STAT_TNUM+67)139#define T_ASS_POSOBJ_LEV (FIRST_STAT_TNUM+68)140#define T_ASSS_POSOBJ_LEV (FIRST_STAT_TNUM+69)141#define T_UNB_POSOBJ (FIRST_STAT_TNUM+70)142#define T_ASS_COMOBJ_NAME (FIRST_STAT_TNUM+71)143#define T_ASS_COMOBJ_EXPR (FIRST_STAT_TNUM+72)144#define T_UNB_COMOBJ_NAME (FIRST_STAT_TNUM+73)145#define T_UNB_COMOBJ_EXPR (FIRST_STAT_TNUM+74)146147#define T_INFO (FIRST_STAT_TNUM+75)148#define T_ASSERT_2ARGS (FIRST_STAT_TNUM+76)149#define T_ASSERT_3ARGS (FIRST_STAT_TNUM+77)150151#define T_EMPTY (FIRST_STAT_TNUM+78)152153#define T_PROCCALL_OPTS (FIRST_STAT_TNUM+ 79)154155#define T_ATOMIC (FIRST_STAT_TNUM+80)156157#define LAST_STAT_TNUM T_ATOMIC158159#define T_NO_STAT (Stat)(-1)160161162/****************************************************************************163**164*F TNUM_STAT(<stat>) . . . . . . . . . . . . . . . . . . type of a statement165**166** 'TNUM_STAT' returns the type of the statement <stat>.167*/168#define TNUM_STAT(stat) ((Int)(ADDR_STAT(stat)[-1] & 0xFF))169170171/****************************************************************************172**173*F SIZE_STAT(<stat>) . . . . . . . . . . . . . . . . . . size of a statement174**175** 'SIZE_STAT' returns the size of the statement <stat>.176*/177#define SIZE_STAT(stat) ((Int)(ADDR_STAT(stat)[-1] >> 8 & 0xFFFFFF))178179/****************************************************************************180**181*F LINE_STAT(<stat>) . . . . . . . . . . . . . . line number of a statement182**183** 'LINE_STAT' returns the line number of the statement <stat>.184*/185#define LINE_STAT(stat) ((Int)(ADDR_STAT(stat)[-1] >> 32 & 0xFFFF))186187/****************************************************************************188**189*F FILENAMEID_STAT(<stat>) . . . . . . . . . . . . file name of a statement190**191** 'FILENAMEID_STAT' returns the file the statment <stat> was read from.192** This should be looked up in the FilenameCache variable193*/194#define FILENAMEID_STAT(stat) ((Int)(ADDR_STAT(stat)[-1] >> 48 & 0x7FFF))195196/****************************************************************************197**198*F FILENAME_STAT(<stat>) . . . . . . . . . . . . file name of a statement199**200** 'FILENAME_STAT' returns a gap string containing the file where the statment201** <stat> was read from.202*/203Obj FILENAME_STAT(Stat stat);204205/****************************************************************************206**207*F VISITED_STAT(<stat>) . . . . . . . . . . . . if statement has even been run208**209** 'VISITED_STAT' returns true if the statement has ever been executed210** while profiling is turned on.211*/212#define VISITED_STAT(stat) (ADDR_STAT(stat)[-1] >> 63 && 0x1)213214215216/****************************************************************************217**218*F ADDR_STAT(<stat>) . . . . . . . . . . . . absolute address of a statement219**220** 'ADDR_STAT' returns the absolute address of the memory block of the221** statement <stat>.222*/223#define ADDR_STAT(stat) ((Stat*)(((char*)TLS(PtrBody))+(stat)))224225226/****************************************************************************227**228*T Expr . . . . . . . . . . . . . . . . . . . . . . . . type of expressions229**230** 'Expr' is the type of expressions.231**232** If 'Expr' is different from 'Stat', then a lot of things will probably233** break.234*/235#define Expr Stat236237238/****************************************************************************239**240*F IS_REFLVAR(<expr>). . . . test if an expression is a reference to a local241*F REFLVAR_LVAR(<lvar>) . . . . . convert a local to a reference to a local242*F LVAR_REFLVAR(<expr>) . . . . . convert a reference to a local to a local243**244** 'IS_REFLVAR' returns 1 if the expression <expr> is an (immediate)245** reference to a local variable, and 0 otherwise.246**247** 'REFLVAR_LVAR' returns a (immediate) reference to the local variable248** <lvar> (given by its index).249**250** 'LVAR_REFLVAR' returns the local variable (by its index) to which <expr>251** is a (immediate) reference.252*/253#define IS_REFLVAR(expr) \254(((Int)(expr) & 0x03) == 0x03)255256#define REFLVAR_LVAR(lvar) \257((Expr)(((lvar) << 2) + 0x03))258259#define LVAR_REFLVAR(expr) \260((Int)(expr) >> 2)261262263/****************************************************************************264**265*F IS_INTEXPR(<expr>). . . . test if an expression is an integer expression266*F INTEXPR_INT(<i>) . . . . . convert a C integer to an integer expression267*F INT_INTEXPR(<expr>) . . . . convert an integer expression to a C integer268**269** 'IS_INTEXPR' returns 1 if the expression <expr> is an (immediate) integer270** expression, and 0 otherwise.271**272** 'INTEXPR_INT' converts the C integer <i> to an (immediate) integer273** expression.274**275** 'INT_INTEXPR' converts the (immediate) integer expression <expr> to a C276** integer.277*/278#define IS_INTEXPR(expr) \279(((Int)(expr) & 0x03) == 0x01)280281#define INTEXPR_INT(indx) \282((Expr)(((Int)(indx) << 2) + 0x01))283284#define INT_INTEXPR(expr) \285(((Int)(expr)-0x01) >> 2)286287288/****************************************************************************289**290*S T_<name> . . . . . . . . . . . . . . symbolic names for expression types291*S FIRST_EXPR_TNUM . . . . . . . . . . . . . . . . . . first expression type292*S LAST_EXPR_TNUM . . . . . . . . . . . . . . . . . . last expression type293**294** For every type of expressions there is a symbolic name defined for this295** type.296**297** As long as expressions are represented by bags, these types must not298** overlap with the object types, lest Gasman becomes confused.299*/300#define FIRST_EXPR_TNUM ((UInt)128)301302#define T_FUNCCALL_0ARGS (FIRST_EXPR_TNUM+ 0)303#define T_FUNCCALL_1ARGS (FIRST_EXPR_TNUM+ 1)304#define T_FUNCCALL_2ARGS (FIRST_EXPR_TNUM+ 2)305#define T_FUNCCALL_3ARGS (FIRST_EXPR_TNUM+ 3)306#define T_FUNCCALL_4ARGS (FIRST_EXPR_TNUM+ 4)307#define T_FUNCCALL_5ARGS (FIRST_EXPR_TNUM+ 5)308#define T_FUNCCALL_6ARGS (FIRST_EXPR_TNUM+ 6)309#define T_FUNCCALL_XARGS (FIRST_EXPR_TNUM+ 7)310#define T_FUNC_EXPR (FIRST_EXPR_TNUM+ 8)311312#define T_OR (FIRST_EXPR_TNUM+ 9)313#define T_AND (FIRST_EXPR_TNUM+10)314#define T_NOT (FIRST_EXPR_TNUM+11)315#define T_EQ (FIRST_EXPR_TNUM+12)316#define T_NE (FIRST_EXPR_TNUM+13)317#define T_LT (FIRST_EXPR_TNUM+14)318#define T_GE (FIRST_EXPR_TNUM+15)319#define T_GT (FIRST_EXPR_TNUM+16)320#define T_LE (FIRST_EXPR_TNUM+17)321#define T_IN (FIRST_EXPR_TNUM+18)322#define T_SUM (FIRST_EXPR_TNUM+19)323#define T_AINV (FIRST_EXPR_TNUM+20)324#define T_DIFF (FIRST_EXPR_TNUM+21)325#define T_PROD (FIRST_EXPR_TNUM+22)326#define T_INV (FIRST_EXPR_TNUM+23)327#define T_QUO (FIRST_EXPR_TNUM+24)328#define T_MOD (FIRST_EXPR_TNUM+25)329#define T_POW (FIRST_EXPR_TNUM+26)330331#define T_INTEXPR (FIRST_EXPR_TNUM+27)332#define T_INT_EXPR (FIRST_EXPR_TNUM+28)333#define T_TRUE_EXPR (FIRST_EXPR_TNUM+29)334#define T_FALSE_EXPR (FIRST_EXPR_TNUM+30)335#define T_CHAR_EXPR (FIRST_EXPR_TNUM+31)336#define T_PERM_EXPR (FIRST_EXPR_TNUM+32)337#define T_PERM_CYCLE (FIRST_EXPR_TNUM+33)338#define T_LIST_EXPR (FIRST_EXPR_TNUM+34)339#define T_LIST_TILD_EXPR (FIRST_EXPR_TNUM+35)340#define T_RANGE_EXPR (FIRST_EXPR_TNUM+36)341#define T_STRING_EXPR (FIRST_EXPR_TNUM+37)342#define T_REC_EXPR (FIRST_EXPR_TNUM+38)343#define T_REC_TILD_EXPR (FIRST_EXPR_TNUM+39)344345#define T_REFLVAR (FIRST_EXPR_TNUM+40)346#define T_REF_LVAR (FIRST_EXPR_TNUM+41)347#define T_REF_LVAR_01 (FIRST_EXPR_TNUM+42)348#define T_REF_LVAR_02 (FIRST_EXPR_TNUM+43)349#define T_REF_LVAR_03 (FIRST_EXPR_TNUM+44)350#define T_REF_LVAR_04 (FIRST_EXPR_TNUM+45)351#define T_REF_LVAR_05 (FIRST_EXPR_TNUM+46)352#define T_REF_LVAR_06 (FIRST_EXPR_TNUM+47)353#define T_REF_LVAR_07 (FIRST_EXPR_TNUM+48)354#define T_REF_LVAR_08 (FIRST_EXPR_TNUM+49)355#define T_REF_LVAR_09 (FIRST_EXPR_TNUM+50)356#define T_REF_LVAR_10 (FIRST_EXPR_TNUM+51)357#define T_REF_LVAR_11 (FIRST_EXPR_TNUM+52)358#define T_REF_LVAR_12 (FIRST_EXPR_TNUM+53)359#define T_REF_LVAR_13 (FIRST_EXPR_TNUM+54)360#define T_REF_LVAR_14 (FIRST_EXPR_TNUM+55)361#define T_REF_LVAR_15 (FIRST_EXPR_TNUM+56)362#define T_REF_LVAR_16 (FIRST_EXPR_TNUM+57)363#define T_ISB_LVAR (FIRST_EXPR_TNUM+58)364#define T_REF_HVAR (FIRST_EXPR_TNUM+59)365#define T_ISB_HVAR (FIRST_EXPR_TNUM+60)366#define T_REF_GVAR (FIRST_EXPR_TNUM+61)367#define T_ISB_GVAR (FIRST_EXPR_TNUM+62)368#define T_ELM_LIST (FIRST_EXPR_TNUM+63)369#define T_ELMS_LIST (FIRST_EXPR_TNUM+64)370#define T_ELM_LIST_LEV (FIRST_EXPR_TNUM+65)371#define T_ELMS_LIST_LEV (FIRST_EXPR_TNUM+66)372#define T_ISB_LIST (FIRST_EXPR_TNUM+67)373#define T_ELM_REC_NAME (FIRST_EXPR_TNUM+68)374#define T_ELM_REC_EXPR (FIRST_EXPR_TNUM+69)375#define T_ISB_REC_NAME (FIRST_EXPR_TNUM+70)376#define T_ISB_REC_EXPR (FIRST_EXPR_TNUM+71)377#define T_ELM_POSOBJ (FIRST_EXPR_TNUM+72)378#define T_ELMS_POSOBJ (FIRST_EXPR_TNUM+73)379#define T_ELM_POSOBJ_LEV (FIRST_EXPR_TNUM+74)380#define T_ELMS_POSOBJ_LEV (FIRST_EXPR_TNUM+75)381#define T_ISB_POSOBJ (FIRST_EXPR_TNUM+76)382#define T_ELM_COMOBJ_NAME (FIRST_EXPR_TNUM+77)383#define T_ELM_COMOBJ_EXPR (FIRST_EXPR_TNUM+78)384#define T_ISB_COMOBJ_NAME (FIRST_EXPR_TNUM+79)385#define T_ISB_COMOBJ_EXPR (FIRST_EXPR_TNUM+80)386387#define T_FUNCCALL_OPTS (FIRST_EXPR_TNUM+81)388#define T_FLOAT_EXPR_EAGER (FIRST_EXPR_TNUM+82)389#define T_FLOAT_EXPR_LAZY (FIRST_EXPR_TNUM+83)390391#define T_ELM2_LIST (FIRST_EXPR_TNUM+84)392#define T_ELMX_LIST (FIRST_EXPR_TNUM+85)393#define T_ASS2_LIST (FIRST_EXPR_TNUM+86)394#define T_ASSX_LIST (FIRST_EXPR_TNUM+87)395396#define LAST_EXPR_TNUM T_ASSX_LIST397398399/****************************************************************************400**401*F TNUM_EXPR(<expr>) . . . . . . . . . . . . . . . . . type of an expression402**403** 'TNUM_EXPR' returns the type of the expression <expr>.404*/405#define TNUM_EXPR(expr) \406(IS_REFLVAR( (expr) ) ? T_REFLVAR : \407(IS_INTEXPR( (expr) ) ? T_INTEXPR : \408TNUM_STAT(expr) ))409410411/****************************************************************************412**413*F SIZE_EXPR(<expr>) . . . . . . . . . . . . . . . . . size of an expression414**415** 'SIZE_EXPR' returns the size of the expression <expr>.416**417** Note that it is *fatal* to apply 'SIZE_EXPR' to expressions of type418** 'T_REFLVAR' or 'T_INTEXPR'.419*/420#define SIZE_EXPR(expr) SIZE_STAT(expr)421422423/****************************************************************************424**425*F ADDR_EXPR(<expr>) . . . . . . . . . . . absolute address of an expression426**427** 'ADDR_EXPR' returns the absolute address of the memory block of the428** expression <expr>.429**430** Note that it is *fatal* to apply 'ADDR_EXPR' to expressions of type431** 'T_REFLVAR' or 'T_INTEXPR'.432*/433#define ADDR_EXPR(expr) ADDR_STAT(expr)434435436/****************************************************************************437**438*F FUNC_CALL(<call>) . . . . . . . . . . . . . function for a function call439*F ARGI_CALL(<call>,<i>) . . . . <i>-th formal argument for a function call440*F NARG_SIZE_CALL(<size>) . . . . . number of arguments for a function call441*F SIZE_NARG_CALL(<narg>) . . . . . . . size of the bag for a function call442**443** 'FUNC_CALL' returns the expression that should evaluate to the function444** for the procedure or function call <call>. This is a legal left value,445** so it can be used to set the expression too.446**447** 'ARGI_CALL' returns the expression that evaluate to the <i>-th actual448** argument for the procedure or function call <call>. This is a legal left449** value, so it can be used to set the expression too.450**451** 'NARG_SIZE_CALL' returns the number of arguments in a function call from452** the size <size> of the function call bag (as returned by 'SIZE_EXPR').453**454** 'SIZE_NARG_CALL' returns the size a function call bag should have for a455** function call bag with <narg> arguments.456*/457#define FUNC_CALL(call) (* (ADDR_EXPR((call)) +0 ) )458#define ARGI_CALL(call,i) (* (ADDR_EXPR((call)) +0 +(i)) )459#define NARG_SIZE_CALL(size) (((size) / sizeof(Expr)) - 1)460#define SIZE_NARG_CALL(narg) (((narg) + 1) * sizeof(Expr))461462463/****************************************************************************464**465*F ARGI_INFO(<info>,<i>) . . . <i>-th formal argument for an Info statement466*F NARG_SIZE_INFO(<size>) . . . . number of arguments for an Info statement467*F SIZE_NARG_INFO(<narg>) . . . . . . size of the bag for an Info statement468**469** 'ARGI_INFO' returns the expression that evaluates to the <i>-th actual470** argument for the Info statement <info>. This is a legal left value, so471** it can be used to set the expression too.472**473** 'NARG_SIZE_INFO' returns the number of arguments in a function call from474** the size <size> of the function call bag (as returned by 'SIZE_STAT').475**476** 'SIZE_NARG_INFO' returns the size a function call bag should have for a477** function call bag with <narg> arguments.478*/479#define ARGI_INFO(info,i) (* (ADDR_STAT((info))+(i) -1) )480#define NARG_SIZE_INFO(size) ((size) / sizeof(Expr))481#define SIZE_NARG_INFO(narg) ((narg) * sizeof(Expr))482483484/****************************************************************************485**486*V CodeResult . . . . . . . . . . . . . . . . . . . . . . result of coding487**488** 'CodeResult' is the result of the coding, i.e., the function that was489** coded.490*/491extern Obj CodeResult;492493494/****************************************************************************495**496*F PushStat(<stat>) . . . . . . . . . . . . . push statement onto the stack497*F PopStat() . . . . . . . . . . . . . . . . . pop statement from the stack498**499** 'StackStat' is the stack of statements that have been coded.500**501** 'CountStat' is the number of statements currently on the statements502** stack.503**504** 'PushStat' pushes the statement <stat> onto the statements stack. The505** stack is automatically resized if necessary.506**507** 'PopStat' returns the top statement from the statements stack and pops508** it. It is an error if the stack is empty.509*/510extern void PushStat (511Stat stat );512513extern Stat PopStat ( void );514515516/****************************************************************************517**518519*F * * * * * * * * * * * * * coder functions * * * * * * * * * * * * * * * *520*/521522/****************************************************************************523**524525*F CodeBegin() . . . . . . . . . . . . . . . . . . . . . . . start the coder526*F CodeEnd(<error>) . . . . . . . . . . . . . . . . . . . . stop the coder527**528** 'CodeBegin' starts the coder. It is called from the immediate529** interpreter when he encounters a construct that it cannot immediately530** interpret.531**532** 'CodeEnd' stops the coder. It is called from the immediate interpreter533** when he is done with the construct that it cannot immediately interpret.534** If <error> is non-zero, a syntax error was detected by the reader, and535** the coder should only clean up.536**537** ...only function expressions inbetween...538*/539extern void CodeBegin ( void );540541extern UInt CodeEnd (542UInt error );543544545/****************************************************************************546**547*F CodeFuncCallBegin() . . . . . . . . . . . . . . code function call, begin548*F CodeFuncCallEnd(<funccall>,<options>, <nr>) . code function call, end549**550** 'CodeFuncCallBegin' is an action to code a function call. It is called551** by the reader when it encounters the parenthesis '(', i.e., *after* the552** function expression is read.553**554** 'CodeFuncCallEnd' is an action to code a function call. It is called by555** the reader when it encounters the parenthesis ')', i.e., *after* the556** argument expressions are read. <funccall> is 1 if this is a function557** call, and 0 if this is a procedure call. <nr> is the number of558** arguments. <options> is 1 if options were present after the ':' in which559** case the options have been read already.560*/561extern void CodeFuncCallBegin ( void );562563extern void CodeFuncCallEnd (564UInt funccall,565UInt options,566UInt nr );567568569/****************************************************************************570**571*F CodeFuncExprBegin(<narg>,<nloc>,<nams>,<startline>) . code function expression, begin572*F CodeFuncExprEnd(<nr>) . . . . . . . . . . . code function expression, end573**574** 'CodeFuncExprBegin' is an action to code a function expression. It is575** called when the reader encounters the beginning of a function expression.576** <narg> is the number of arguments (-1 if the function takes a variable577** number of arguments), <nloc> is the number of locals, <nams> is a list of578** local variable names.579**580** 'CodeFuncExprEnd' is an action to code a function expression. It is581** called when the reader encounters the end of a function expression. <nr>582** is the number of statements in the body of the function.583**584*/585extern void CodeFuncExprBegin (586Int narg,587Int nloc,588Obj nams,589Int startLine);590591extern void CodeFuncExprEnd (592UInt nr,593UInt mapsto );594595/****************************************************************************596**597*F CodeFuncCallOptionsBegin() . . . . . . . . . . . . . code options, begin598*F CodeFuncCallOptionsBeginElmName(<rnam>). . . code options, begin element599*F CodeFuncCallOptionsBeginElmExpr() . .. . . . .code options, begin element600*F CodeFuncCallOptionsEndElm() . . .. . . . . . . code options, end element601*F CodeFuncCallOptionsEndElmEmpty() .. . . . . . .code options, end element602*F CodeFuncCallOptionsEnd(<nr>) . . . . . . . . . . . . . code options, end603**604** The net effect of all of these is to leave a record expression on the stack605** containing the options record. It will be picked up by606** CodeFuncCallEnd()607**608*/609extern void CodeFuncCallOptionsBegin ( void );610611612extern void CodeFuncCallOptionsBeginElmName (613UInt rnam );614615extern void CodeFuncCallOptionsBeginElmExpr ( void );616617extern void CodeFuncCallOptionsEndElm ( void );618619620extern void CodeFuncCallOptionsEndElmEmpty ( void );621622extern void CodeFuncCallOptionsEnd ( UInt nr );623624625/****************************************************************************626**627*F CodeIfBegin() . . . . . . . . . . . code if-statement, begin of statement628*F CodeIfElif() . . . . . . . . . . code if-statement, begin of elif-branch629*F CodeIfElse() . . . . . . . . . . code if-statement, begin of else-branch630*F CodeIfBeginBody() . . . . . . . . . . . code if-statement, begin of body631*F CodeIfEndBody(<nr>) . . . . . . . . . . . code if-statement, end of body632*F CodeIfEnd(<nr>) . . . . . . . . . . . code if-statement, end of statement633**634** 'CodeIfBegin' is an action to code an if-statement. It is called when635** the reader encounters the 'if', i.e., *before* the condition is read.636**637** 'CodeIfElif' is an action to code an if-statement. It is called when the638** reader encounters an 'elif', i.e., *before* the condition is read.639**640** 'CodeIfElse' is an action to code an if-statement. It is called when the641** reader encounters an 'else'.642**643** 'CodeIfBeginBody' is an action to code an if-statement. It is called644** when the reader encounters the beginning of the statement body of an645** 'if', 'elif', or 'else' branch, i.e., *after* the condition is read.646**647** 'CodeIfEndBody' is an action to code an if-statement. It is called when648** the reader encounters the end of the statements body of an 'if', 'elif',649** or 'else' branch. <nr> is the number of statements in the body.650**651** 'CodeIfEnd' is an action to code an if-statement. It is called when the652** reader encounters the end of the statement. <nr> is the number of 'if',653** 'elif', or 'else' branches.654*/655extern void CodeIfBegin ( void );656657extern void CodeIfElif ( void );658659extern void CodeIfElse ( void );660661extern void CodeIfBeginBody ( void );662663extern void CodeIfEndBody (664UInt nr );665666extern void CodeIfEnd (667UInt nr );668669670/****************************************************************************671**672*F CodeForBegin() . . . . . . . . . code for-statement, begin of statement673*F CodeForIn() . . . . . . . . . . . . . . . . code for-statement, 'in' read674*F CodeForBeginBody() . . . . . . . . . . code for-statement, begin of body675*F CodeForEndBody(<nr>) . . . . . . . . . . code for-statement, end of body676*F CodeForEnd() . . . . . . . . . . . code for-statement, end of statement677**678** 'CodeForBegin' is an action to code a for-statement. It is called when679** the reader encounters the 'for', i.e., *before* the variable is read.680**681** 'CodeForIn' is an action to code a for-statement. It is called when the682** reader encounters the 'in', i.e., *after* the variable is read, but683** *before* the list expression is read.684**685** 'CodeForBeginBody' is an action to code a for-statement. It is called686** when the reader encounters the beginning of the statement body, i.e.,687** *after* the list expression is read.688**689** 'CodeForEndBody' is an action to code a for-statement. It is called when690** the reader encounters the end of the statement body. <nr> is the number691** of statements in the body.692**693** 'CodeForEnd' is an action to code a for-statement. It is called when the694** reader encounters the end of the statement, i.e., immediately after695** 'CodeForEndBody'.696*/697extern void CodeForBegin ( void );698699extern void CodeForIn ( void );700701extern void CodeForBeginBody ( void );702703extern void CodeForEndBody (704UInt nr );705706extern void CodeForEnd ( void );707708/****************************************************************************709**710*F CodeAtomicBegin() . . . . . . . code atomic-statement, begin of statement711*F CodeAtomicBeginBody() . . . . . . . . code atomic-statement, begin of body712*F CodeAtomicEndBody( <nr> ) . . . . . . . code atomic-statement, end of body713*F CodeAtomicEnd() . . . . . . . . . code atomic-statement, end of statement714**715** 'CodeAtomicBegin' is an action to code a atomic-statement. It is called716** when the reader encounters the 'atomic', i.e., *before* the condition is717** read.718**719** 'CodeAtomicBeginBody' is an action to code a atomic-statement. It is720** called when the reader encounters the beginning of the statement body,721** i.e., *after* the condition is read.722**723** 'CodeAtomicEndBody' is an action to code a atomic-statement. It is called724** when the reader encounters the end of the statement body. <nr> is the725** number of statements in the body.726**727** 'CodeAtomicEnd' is an action to code a atomic-statement. It is called when728** the reader encounters the end of the statement, i.e., immediate after729** 'CodeAtomicEndBody'.730**731** These functions are just placeholders for the future HPC-GAP code.732*/733734void CodeAtomicBegin ( void );735736void CodeAtomicBeginBody ( UInt nrexprs );737738void CodeAtomicEndBody (739UInt nrstats );740void CodeAtomicEnd ( void );741742/****************************************************************************743**744*F CodeQualifiedExprBegin() . . . code readonly/readwrite expression start745*F CodeQualifiedExprEnd() . . . . . code readonly/readwrite expression end746**747*/748749void CodeQualifiedExprBegin(UInt qual);750751void CodeQualifiedExprEnd( void );752753754/****************************************************************************755**756*F CodeWhileBegin() . . . . . . . code while-statement, begin of statement757*F CodeWhileBeginBody() . . . . . . . . code while-statement, begin of body758*F CodeWhileEndBody(<nr>) . . . . . . . . code while-statement, end of body759*F CodeWhileEnd() . . . . . . . . . code while-statement, end of statement760**761** 'CodeWhileBegin' is an action to code a while-statement. It is called762** when the reader encounters the 'while', i.e., *before* the condition is763** read.764**765** 'CodeWhileBeginBody' is an action to code a while-statement. It is766** called when the reader encounters the beginning of the statement body,767** i.e., *after* the condition is read.768**769** 'CodeWhileEndBody' is an action to code a while-statement. It is called770** when the reader encounters the end of the statement body. <nr> is the771** number of statements in the body.772**773** 'CodeWhileEnd' is an action to code a while-statement. It is called when774** the reader encounters the end of the statement, i.e., immediate after775** 'CodeWhileEndBody'.776*/777extern void CodeWhileBegin ( void );778779extern void CodeWhileBeginBody ( void );780781extern void CodeWhileEndBody (782UInt nr );783784extern void CodeWhileEnd ( void );785786787/****************************************************************************788**789*F CodeRepeatBegin() . . . . . . . code repeat-statement, begin of statement790*F CodeRepeatBeginBody() . . . . . . . code repeat-statement, begin of body791*F CodeRepeatEndBody(<nr>) . . . . . . . code repeat-statement, end of body792*F CodeRepeatEnd() . . . . . . . . . code repeat-statement, end of statement793**794** 'CodeRepeatBegin' is an action to code a repeat-statement. It is called795** when the reader encounters the 'repeat'.796**797** 'CodeRepeatBeginBody' is an action to code a repeat-statement. It is798** called when the reader encounters the beginning of the statement body,799** i.e., immediately after 'CodeRepeatBegin'.800**801** 'CodeRepeatEndBody' is an action to code a repeat-statement. It is802** called when the reader encounters the end of the statement body, i.e.,803** *before* the condition is read. <nr> is the number of statements in the804** body.805**806** 'CodeRepeatEnd' is an action to code a repeat-statement. It is called807** when the reader encounters the end of the statement, i.e., *after* the808** condition is read.809*/810extern void CodeRepeatBegin ( void );811812extern void CodeRepeatBeginBody ( void );813814extern void CodeRepeatEndBody (815UInt nr );816817extern void CodeRepeatEnd ( void );818819820/****************************************************************************821**822*F CodeBreak() . . . . . . . . . . . . . . . . . . . . code break-statement823**824** 'CodeBreak' is the action to code a break-statement. It is called when825** the reader encounters a 'break;'.826*/827extern void CodeBreak ( void );828829830/****************************************************************************831**832*F CodeReturnObj() . . . . . . . . . . . . . . . code return-value-statement833**834** 'CodeReturnObj' is the action to code a return-value-statement. It is835** called when the reader encounters a 'return <expr>;', but *after* reading836** the expression <expr>.837*/838extern void CodeReturnObj ( void );839840841/****************************************************************************842**843*F CodeReturnVoid() . . . . . . . . . . . . . . code return-void-statement844**845** 'CodeReturnVoid' is the action to code a return-void-statement. It is846** called when the reader encounters a 'return;'.847*/848extern void CodeReturnVoid ( void );849850851/****************************************************************************852**853*F CodeOr() . . . . . . . . . . . . . . . . . . . . . . code or-expression854*F CodeAnd() . . . . . . . . . . . . . . . . . . . . . . code and-expression855*F CodeNot() . . . . . . . . . . . . . . . . . . . . . . code not-expression856*F CodeEq() . . . . . . . . . . . . . . . . . . . . . . . code =-expression857*F CodeNe() . . . . . . . . . . . . . . . . . . . . . . code <>-expression858*F CodeLt() . . . . . . . . . . . . . . . . . . . . . . . code <-expression859*F CodeGe() . . . . . . . . . . . . . . . . . . . . . . code >=-expression860*F CodeGt() . . . . . . . . . . . . . . . . . . . . . . . code >-expression861*F CodeLe() . . . . . . . . . . . . . . . . . . . . . . code <=-expression862*F CodeIn() . . . . . . . . . . . . . . . . . . . . . . code in-expression863*F CodeSum() . . . . . . . . . . . . . . . . . . . . . . . code +-expression864*F CodeAInv() . . . . . . . . . . . . . . . . . . . code unary --expression865*F CodeDiff() . . . . . . . . . . . . . . . . . . . . . . code --expression866*F CodeProd() . . . . . . . . . . . . . . . . . . . . . . code *-expression867*F CodeInv() . . . . . . . . . . . . . . . . . . . . . . code ^-1-expression868*F CodeQuo() . . . . . . . . . . . . . . . . . . . . . . . code /-expression869*F CodeMod() . . . . . . . . . . . . . . . . . . . . . . code mod-expression870*F CodePow() . . . . . . . . . . . . . . . . . . . . . . . code ^-expression871**872** 'CodeOr', 'CodeAnd', 'CodeNot', 'CodeEq', 'CodeNe', 'CodeGt', 'CodeGe',873** 'CodeIn', 'CodeSum', 'CodeDiff', 'CodeProd', 'CodeQuo', 'CodeMod', and874** 'CodePow' are the actions to code the respective operator expressions.875** They are called by the reader *after* *both* operands are read.876*/877extern void CodeOrL ( void );878879extern void CodeOr ( void );880881extern void CodeAndL ( void );882883extern void CodeAnd ( void );884885extern void CodeNot ( void );886887extern void CodeEq ( void );888889extern void CodeNe ( void );890891extern void CodeLt ( void );892893extern void CodeGe ( void );894895extern void CodeGt ( void );896897extern void CodeLe ( void );898899extern void CodeIn ( void );900901extern void CodeSum ( void );902903extern void CodeAInv ( void );904905extern void CodeDiff ( void );906907extern void CodeProd ( void );908909extern void CodeInv ( void );910911extern void CodeQuo ( void );912913extern void CodeMod ( void );914915extern void CodePow ( void );916917918/****************************************************************************919**920*F CodeIntExpr(<str>) . . . . . . . . . . . code literal integer expression921**922** 'CodeIntExpr' is the action to code a literal integer expression. <str>923** is the integer as a (null terminated) C character string.924*/925extern void CodeIntExpr (926Char * str );927extern void CodeLongIntExpr (928Obj string );929930/****************************************************************************931**932*F CodeTrueExpr() . . . . . . . . . . . . . . code literal true expression933**934** 'CodeTrueExpr' is the action to code a literal true expression.935*/936extern void CodeTrueExpr ( void );937938939/****************************************************************************940**941*F CodeFalseExpr() . . . . . . . . . . . . . . code literal false expression942**943** 'CodeFalseExpr' is the action to code a literal false expression.944*/945extern void CodeFalseExpr ( void );946947948/****************************************************************************949**950*F CodeCharExpr(<chr>) . . . . . . . . . . code literal character expression951**952** 'CodeCharExpr' is the action to code a literal character expression.953** <chr> is the C character.954*/955extern void CodeCharExpr (956Char chr );957958959/****************************************************************************960**961*F CodePermCycle(<nrx>,<nrc>) . . . . . code literal permutation expression962*F CodePerm(<nrc>) . . . . . . . . . . . code literal permutation expression963**964** 'CodePermCycle' is an action to code a literal permutation expression.965** It is called when one cycles is read completely. <nrc> is the number of966** elements in that cycle. <nrx> is the number of that cycles (i.e., 1 for967** the first cycle, 2 for the second, and so on).968**969** 'CodePerm' is an action to code a literal permutation expression. It is970** called when the permutation is read completely. <nrc> is the number of971** cycles.972*/973extern void CodePermCycle (974UInt nrx,975UInt nrc );976977extern void CodePerm (978UInt nrc );979980981/****************************************************************************982**983*F CodeListExprBegin(<top>) . . . . . . . . . . code list expression, begin984*F CodeListExprBeginElm(<pos>) . . . . . code list expression, begin element985*F CodeListExprEndElm() . . . . . . . . . code list expression, end element986*F CodeListExprEnd(<nr>,<range>,<top>,<tilde>) . . code list expression, end987*/988extern void CodeListExprBegin (989UInt top );990991extern void CodeListExprBeginElm (992UInt pos );993994extern void CodeListExprEndElm ( void );995996extern void CodeListExprEnd (997UInt nr,998UInt range,999UInt top,1000UInt tilde );100110021003/****************************************************************************1004**1005*F CodeStringExpr(<str>) . . . . . . . . . . code literal string expression1006*/1007extern void CodeStringExpr (1008Obj str );10091010/****************************************************************************1011**1012*F CodeFloatExpr(<str>) . . . . . . . . . . code literal float expression1013*/1014extern void CodeFloatExpr (1015Char * str );10161017extern void CodeLongFloatExpr (1018Obj str );101910201021/****************************************************************************1022**1023*F CodeRecExprBegin(<top>) . . . . . . . . . . code record expression, begin1024*F CodeRecExprBeginElmName(<rnam>) . . code record expression, begin element1025*F CodeRecExprBeginElmExpr() . . . . . code record expression, begin element1026*F CodeRecExprEndElmExpr() . . . . . . . code record expression, end element1027*F CodeRecExprEnd(<nr>,<top>,<tilde>) . . . . . code record expression, end1028*/1029extern void CodeRecExprBegin (1030UInt top );10311032extern void CodeRecExprBeginElmName (1033UInt rnam );10341035extern void CodeRecExprBeginElmExpr ( void );10361037extern void CodeRecExprEndElm ( void );10381039extern void CodeRecExprEnd (1040UInt nr,1041UInt top,1042UInt tilde );104310441045/****************************************************************************1046**1047*F CodeAssLVar(<lvar>) . . . . . . . . . . . . . . code assignment to local1048**1049** 'CodeAssLVar' is the action to code an assignment to the local variable1050** <lvar> (given by its index). It is called by the reader *after* the1051** right hand side expression is read.1052**1053** An assignment to a local variable is represented by a bag with two1054** subexpressions. The *first* is the local variable, the *second* is the1055** right hand side expression.1056*/1057extern void CodeAssLVar (1058UInt lvar );10591060extern void CodeUnbLVar (1061UInt lvar );106210631064/****************************************************************************1065**1066*F CodeRefLVar(<lvar>) . . . . . . . . . . . . . . . code reference to local1067**1068** 'CodeRefLVar' is the action to code a reference to the local variable1069** <lvar> (given by its index). It is called by the reader when it1070** encounters a local variable.1071**1072** A reference to a local variable is represented immediately (see1073** 'REFLVAR_LVAR').1074*/1075extern void CodeRefLVar (1076UInt lvar );10771078extern void CodeIsbLVar (1079UInt lvar );108010811082/****************************************************************************1083**1084*F CodeAssHVar(<hvar>) . . . . . . . . . . . . . . code assignment to higher1085**1086** 'CodeAssHVar' is the action to code an assignment to the higher variable1087** <hvar> (given by its level and index). It is called by the reader1088** *after* the right hand side expression is read.1089**1090** An assignment to a higher variable is represented by a statement bag with1091** two subexpressions. The *first* is the higher variable, the *second* is1092** the right hand side expression.1093*/1094extern void CodeAssHVar (1095UInt hvar );10961097extern void CodeUnbHVar (1098UInt hvar );109911001101/****************************************************************************1102**1103*F CodeRefHVar(<hvar>) . . . . . . . . . . . . . . code reference to higher1104**1105** 'CodeRefHVar' is the action to code a reference to the higher variable1106** <hvar> (given by its level and index). It is called by the reader when1107** it encounters a higher variable.1108**1109** A reference to a higher variable is represented by an expression bag with1110** one subexpression. This is the higher variable.1111*/1112extern void CodeRefHVar (1113UInt hvar );11141115extern void CodeIsbHVar (1116UInt hvar );111711181119/****************************************************************************1120**1121*F CodeAssGVar(<gvar>) . . . . . . . . . . . . . . code assignment to global1122**1123** 'CodeAssGVar' is the action to code an assignment to the global variable1124** <gvar>. It is called by the reader *after* the right hand side1125** expression is read.1126**1127** An assignment to a global variable is represented by a statement bag with1128** two subexpressions. The *first* is the global variable, the *second* is1129** the right hand side expression.1130*/1131extern void CodeAssGVar (1132UInt gvar );11331134extern void CodeUnbGVar (1135UInt gvar );113611371138/****************************************************************************1139**1140*F CodeRefGVar(<gvar>) . . . . . . . . . . . . . . code reference to global1141**1142** 'CodeRefGVar' is the action to code a reference to the global variable1143** <gvar>. It is called by the reader when it encounters a global variable.1144**1145** A reference to a global variable is represented by an expression bag with1146** one subexpression. This is the global variable.1147*/1148extern void CodeRefGVar (1149UInt gvar );11501151extern void CodeIsbGVar (1152UInt gvar );115311541155/****************************************************************************1156**1157*F CodeAssList() . . . . . . . . . . . . . . . . . code assignment to a list1158*F CodeAsssList() . . . . . . . . . . . code multiple assignment to a list1159*F CodeAssListLevel(<level>) . . . . . . . code assignment to several lists1160*F CodeAsssListLevel(<level>) . . code multiple assignment to several lists1161*/1162extern void CodeAssList ( Int narg );11631164extern void CodeAsssList ( void );11651166extern void CodeAssListLevel ( Int narg,1167UInt level );11681169extern void CodeAsssListLevel (1170UInt level );11711172extern void CodeUnbList ( Int narg );117311741175/****************************************************************************1176**1177*F CodeElmList() . . . . . . . . . . . . . . . . . code selection of a list1178*F CodeElmsList() . . . . . . . . . . . . code multiple selection of a list1179*F CodeElmListLevel(<level>) . . . . . . . . code selection of several lists1180*F CodeElmsListLevel(<level>) . . code multiple selection of several lists1181*/1182extern void CodeElmList ( Int narg );11831184extern void CodeElmsList ( void );11851186extern void CodeElmListLevel (1187Int narg,1188UInt level);11891190extern void CodeElmsListLevel (1191UInt level );11921193extern void CodeIsbList ( Int narg );119411951196/****************************************************************************1197**1198*F CodeAssRecName(<rnam>) . . . . . . . . . . . code assignment to a record1199*F CodeAssRecExpr() . . . . . . . . . . . . . . code assignment to a record1200*/1201extern void CodeAssRecName (1202UInt rnam );12031204extern void CodeAssRecExpr ( void );12051206extern void CodeUnbRecName (1207UInt rnam );12081209extern void CodeUnbRecExpr ( void );121012111212/****************************************************************************1213**1214*F CodeElmRecName(<rnam>) . . . . . . . . . . . code selection of a record1215*F CodeElmRecExpr() . . . . . . . . . . . . . . code selection of a record1216*/1217extern void CodeElmRecName (1218UInt rnam );12191220extern void CodeElmRecExpr ( void );12211222extern void CodeIsbRecName (1223UInt rnam );12241225extern void CodeIsbRecExpr ( void );122612271228/****************************************************************************1229**1230*F CodeAssPosObj() . . . . . . . . . . . . . . . . code assignment to a list1231*F CodeAsssPosObj() . . . . . . . . . . code multiple assignment to a list1232*F CodeAssPosObjLevel(<level>) . . . . . . code assignment to several lists1233*F CodeAsssPosObjLevel(<level>) . code multiple assignment to several lists1234*/1235extern void CodeAssPosObj ( void );12361237extern void CodeAsssPosObj ( void );12381239extern void CodeAssPosObjLevel (1240UInt level );12411242extern void CodeAsssPosObjLevel (1243UInt level );12441245extern void CodeUnbPosObj ( void );124612471248/****************************************************************************1249**1250*F CodeElmPosObj() . . . . . . . . . . . . . . . . code selection of a list1251*F CodeElmsPosObj() . . . . . . . . . . . code multiple selection of a list1252*F CodeElmPosObjLevel(<level>) . . . . . . . code selection of several lists1253*F CodeElmsPosObjLevel(<level>) . code multiple selection of several lists1254*/1255extern void CodeElmPosObj ( void );12561257extern void CodeElmsPosObj ( void );12581259extern void CodeElmPosObjLevel (1260UInt level );12611262extern void CodeElmsPosObjLevel (1263UInt level );12641265extern void CodeIsbPosObj ( void );126612671268/****************************************************************************1269**1270*F CodeAssComObjName(<rnam>) . . . . . . . . . . code assignment to a record1271*F CodeAssComObjExpr() . . . . . . . . . . . . . code assignment to a record1272*/1273extern void CodeAssComObjName (1274UInt rnam );12751276extern void CodeAssComObjExpr ( void );12771278extern void CodeUnbComObjName (1279UInt rnam );12801281extern void CodeUnbComObjExpr ( void );128212831284/****************************************************************************1285**1286*F CodeElmComObjName(<rnam>) . . . . . . . . . . code selection of a record1287*F CodeElmComObjExpr() . . . . . . . . . . . . . code selection of a record1288*/1289extern void CodeElmComObjName (1290UInt rnam );12911292extern void CodeElmComObjExpr ( void );12931294extern void CodeIsbComObjName (1295UInt rnam );12961297extern void CodeIsbComObjExpr ( void );12981299/****************************************************************************1300**1301*F CodeEmpty() . . . . code an empty statement1302**1303*/13041305extern void CodeEmpty( void );13061307/****************************************************************************1308**1309*F CodeInfoBegin() . . . . . . . . . . . . . start coding of Info statement1310*F CodeInfoMiddle() . . . . . . . . . shift to coding printable arguments1311*F CodeInfoEnd( <narg> ) . . Info statement complete, <narg> things to print1312**1313** These actions deal with the Info statement, which is coded specially,1314** because not all of its arguments are always evaluated.1315*/1316extern void CodeInfoBegin ( void );13171318extern void CodeInfoMiddle ( void );13191320extern void CodeInfoEnd (1321UInt narg );132213231324/****************************************************************************1325**1326*F CodeAssertBegin() . . . . . . . start interpretation of Assert statement1327*F CodeAsseerAfterLevel() . . called after the first argument has been read1328*F CodeAssertAfterCondition() called after the second argument has been read1329*F CodeAssertEnd2Args() . . . . called after reading the closing parenthesis1330*F CodeAssertEnd3Args() . . . . called after reading the closing parenthesis1331*/1332extern void CodeAssertBegin ( void );13331334extern void CodeAssertAfterLevel ( void );13351336extern void CodeAssertAfterCondition ( void );13371338extern void CodeAssertEnd2Args ( void );13391340extern void CodeAssertEnd3Args ( void );13411342/* CodeContinue() . . . . . . . . . . . . . code continue-statement */1343extern void CodeContinue ( void );1344134513461347/****************************************************************************1348**13491350*F * * * * * * * * * * * * * initialize package * * * * * * * * * * * * * * *1351*/13521353/****************************************************************************1354**13551356*F InitInfoCode() . . . . . . . . . . . . . . . . . table of init functions1357*/1358StructInitInfo * InitInfoCode ( void );1359136013611362#endif // GAP_CODE_H13631364/****************************************************************************1365**13661367*E code.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . ends here1368*/136913701371