| JLiteralBoolean.java |
1 // Copyright 2012- Bill Campbell, Swami Iyer and Bahar Akbal-Delibas
2
3 package jminusminus;
4
5 import static jminusminus.CLConstants.*;
6
7 /**
8 * The AST node for a boolean literal.
9 */
10 class JLiteralBoolean extends JExpression {
11 // String representation of the literal.
12 private String text;
13
14 /**
15 * Constructs an AST node for a boolean literal given its line number and string representation.
16 *
17 * @param line line in which the literal occurs in the source file.
18 * @param text string representation of the literal.
19 */
20 public JLiteralBoolean(int line, String text) {
21 super(line);
22 this.text = text;
23 }
24
25 /**
26 * Returns the literal as a boolean.
27 *
28 * @return the literal as a boolean.
29 */
30 public boolean toBoolean() {
31 return text.equals("true");
32 }
33
34 /**
35 * {@inheritDoc}
36 */
37 public JExpression analyze(Context context) {
38 type = Type.BOOLEAN;
39 return this;
40 }
41
42 /**
43 * {@inheritDoc}
44 */
45 public void codegen(CLEmitter output) {
46 output.addNoArgInstruction(toBoolean() ? ICONST_1 : ICONST_0);
47 }
48
49 /**
50 * {@inheritDoc}
51 */
52 public void codegen(CLEmitter output, String targetLabel, boolean onTrue) {
53 boolean b = toBoolean();
54 if (b && onTrue || !b && !onTrue) {
55 output.addBranchInstruction(GOTO, targetLabel);
56 }
57 }
58
59 /**
60 * {@inheritDoc}
61 */
62 public void toJSON(JSONElement json) {
63 JSONElement e = new JSONElement();
64 json.addChild("JLiteralBoolean:" + line, e);
65 e.addAttribute("type", type == null ? "" : type.toString());
66 e.addAttribute("value", text);
67 }
68 }
69