From f2e11e8115f8c22a4c2b1f81be839aa5374df40a Mon Sep 17 00:00:00 2001 From: droy Date: Wed, 9 Jul 2003 17:43:23 +0000 Subject: [PATCH] sizeofpredi --- .../MCC/IR/SizeofPredicate.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100755 Repair/RepairCompiler/MCC/IR/SizeofPredicate.java diff --git a/Repair/RepairCompiler/MCC/IR/SizeofPredicate.java b/Repair/RepairCompiler/MCC/IR/SizeofPredicate.java new file mode 100755 index 0000000..fee9795 --- /dev/null +++ b/Repair/RepairCompiler/MCC/IR/SizeofPredicate.java @@ -0,0 +1,49 @@ +package MCC.IR; + +import java.util.*; + +public class SizeofPredicate extends Predicate { + + SetExpr setexpr; + Opcode opcode; + IntegerLiteralExpr cardinality; + + public SizeofPredicate(SetExpr setexpr, Opcode opcode, IntegerLiteralExpr cardinality) { + if (setexpr == null || opcode == null || cardinality == null) { + throw new IllegalArgumentException(); + } else if (opcode != Opcode.EQ && + opcode != Opcode.GE && + opcode != Opcode.LE) { + throw new IllegalArgumentException("invalid operator type"); + } + + this.setexpr = setexpr; + this.opcode = opcode; + this.cardinality = cardinality; + } + + public Set getRequiredDescriptors() { + assert setexpr != null; + Set v = setexpr.getRequiredDescriptors(); + // v.add(cardinality.getRequiredDescriptors()); // will be null + return v; + } + + public void generate(CodeWriter writer, VarDescriptor dest) { + + // #TBD#: generate the set which should generate a name (variable) which is the pointer + // to a hash table iterator that we can dereference get something blah blah blah + + VarDescriptor size = VarDescriptor.makeNew("size"); + setexpr.generate_size(writer, size); + + writer.outputline("int " + dest.getSafeSymbol() + " = " + size.getSafeSymbol() + opcode.toString() + cardinality.getValue() + ";"); + } + +} + + + + + + -- 2.34.1