Skip to content

Les structures dans mon langage

Mon langage permet de grouper des variables.

On utilise le mécanisme des structures présent dans d'autres langages compilés.

J'utilise un système basique de prototype/Allocation

On fait un prototype de la structure, ensuite on peut la déclarer sous forme de référence memoire ou de données organisées sur la pile allouée.

Démonstration

Considérons le code suivant :

// gaspardl.exe console g/Consoleinc.g g/Struct.g
// il faut gaspardl 1.2 !!!
struct pack teststruct = begin 


element  uint32_t texte2;
element  uint32_t texte;


element double double1;


end



global struct teststruct  test_pile; 

global struct teststruct  test_pile_arr[255]; 
global  struct teststruct ptr test_struct_ptr;

global string log1 = "log : %d \n";

global string log2 = "log : %f \n";




procedure main return uint32_t = begin 

structptr test_struct_ptr = 0xCAFEBABE; // adresse bidon, vous devez alloc avec MALLOC()

test_pile_arr[255].double1 = 14.0444;


test_pile.texte = cast uint32_t 26666;
call printf log2 test_pile_arr[255].double1;


call printf log1 sizeof test_pile_arr;


return cast uint32_t 1;

end




commentaires

Cas spécial :


struct pack teststruct = begin 


element  uint32_t texte2;
element  uint32_t texte;


element double double1;


end

une structure peut se déclarer sans pack, pack permet juste d'éviter certaines optimisations LLVM qui vise a arrondir la taille de la structure.

Déclaration

Admettons le code suivant :

global struct teststruct  test_pile; // aucune difficulté

global struct teststruct  test_pile_arr[255];  // ok, allocation sur la pile 255*teststruct
global  struct teststruct ptr test_struct_ptr; // pointeur


Dans le cas du pointeur, pour lui associer une adresse dans la memoire on utilise l'opérateur structptr

j'ai décidé d'introduire le mot clé structptr pour éviter une ambiguité avec =

si structptr est présent avec le nom, on sait qu'on référence un ptr à une struct.

Limitations

  • pour l'instant, pas de ref de structure (pile ou ptr) dans une struct -> très problématique, je travaille dur
  • le bits fields existe : exemple :

  element bits 4  limit_high ;
  element bits 4  flags      ;


ça marche, mais c'est buggé.