From 1547524f4827779d53b2c7bc5754256f5f4a794a Mon Sep 17 00:00:00 2001 From: bdemsky Date: Wed, 30 Aug 2006 22:07:28 +0000 Subject: [PATCH] adding support for consistency checking --- Robust/src/IR/Flat/BuildCode.java | 63 ++++++++++++++++++++++++- Robust/src/IR/State.java | 4 +- Robust/src/IR/Tree/BuildIR.java | 26 +++++++++- Robust/src/IR/Tree/ConstraintCheck.java | 25 ++++++++++ Robust/src/IR/Tree/FlagEffect.java | 4 -- Robust/src/IR/Tree/TaskExitNode.java | 8 +++- Robust/src/IR/TypeDescriptor.java | 31 +++++++++++- Robust/src/Main/Main.java | 3 ++ Robust/src/Parse/java14.cup | 29 +++++++++++- Robust/src/buildscripttask | 2 +- 10 files changed, 182 insertions(+), 13 deletions(-) create mode 100644 Robust/src/IR/Tree/ConstraintCheck.java diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index 94f6e620..1dea8b46 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -44,6 +44,7 @@ public class BuildCode { /* Create output streams to write to */ PrintWriter outclassdefs=null; PrintWriter outstructs=null; + PrintWriter outrepairstructs=null; PrintWriter outmethodheader=null; PrintWriter outmethod=null; PrintWriter outvirtual=null; @@ -67,13 +68,16 @@ public class BuildCode { str=new FileOutputStream(PREFIX+"taskdefs.c"); outtaskdefs=new java.io.PrintWriter(str, true); } + if (state.structfile!=null) { + str=new FileOutputStream(PREFIX+state.structfile+".struct"); + outrepairstructs=new java.io.PrintWriter(str, true); + } } catch (Exception e) { e.printStackTrace(); System.exit(-1); } /* Build the virtual dispatch tables */ - buildVirtualTables(outvirtual); /* Output includes */ @@ -221,12 +225,69 @@ public class BuildCode { } if (state.TASK) outstructs.println("#define MAXTASKPARAMS "+maxtaskparams); + + + /* Output structure definitions for repair tool */ + if (state.structfile!=null) { + buildRepairStructs(outrepairstructs); + outrepairstructs.close(); + } + outstructs.close(); outmethod.close(); } private int maxcount=0; + private void buildRepairStructs(PrintWriter outrepairstructs) { + Iterator classit=state.getClassSymbolTable().getDescriptorsIterator(); + while(classit.hasNext()) { + ClassDescriptor cn=(ClassDescriptor)classit.next(); + outrepairstructs.println("structure "+cn.getSymbol()+" {"); + outrepairstructs.println(" int __type__;"); + if (cn.hasFlags()) { + outrepairstructs.println(" int __flag__;"); + outrepairstructs.println(" int __flagptr__;"); + } + printRepairStruct(cn, outrepairstructs); + outrepairstructs.println("}\n"); + } + + for(int i=0;i