nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/ir/BreakNode.java
author attila
Wed, 28 Jan 2015 17:58:08 +0100
changeset 28690 78317797ab62
parent 27204 06ec78f29a56
permissions -rw-r--r--
8067139: Finally blocks inlined incorrectly Reviewed-by: hannesw, lagergren
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     1
/*
16151
97c1e756ae1e 8005663: Update copyright year to 2013
jlaskey
parents: 16147
diff changeset
     2
 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     4
 *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    10
 *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    15
 * accompanied this code).
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    16
 *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    20
 *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    23
 * questions.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    24
 */
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    25
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    26
package jdk.nashorn.internal.ir;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    27
26889
dba314d7a634 8059371: Code duplication in handling of break and continue
attila
parents: 25865
diff changeset
    28
import jdk.nashorn.internal.codegen.Label;
17233
72ccf78a8216 8010701: Immutable nodes - final iteration
lagergren
parents: 16530
diff changeset
    29
import jdk.nashorn.internal.ir.annotations.Immutable;
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    30
import jdk.nashorn.internal.ir.visitor.NodeVisitor;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    31
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    32
/**
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    33
 * IR representation for {@code break} statements.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    34
 */
17233
72ccf78a8216 8010701: Immutable nodes - final iteration
lagergren
parents: 16530
diff changeset
    35
@Immutable
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 17769
diff changeset
    36
public final class BreakNode extends JumpStatement {
27204
06ec78f29a56 8059843: Make AST serializable
attila
parents: 26889
diff changeset
    37
    private static final long serialVersionUID = 1L;
17233
72ccf78a8216 8010701: Immutable nodes - final iteration
lagergren
parents: 16530
diff changeset
    38
72ccf78a8216 8010701: Immutable nodes - final iteration
lagergren
parents: 16530
diff changeset
    39
    /**
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    40
     * Constructor
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    41
     *
17524
703643aeb0d6 8013914: Removed explicit LineNumberNodes that were too brittle when code moves around, and also introduced unnecessary footprint. Introduced the Statement node and fixed dead code elimination issues that were discovered by the absense of labels for LineNumberNodes.
lagergren
parents: 17523
diff changeset
    42
     * @param lineNumber line number
703643aeb0d6 8013914: Removed explicit LineNumberNodes that were too brittle when code moves around, and also introduced unnecessary footprint. Introduced the Statement node and fixed dead code elimination issues that were discovered by the absense of labels for LineNumberNodes.
lagergren
parents: 17523
diff changeset
    43
     * @param token      token
703643aeb0d6 8013914: Removed explicit LineNumberNodes that were too brittle when code moves around, and also introduced unnecessary footprint. Introduced the Statement node and fixed dead code elimination issues that were discovered by the absense of labels for LineNumberNodes.
lagergren
parents: 17523
diff changeset
    44
     * @param finish     finish
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 17769
diff changeset
    45
     * @param labelName  label name for break or null if none
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    46
     */
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 17769
diff changeset
    47
    public BreakNode(final int lineNumber, final long token, final int finish, final String labelName) {
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 17769
diff changeset
    48
        super(lineNumber, token, finish, labelName);
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    49
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    50
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 17769
diff changeset
    51
    private BreakNode(final BreakNode breakNode, final LocalVariableConversion conversion) {
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 17769
diff changeset
    52
        super(breakNode, conversion);
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    53
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    54
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    55
    @Override
17769
14ea7feaf658 8012522: Clean up lexical contexts - split out stack based functionality in CodeGenerator and generify NodeVisitors based on their LexicalContext type to avoid casts
lagergren
parents: 17524
diff changeset
    56
    public Node accept(final NodeVisitor<? extends LexicalContext> visitor) {
17233
72ccf78a8216 8010701: Immutable nodes - final iteration
lagergren
parents: 16530
diff changeset
    57
        if (visitor.enterBreakNode(this)) {
16530
201d682e75f4 8010652: Eliminate non-child references in Block/FunctionNode, and make few node types immutable
attila
parents: 16240
diff changeset
    58
            return visitor.leaveBreakNode(this);
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    59
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    60
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    61
        return this;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    62
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    63
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 17769
diff changeset
    64
    @Override
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 17769
diff changeset
    65
    JumpStatement createNewJumpStatement(final LocalVariableConversion conversion) {
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 17769
diff changeset
    66
        return new BreakNode(this, conversion);
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    67
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    68
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    69
    @Override
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 17769
diff changeset
    70
    String getStatementName() {
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 17769
diff changeset
    71
        return "break";
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    72
    }
26889
dba314d7a634 8059371: Code duplication in handling of break and continue
attila
parents: 25865
diff changeset
    73
dba314d7a634 8059371: Code duplication in handling of break and continue
attila
parents: 25865
diff changeset
    74
    @Override
dba314d7a634 8059371: Code duplication in handling of break and continue
attila
parents: 25865
diff changeset
    75
    public BreakableNode getTarget(final LexicalContext lc) {
dba314d7a634 8059371: Code duplication in handling of break and continue
attila
parents: 25865
diff changeset
    76
        return lc.getBreakable(getLabelName());
dba314d7a634 8059371: Code duplication in handling of break and continue
attila
parents: 25865
diff changeset
    77
    }
dba314d7a634 8059371: Code duplication in handling of break and continue
attila
parents: 25865
diff changeset
    78
dba314d7a634 8059371: Code duplication in handling of break and continue
attila
parents: 25865
diff changeset
    79
    @Override
28690
78317797ab62 8067139: Finally blocks inlined incorrectly
attila
parents: 27204
diff changeset
    80
    Label getTargetLabel(final BreakableNode target) {
26889
dba314d7a634 8059371: Code duplication in handling of break and continue
attila
parents: 25865
diff changeset
    81
        return target.getBreakLabel();
dba314d7a634 8059371: Code duplication in handling of break and continue
attila
parents: 25865
diff changeset
    82
    }
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    83
}