// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. package org.jetbrains.kotlin.js.backend.ast; /** * A JavaScript unary operator. */ public enum JsUnaryOperator implements JsOperator { /* * Precedence indices from "JavaScript - The Definitive Guide" 4th Edition * (page 57) */ BIT_NOT("~", 14, PREFIX), DEC("--", 14, POSTFIX | PREFIX), DELETE("delete", 14, PREFIX), INC( "++", 14, POSTFIX | PREFIX), NEG("-", 14, PREFIX), POS("+", 14, PREFIX), NOT("!", 14, PREFIX), TYPEOF("typeof", 14, PREFIX), VOID("void", 14, PREFIX); private final int mask; private final int precedence; private final String symbol; private JsUnaryOperator(String symbol, int precedence, int mask) { this.symbol = symbol; this.precedence = precedence; this.mask = mask; } @Override public int getPrecedence() { return precedence; } @Override public String getSymbol() { return symbol; } @Override public boolean isKeyword() { return this == DELETE || this == TYPEOF || this == VOID; } @Override public boolean isLeftAssociative() { return (mask & LEFT) != 0; } public boolean isModifying() { return this == DEC || this == INC || this == DELETE; } @Override public boolean isPrecedenceLessThan(JsOperator other) { return precedence < other.getPrecedence(); } @Override public boolean isValidInfix() { return (mask & INFIX) != 0; } @Override public boolean isValidPostfix() { return (mask & POSTFIX) != 0; } @Override public boolean isValidPrefix() { return (mask & PREFIX) != 0; } @Override public String toString() { return symbol; } }