1 package polyglot.ext.jl.ast; 2 3 import polyglot.ast.*; 4 import polyglot.types.*; 5 import polyglot.visit.*; 6 import polyglot.util.*; 7 import java.util.*; 8 9 16 public class LocalAssign_c extends Assign_c implements LocalAssign 17 { 18 public LocalAssign_c(Position pos, Local left, Operator op, Expr right) { 19 super(pos, left, op, right); 20 } 21 22 public Assign left(Expr left) { 23 LocalAssign_c n = (LocalAssign_c)super.left(left); 24 n.assertLeftType(); 25 return n; 26 } 27 28 private void assertLeftType() { 29 if (!(left() instanceof Local)) { 30 throw new InternalCompilerError("left expression of an LocalAssign must be a local"); 31 } 32 } 33 34 public Term entry() { 35 if (operator() != Assign.ASSIGN) { 36 return left(); 37 } 38 39 return right().entry(); 40 } 41 42 protected void acceptCFGAssign(CFGBuilder v) { 43 Local l = (Local)left(); 44 45 v.visitCFG(right(), this); 47 } 48 49 protected void acceptCFGOpAssign(CFGBuilder v) { 50 Local l = (Local)left(); 51 52 v.visitThrow(l); 54 v.edge(l, right().entry()); 55 v.visitCFG(right(), this); 56 } 57 } 58 | Popular Tags |