Browse Source

Merge du compilateur sécurisé et non sécurisé (différence mineure ne justifiant pas deux branches, remplacé par un define et deux tests)

Paul Faure 5 months ago
parent
commit
b501ce3389
1 changed files with 11 additions and 4 deletions
  1. 11
    4
      Lex_Yacc/as.y

+ 11
- 4
Lex_Yacc/as.y View File

@@ -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
 }

Loading…
Cancel
Save