/* Copyright (c) 2019 ACK Project. * See the copyright notice in the ACK home directory, * in the file "Copyright". * * Created on: 2019-02-26 * */ #ifndef CODE_H_ #define CODE_H_ #include "parameters.h" #include #include /* Forward declarations. */ struct node; struct desig; struct type; /* Generate code to push constant "cst" with size "size" bytes. */ void CodeConst(arith cst, int size); /* Generate constant character or string. */ void CodeString(register struct node *nd); /* Generate code for an expression contained in "nd". */ void CodeExpr(struct node *nd, struct desig *ds, label true_label, label false_label); /* Generate implicit type conversion code. */ void CodeCoercion(struct type *t1, struct type *t2); /* Generate code for a procedure call including parameter setup. Checking of parameters and result is already done. */ void CodeCall(struct node *nd); void CodePString(struct node *nd, struct type *tp); /* Generate a range check if necessary */ void RangeCheck(register struct type *tpl, struct type *tpr); void CodeOper(register struct node *expr, label true_label, label false_label); /* Generate code to push the value of the expression "nd" on the stack. */ void CodePExpr(register struct node *nd); /* Generate code to store the expression on the stack into the designator "nd". */ void CodeDStore(register struct node *nd); #ifdef SQUEEZE void c_bra(label l); void c_loc(int n); void c_lae_dlb(label l); void CAL(char *name, int ssp); #endif #endif /* CODE_H_ */