|
@@ -20,6 +20,7 @@
|
20
|
20
|
#include <stdlib.h>
|
21
|
21
|
#include "../Tables/Instructions/tab_instruc.h"
|
22
|
22
|
#define TAILLE 1024
|
|
23
|
+#define SECURISED (0)
|
23
|
24
|
|
24
|
25
|
struct type_t type_courant;
|
25
|
26
|
struct type_t return_type_fonc;
|
|
@@ -217,11 +218,17 @@ Instruction : Print tPV;
|
217
|
218
|
/*************************************/
|
218
|
219
|
/*************************************/
|
219
|
220
|
|
220
|
|
-Invocation : tID tOBRACE {push("0_TEMPORARY_CTX", 0, integer); // On reserve la place du contexte
|
221
|
|
- push("0_TEMPORARY_ADDR_RT", 0, pointer); // On reserve la place de l'adresse de retour
|
|
221
|
+Invocation : tID tOBRACE {if (!SECURISED) {
|
|
222
|
+ push("0_TEMPORARY_CTX", 0, integer); // On reserve la place du contexte
|
|
223
|
+ push("0_TEMPORARY_ADDR_RT", 0, pointer); // On reserve la place de l'adresse de retour
|
|
224
|
+ }
|
222
|
225
|
}
|
223
|
226
|
Params tCBRACE {struct fonction_t fonc = get_fonction($1); // On récupère la fonction
|
224
|
|
- multiple_pop($4 + 2); // On pop les paramètres de la table des symboles
|
|
227
|
+ if (!SECURISED) {
|
|
228
|
+ multiple_pop($4 + 2); // On pop les paramètres de la table des symboles
|
|
229
|
+ } else {
|
|
230
|
+ multiple_pop($4); // On pop les paramètres de la table des symboles
|
|
231
|
+ }
|
225
|
232
|
add_operation(CALL,fonc.first_instruction_line, get_last_addr(),0); // On écrit le CALL
|
226
|
233
|
// On renvoi l'adresse de la valeur retour de la fonction
|
227
|
234
|
if (fonc.return_type.pointeur_level > 0 || fonc.return_type.isTab) {
|
|
@@ -688,6 +695,6 @@ SuiteInitTab : {$$ = 0;
|
688
|
695
|
|
689
|
696
|
%%
|
690
|
697
|
void main(void) {
|
691
|
|
- init();
|
|
698
|
+ init();
|
692
|
699
|
yyparse();
|
693
|
700
|
}
|