Checking in some checks...
authorbdemsky <bdemsky>
Thu, 15 Apr 2004 22:05:22 +0000 (22:05 +0000)
committerbdemsky <bdemsky>
Thu, 15 Apr 2004 22:05:22 +0000 (22:05 +0000)
Repair/RepairCompiler/MCC/IR/DotExpr.java
Repair/RepairCompiler/MCC/IR/Expr.java
Repair/RepairCompiler/MCC/IR/OpExpr.java
Repair/RepairCompiler/MCC/IR/Updates.java
Repair/RepairCompiler/MCC/IR/VarExpr.java

index 1c5fb47f0055c7ec9c88d7d9b599a21e390939f0..fbd217d5cbcc20d4bc100e9589a1019cf4c19be8 100755 (executable)
@@ -282,6 +282,13 @@ public class DotExpr extends Expr {
         }
     }
 
+    public boolean isValue() {
+       FieldDescriptor tmpfd=fd;
+       if (tmpfd instanceof ArrayDescriptor)
+           tmpfd=((ArrayDescriptor)tmpfd).getField();
+       return (tmpfd.getPtr()||(tmpfd.getType() instanceof ReservedTypeDescriptor));
+    }
+
     boolean typechecked=false;
     public TypeDescriptor typecheck(SemanticAnalyzer sa) {
        if (typechecked)
index 596c125d8dcc53972df193330acc394617c83db7..1e13217e4d85904234140fa3d71c29ea13d24307 100755 (executable)
@@ -40,6 +40,10 @@ public abstract class Expr {
        return null;
     }
 
+    public boolean isValue() {
+       return false;
+    }
+
     public int[] getRepairs(boolean negated) {
        System.out.println(this.getClass().getName());
        throw new Error("Unrecognized EXPR");
index 8693aa3965a77d8ff08cc692b9c5b18f96040143..c7cdd0d4cad9718e3f408a98ff314e63c902d556 100755 (executable)
@@ -15,6 +15,8 @@ public class OpExpr extends Expr {
     }
 
     public static boolean isInt(Expr e) {
+       if (e==null)
+           return false;
        if ((e instanceof IntegerLiteralExpr)||
            ((e instanceof OpExpr)&&(((OpExpr)e).opcode==Opcode.NOP)&&(((OpExpr)e).getLeftExpr() instanceof IntegerLiteralExpr)))
            return true;
@@ -35,8 +37,8 @@ public class OpExpr extends Expr {
            (isInt(left)&&(opcode==Opcode.RND))) {
            this.opcode=Opcode.NOP;
            this.right=null;
-           int lint=getInt(left);
-           int rint=getInt(right);
+           int lint=isInt(left)?getInt(left):0;
+           int rint=isInt(right)?getInt(right):0;
            int value=0;
            if (opcode==Opcode.ADD) {
                value=lint+rint;
index 5e3652b044c7b45ced723b3541aa856349f46b57..a4e6d801654d56d2e54de76a00659671342909bc 100755 (executable)
@@ -23,6 +23,8 @@ class Updates {
     }
 
     public Updates(Expr lexpr, Expr rexpr, Opcode op, boolean negate) {
+       if (!lexpr.isValue())
+           System.out.println("Building invalid update");
        leftexpr=lexpr;
        type=Updates.EXPR;
        if (negate) {
@@ -92,6 +94,8 @@ class Updates {
     }
 
     public Updates(Expr lexpr, Expr rexpr) {
+       if (!lexpr.isValue())
+           System.out.println("Building invalid update");
        leftexpr=lexpr;
        rightexpr=rexpr;
        type=Updates.EXPR;
@@ -99,6 +103,8 @@ class Updates {
     }
 
     public Updates(Expr lexpr, int rpos) {
+       if (!lexpr.isValue())
+           System.out.println("Building invalid update");
        leftexpr=lexpr;
        rightposition=rpos;
        type=Updates.POSITION;
index 51e916a95e2757c33536d7f4c86911b2f8d23ca6..fcec02cd4c5fbab1e7858b1e4b6b0e54a2c9133f 100755 (executable)
@@ -69,6 +69,10 @@ public class VarExpr extends Expr {
         return vd;
     }
 
+    public boolean isValue() {
+       return vd.isGlobal();
+    }
+
     public void generate(CodeWriter writer, VarDescriptor dest) {        
 
         // #TBD#: bit of a hack, really should have been type checked properly