From 63c94b1e74f3272dbf0b2bc1dae8913d564c72f5 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Sat, 5 Aug 2006 23:47:57 +0000 Subject: All tests passing again (mix parser re-entrant) git-archimport-id: mdk@sv.gnu.org/mdk--devel--1--patch-17 --- Makefile.am | 4 +- configure.in | 1 + mixlib/mix_parser.c | 1 + mixlib/mix_scanner.l | 14 ++++-- mixlib/testsuite/Makefile.am | 2 +- mixlib/testsuite/mix_parser_t.c | 31 +++--------- samples/Makefile.am | 5 +- samples/isains.mixal | 106 ++++++++++++++++++++++++++++++++++++++++ samples/isamixinstruction.mixal | 106 ---------------------------------------- samples/mixasm | 1 - samples/mixvm | 1 - samples/tests/.arch-inventory | 2 + samples/tests/Makefile.am | 17 +++++++ samples/tests/ldan.mixal | 1 + samples/tests/stress2.mixal | 8 +-- 15 files changed, 155 insertions(+), 145 deletions(-) create mode 100644 samples/isains.mixal delete mode 100644 samples/isamixinstruction.mixal delete mode 120000 samples/mixasm delete mode 120000 samples/mixvm create mode 100644 samples/tests/.arch-inventory create mode 100644 samples/tests/Makefile.am diff --git a/Makefile.am b/Makefile.am index cfd46d1..0e4eb97 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to produce Makefile.in -# Copyright (C) 2000, 2001, 2004 Free Software Foundation, Inc. +# Copyright (C) 2000, 2001, 2004, 2006 Free Software Foundation, Inc. # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without @@ -11,7 +11,7 @@ # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. EXTRA_DIST = config.rpath ABOUT-NLS intltool-extract.in intltool-merge.in \ - intltool-update.in + intltool-update.in ChangeLog.1 ChangeLog.2 SUBDIRS = po intl doc lib mixlib mixguile mixutils mixgtk misc samples distclean-local: diff --git a/configure.in b/configure.in index ca9f007..93eb082 100644 --- a/configure.in +++ b/configure.in @@ -140,6 +140,7 @@ mixgtk/Makefile lib/Makefile misc/Makefile samples/Makefile +samples/tests/Makefile po/Makefile.in intl/Makefile ) diff --git a/mixlib/mix_parser.c b/mixlib/mix_parser.c index 0dfcf81..a00886f 100644 --- a/mixlib/mix_parser.c +++ b/mixlib/mix_parser.c @@ -118,6 +118,7 @@ mix_parser_new (const gchar *in_file) MIX_SRC_DEFEXT); if ( f == NULL ) return NULL; + result = g_new (mix_parser_t, 1); result->symbol_table = mix_symbol_table_new (); result->ls_table = mix_symbol_table_new (); diff --git a/mixlib/mix_scanner.l b/mixlib/mix_scanner.l index 1ad8eaa..db76057 100644 --- a/mixlib/mix_scanner.l +++ b/mixlib/mix_scanner.l @@ -168,7 +168,7 @@ wexpr {expr}({fpart})?(,{expr}({fpart})?)* yy_flex_debug = getenv("FLEX_DEBUG"); #endif yyin = mix_file_to_FILE (parser->in_file); - + yyrestart (yyin); %} @@ -180,13 +180,19 @@ wexpr {expr}({fpart})?(,{expr}({fpart})?)* { ^\*.* /* eat comments */ . { - if ( end ) return parser->status; + if (end) + { + return parser->status; + } yyless (0); BEGIN (LOC); } \n { ++lineno; - if ( end ) return parser->status; + if (end) + { + return parser->status; + } } } @@ -342,6 +348,8 @@ wexpr {expr}({fpart})?(,{expr}({fpart})?)* parser->end = parser->loc_count; end = TRUE; if ( parser->status == MIX_PERR_NOCOMP ) parser->status = MIX_PERR_OK; + RESET (); + BEGIN (INITIAL); return parser->status; } } diff --git a/mixlib/testsuite/Makefile.am b/mixlib/testsuite/Makefile.am index e297988..349a320 100644 --- a/mixlib/testsuite/Makefile.am +++ b/mixlib/testsuite/Makefile.am @@ -17,7 +17,7 @@ LDADD = $(top_builddir)/mixlib/libmix.a check_PROGRAMS = mixtypest mixinstest mixvminstest mixparsertest mixdevtest mixevaltest TESTS = $(check_PROGRAMS) -MIXAL_FILES= "\"primes\",\"isamixinstruction\",\"tests/bt\",\"tests/cbp\",\"tests/ldan\",\"tests/stress0\",\"hello\",\"echo\"," +MIXAL_FILES= "\"tests/bt\",\"tests/cbp\",\"tests/stress0\",\"tests/stress1\",\"tests/stress2\",\"tests/stress4\",\"tests/stress5\",\"tests/stress6\",\"tests/ldan\",\"tests/lockonw\",\"tests/negwrite\",\"hello\",\"echo\",\"primes\",\"isains\"" AM_CFLAGS = -DMIX_TEST_MIXAL_FILES=$(MIXAL_FILES) -DMIX_TEST_SAMPLES_DIR="\"$(top_srcdir)/samples\"" diff --git a/mixlib/testsuite/mix_parser_t.c b/mixlib/testsuite/mix_parser_t.c index 4008309..80f2cd1 100644 --- a/mixlib/testsuite/mix_parser_t.c +++ b/mixlib/testsuite/mix_parser_t.c @@ -20,9 +20,9 @@ */ +#include #include -#include /* Define VERBOSE_TEST if you want to get prints of the test */ /* #define VERBOSE_TEST */ @@ -36,13 +36,12 @@ static const size_t FILE_NO_ = sizeof(FILES_)/sizeof(FILES_[0]); static void test_code_ (const gchar *name) { - mix_code_file_t *code; mix_parser_err_t err; + gchar *real_name = g_strdup_printf ("%s/%s", MIX_TEST_SAMPLES_DIR, name); - g_print (real_name); - g_print ("\n"); + gchar *code_name = g_path_get_basename (name); mix_parser_t *parser = mix_parser_new (real_name); @@ -58,32 +57,14 @@ test_code_ (const gchar *name) g_assert (err == MIX_PERR_OK); - err = mix_parser_write_code (parser, real_name, FALSE); - code = mix_code_file_new_read (real_name); + err = mix_parser_write_code (parser, code_name, FALSE); + code = mix_code_file_new_read (code_name); g_assert (code); -#ifdef VERBOSE_TEST - g_message ("%s: Version: %d.%d", name, mix_code_file_major_version (code), - mix_code_file_minor_version (code)); - - mix_short_print (mix_code_file_get_start_addr (code), "Start address: "); - g_print ("\n"); - - mix_ins_desc_t ins; - while (mix_code_file_get_ins (code, &ins)) - { - mix_ins_t i; - mix_word_to_ins_uncheck (ins.ins, i); - mix_short_print (ins.address, "addr: "); - g_print (" : "); - mix_ins_print (&i); - g_print ("\n"); - } -#endif - mix_parser_delete (parser); mix_code_file_delete (code); g_free (real_name); + g_free (code_name); } int diff --git a/samples/Makefile.am b/samples/Makefile.am index 0e4575f..7ec030a 100644 --- a/samples/Makefile.am +++ b/samples/Makefile.am @@ -10,6 +10,7 @@ # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +SUBDIRS = tests -EXTRA_DIST = primes.result hello.mixal primes.mixal echo.mixal\ - permutations.mixal permutations.cardrd \ No newline at end of file +EXTRA_DIST = primes.result hello.mixal primes.mixal echo.mixal \ + permutations.mixal permutations.cardrd isains.mixal diff --git a/samples/isains.mixal b/samples/isains.mixal new file mode 100644 index 0000000..b1d7f2d --- /dev/null +++ b/samples/isains.mixal @@ -0,0 +1,106 @@ +BB EQU 1(4:4) +BMAX EQU BB-1 +UMAX EQU 20 +TABLE NOP GOOD(BMAX) + ADD FLOAT(5:5) + SUB FLOAT(5:5) + MUL FLOAT(5:5) + DIV FLOAT(5:5) + HLT GOOD + SRC GOOD + MOVE MEMORY(BMAX) + LDA FIELD(5:5) + LD1 FIELD(5:5) + LD2 FIELD(5:5) + LD3 FIELD(5:5) + LD4 FIELD(5:5) + LD5 FIELD(5:5) + LD6 FIELD(5:5) + LDX FIELD(5:5) + LDAN FIELD(5:5) + LD1N FIELD(5:5) + LD2N FIELD(5:5) + LD3N FIELD(5:5) + LD4N FIELD(5:5) + LD5N FIELD(5:5) + LD6N FIELD(5:5) + LDXN FIELD(5:5) + STA FIELD(5:5) + ST1 FIELD(5:5) + ST2 FIELD(5:5) + ST3 FIELD(5:5) + ST4 FIELD(5:5) + ST5 FIELD(5:5) + ST6 FIELD(5:5) + STX FIELD(5:5) + STJ FIELD(5:5) + STZ FIELD(5:5) + JBUS MEMORY(UMAX) + IOC GOOD(UMAX) + IN MEMORY(UMAX) + OUT MEMORY(UMAX) + JRED MEMORY(UMAX) + JLE MEMORY + JANP MEMORY + J1NP MEMORY + J2NP MEMORY + J3NP MEMORY + J4NP MEMORY + J5NP MEMORY + J6NP MEMORY + JXNP MEMORY + ENNA GOOD + ENN1 GOOD + ENN2 GOOD + ENN3 GOOD + ENN4 GOOD + ENN5 GOOD + ENN6 GOOD + ENNX GOOD + CMPA FLOAT(5:5) + CMP1 FIELD(5:5) + CMP2 FIELD(5:5) + CMP3 FIELD(5:5) + CMP4 FIELD(5:5) + CMP5 FIELD(5:5) + CMP6 FIELD(5:5) + CMPX FIELD(5:5) +BEGIN LDA INST + CMPA VALID(3:3) + JG BAD + LD1 INST(5:5) + DEC1 64 + J1NN BAD + CMPA TABLE+64,1(4:4) + JG BAD + LD1 TABLE+64,1(1:2) + JMP 0,1 +FLOAT CMPA VALID(4:4) + JE GOOD +FIELD ENTA 0 + LDX INST(4:4) + DIV =9= + STX *+1(0:2) + INCA 0 + CMPA =5= + JG BAD +MEMORY LDX INST(3:3) + JXNZ GOOD + LDX INST(0:2) + JXN BAD + CMPX =3999= + JLE GOOD + JMP BAD +VALID CMPX 3999,6(6) +*VALID CON 63,3999(0:2),6(3:3),6(4:4) CMPX 3999,6(6) +* +* +* +INST CON 63,3999(0:2),6(3:3),45(4:4) +GOOD OUT GTEXT(18) + HLT +BAD OUT BTEXT(18) + HLT +GTEXT ALF GOOD +BTEXT ALF BAD + END BEGIN diff --git a/samples/isamixinstruction.mixal b/samples/isamixinstruction.mixal deleted file mode 100644 index b1d7f2d..0000000 --- a/samples/isamixinstruction.mixal +++ /dev/null @@ -1,106 +0,0 @@ -BB EQU 1(4:4) -BMAX EQU BB-1 -UMAX EQU 20 -TABLE NOP GOOD(BMAX) - ADD FLOAT(5:5) - SUB FLOAT(5:5) - MUL FLOAT(5:5) - DIV FLOAT(5:5) - HLT GOOD - SRC GOOD - MOVE MEMORY(BMAX) - LDA FIELD(5:5) - LD1 FIELD(5:5) - LD2 FIELD(5:5) - LD3 FIELD(5:5) - LD4 FIELD(5:5) - LD5 FIELD(5:5) - LD6 FIELD(5:5) - LDX FIELD(5:5) - LDAN FIELD(5:5) - LD1N FIELD(5:5) - LD2N FIELD(5:5) - LD3N FIELD(5:5) - LD4N FIELD(5:5) - LD5N FIELD(5:5) - LD6N FIELD(5:5) - LDXN FIELD(5:5) - STA FIELD(5:5) - ST1 FIELD(5:5) - ST2 FIELD(5:5) - ST3 FIELD(5:5) - ST4 FIELD(5:5) - ST5 FIELD(5:5) - ST6 FIELD(5:5) - STX FIELD(5:5) - STJ FIELD(5:5) - STZ FIELD(5:5) - JBUS MEMORY(UMAX) - IOC GOOD(UMAX) - IN MEMORY(UMAX) - OUT MEMORY(UMAX) - JRED MEMORY(UMAX) - JLE MEMORY - JANP MEMORY - J1NP MEMORY - J2NP MEMORY - J3NP MEMORY - J4NP MEMORY - J5NP MEMORY - J6NP MEMORY - JXNP MEMORY - ENNA GOOD - ENN1 GOOD - ENN2 GOOD - ENN3 GOOD - ENN4 GOOD - ENN5 GOOD - ENN6 GOOD - ENNX GOOD - CMPA FLOAT(5:5) - CMP1 FIELD(5:5) - CMP2 FIELD(5:5) - CMP3 FIELD(5:5) - CMP4 FIELD(5:5) - CMP5 FIELD(5:5) - CMP6 FIELD(5:5) - CMPX FIELD(5:5) -BEGIN LDA INST - CMPA VALID(3:3) - JG BAD - LD1 INST(5:5) - DEC1 64 - J1NN BAD - CMPA TABLE+64,1(4:4) - JG BAD - LD1 TABLE+64,1(1:2) - JMP 0,1 -FLOAT CMPA VALID(4:4) - JE GOOD -FIELD ENTA 0 - LDX INST(4:4) - DIV =9= - STX *+1(0:2) - INCA 0 - CMPA =5= - JG BAD -MEMORY LDX INST(3:3) - JXNZ GOOD - LDX INST(0:2) - JXN BAD - CMPX =3999= - JLE GOOD - JMP BAD -VALID CMPX 3999,6(6) -*VALID CON 63,3999(0:2),6(3:3),6(4:4) CMPX 3999,6(6) -* -* -* -INST CON 63,3999(0:2),6(3:3),45(4:4) -GOOD OUT GTEXT(18) - HLT -BAD OUT BTEXT(18) - HLT -GTEXT ALF GOOD -BTEXT ALF BAD - END BEGIN diff --git a/samples/mixasm b/samples/mixasm deleted file mode 120000 index db38217..0000000 --- a/samples/mixasm +++ /dev/null @@ -1 +0,0 @@ -../mixutils/mixasm \ No newline at end of file diff --git a/samples/mixvm b/samples/mixvm deleted file mode 120000 index bdb6e79..0000000 --- a/samples/mixvm +++ /dev/null @@ -1 +0,0 @@ -../mixutils/mixvm \ No newline at end of file diff --git a/samples/tests/.arch-inventory b/samples/tests/.arch-inventory new file mode 100644 index 0000000..1ac182e --- /dev/null +++ b/samples/tests/.arch-inventory @@ -0,0 +1,2 @@ +junk (\.mix)$ +junk (\.mls)$ diff --git a/samples/tests/Makefile.am b/samples/tests/Makefile.am new file mode 100644 index 0000000..b75454c --- /dev/null +++ b/samples/tests/Makefile.am @@ -0,0 +1,17 @@ +## Process this file with automake to produce Makefile.in + +# Copyright (C) 2006 by Free Software Foundation, Inc. + +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +EXTRA_DIST = bt.mixal cbp.mixal ldan.mixal lockonw.mixal negwrite.mixal \ + stress0.mixal stress1.mixal stress2.mixal stress4.mixal \ + stress5.mixal stress6.mixal + diff --git a/samples/tests/ldan.mixal b/samples/tests/ldan.mixal index d15c6a3..24a066f 100644 --- a/samples/tests/ldan.mixal +++ b/samples/tests/ldan.mixal @@ -3,3 +3,4 @@ BEGIN LDAN VAR(1:5) LDXN VAR(1:5) HLT END BEGIN + diff --git a/samples/tests/stress2.mixal b/samples/tests/stress2.mixal index 0c4d7d6..ccfca81 100644 --- a/samples/tests/stress2.mixal +++ b/samples/tests/stress2.mixal @@ -1,7 +1,7 @@ - ORIG 1999 -ST NOP -SYM EQU SYM+1 + ORIG 1999 +ST NOP +SYM EQU ST+1 SYM2 CON SYM2+1 SYM3 ORIG SYM3+2 - HLT + HLT SYM4 END SYM4+1 -- cgit v1.2.3