11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package jdk.nashorn.internal.ir; 27 28 import jdk.nashorn.internal.codegen.types.Type; 29 import jdk.nashorn.internal.ir.annotations.Immutable; 30 import jdk.nashorn.internal.ir.visitor.NodeVisitor; 31 32 /** 33 * IR representation of a property access (period operator.) 34 */ 35 @Immutable 36 public final class AccessNode extends BaseNode { 37 private static final long serialVersionUID = 1L; 38 39 /** Property name. */ 40 private final String property; 41 42 /** 43 * Constructor 44 * 45 * @param token token 46 * @param finish finish 47 * @param base base node 48 * @param property property 49 */ 50 public AccessNode(final long token, final int finish, final Expression base, final String property) { 82 sb.append('('); 83 } 84 85 base.toString(sb, printType); 86 87 if (needsParen) { 88 sb.append(')'); 89 } 90 sb.append('.'); 91 92 sb.append(property); 93 } 94 95 /** 96 * Get the property name 97 * 98 * @return the property name 99 */ 100 public String getProperty() { 101 return property; 102 } 103 104 private AccessNode setBase(final Expression base) { 105 if (this.base == base) { 106 return this; 107 } 108 return new AccessNode(this, base, property, isFunction(), type, programPoint); 109 } 110 111 @Override 112 public AccessNode setType(final Type type) { 113 if (this.type == type) { 114 return this; 115 } 116 return new AccessNode(this, base, property, isFunction(), type, programPoint); 117 } 118 119 @Override 120 public AccessNode setProgramPoint(final int programPoint) { 121 if (this.programPoint == programPoint) { | 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package jdk.nashorn.internal.ir; 27 28 import jdk.nashorn.internal.codegen.types.Type; 29 import jdk.nashorn.internal.ir.annotations.Immutable; 30 import jdk.nashorn.internal.ir.visitor.NodeVisitor; 31 import jdk.nashorn.internal.parser.Token; 32 import jdk.nashorn.internal.parser.TokenType; 33 34 /** 35 * IR representation of a property access (period operator.) 36 */ 37 @Immutable 38 public final class AccessNode extends BaseNode { 39 private static final long serialVersionUID = 1L; 40 41 /** Property name. */ 42 private final String property; 43 44 /** 45 * Constructor 46 * 47 * @param token token 48 * @param finish finish 49 * @param base base node 50 * @param property property 51 */ 52 public AccessNode(final long token, final int finish, final Expression base, final String property) { 84 sb.append('('); 85 } 86 87 base.toString(sb, printType); 88 89 if (needsParen) { 90 sb.append(')'); 91 } 92 sb.append('.'); 93 94 sb.append(property); 95 } 96 97 /** 98 * Get the property name 99 * 100 * @return the property name 101 */ 102 public String getProperty() { 103 return property; 104 } 105 106 /** 107 * Return true if this node represents an index operation normally represented as {@link IndexNode}. 108 * @return true if an index access. 109 */ 110 public boolean isIndex() { 111 return Token.descType(getToken()) == TokenType.LBRACKET; 112 } 113 114 private AccessNode setBase(final Expression base) { 115 if (this.base == base) { 116 return this; 117 } 118 return new AccessNode(this, base, property, isFunction(), type, programPoint); 119 } 120 121 @Override 122 public AccessNode setType(final Type type) { 123 if (this.type == type) { 124 return this; 125 } 126 return new AccessNode(this, base, property, isFunction(), type, programPoint); 127 } 128 129 @Override 130 public AccessNode setProgramPoint(final int programPoint) { 131 if (this.programPoint == programPoint) { |