@@ -1161,19 +1161,22 @@ def test_pass(passname, interp_dict, program_root, ast,
1161
1161
sys .stdin = open (input_file , 'r' )
1162
1162
sys .stdout = open (output_file , 'w' )
1163
1163
interp_dict [passname ](ast )
1164
+ print () # print a newline to make diff happy
1164
1165
sys .stdin = stdin
1165
1166
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' )
1167
1169
if result == 0 :
1168
1170
trace ('compiler ' + compiler_name + ' success on pass ' + passname \
1169
1171
+ ' on test\n ' + program_root + '\n ' )
1170
1172
return 1
1171
1173
else :
1172
1174
print ('compiler ' + compiler_name + ' failed pass ' + passname \
1173
- + ' on test\n ' + program_root + '\n ' )
1175
+ + ' on test: \n ' + program_root + '\n ' )
1174
1176
return 0
1175
1177
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 ' )
1177
1180
return 0 # ??
1178
1181
1179
1182
@@ -1182,6 +1185,7 @@ def compile_and_test(compiler, compiler_name,
1182
1185
program_filename ):
1183
1186
total_passes = 0
1184
1187
successful_passes = 0
1188
+ successful_test = 0
1185
1189
from eval_x86 import interp_x86
1186
1190
1187
1191
program_root = os .path .splitext (program_filename )[0 ]
@@ -1206,9 +1210,8 @@ def compile_and_test(compiler, compiler_name,
1206
1210
type_check_dict [passname ](program )
1207
1211
total_passes += 1
1208
1212
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 )
1212
1215
1213
1216
passname = 'uniquify'
1214
1217
if hasattr (compiler , passname ):
@@ -1219,7 +1222,8 @@ def compile_and_test(compiler, compiler_name,
1219
1222
type_check_dict [passname ](program )
1220
1223
total_passes += 1
1221
1224
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 )
1223
1227
1224
1228
passname = 'reveal_functions'
1225
1229
if hasattr (compiler , passname ):
@@ -1243,7 +1247,8 @@ def compile_and_test(compiler, compiler_name,
1243
1247
type_check_dict [passname ](program )
1244
1248
total_passes += 1
1245
1249
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 )
1247
1252
1248
1253
passname = 'erase_types'
1249
1254
if hasattr (compiler , passname ):
@@ -1255,7 +1260,8 @@ def compile_and_test(compiler, compiler_name,
1255
1260
type_check_dict [passname ](program )
1256
1261
total_passes += 1
1257
1262
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 )
1259
1265
1260
1266
passname = 'cast_insert'
1261
1267
if hasattr (compiler , passname ):
@@ -1356,15 +1362,16 @@ def compile_and_test(compiler, compiler_name,
1356
1362
compiler_name )
1357
1363
1358
1364
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 )
1368
1375
1369
1376
passname = 'explicate_control'
1370
1377
if hasattr (compiler , passname ):
@@ -1382,71 +1389,76 @@ def compile_and_test(compiler, compiler_name,
1382
1389
compiler_name )
1383
1390
1384
1391
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 )
1392
1400
1393
1401
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 )
1401
1410
1402
1411
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 )
1410
1420
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 ("" )
1415
1427
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 ))
1419
1431
1420
- total_passes += 1
1432
+ total_passes += 1
1421
1433
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
1435
1444
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 )
1450
1462
1451
1463
1452
1464
def trace_ast_and_concrete (ast ):
@@ -1541,9 +1553,7 @@ def compile(compiler, compiler_name, type_check_L, type_check_C,
1541
1553
with open (x86_filename , "w" ) as dest :
1542
1554
dest .write (str (x86 ))
1543
1555
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
1547
1557
# checker and interpreter for the language, and an interpeter for the
1548
1558
# C intermediate language, run all the passes in the compiler,
1549
1559
# checking that the resulting programs produce output that matches the
0 commit comments