KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > polyglot > ext > jl > ast > LocalAssign_c


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 /**
10  * A <code>LocalAssign_c</code> represents a Java assignment expression
11  * to a local variable. For instance, <code>x = e</code>.
12  *
13  * The class of the <code>Expr</code> returned by
14  * <code>LocalAssign_c.left()</code>is guaranteed to be an <code>Local</code>.
15  */

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       // x OP= e: visit e -> (l OP= e)
46
v.visitCFG(right(), this);
47   }
48   
49   protected void acceptCFGOpAssign(CFGBuilder v) {
50       Local l = (Local)left();
51       
52       // l OP= e: visit l -> e -> (l OP= e)
53
v.visitThrow(l);
54       v.edge(l, right().entry());
55       v.visitCFG(right(), this);
56   }
57 }
58
Popular Tags