KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > soot > javaToJimple > jj > ast > JjUnary_c


1 /* Soot - a J*va Optimization Framework
2  * Copyright (C) 2004 Jennifer Lhotak
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */

19
20 package soot.javaToJimple.jj.ast;
21
22 import polyglot.ast.*;
23 import polyglot.visit.*;
24 import polyglot.ext.jl.ast.*;
25 import polyglot.types.*;
26 import polyglot.util.*;
27
28 public class JjUnary_c extends Unary_c {
29
30     public JjUnary_c(Position pos, Unary.Operator op, Expr expr){
31         super(pos, op, expr);
32     }
33     
34     public Type childExpectedType(Expr child, AscriptionVisitor av){
35         TypeSystem ts = av.typeSystem();
36
37         if (child == expr) {
38             if (op == POST_INC || op == POST_DEC ||
39                 op == PRE_INC || op == PRE_DEC) {
40                 //if (child.type().isByte() || child.type().isShort()){// || child.type().isChar()) {
41
// return ts.Int();
42
//}
43
return child.type();
44             }
45             else if (op == NEG || op == POS) {
46                 //if (child.type().isByte() || child.type().isShort() || child.type().isChar()) {
47
// return ts.Int();
48
//}
49
return child.type();
50             }
51             else if (op == BIT_NOT) {
52                 //if (child.type().isByte() || child.type().isShort() || child.type().isChar()) {
53
// return ts.Int();
54
//}
55
return child.type();
56             }
57             else if (op == NOT) {
58                 return ts.Boolean();
59             }
60         }
61
62         return child.type();
63         
64
65     }
66 }
67
Popular Tags