From b77b9b90b2bed0c6f3ac7dc2657511616ff39d60 Mon Sep 17 00:00:00 2001 From: mathis Date: Tue, 25 Jan 2022 17:35:43 +0100 Subject: [PATCH] it works completely like no bugs at all --- comp/class.txt | 45 ++ comp/err1.txt | 0 comp/err2.txt | 0 comp/err3.txt | 0 comp/err4.txt | 0 comp/errCast.txt | 0 comp/errCycle.txt | 0 comp/errResult.txt | 0 comp/ex1.txt | 1303 +++++++++++++++++++++++++++++++++++++ comp/exprs.txt | 48 ++ comp/gn.txt | 1482 +++++++++++++++++++++++++++++++++++++++++++ comp/grandMere.txt | 220 +++++++ comp/helloworld.txt | 15 + comp/masking1.txt | 237 +++++++ comp/test.txt | 37 ++ lib/compil.ml | 11 +- 16 files changed, 3393 insertions(+), 5 deletions(-) create mode 100644 comp/class.txt create mode 100644 comp/err1.txt create mode 100644 comp/err2.txt create mode 100644 comp/err3.txt create mode 100644 comp/err4.txt create mode 100644 comp/errCast.txt create mode 100644 comp/errCycle.txt create mode 100644 comp/errResult.txt create mode 100644 comp/ex1.txt create mode 100644 comp/exprs.txt create mode 100644 comp/gn.txt create mode 100644 comp/grandMere.txt create mode 100644 comp/helloworld.txt create mode 100644 comp/masking1.txt create mode 100644 comp/test.txt diff --git a/comp/class.txt b/comp/class.txt new file mode 100644 index 0000000..cf8269e --- /dev/null +++ b/comp/class.txt @@ -0,0 +1,45 @@ +-- ----- VTABLES ----- +ALLOC 1 +DUPN 1 +PUSHA Foo_5_print +STORE 0 +-- ----- STATIC ATTRIBS ----- +PUSHN 0 +-- ----- MAIN INSTRUCTION ----- +START +PUSHN 1 +PUSHN 0 +ALLOC 1 +DUPN 1 +PUSHG 0 +STORE 0 +PUSHA _CTOR_Foo_ +CALL +POPN 0 +STOREL 0 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +POPN 1 +POPN 0 +POPN 1 +STOP +-- ----- FUNCTIONS ----- +_CTOR_Foo_: NOP +PUSHN 0 +POPN 0 +RETURN +Foo_5_print: NOP +PUSHN 0 +PUSHS "hello" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +POPN 0 +RETURN diff --git a/comp/err1.txt b/comp/err1.txt new file mode 100644 index 0000000..e69de29 diff --git a/comp/err2.txt b/comp/err2.txt new file mode 100644 index 0000000..e69de29 diff --git a/comp/err3.txt b/comp/err3.txt new file mode 100644 index 0000000..e69de29 diff --git a/comp/err4.txt b/comp/err4.txt new file mode 100644 index 0000000..e69de29 diff --git a/comp/errCast.txt b/comp/errCast.txt new file mode 100644 index 0000000..e69de29 diff --git a/comp/errCycle.txt b/comp/errCycle.txt new file mode 100644 index 0000000..e69de29 diff --git a/comp/errResult.txt b/comp/errResult.txt new file mode 100644 index 0000000..e69de29 diff --git a/comp/ex1.txt b/comp/ex1.txt new file mode 100644 index 0000000..3b4c4cf --- /dev/null +++ b/comp/ex1.txt @@ -0,0 +1,1303 @@ +-- ----- VTABLES ----- +ALLOC 9 +DUPN 1 +PUSHA Point_4_egal +STORE 0 +DUPN 1 +PUSHA Point_9_allClones +STORE 1 +DUPN 1 +PUSHA Point_5_clone +STORE 2 +DUPN 1 +PUSHA Point_5_print +STORE 3 +DUPN 1 +PUSHA Point_4_move +STORE 4 +DUPN 1 +PUSHA Point_8_isCloned +STORE 5 +DUPN 1 +PUSHA Point_7_setName +STORE 6 +DUPN 1 +PUSHA Point_4_gety +STORE 7 +DUPN 1 +PUSHA Point_4_getx +STORE 8 +ALLOC 2 +DUPN 1 +PUSHA Couleur_7_estGris +STORE 0 +DUPN 1 +PUSHA Couleur_4_name +STORE 1 +ALLOC 12 +DUPN 1 +PUSHA Point_4_egal +STORE 0 +DUPN 1 +PUSHA Point_9_allClones +STORE 1 +DUPN 1 +PUSHA PointColore_5_clone +STORE 2 +DUPN 1 +PUSHA PointColore_5_print +STORE 3 +DUPN 1 +PUSHA Point_4_move +STORE 4 +DUPN 1 +PUSHA Point_8_isCloned +STORE 5 +DUPN 1 +PUSHA Point_7_setName +STORE 6 +DUPN 1 +PUSHA Point_4_gety +STORE 7 +DUPN 1 +PUSHA Point_4_getx +STORE 8 +DUPN 1 +PUSHA PointColore_7_estGris +STORE 9 +DUPN 1 +PUSHA PointColore_6_colore +STORE 10 +DUPN 1 +PUSHA PointColore_7_couleur +STORE 11 +ALLOC 12 +DUPN 1 +PUSHA Point_4_egal +STORE 0 +DUPN 1 +PUSHA Point_9_allClones +STORE 1 +DUPN 1 +PUSHA PointColore_5_clone +STORE 2 +DUPN 1 +PUSHA PointColore_5_print +STORE 3 +DUPN 1 +PUSHA Point_4_move +STORE 4 +DUPN 1 +PUSHA Point_8_isCloned +STORE 5 +DUPN 1 +PUSHA Point_7_setName +STORE 6 +DUPN 1 +PUSHA Point_4_gety +STORE 7 +DUPN 1 +PUSHA Point_4_getx +STORE 8 +DUPN 1 +PUSHA PointNoir_7_estGris +STORE 9 +DUPN 1 +PUSHA PointNoir_6_colore +STORE 10 +DUPN 1 +PUSHA PointNoir_7_couleur +STORE 11 +ALLOC 12 +DUPN 1 +PUSHA Point_4_egal +STORE 0 +DUPN 1 +PUSHA Point_9_allClones +STORE 1 +DUPN 1 +PUSHA PointColore_5_clone +STORE 2 +DUPN 1 +PUSHA PointColore_5_print +STORE 3 +DUPN 1 +PUSHA Point_4_move +STORE 4 +DUPN 1 +PUSHA Point_8_isCloned +STORE 5 +DUPN 1 +PUSHA Point_7_setName +STORE 6 +DUPN 1 +PUSHA Point_4_gety +STORE 7 +DUPN 1 +PUSHA Point_4_getx +STORE 8 +DUPN 1 +PUSHA DefaultPoint_7_estGris +STORE 9 +DUPN 1 +PUSHA PointColore_6_colore +STORE 10 +DUPN 1 +PUSHA DefaultPoint_7_couleur +STORE 11 +-- ----- STATIC ATTRIBS ----- +PUSHN 4 +-- ----- MAIN INSTRUCTION ----- +START +PUSHN 11 +PUSHS "Debut du programme" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHA Point_4_init +CALL +POPN 0 +POPN 1 +PUSHI 0 +PUSHA CouleurFactory_4_init +CALL +POPN 0 +POPN 1 +PUSHI 1 +STOREL 5 +PUSHI 0 +STOREL 6 +ALLOC 7 +DUPN 1 +PUSHG 0 +STORE 0 +PUSHI 1 +PUSHI 5 +PUSHS "p1" +PUSHA _CTOR_Point_ +CALL +POPN 3 +STOREL 0 +ALLOC 7 +DUPN 1 +PUSHG 0 +STORE 0 +PUSHI 2 +PUSHI 3 +PUSHS "p2" +PUSHA _CTOR_Point_ +CALL +POPN 3 +STOREL 1 +ALLOC 7 +DUPN 1 +PUSHG 0 +STORE 0 +PUSHI 0 +PUSHI 0 +PUSHS "p3" +PUSHA _CTOR_Point_ +CALL +POPN 3 +STOREL 2 +PUSHI 12 +STOREL 7 +ALLOC 8 +DUPN 1 +PUSHG 3 +STORE 0 +PUSHI 0 +PUSHI 0 +PUSHI 0 +PUSHA CouleurFactory_5_blanc +CALL +POPN 0 +PUSHA _CTOR_PointColore_ +CALL +POPN 3 +STOREL 8 +ALLOC 8 +DUPN 1 +PUSHG 4 +STORE 0 +PUSHI 1 +PUSHI 0 +PUSHI 1 +SUB +PUSHA _CTOR_PointNoir_ +CALL +POPN 2 +STOREL 9 +ALLOC 8 +DUPN 1 +PUSHG 5 +STORE 0 +PUSHA _CTOR_DefaultPoint_ +CALL +POPN 0 +STOREL 10 +PUSHI 0 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHI 0 +PUSHL 1 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 8 +CALL +POPN 1 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 7 +CALL +POPN 1 +PUSHI 0 +PUSHL 1 +DUPN 1 +LOAD 0 +LOAD 4 +CALL +POPN 4 +POPN 1 +PUSHI 0 +PUSHI 0 +PUSHL 1 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHI 0 +PUSHL 8 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHS "origine" +PUSHL 8 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL 5 +PUSHL 8 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 8 +CALL +POPN 1 +PUSHI 2 +PUSHI 5 +MUL +SUB +PUSHI 3 +SUB +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 7 +CALL +POPN 1 +PUSHI 0 +PUSHL 1 +DUPN 1 +LOAD 0 +LOAD 4 +CALL +POPN 4 +POPN 1 +PUSHI 0 +PUSHL 5 +PUSHL 1 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +POPN 1 +PUSHS "On va essayer le clonage:" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 2 +CALL +POPN 1 +STOREL 3 +PUSHI 0 +PUSHL 6 +PUSHL 3 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +POPN 1 +PUSHS "p1 isCloned: " +DUPN 1 +WRITES +POPN 1 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 5 +CALL +POPN 1 +JZ lbl1 +PUSHS "OK" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +JUMP lbl2 +lbl1: NOP +PUSHS "KO" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +lbl2: NOP +PUSHI 0 +PUSHL 3 +DUPN 1 +LOAD 0 +LOAD 2 +CALL +POPN 1 +STOREL 4 +PUSHI 0 +PUSHL 6 +PUSHI 0 +PUSHI 54 +PUSHI 36 +PUSHI 0 +PUSHL 4 +DUPN 1 +LOAD 0 +LOAD 4 +CALL +POPN 4 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +POPN 1 +PUSHS "Impression de tous les clones de p1:" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 1 +CALL +POPN 1 +POPN 1 +PUSHS "Fin de l'impression de tous les clones" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHS "Valeur du compteur de nombre de points: " +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHA Point_7_howMany +CALL +POPN 0 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHI 2 +PUSHI 0 +PUSHI 3 +SUB +PUSHI 0 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 2 +CALL +POPN 1 +DUPN 1 +LOAD 0 +LOAD 4 +CALL +POPN 4 +STOREL 0 +PUSHI 0 +PUSHL 5 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL 5 +PUSHI 0 +PUSHL 8 +DUPN 1 +LOAD 0 +LOAD 2 +CALL +POPN 1 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +POPN 1 +PUSHS "test(Point, PointColore, PointNoir)" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHL 0 +PUSHL 8 +PUSHL 9 +PUSHA Test_4_test +CALL +POPN 3 +POPN 1 +PUSHS "test(PointNoir, PointNoir, PointNoir)" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHL 9 +PUSHL 9 +PUSHL 9 +PUSHA Test_4_test +CALL +POPN 3 +POPN 1 +PUSHL 9 +STOREL 0 +PUSHI 0 +PUSHL 8 +PUSHA Test_5_test2 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHL 9 +PUSHA Test_5_test2 +CALL +POPN 1 +POPN 1 +PUSHL 9 +STOREL 8 +PUSHS "test(PointNoir, PointNoir, PointNoir)" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHL 0 +PUSHL 8 +PUSHL 9 +PUSHA Test_4_test +CALL +POPN 3 +POPN 1 +PUSHI 0 +PUSHL 8 +PUSHA Test_5_test2 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHL 9 +PUSHA Test_5_test2 +CALL +POPN 1 +POPN 1 +PUSHS "\nDone" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +POPN 11 +STOP +-- ----- FUNCTIONS ----- +_CTOR_Point_: NOP +PUSHN 0 +PUSHL -4 +LOAD 4 +PUSHL -3 +STORE 3 +PUSHL -4 +LOAD 5 +PUSHL -2 +STORE 4 +PUSHL -4 +LOAD 6 +PUSHL -1 +STORE 5 +PUSHL -4 +LOAD 2 +PUSHI 0 +PUSHA Point_4_incr +CALL +POPN 0 +STORE 1 +PUSHL -4 +LOAD 3 +PUSHI 0 +STORE 2 +POPN 0 +RETURN +Point_4_egal: NOP +PUSHN 2 +PUSHL -2 +LOAD 4 +PUSHL -1 +LOAD 4 +SUB +STOREL 0 +PUSHL -2 +LOAD 5 +PUSHL -1 +LOAD 5 +SUB +STOREL 1 +PUSHI 0 +STOREL -3 +PUSHL 0 +JZ lbl3 +PUSHN 0 +POPN 0 +JUMP lbl4 +lbl3: NOP +PUSHN 0 +PUSHL 1 +PUSHI 0 +EQUAL +STOREL -3 +POPN 0 +lbl4: NOP +POPN 2 +RETURN +Point_9_allClones: NOP +PUSHN 0 +PUSHL -1 +LOAD 3 +PUSHI 0 +EQUAL +NOT +JZ lbl5 +PUSHN 0 +PUSHI 0 +PUSHI 1 +PUSHL -1 +LOAD 1 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL -1 +LOAD 1 +DUPN 1 +LOAD 0 +LOAD 1 +CALL +POPN 1 +POPN 1 +POPN 0 +JUMP lbl6 +lbl5: NOP +PUSHN 0 +POPN 0 +lbl6: NOP +POPN 0 +RETURN +Point_5_clone: NOP +PUSHN 0 +PUSHL -1 +LOAD 3 +PUSHI 1 +EQUAL +POPN 1 +PUSHL -1 +LOAD 1 +ALLOC 7 +DUPN 1 +PUSHG 0 +STORE 0 +PUSHL -1 +LOAD 4 +PUSHL -1 +LOAD 5 +PUSHL -1 +LOAD 6 +PUSHS "'" +CONCAT +PUSHA _CTOR_Point_ +CALL +POPN 3 +STORE 0 +PUSHL -1 +LOAD 1 +STOREL -2 +POPN 0 +RETURN +Point_5_print: NOP +PUSHN 0 +PUSHL -2 +JZ lbl7 +PUSHS "Inside Point::print" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +JUMP lbl8 +lbl7: NOP +PUSHN 0 +POPN 0 +lbl8: NOP +PUSHL -1 +LOAD 6 +DUPN 1 +WRITES +POPN 1 +PUSHS "= (" +PUSHL -1 +LOAD 4 +STR +CONCAT +PUSHS ", " +CONCAT +PUSHL -1 +LOAD 5 +STR +CONCAT +PUSHS ")" +CONCAT +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +POPN 0 +RETURN +Point_4_move: NOP +PUSHN 0 +PUSHL -1 +LOAD 4 +PUSHL -1 +LOAD 4 +PUSHL -4 +ADD +STORE 3 +PUSHL -1 +LOAD 5 +PUSHL -1 +LOAD 5 +PUSHL -3 +ADD +STORE 4 +PUSHL -2 +JZ lbl9 +PUSHN 0 +PUSHI 0 +PUSHL -2 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +POPN 1 +POPN 0 +JUMP lbl10 +lbl9: NOP +PUSHN 0 +POPN 0 +lbl10: NOP +PUSHL -1 +STOREL -5 +POPN 0 +RETURN +Point_8_isCloned: NOP +PUSHL -1 +LOAD 3 +PUSHI 0 +EQUAL +NOT +STOREL -2 +RETURN +Point_7_setName: NOP +PUSHN 0 +PUSHL -1 +LOAD 6 +PUSHL -2 +STORE 5 +POPN 0 +RETURN +Point_4_gety: NOP +PUSHL -1 +LOAD 5 +STOREL -2 +RETURN +Point_4_getx: NOP +PUSHL -1 +LOAD 4 +STOREL -2 +RETURN +Point_4_init: NOP +PUSHN 0 +PUSHG 0 +PUSHI 0 +STORE 0 +POPN 0 +RETURN +Point_7_howMany: NOP +PUSHG 0 +STOREL -1 +RETURN +Point_4_incr: NOP +PUSHN 0 +PUSHG 0 +PUSHG 0 +PUSHI 1 +ADD +STORE 0 +PUSHG 0 +STOREL -1 +POPN 0 +RETURN +_CTOR_Couleur_: NOP +PUSHN 0 +PUSHL -2 +LOAD 1 +PUSHL -1 +STORE 0 +PUSHL -2 +LOAD 1 +PUSHI 0 +INF +JZ lbl11 +PUSHL -2 +LOAD 1 +PUSHI 0 +STORE 0 +JUMP lbl12 +lbl11: NOP +PUSHL -2 +LOAD 1 +PUSHI 2 +SUP +JZ lbl13 +PUSHL -2 +LOAD 1 +PUSHI 0 +STORE 0 +JUMP lbl14 +lbl13: NOP +PUSHN 0 +POPN 0 +lbl14: NOP +lbl12: NOP +POPN 0 +RETURN +Couleur_7_estGris: NOP +PUSHN 0 +PUSHS "Inside Couleur::estGris" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHL -1 +LOAD 1 +PUSHI 2 +EQUAL +STOREL -2 +POPN 0 +RETURN +Couleur_4_name: NOP +PUSHN 1 +PUSHL -2 +JZ lbl15 +PUSHS "Inside Couleur::couleur" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +JUMP lbl16 +lbl15: NOP +PUSHN 0 +POPN 0 +lbl16: NOP +PUSHL -1 +LOAD 1 +PUSHI 0 +EQUAL +JZ lbl17 +PUSHS "Blanc" +STOREL -3 +JUMP lbl18 +lbl17: NOP +PUSHN 1 +PUSHS "Noir" +STOREL 1 +PUSHS "Gris" +STOREL 0 +PUSHL -1 +LOAD 1 +PUSHI 1 +EQUAL +JZ lbl19 +PUSHL 1 +STOREL 0 +JUMP lbl20 +lbl19: NOP +PUSHN 0 +POPN 0 +lbl20: NOP +PUSHL 0 +STOREL -3 +POPN 1 +lbl18: NOP +POPN 1 +RETURN +_CTOR_CouleurFactory_: NOP +PUSHN 0 +POPN 0 +RETURN +CouleurFactory_4_gris: NOP +PUSHG 3 +STOREL -1 +RETURN +CouleurFactory_4_noir: NOP +PUSHG 2 +STOREL -1 +RETURN +CouleurFactory_5_blanc: NOP +PUSHG 1 +STOREL -1 +RETURN +CouleurFactory_4_init: NOP +PUSHN 0 +PUSHG 1 +ALLOC 2 +DUPN 1 +PUSHG 1 +STORE 0 +PUSHI 0 +PUSHA _CTOR_Couleur_ +CALL +POPN 1 +STORE 1 +PUSHG 2 +ALLOC 2 +DUPN 1 +PUSHG 1 +STORE 0 +PUSHI 1 +PUSHA _CTOR_Couleur_ +CALL +POPN 1 +STORE 2 +PUSHG 3 +ALLOC 2 +DUPN 1 +PUSHG 1 +STORE 0 +PUSHI 2 +PUSHA _CTOR_Couleur_ +CALL +POPN 1 +STORE 3 +POPN 0 +RETURN +_CTOR_PointColore_: NOP +PUSHL -3 +PUSHL -2 +PUSHS "P-" +PUSHI 0 +PUSHA Point_7_howMany +CALL +POPN 0 +STR +CONCAT +PUSHL -4 +PUSHA _CTOR_Point_ +CALL +POPN 4 +PUSHN 0 +PUSHL -4 +LOAD 7 +PUSHL -1 +STORE 6 +POPN 0 +RETURN +PointColore_5_print: NOP +PUSHN 0 +PUSHL -2 +JZ lbl21 +PUSHS "Inside PointColore::print" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +JUMP lbl22 +lbl21: NOP +PUSHN 0 +POPN 0 +lbl22: NOP +PUSHI 0 +PUSHL -2 +PUSHL -1 +PUSHA Point_5_print +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHI 1 +PUSHI 0 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 11 +CALL +POPN 1 +DUPN 1 +LOAD 0 +LOAD 1 +CALL +POPN 2 +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +POPN 0 +RETURN +PointColore_7_estGris: NOP +PUSHI 0 +PUSHL -1 +LOAD 7 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +STOREL -2 +RETURN +PointColore_5_clone: NOP +ALLOC 8 +DUPN 1 +PUSHG 3 +STORE 0 +PUSHL -1 +LOAD 4 +PUSHL -1 +LOAD 5 +PUSHL -1 +LOAD 7 +PUSHA _CTOR_PointColore_ +CALL +POPN 3 +STOREL -2 +RETURN +PointColore_6_colore: NOP +PUSHI 0 +PUSHL -1 +LOAD 7 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +PUSHI 0 +EQUAL +NOT +STOREL -2 +RETURN +PointColore_7_couleur: NOP +PUSHL -1 +LOAD 7 +STOREL -2 +RETURN +_CTOR_PointNoir_: NOP +PUSHL -2 +PUSHL -1 +PUSHI 0 +PUSHA CouleurFactory_4_noir +CALL +POPN 0 +PUSHL -3 +PUSHA _CTOR_PointColore_ +CALL +POPN 4 +PUSHN 0 +POPN 0 +RETURN +PointNoir_7_couleur: NOP +PUSHI 0 +PUSHA CouleurFactory_4_noir +CALL +POPN 0 +STOREL -2 +RETURN +PointNoir_6_colore: NOP +PUSHI 1 +STOREL -2 +RETURN +PointNoir_7_estGris: NOP +PUSHI 0 +STOREL -2 +RETURN +_CTOR_DefaultPoint_: NOP +PUSHI 0 +PUSHI 0 +PUSHI 0 +PUSHA CouleurFactory_5_blanc +CALL +POPN 0 +PUSHL -1 +PUSHA _CTOR_PointColore_ +CALL +POPN 4 +PUSHN 0 +POPN 0 +RETURN +DefaultPoint_7_couleur: NOP +PUSHI 0 +PUSHA CouleurFactory_5_blanc +CALL +POPN 0 +STOREL -2 +RETURN +DefaultPoint_7_estGris: NOP +PUSHI 0 +STOREL -2 +RETURN +_CTOR_Test_: NOP +PUSHN 0 +POPN 0 +RETURN +Test_5_test2: NOP +PUSHN 0 +PUSHI 0 +PUSHI 1 +PUSHI 0 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 11 +CALL +POPN 1 +DUPN 1 +LOAD 0 +LOAD 1 +CALL +POPN 2 +DUPN 1 +WRITES +POPN 1 +POPN 0 +RETURN +Test_4_test: NOP +PUSHN 4 +PUSHI 1 +STOREL 3 +PUSHI 0 +PUSHL 3 +PUSHL -3 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL 3 +PUSHL -2 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +POPN 1 +PUSHS "Appel 1: " +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHL -2 +DUPN 1 +LOAD 0 +LOAD 10 +CALL +POPN 1 +PUSHI 0 +EQUAL +NOT +JZ lbl23 +PUSHS "colore" +STOREL 0 +JUMP lbl24 +lbl23: NOP +PUSHS "gris" +STOREL 0 +lbl24: NOP +PUSHS "Appel 2: " +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 10 +CALL +POPN 1 +PUSHI 0 +EQUAL +NOT +JZ lbl25 +PUSHS "colore" +STOREL 1 +JUMP lbl26 +lbl25: NOP +PUSHS "gris" +STOREL 1 +lbl26: NOP +PUSHS "Appel 3: " +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 10 +CALL +POPN 1 +PUSHI 0 +EQUAL +NOT +JZ lbl27 +PUSHS "colore" +STOREL 2 +JUMP lbl28 +lbl27: NOP +PUSHS "gris" +STOREL 2 +lbl28: NOP +PUSHS "Resultats de test: " +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHL 0 +DUPN 1 +WRITES +POPN 1 +PUSHS " " +DUPN 1 +WRITES +POPN 1 +PUSHL 1 +DUPN 1 +WRITES +POPN 1 +PUSHS " " +DUPN 1 +WRITES +POPN 1 +PUSHL 2 +DUPN 1 +WRITES +POPN 1 +PUSHS "" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +POPN 4 +RETURN diff --git a/comp/exprs.txt b/comp/exprs.txt new file mode 100644 index 0000000..e083acb --- /dev/null +++ b/comp/exprs.txt @@ -0,0 +1,48 @@ +-- ----- VTABLES ----- +-- ----- STATIC ATTRIBS ----- +PUSHN 0 +-- ----- MAIN INSTRUCTION ----- +START +PUSHN 2 +PUSHN 0 +PUSHI 10 +STR +DUPN 1 +WRITES +POPN 1 +PUSHS "hello" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 10 +PUSHI 10 +ADD +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 1 +STOREL 0 +PUSHI 2 +STOREL 1 +PUSHL 0 +PUSHI 10 +PUSHI 10 +MUL +PUSHL 1 +DIV +ADD +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +POPN 0 +POPN 2 +STOP +-- ----- FUNCTIONS ----- diff --git a/comp/gn.txt b/comp/gn.txt new file mode 100644 index 0000000..6b0be48 --- /dev/null +++ b/comp/gn.txt @@ -0,0 +1,1482 @@ +-- ----- VTABLES ----- +ALLOC 12 +DUPN 1 +PUSHA TriNombre_8_imprimer +STORE 0 +DUPN 1 +PUSHA TriNombre_10_multiplier +STORE 1 +DUPN 1 +PUSHA TriNombre_14_additionnerTri +STORE 2 +DUPN 1 +PUSHA TriNombre_11_additionner +STORE 3 +DUPN 1 +PUSHA TriNombre_8_affecter +STORE 4 +DUPN 1 +PUSHA TriNombre_6_copier +STORE 5 +DUPN 1 +PUSHA TriNombre_15_assurerCapacite +STORE 6 +DUPN 1 +PUSHA TriNombre_4_lier +STORE 7 +DUPN 1 +PUSHA TriNombre_5_reset +STORE 8 +DUPN 1 +PUSHA TriNombre_4_last +STORE 9 +DUPN 1 +PUSHA TriNombre_7_trinome +STORE 10 +DUPN 1 +PUSHA TriNombre_7_suivant +STORE 11 +ALLOC 10 +DUPN 1 +PUSHA GrandNombre_8_imprimer +STORE 0 +DUPN 1 +PUSHA GrandNombre_8_affecter +STORE 1 +DUPN 1 +PUSHA GrandNombre_10_multiplier +STORE 2 +DUPN 1 +PUSHA GrandNombre_13_additionnerGN +STORE 3 +DUPN 1 +PUSHA GrandNombre_11_additionner +STORE 4 +DUPN 1 +PUSHA GrandNombre_13_calculerNbTri +STORE 5 +DUPN 1 +PUSHA GrandNombre_4_init +STORE 6 +DUPN 1 +PUSHA GrandNombre_6_copier +STORE 7 +DUPN 1 +PUSHA GrandNombre_5_nbTri +STORE 8 +DUPN 1 +PUSHA GrandNombre_6_nombre +STORE 9 +-- ----- STATIC ATTRIBS ----- +PUSHN 0 +-- ----- MAIN INSTRUCTION ----- +START +PUSHN 5 +ALLOC 3 +DUPN 1 +PUSHG 1 +STORE 0 +PUSHA _CTOR_GrandNombre_ +CALL +POPN 0 +STOREL 0 +ALLOC 3 +DUPN 1 +PUSHG 1 +STORE 0 +PUSHA _CTOR_GrandNombre_ +CALL +POPN 0 +STOREL 1 +ALLOC 3 +DUPN 1 +PUSHG 1 +STORE 0 +PUSHA _CTOR_GrandNombre_ +CALL +POPN 0 +STOREL 2 +ALLOC 3 +DUPN 1 +PUSHG 1 +STORE 0 +PUSHA _CTOR_GrandNombre_ +CALL +POPN 0 +STOREL 3 +ALLOC 3 +DUPN 1 +PUSHG 1 +STORE 0 +PUSHA _CTOR_GrandNombre_ +CALL +POPN 0 +STOREL 4 +PUSHS "Nombre de termes pour representer " +DUPN 1 +WRITES +POPN 1 +PUSHI 33259 +STR +DUPN 1 +WRITES +POPN 1 +PUSHS " => " +DUPN 1 +WRITES +POPN 1 +PUSHI 0 +PUSHI 33259 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 5 +CALL +POPN 2 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHI 33259 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHI 1123456789 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHI 7230 +PUSHL 1 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHI 32400 +PUSHL 2 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL 1 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHL 2 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHI 32400 +PUSHL 1 +DUPN 1 +LOAD 0 +LOAD 4 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL 1 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHI 7230 +PUSHL 3 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL 2 +PUSHL 3 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL 3 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHL 2 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 7 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHI 0 +PUSHL 1 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 7 +CALL +POPN 2 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHI 1 +PUSHL 3 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHI 0 +PUSHL 3 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 7 +CALL +POPN 2 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHI 999999 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHI 1 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 4 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHS "Somme des entiers de 1 \195\160 100:" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHI 1 +PUSHI 100 +PUSHL 0 +PUSHA Test_5_test1 +CALL +POPN 3 +POPN 1 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHI 1 +PUSHL 4 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHS "Table des factorielles de 1 a 30 :" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHI 1 +PUSHI 30 +PUSHL 4 +PUSHA Test_5_test2 +CALL +POPN 3 +POPN 1 +POPN 5 +STOP +-- ----- FUNCTIONS ----- +_CTOR_TriNombre_: NOP +PUSHN 0 +PUSHL -1 +LOAD 3 +PUSHI 0 +STORE 2 +POPN 0 +RETURN +TriNombre_8_imprimer: NOP +PUSHN 0 +PUSHL -2 +PUSHI 1 +SUPEQ +JZ lbl1 +PUSHN 0 +PUSHL -2 +PUSHI 1 +SUP +JZ lbl3 +PUSHN 0 +PUSHL -1 +LOAD 2 +PUSHI 0 +EQUAL +JZ lbl5 +PUSHI 0 +PUSHL -2 +PUSHI 1 +SUB +PUSHL -1 +LOAD 1 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 2 +POPN 1 +JUMP lbl6 +lbl5: NOP +PUSHN 0 +POPN 0 +lbl6: NOP +PUSHS " " +DUPN 1 +WRITES +POPN 1 +PUSHL -1 +LOAD 3 +PUSHI 100 +INF +JZ lbl7 +PUSHI 0 +STR +DUPN 1 +WRITES +POPN 1 +JUMP lbl8 +lbl7: NOP +PUSHN 0 +POPN 0 +lbl8: NOP +PUSHL -1 +LOAD 3 +PUSHI 10 +INF +JZ lbl9 +PUSHI 0 +STR +DUPN 1 +WRITES +POPN 1 +JUMP lbl10 +lbl9: NOP +PUSHN 0 +POPN 0 +lbl10: NOP +POPN 0 +JUMP lbl4 +lbl3: NOP +PUSHN 0 +POPN 0 +lbl4: NOP +PUSHL -1 +LOAD 3 +STR +DUPN 1 +WRITES +POPN 1 +POPN 0 +JUMP lbl2 +lbl1: NOP +PUSHN 0 +POPN 0 +lbl2: NOP +POPN 0 +RETURN +TriNombre_10_multiplier: NOP +PUSHN 0 +PUSHL -2 +PUSHI 0 +EQUAL +JZ lbl11 +PUSHN 0 +PUSHI 0 +PUSHI 0 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 4 +CALL +POPN 2 +POPN 1 +PUSHI 1 +STOREL -3 +POPN 0 +JUMP lbl12 +lbl11: NOP +PUSHN 3 +PUSHI 0 +STOREL 0 +PUSHI 0 +STOREL 1 +PUSHL -1 +LOAD 2 +PUSHI 0 +EQUAL +JZ lbl13 +PUSHI 0 +PUSHL -2 +PUSHL -1 +LOAD 1 +DUPN 1 +LOAD 0 +LOAD 1 +CALL +POPN 2 +PUSHI 1 +ADD +STOREL 0 +JUMP lbl14 +lbl13: NOP +PUSHI 1 +STOREL 0 +lbl14: NOP +PUSHL -1 +LOAD 3 +PUSHL -1 +LOAD 3 +PUSHL -2 +MUL +STORE 2 +PUSHL -1 +LOAD 3 +PUSHI 1000 +SUPEQ +JZ lbl15 +PUSHN 1 +PUSHL -1 +LOAD 3 +PUSHI 1000 +DIV +STOREL 3 +PUSHL -1 +LOAD 3 +PUSHL -1 +LOAD 3 +PUSHL 3 +PUSHI 1000 +MUL +SUB +STORE 2 +PUSHI 0 +PUSHI 2 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL 3 +PUSHL -1 +LOAD 1 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +PUSHI 1 +ADD +STOREL 1 +POPN 1 +JUMP lbl16 +lbl15: NOP +PUSHN 0 +POPN 0 +lbl16: NOP +PUSHL 1 +PUSHL 0 +SUP +JZ lbl17 +PUSHL 1 +STOREL -3 +JUMP lbl18 +lbl17: NOP +PUSHL 0 +STOREL -3 +lbl18: NOP +POPN 3 +lbl12: NOP +POPN 0 +RETURN +TriNombre_14_additionnerTri: NOP +PUSHN 3 +PUSHL -1 +LOAD 3 +PUSHI 0 +PUSHL -2 +DUPN 1 +LOAD 0 +LOAD 10 +CALL +POPN 1 +ADD +STOREL 0 +PUSHL 0 +PUSHI 1000 +SUPEQ +JZ lbl19 +PUSHN 0 +PUSHL -1 +LOAD 3 +PUSHL 0 +PUSHI 1000 +SUB +STORE 2 +PUSHI 0 +PUSHI 2 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHI 1 +PUSHL -1 +LOAD 1 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +STOREL 1 +POPN 0 +JUMP lbl20 +lbl19: NOP +PUSHN 0 +PUSHL -1 +LOAD 3 +PUSHL 0 +STORE 2 +PUSHI 1 +STOREL 1 +POPN 0 +lbl20: NOP +PUSHL -1 +LOAD 2 +PUSHI 1 +EQUAL +JZ lbl21 +PUSHN 0 +PUSHL 1 +STOREL -3 +POPN 0 +JUMP lbl22 +lbl21: NOP +PUSHN 0 +PUSHI 0 +PUSHI 2 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHI 0 +PUSHL -2 +DUPN 1 +LOAD 0 +LOAD 11 +CALL +POPN 1 +PUSHL -1 +LOAD 1 +DUPN 1 +LOAD 0 +LOAD 2 +CALL +POPN 2 +STOREL -3 +POPN 0 +lbl22: NOP +POPN 3 +RETURN +TriNombre_11_additionner: NOP +PUSHN 1 +PUSHL -1 +LOAD 3 +PUSHL -2 +ADD +STOREL 0 +PUSHL -2 +PUSHI 0 +SUP +JZ lbl23 +PUSHN 0 +PUSHL 0 +PUSHI 1000 +SUPEQ +JZ lbl25 +PUSHN 1 +PUSHL 0 +PUSHI 1000 +DIV +STOREL 1 +PUSHL -1 +LOAD 3 +PUSHL 0 +PUSHL 1 +PUSHI 1000 +MUL +SUB +STORE 2 +PUSHI 0 +PUSHI 2 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL 1 +PUSHL -1 +LOAD 1 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +PUSHI 1 +ADD +STOREL -3 +POPN 1 +JUMP lbl26 +lbl25: NOP +PUSHN 0 +PUSHL -1 +LOAD 3 +PUSHL 0 +STORE 2 +PUSHI 1 +STOREL -3 +POPN 0 +lbl26: NOP +POPN 0 +JUMP lbl24 +lbl23: NOP +PUSHI 1 +STOREL -3 +lbl24: NOP +POPN 1 +RETURN +TriNombre_8_affecter: NOP +PUSHN 1 +PUSHL -2 +PUSHI 1000 +DIV +STOREL 0 +PUSHL -1 +LOAD 3 +PUSHL -2 +PUSHL 0 +PUSHI 1000 +MUL +SUB +STORE 2 +PUSHL 0 +PUSHI 0 +SUP +JZ lbl27 +PUSHN 0 +PUSHI 0 +PUSHI 2 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL 0 +PUSHL -1 +LOAD 1 +DUPN 1 +LOAD 0 +LOAD 4 +CALL +POPN 2 +PUSHI 1 +ADD +STOREL -3 +POPN 0 +JUMP lbl28 +lbl27: NOP +PUSHN 0 +PUSHL -1 +LOAD 2 +PUSHI 1 +EQUAL +POPN 1 +PUSHI 1 +STOREL -3 +POPN 0 +lbl28: NOP +POPN 1 +RETURN +TriNombre_6_copier: NOP +PUSHN 0 +PUSHL -1 +LOAD 3 +PUSHI 0 +PUSHL -2 +DUPN 1 +LOAD 0 +LOAD 10 +CALL +POPN 1 +STORE 2 +PUSHI 0 +PUSHL -2 +DUPN 1 +LOAD 0 +LOAD 9 +CALL +POPN 1 +PUSHI 0 +EQUAL +JZ lbl29 +PUSHN 0 +PUSHI 0 +PUSHI 2 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHI 0 +PUSHL -2 +DUPN 1 +LOAD 0 +LOAD 11 +CALL +POPN 1 +PUSHL -1 +LOAD 1 +DUPN 1 +LOAD 0 +LOAD 5 +CALL +POPN 2 +POPN 1 +POPN 0 +JUMP lbl30 +lbl29: NOP +PUSHN 0 +PUSHL -1 +LOAD 2 +PUSHI 1 +EQUAL +POPN 1 +POPN 0 +lbl30: NOP +POPN 0 +RETURN +TriNombre_15_assurerCapacite: NOP +PUSHN 0 +PUSHL -2 +PUSHI 1 +INFEQ +JZ lbl31 +PUSHN 0 +POPN 0 +JUMP lbl32 +lbl31: NOP +PUSHN 0 +PUSHL -1 +LOAD 2 +PUSHI 1 +EQUAL +JZ lbl33 +PUSHN 0 +PUSHI 0 +ALLOC 4 +DUPN 1 +PUSHG 0 +STORE 0 +PUSHA _CTOR_TriNombre_ +CALL +POPN 0 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 7 +CALL +POPN 2 +POPN 1 +POPN 0 +JUMP lbl34 +lbl33: NOP +PUSHN 0 +POPN 0 +lbl34: NOP +PUSHI 0 +PUSHL -2 +PUSHI 1 +SUB +PUSHL -1 +LOAD 1 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +POPN 0 +lbl32: NOP +PUSHL -1 +STOREL -3 +POPN 0 +RETURN +TriNombre_4_lier: NOP +PUSHN 0 +PUSHL -1 +LOAD 2 +PUSHI 1 +EQUAL +JZ lbl35 +PUSHN 0 +PUSHL -1 +LOAD 1 +PUSHL -2 +STORE 0 +PUSHL -1 +LOAD 2 +PUSHI 0 +STORE 1 +POPN 0 +JUMP lbl36 +lbl35: NOP +PUSHN 0 +PUSHS "Erreur dans TriNombre::lier" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +POPN 0 +lbl36: NOP +PUSHL -1 +STOREL -3 +POPN 0 +RETURN +TriNombre_5_reset: NOP +PUSHN 0 +PUSHL -1 +LOAD 2 +PUSHI 0 +EQUAL +JZ lbl37 +PUSHI 0 +PUSHL -1 +LOAD 1 +DUPN 1 +LOAD 0 +LOAD 8 +CALL +POPN 1 +POPN 1 +JUMP lbl38 +lbl37: NOP +PUSHN 0 +POPN 0 +lbl38: NOP +PUSHL -1 +LOAD 2 +PUSHI 1 +STORE 1 +PUSHL -1 +LOAD 3 +PUSHI 0 +STORE 2 +POPN 0 +RETURN +TriNombre_4_last: NOP +PUSHL -1 +LOAD 2 +STOREL -2 +RETURN +TriNombre_7_trinome: NOP +PUSHL -1 +LOAD 3 +STOREL -2 +RETURN +TriNombre_7_suivant: NOP +PUSHL -1 +LOAD 1 +STOREL -2 +RETURN +_CTOR_GrandNombre_: NOP +PUSHN 0 +PUSHL -1 +LOAD 2 +ALLOC 4 +DUPN 1 +PUSHG 0 +STORE 0 +PUSHA _CTOR_TriNombre_ +CALL +POPN 0 +STORE 1 +PUSHL -1 +LOAD 1 +PUSHI 1 +STORE 0 +POPN 0 +RETURN +GrandNombre_8_imprimer: NOP +PUSHN 0 +PUSHI 0 +PUSHL -1 +LOAD 1 +PUSHL -1 +LOAD 2 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 2 +POPN 1 +PUSHS "" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +POPN 0 +RETURN +GrandNombre_8_affecter: NOP +PUSHN 0 +PUSHL -1 +LOAD 1 +PUSHI 0 +PUSHL -2 +PUSHL -1 +LOAD 2 +DUPN 1 +LOAD 0 +LOAD 4 +CALL +POPN 2 +STORE 0 +PUSHL -1 +LOAD 1 +STOREL -3 +POPN 0 +RETURN +GrandNombre_10_multiplier: NOP +PUSHN 0 +PUSHL -1 +LOAD 1 +PUSHI 0 +PUSHL -2 +PUSHL -1 +LOAD 2 +DUPN 1 +LOAD 0 +LOAD 1 +CALL +POPN 2 +STORE 0 +PUSHL -1 +LOAD 1 +PUSHI 0 +EQUAL +JZ lbl39 +PUSHL -1 +LOAD 1 +PUSHI 1 +STORE 0 +JUMP lbl40 +lbl39: NOP +PUSHN 0 +POPN 0 +lbl40: NOP +PUSHL -1 +LOAD 1 +STOREL -3 +POPN 0 +RETURN +GrandNombre_13_additionnerGN: NOP +PUSHN 1 +PUSHI 0 +PUSHI 0 +PUSHL -2 +DUPN 1 +LOAD 0 +LOAD 9 +CALL +POPN 1 +PUSHL -1 +LOAD 2 +DUPN 1 +LOAD 0 +LOAD 2 +CALL +POPN 2 +STOREL 0 +PUSHL -1 +LOAD 1 +PUSHL 0 +INF +JZ lbl41 +PUSHL -1 +LOAD 1 +PUSHL 0 +STORE 0 +JUMP lbl42 +lbl41: NOP +PUSHN 0 +POPN 0 +lbl42: NOP +PUSHL -1 +LOAD 1 +PUSHI 0 +EQUAL +JZ lbl43 +PUSHL -1 +LOAD 1 +PUSHI 1 +STORE 0 +JUMP lbl44 +lbl43: NOP +PUSHN 0 +POPN 0 +lbl44: NOP +PUSHL -1 +LOAD 1 +STOREL -3 +POPN 1 +RETURN +GrandNombre_11_additionner: NOP +PUSHN 1 +PUSHI 0 +PUSHL -2 +PUSHL -1 +LOAD 2 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 2 +STOREL 0 +PUSHL -1 +LOAD 1 +PUSHL 0 +INF +JZ lbl45 +PUSHL -1 +LOAD 1 +PUSHL 0 +STORE 0 +JUMP lbl46 +lbl45: NOP +PUSHN 0 +POPN 0 +lbl46: NOP +PUSHL -1 +LOAD 1 +PUSHI 0 +EQUAL +JZ lbl47 +PUSHL -1 +LOAD 1 +PUSHI 1 +STORE 0 +JUMP lbl48 +lbl47: NOP +PUSHN 0 +POPN 0 +lbl48: NOP +PUSHL -1 +LOAD 1 +STOREL -3 +POPN 1 +RETURN +GrandNombre_13_calculerNbTri: NOP +PUSHN 0 +PUSHL -2 +PUSHI 0 +SUP +JZ lbl49 +PUSHI 1 +PUSHI 0 +PUSHL -2 +PUSHI 1000 +DIV +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 5 +CALL +POPN 2 +ADD +STOREL -3 +JUMP lbl50 +lbl49: NOP +PUSHI 0 +STOREL -3 +lbl50: NOP +POPN 0 +RETURN +GrandNombre_4_init: NOP +PUSHN 0 +PUSHI 0 +PUSHL -1 +LOAD 2 +DUPN 1 +LOAD 0 +LOAD 8 +CALL +POPN 1 +POPN 1 +PUSHL -1 +LOAD 1 +PUSHI 0 +PUSHL -2 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 5 +CALL +POPN 2 +STORE 0 +PUSHL -1 +LOAD 1 +PUSHI 0 +EQUAL +JZ lbl51 +PUSHL -1 +LOAD 1 +PUSHI 1 +STORE 0 +JUMP lbl52 +lbl51: NOP +PUSHN 0 +POPN 0 +lbl52: NOP +PUSHI 0 +PUSHL -1 +LOAD 1 +PUSHL -1 +LOAD 2 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL -2 +PUSHL -1 +LOAD 2 +DUPN 1 +LOAD 0 +LOAD 4 +CALL +POPN 2 +POPN 1 +POPN 0 +RETURN +GrandNombre_6_copier: NOP +PUSHN 0 +PUSHL -1 +STOREL -3 +PUSHI 0 +PUSHL -1 +LOAD 2 +DUPN 1 +LOAD 0 +LOAD 8 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHI 0 +PUSHL -2 +DUPN 1 +LOAD 0 +LOAD 8 +CALL +POPN 1 +PUSHL -1 +LOAD 2 +DUPN 1 +LOAD 0 +LOAD 6 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHI 0 +PUSHL -2 +DUPN 1 +LOAD 0 +LOAD 9 +CALL +POPN 1 +PUSHL -1 +LOAD 2 +DUPN 1 +LOAD 0 +LOAD 5 +CALL +POPN 2 +POPN 1 +PUSHL -1 +LOAD 1 +PUSHI 0 +PUSHL -2 +DUPN 1 +LOAD 0 +LOAD 8 +CALL +POPN 1 +STORE 0 +POPN 0 +RETURN +GrandNombre_5_nbTri: NOP +PUSHL -1 +LOAD 1 +STOREL -2 +RETURN +GrandNombre_6_nombre: NOP +PUSHL -1 +LOAD 2 +STOREL -2 +RETURN +_CTOR_Test_: NOP +PUSHN 0 +POPN 0 +RETURN +Test_5_test2: NOP +PUSHN 0 +PUSHL -3 +PUSHL -2 +INFEQ +JZ lbl53 +PUSHN 0 +PUSHL -3 +STR +DUPN 1 +WRITES +POPN 1 +PUSHS "! " +DUPN 1 +WRITES +POPN 1 +PUSHL -3 +PUSHI 10 +INF +JZ lbl55 +PUSHS " " +DUPN 1 +WRITES +POPN 1 +JUMP lbl56 +lbl55: NOP +PUSHN 0 +POPN 0 +lbl56: NOP +PUSHS "= " +DUPN 1 +WRITES +POPN 1 +PUSHI 0 +PUSHL -3 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 2 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHL -3 +PUSHI 1 +ADD +PUSHL -2 +PUSHL -1 +PUSHA Test_5_test2 +CALL +POPN 3 +POPN 1 +POPN 0 +JUMP lbl54 +lbl53: NOP +PUSHN 0 +POPN 0 +lbl54: NOP +POPN 0 +RETURN +Test_5_test1: NOP +PUSHN 0 +PUSHL -3 +PUSHL -2 +INFEQ +JZ lbl57 +PUSHN 0 +PUSHI 0 +PUSHL -3 +PUSHL -1 +DUPN 1 +LOAD 0 +LOAD 4 +CALL +POPN 2 +POPN 1 +PUSHI 0 +PUSHL -3 +PUSHI 1 +ADD +PUSHL -2 +PUSHL -1 +PUSHA Test_5_test1 +CALL +POPN 3 +POPN 1 +POPN 0 +JUMP lbl58 +lbl57: NOP +PUSHN 0 +POPN 0 +lbl58: NOP +POPN 0 +RETURN diff --git a/comp/grandMere.txt b/comp/grandMere.txt new file mode 100644 index 0000000..092d16e --- /dev/null +++ b/comp/grandMere.txt @@ -0,0 +1,220 @@ +-- ----- VTABLES ----- +ALLOC 1 +DUPN 1 +PUSHA A_7_sValeur +STORE 0 +ALLOC 1 +DUPN 1 +PUSHA A_7_sValeur +STORE 0 +ALLOC 1 +DUPN 1 +PUSHA A_7_sValeur +STORE 0 +ALLOC 2 +DUPN 1 +PUSHA A_7_sValeur +STORE 0 +DUPN 1 +PUSHA D_6_valeur +STORE 1 +-- ----- STATIC ATTRIBS ----- +PUSHN 0 +-- ----- MAIN INSTRUCTION ----- +START +PUSHN 1 +ALLOC 5 +DUPN 1 +PUSHG 3 +STORE 0 +PUSHI 5 +PUSHA _CTOR_D_ +CALL +POPN 1 +STOREL 0 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 1 +CALL +POPN 1 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +POPN 1 +STOP +-- ----- FUNCTIONS ----- +_CTOR_A_: NOP +PUSHN 0 +PUSHS "A::(): " +DUPN 1 +WRITES +POPN 1 +PUSHL -1 +LOAD 1 +STR +DUPN 1 +WRITES +POPN 1 +PUSHS ", " +DUPN 1 +WRITES +POPN 1 +PUSHL -1 +LOAD 1 +PUSHI 0 +PUSHI 12 +SUB +STORE 0 +PUSHL -1 +LOAD 1 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +POPN 0 +RETURN +A_7_sValeur: NOP +PUSHL -1 +LOAD 1 +STOREL -2 +RETURN +_CTOR_B_: NOP +PUSHL -1 +PUSHA _CTOR_A_ +CALL +POPN 1 +PUSHN 0 +PUSHS "B::(): " +DUPN 1 +WRITES +POPN 1 +PUSHL -1 +LOAD 2 +PUSHL -1 +LOAD 1 +PUSHI 2 +ADD +STORE 1 +PUSHL -1 +LOAD 2 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +POPN 0 +RETURN +_CTOR_C_: NOP +PUSHL -2 +PUSHA _CTOR_B_ +CALL +POPN 1 +PUSHN 0 +PUSHL -2 +LOAD 3 +PUSHI 3 +PUSHL -2 +LOAD 1 +ADD +PUSHL -2 +LOAD 2 +ADD +STORE 2 +PUSHS "C::(): " +DUPN 1 +WRITES +POPN 1 +PUSHL -2 +LOAD 3 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +POPN 0 +RETURN +_CTOR_D_: NOP +PUSHI 12 +PUSHL -2 +PUSHA _CTOR_C_ +CALL +POPN 2 +PUSHN 0 +PUSHL -2 +LOAD 4 +PUSHL -2 +LOAD 3 +PUSHI 4 +ADD +STORE 3 +PUSHS "D::(): " +DUPN 1 +WRITES +POPN 1 +PUSHL -2 +LOAD 4 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +POPN 0 +RETURN +D_6_valeur: NOP +PUSHN 0 +PUSHL -1 +LOAD 1 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHL -1 +LOAD 2 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHL -1 +LOAD 3 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHL -1 +LOAD 4 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHL -1 +LOAD 1 +PUSHL -1 +LOAD 2 +ADD +PUSHL -1 +LOAD 3 +ADD +PUSHL -1 +LOAD 4 +ADD +STOREL -2 +POPN 0 +RETURN diff --git a/comp/helloworld.txt b/comp/helloworld.txt new file mode 100644 index 0000000..bcf1e6b --- /dev/null +++ b/comp/helloworld.txt @@ -0,0 +1,15 @@ +-- ----- VTABLES ----- +-- ----- STATIC ATTRIBS ----- +PUSHN 0 +-- ----- MAIN INSTRUCTION ----- +START +PUSHN 0 +PUSHS "Hello, World!" +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +POPN 0 +STOP +-- ----- FUNCTIONS ----- diff --git a/comp/masking1.txt b/comp/masking1.txt new file mode 100644 index 0000000..77d90d1 --- /dev/null +++ b/comp/masking1.txt @@ -0,0 +1,237 @@ +-- ----- VTABLES ----- +ALLOC 1 +DUPN 1 +PUSHA A_1_f +STORE 0 +ALLOC 2 +DUPN 1 +PUSHA A_1_f +STORE 0 +DUPN 1 +PUSHA A2_1_g +STORE 1 +ALLOC 4 +DUPN 1 +PUSHA A3_1_f +STORE 0 +DUPN 1 +PUSHA A2_1_g +STORE 1 +DUPN 1 +PUSHA A3_1_k +STORE 2 +DUPN 1 +PUSHA A3_1_h +STORE 3 +ALLOC 5 +DUPN 1 +PUSHA A3_1_f +STORE 0 +DUPN 1 +PUSHA A2_1_g +STORE 1 +DUPN 1 +PUSHA A3_1_k +STORE 2 +DUPN 1 +PUSHA A3_1_h +STORE 3 +DUPN 1 +PUSHA A4_1_z +STORE 4 +-- ----- STATIC ATTRIBS ----- +PUSHN 0 +-- ----- MAIN INSTRUCTION ----- +START +PUSHN 3 +ALLOC 4 +DUPN 1 +PUSHG 2 +STORE 0 +PUSHA _CTOR_A3_ +CALL +POPN 0 +STOREL 0 +ALLOC 4 +DUPN 1 +PUSHG 3 +STORE 0 +PUSHA _CTOR_A4_ +CALL +POPN 0 +STOREL 1 +ALLOC 2 +DUPN 1 +PUSHG 0 +STORE 0 +PUSHA _CTOR_A_ +CALL +POPN 0 +STOREL 2 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 0 +CALL +POPN 1 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 1 +CALL +POPN 1 +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 3 +CALL +POPN 1 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHI 0 +PUSHL 0 +DUPN 1 +LOAD 0 +LOAD 2 +CALL +POPN 1 +POPN 1 +PUSHI 0 +PUSHL 1 +DUPN 1 +LOAD 0 +LOAD 4 +CALL +POPN 1 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +POPN 3 +STOP +-- ----- FUNCTIONS ----- +_CTOR_A_: NOP +PUSHN 0 +PUSHL -1 +LOAD 1 +PUSHI 1 +STORE 0 +POPN 0 +RETURN +A_1_f: NOP +PUSHL -1 +LOAD 1 +STOREL -2 +RETURN +_CTOR_A2_: NOP +PUSHL -1 +PUSHA _CTOR_A_ +CALL +POPN 1 +PUSHN 0 +PUSHL -1 +LOAD 1 +PUSHS "coucou" +STORE 0 +POPN 0 +RETURN +A2_1_g: NOP +PUSHL -1 +LOAD 1 +STOREL -2 +RETURN +_CTOR_A3_: NOP +PUSHL -1 +PUSHA _CTOR_A2_ +CALL +POPN 1 +PUSHN 0 +PUSHL -1 +LOAD 1 +PUSHI 5 +STORE 0 +POPN 0 +RETURN +A3_1_k: NOP +PUSHN 0 +PUSHL -1 +LOAD 1 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHL -1 +LOAD 1 +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +PUSHL -1 +LOAD 1 +STR +DUPN 1 +WRITES +PUSHS "\n" +WRITES +POPN 1 +POPN 0 +RETURN +A3_1_f: NOP +PUSHL -1 +LOAD 1 +STOREL -2 +RETURN +A3_1_h: NOP +PUSHL -1 +LOAD 1 +STOREL -2 +RETURN +_CTOR_A4_: NOP +PUSHL -1 +PUSHA _CTOR_A3_ +CALL +POPN 1 +PUSHN 0 +POPN 0 +RETURN +A4_1_z: NOP +PUSHL -1 +LOAD 1 +STOREL -2 +RETURN diff --git a/comp/test.txt b/comp/test.txt new file mode 100644 index 0000000..5e966eb --- /dev/null +++ b/comp/test.txt @@ -0,0 +1,37 @@ +-- ----- VTABLES ----- +ALLOC 1 +DUPN 1 +PUSHA Derived_4_test +STORE 0 +-- ----- STATIC ATTRIBS ----- +PUSHN 0 +-- ----- MAIN INSTRUCTION ----- +START +PUSHN 0 +POPN 0 +STOP +-- ----- FUNCTIONS ----- +_CTOR_Base_: NOP +PUSHN 0 +POPN 0 +RETURN +_CTOR_Derived_: NOP +PUSHL -1 +PUSHA _CTOR_Base_ +CALL +POPN 1 +PUSHN 0 +POPN 0 +RETURN +Derived_4_test: NOP +PUSHN 2 +ALLOC 1 +DUPN 1 +PUSHG 0 +STORE 0 +PUSHA _CTOR_Base_ +CALL +POPN 0 +STOREL 0 +POPN 2 +RETURN diff --git a/lib/compil.ml b/lib/compil.ml index db690d4..7dc01f8 100644 --- a/lib/compil.ml +++ b/lib/compil.ml @@ -57,9 +57,9 @@ let make_static_method_addrs params = let make_ctor_addrs params = let len = List.length params in let addrs = params |> List.mapi (fun i (p: param) -> - (p.name, -len - 1 + i) + (p.name, -len + i) ) - in let addrs = ("this", -1)::addrs + in let addrs = ("this", -len - 1)::addrs in addrs (** Get a list of all instance attributes in a class, in offset order. *) @@ -242,7 +242,8 @@ let compile chan ast = | _ -> if e = Id("super") then - let decl = get_class decls clName + let clName = Env.get env "this" + in let decl = get_class decls clName in let superDecl = get_class decls (Option.get decl.super).name in _PUSHI 0; (* push result *) List.iter (code_expr addrs env) args; (* push args *) @@ -283,7 +284,7 @@ let compile chan ast = in let size = List.length (all_attrs decls decl) + 1 in let vti = Util.index_of decl decls in - _ALLOC size; + _ALLOC size; (* push this *) _DUPN 1; _PUSHG vti; _STORE 0; @@ -329,7 +330,7 @@ let compile chan ast = in let code_super_call addrs env decl = let { args; name } = Option.get decl.super in List.iter (code_expr addrs env) args; (* push args *) - _PUSHL (-1 - List.length args); (* push this *) + _PUSHL (get_addr addrs "this"); (* push this *) _PUSHA (ctor_lbl name); _CALL (); _POPN ((List.length args) + 1) (* pop args & this *)