9 public Sources(State s) {
13 public boolean setSource(SetDescriptor sd) {
14 SetDescriptor usedblock=(SetDescriptor)state.stSets.get("UsedBlock");
15 SetDescriptor usedinode=(SetDescriptor)state.stSets.get("UsedInode");
17 if (usedblock!=null&&usedblock.isSubset(sd))
19 if (usedinode!=null&&usedinode.isSubset(sd))
24 public boolean allocSource(SetDescriptor sd) {
25 return !setSource(sd);
27 public SetDescriptor getSourceSet(SetDescriptor sd) {
28 SetDescriptor usedblock=(SetDescriptor)state.stSets.get("UsedBlock");
29 SetDescriptor usedinode=(SetDescriptor)state.stSets.get("UsedInode");
31 if (usedblock!=null&&usedblock.isSubset(sd))
32 return (SetDescriptor)state.stSets.get("FreeBlock");
33 if (usedinode!=null&&usedinode.isSubset(sd))
34 return (SetDescriptor)state.stSets.get("FreeInode");
39 public void generateSourceAlloc(CodeWriter cr,VarDescriptor vd, SetDescriptor sd) {
40 TypeDescriptor td=sd.getType();
41 Expr e=td.getSizeExpr();
42 VarDescriptor size=VarDescriptor.makeNew("size");
43 cr.pushSymbolTable(state.stGlobals);
46 cr.outputline(td.getGenerateType().getSafeSymbol()+" "+vd.getSafeSymbol()+"=("+td.getGenerateType().getSafeSymbol()+") malloc("+size.getSafeSymbol()+");");
48 if (Compiler.ALLOCATECPLUSPLUS) {
50 vtable+=sd.getType().getSafeSymbol().length();
51 vtable+=sd.getType().getSafeSymbol();
52 cr.outputline("((int**)"+vd.getSafeSymbol()+")[0] = (int *)"+vtable+"+2;");
56 public boolean relsetSource(RelationDescriptor rd, boolean domain) {
58 return setSource(rd.getDomain());
59 else return setSource(rd.getRange());
61 public boolean relallocSource(RelationDescriptor rd, boolean domain) {
63 return allocSource(rd.getDomain());
64 else return allocSource(rd.getRange());
67 public SetDescriptor relgetSourceSet(RelationDescriptor rd, boolean domain) {
69 return getSourceSet(rd.getDomain());
70 else return getSourceSet(rd.getRange());
72 public void relgenerateSourceAlloc(CodeWriter cr,VarDescriptor vd, RelationDescriptor rd, boolean domain) {
73 SetDescriptor sd=null;
78 TypeDescriptor td=sd.getType();
79 Expr e=td.getSizeExpr();
80 VarDescriptor size=VarDescriptor.makeNew("size");
81 cr.pushSymbolTable(state.stGlobals);
84 cr.outputline(td.getGenerateType().getSafeSymbol()+" "+vd.getSafeSymbol()+"=("+td.getGenerateType().getSafeSymbol()+") malloc("+size.getSafeSymbol()+");");