@@ -1161,19 +1161,22 @@ def test_pass(passname, interp_dict, program_root, ast,
11611161 sys .stdin = open (input_file , 'r' )
11621162 sys .stdout = open (output_file , 'w' )
11631163 interp_dict [passname ](ast )
1164+ print () # print a newline to make diff happy
11641165 sys .stdin = stdin
11651166 sys .stdout = stdout
1166- result = os .system ('diff' + ' -b ' + output_file + ' ' + program_root + '.golden' )
1167+ result = os .system ('diff' + ' -b ' + output_file \
1168+ + ' ' + program_root + '.golden' )
11671169 if result == 0 :
11681170 trace ('compiler ' + compiler_name + ' success on pass ' + passname \
11691171 + ' on test\n ' + program_root + '\n ' )
11701172 return 1
11711173 else :
11721174 print ('compiler ' + compiler_name + ' failed pass ' + passname \
1173- + ' on test\n ' + program_root + '\n ' )
1175+ + ' on test: \n ' + program_root + '\n ' )
11741176 return 0
11751177 else :
1176- trace ('compiler ' + compiler_name + ' skip test on pass ' + passname + ' on test\n ' + program_root + '\n ' )
1178+ trace ('compiler ' + compiler_name + ' skip test on pass ' + passname \
1179+ + ' on test\n ' + program_root + '\n ' )
11771180 return 0 # ??
11781181
11791182
@@ -1182,6 +1185,7 @@ def compile_and_test(compiler, compiler_name,
11821185 program_filename ):
11831186 total_passes = 0
11841187 successful_passes = 0
1188+ successful_test = 0
11851189 from eval_x86 import interp_x86
11861190
11871191 program_root = os .path .splitext (program_filename )[0 ]
@@ -1206,9 +1210,8 @@ def compile_and_test(compiler, compiler_name,
12061210 type_check_dict [passname ](program )
12071211 total_passes += 1
12081212 successful_passes += \
1209- test_pass (passname , interp_dict , program_root , program , compiler_name )
1210- else :
1211- trace ("\n # no shrink pass!" )
1213+ test_pass (passname , interp_dict , program_root , program ,
1214+ compiler_name )
12121215
12131216 passname = 'uniquify'
12141217 if hasattr (compiler , passname ):
@@ -1219,7 +1222,8 @@ def compile_and_test(compiler, compiler_name,
12191222 type_check_dict [passname ](program )
12201223 total_passes += 1
12211224 successful_passes += \
1222- test_pass (passname , interp_dict , program_root , program , compiler_name )
1225+ test_pass (passname , interp_dict , program_root , program ,
1226+ compiler_name )
12231227
12241228 passname = 'reveal_functions'
12251229 if hasattr (compiler , passname ):
@@ -1243,7 +1247,8 @@ def compile_and_test(compiler, compiler_name,
12431247 type_check_dict [passname ](program )
12441248 total_passes += 1
12451249 successful_passes += \
1246- test_pass (passname , interp_dict , program_root , program , compiler_name )
1250+ test_pass (passname , interp_dict , program_root , program ,
1251+ compiler_name )
12471252
12481253 passname = 'erase_types'
12491254 if hasattr (compiler , passname ):
@@ -1255,7 +1260,8 @@ def compile_and_test(compiler, compiler_name,
12551260 type_check_dict [passname ](program )
12561261 total_passes += 1
12571262 successful_passes += \
1258- test_pass (passname , interp_dict , program_root , program , compiler_name )
1263+ test_pass (passname , interp_dict , program_root , program ,
1264+ compiler_name )
12591265
12601266 passname = 'cast_insert'
12611267 if hasattr (compiler , passname ):
@@ -1356,15 +1362,16 @@ def compile_and_test(compiler, compiler_name,
13561362 compiler_name )
13571363
13581364 passname = 'remove_complex_operands'
1359- trace ('\n # ' + passname + '\n ' )
1360- program = compiler .remove_complex_operands (program )
1361- trace (program )
1362- if passname in type_check_dict .keys ():
1363- type_check_dict [passname ](program )
1364- total_passes += 1
1365- successful_passes += \
1366- test_pass (passname , interp_dict , program_root , program ,
1367- compiler_name )
1365+ if hasattr (compiler , passname ):
1366+ trace ('\n # ' + passname + '\n ' )
1367+ program = compiler .remove_complex_operands (program )
1368+ trace (program )
1369+ if passname in type_check_dict .keys ():
1370+ type_check_dict [passname ](program )
1371+ total_passes += 1
1372+ successful_passes += \
1373+ test_pass (passname , interp_dict , program_root , program ,
1374+ compiler_name )
13681375
13691376 passname = 'explicate_control'
13701377 if hasattr (compiler , passname ):
@@ -1382,71 +1389,76 @@ def compile_and_test(compiler, compiler_name,
13821389 compiler_name )
13831390
13841391 passname = 'select_instructions'
1385- trace ('\n # ' + passname + '\n ' )
1386- program = compiler .select_instructions (program )
1387- trace (program )
1388- total_passes += 1
1389- successful_passes += \
1390- test_pass (passname , interp_dict , program_root , program ,
1391- compiler_name )
1392+ if hasattr (compiler , passname ):
1393+ trace ('\n # ' + passname + '\n ' )
1394+ program = compiler .select_instructions (program )
1395+ trace (program )
1396+ total_passes += 1
1397+ successful_passes += \
1398+ test_pass (passname , interp_dict , program_root , program ,
1399+ compiler_name )
13921400
13931401 passname = 'assign_homes'
1394- trace ('\n # ' + passname + '\n ' )
1395- program = compiler .assign_homes (program )
1396- trace (program )
1397- total_passes += 1
1398- successful_passes += \
1399- test_pass (passname , interp_dict , program_root , program ,
1400- compiler_name )
1402+ if hasattr (compiler , passname ):
1403+ trace ('\n # ' + passname + '\n ' )
1404+ program = compiler .assign_homes (program )
1405+ trace (program )
1406+ total_passes += 1
1407+ successful_passes += \
1408+ test_pass (passname , interp_dict , program_root , program ,
1409+ compiler_name )
14011410
14021411 passname = 'patch_instructions'
1403- trace ('\n # ' + passname + '\n ' )
1404- program = compiler .patch_instructions (program )
1405- trace (program )
1406- total_passes += 1
1407- successful_passes += \
1408- test_pass (passname , interp_dict , program_root , program ,
1409- compiler_name )
1412+ if hasattr (compiler , passname ):
1413+ trace ('\n # ' + passname + '\n ' )
1414+ program = compiler .patch_instructions (program )
1415+ trace (program )
1416+ total_passes += 1
1417+ successful_passes += \
1418+ test_pass (passname , interp_dict , program_root , program ,
1419+ compiler_name )
14101420
1411- trace ('\n # prelude and conclusion\n ' )
1412- program = compiler .prelude_and_conclusion (program )
1413- trace (program )
1414- trace ("" )
1421+ passname = 'prelude_and_conclusion'
1422+ if hasattr (compiler , passname ):
1423+ trace ('\n # ' + passname + '\n ' )
1424+ program = compiler .prelude_and_conclusion (program )
1425+ trace (program )
1426+ trace ("" )
14151427
1416- x86_filename = program_root + ".s"
1417- with open (x86_filename , "w" ) as dest :
1418- dest .write (str (program ))
1428+ x86_filename = program_root + ".s"
1429+ with open (x86_filename , "w" ) as dest :
1430+ dest .write (str (program ))
14191431
1420- total_passes += 1
1432+ total_passes += 1
14211433
1422- # Run the final x86 program
1423- emulate_x86 = False
1424- if emulate_x86 :
1425- stdin = sys .stdin
1426- stdout = sys .stdout
1427- sys .stdin = open (program_root + '.in' , 'r' )
1428- sys .stdout = open (program_root + '.out' , 'w' )
1429- interp_x86 (program )
1430- sys .stdin = stdin
1431- sys .stdout = stdout
1432- else :
1433- if platform == 'darwin' :
1434- os .system ('gcc -arch x86_64 runtime.o ' + x86_filename )
1434+ # Run the final x86 program
1435+ emulate_x86 = False
1436+ if emulate_x86 :
1437+ stdin = sys .stdin
1438+ stdout = sys .stdout
1439+ sys .stdin = open (program_root + '.in' , 'r' )
1440+ sys .stdout = open (program_root + '.out' , 'w' )
1441+ interp_x86 (program )
1442+ sys .stdin = stdin
1443+ sys .stdout = stdout
14351444 else :
1436- os .system ('gcc runtime.o ' + x86_filename )
1437- input_file = program_root + '.in'
1438- output_file = program_root + '.out'
1439- os .system ('./a.out < ' + input_file + ' > ' + output_file )
1440-
1441- result = os .system ('diff' + ' -b ' + program_root + '.out ' \
1442- + program_root + '.golden' )
1443- if result == 0 :
1444- successful_passes += 1
1445- return (successful_passes , total_passes , 1 )
1446- else :
1447- print ('compiler ' + compiler_name + ', executable failed' \
1448- + ' on test ' + program_root )
1449- return (successful_passes , total_passes , 0 )
1445+ if platform == 'darwin' :
1446+ os .system ('gcc -arch x86_64 runtime.o ' + x86_filename )
1447+ else :
1448+ os .system ('gcc runtime.o ' + x86_filename )
1449+ input_file = program_root + '.in'
1450+ output_file = program_root + '.out'
1451+ os .system ('./a.out < ' + input_file + ' > ' + output_file )
1452+
1453+ result = os .system ('diff' + ' -b ' + program_root + '.out ' \
1454+ + program_root + '.golden' )
1455+ if result == 0 :
1456+ successful_passes += 1
1457+ successful_test = 1
1458+ else :
1459+ print ('compiler ' + compiler_name + ', executable failed' \
1460+ + ' on test ' + program_root )
1461+ return (successful_passes , total_passes , successful_test )
14501462
14511463
14521464def trace_ast_and_concrete (ast ):
@@ -1541,9 +1553,7 @@ def compile(compiler, compiler_name, type_check_L, type_check_C,
15411553 with open (x86_filename , "w" ) as dest :
15421554 dest .write (str (x86 ))
15431555
1544- # Given a test file name, the name of a language, a compiler, a type
1545-
1546-
1556+ # Given a test file name, the name of a language, a compiler, a type
15471557# checker and interpreter for the language, and an interpeter for the
15481558# C intermediate language, run all the passes in the compiler,
15491559# checking that the resulting programs produce output that matches the
0 commit comments