package org.elixir_lang.beam.decompiler;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public class PrefixOperator extends MacroNameArity {
/*
* CONSTANTS
*/
private static final Set<String> PREFIX_OPERATOR_SET;
public static final MacroNameArity INSTANCE = new PrefixOperator();
static {
PREFIX_OPERATOR_SET = new THashSet<String>();
PREFIX_OPERATOR_SET.add("+");
PREFIX_OPERATOR_SET.add("-");
}
/*
* Static Methods
*/
/**
* @parma name {@link org.elixir_lang.beam.MacroNameArity#name}
*/
private static boolean isPrefixOperator(@NotNull String name) {
return PREFIX_OPERATOR_SET.contains(name);
}
/*
* Instance Methods
*/
/**
* Whether the decompiler accepts the {@code macroNameArity}
*
* @return {@code true} if {@link #append(StringBuilder, org.elixir_lang.beam.MacroNameArity)} should be called with
* {@code macroNameArity}.
*/
@Override
public boolean accept(@NotNull org.elixir_lang.beam.MacroNameArity macroNameArity) {
Integer arity = macroNameArity.arity;
return arity != null && arity == 1 && isPrefixOperator(macroNameArity.name);
}
/**
* Append the decompiled source for {@code macroNameArity} to {@code decompiled}.
*
* @param decompiled the decompiled source so far
* @param macroNameArity
*/
@Override
public void append(@NotNull StringBuilder decompiled, @NotNull org.elixir_lang.beam.MacroNameArity macroNameArity) {
decompiled
.append(" ")
.append(macroNameArity.macro)
.append(" (")
.append(macroNameArity.name)
.append("value)");
appendBody(decompiled);
}
}