// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.server.npc.util.expression.compile.ast;

import java.text.ParseException;
import com.hypixel.hytale.server.npc.util.expression.compile.CompileContext;
import com.hypixel.hytale.server.npc.util.expression.compile.Parser;
import com.hypixel.hytale.server.npc.util.expression.compile.Token;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.npc.util.expression.compile.OperatorBinary;

public class ASTOperatorBinary extends ASTOperator
{
    public ASTOperatorBinary(@Nonnull final OperatorBinary operatorBinary, @Nonnull final Token token, final int tokenPosition, @Nonnull final AST lhs, @Nonnull final AST rhs) {
        super(operatorBinary.getResultType(), token, tokenPosition);
        this.addArgument(lhs);
        this.addArgument(rhs);
        this.codeGen = operatorBinary.getCodeGen();
    }
    
    @Override
    public boolean isConstant() {
        return false;
    }
    
    public static void fromBinaryOperator(@Nonnull final Parser.ParsedToken operator, @Nonnull final CompileContext compileContext) throws ParseException {
        // 
        // This method could not be decompiled.
        // 
        // Original Bytecode:
        // 
        //     1: invokevirtual   com/hypixel/hytale/server/npc/util/expression/compile/CompileContext.getOperandStack:()Ljava/util/Stack;
        //     4: astore_2        /* operandStack */
        //     5: aload_2         /* operandStack */
        //     6: invokevirtual   java/util/Stack.pop:()Ljava/lang/Object;
        //     9: checkcast       Lcom/hypixel/hytale/server/npc/util/expression/compile/ast/AST;
        //    12: astore_3        /* rhs */
        //    13: aload_2         /* operandStack */
        //    14: invokevirtual   java/util/Stack.pop:()Ljava/lang/Object;
        //    17: checkcast       Lcom/hypixel/hytale/server/npc/util/expression/compile/ast/AST;
        //    20: astore          lhs
        //    22: aload_0         /* operator */
        //    23: getfield        com/hypixel/hytale/server/npc/util/expression/compile/Parser$ParsedToken.token:Lcom/hypixel/hytale/server/npc/util/expression/compile/Token;
        //    26: aload           lhs
        //    28: invokevirtual   com/hypixel/hytale/server/npc/util/expression/compile/ast/AST.returnType:()Lcom/hypixel/hytale/server/npc/util/expression/ValueType;
        //    31: aload_3         /* rhs */
        //    32: invokevirtual   com/hypixel/hytale/server/npc/util/expression/compile/ast/AST.returnType:()Lcom/hypixel/hytale/server/npc/util/expression/ValueType;
        //    35: invokestatic    com/hypixel/hytale/server/npc/util/expression/compile/OperatorBinary.findOperator:(Lcom/hypixel/hytale/server/npc/util/expression/compile/Token;Lcom/hypixel/hytale/server/npc/util/expression/ValueType;Lcom/hypixel/hytale/server/npc/util/expression/ValueType;)Lcom/hypixel/hytale/server/npc/util/expression/compile/OperatorBinary;
        //    38: astore          operatorBinary
        //    40: aload           operatorBinary
        //    42: ifnonnull       69
        //    45: new             Ljava/text/ParseException;
        //    48: dup            
        //    49: aload_0         /* operator */
        //    50: getfield        com/hypixel/hytale/server/npc/util/expression/compile/Parser$ParsedToken.token:Lcom/hypixel/hytale/server/npc/util/expression/compile/Token;
        //    53: invokestatic    java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
        //    56: invokedynamic   BootstrapMethod #0, makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
        //    61: aload_0         /* operator */
        //    62: getfield        com/hypixel/hytale/server/npc/util/expression/compile/Parser$ParsedToken.tokenPosition:I
        //    65: invokespecial   java/text/ParseException.<init>:(Ljava/lang/String;I)V
        //    68: athrow         
        //    69: aload           lhs
        //    71: invokevirtual   com/hypixel/hytale/server/npc/util/expression/compile/ast/AST.isConstant:()Z
        //    74: ifeq            193
        //    77: aload_3         /* rhs */
        //    78: invokevirtual   com/hypixel/hytale/server/npc/util/expression/compile/ast/AST.isConstant:()Z
        //    81: ifeq            193
        //    84: aload_1         /* compileContext */
        //    85: invokevirtual   com/hypixel/hytale/server/npc/util/expression/compile/CompileContext.getExecutionContext:()Lcom/hypixel/hytale/server/npc/util/expression/ExecutionContext;
        //    88: astore          executionContext
        //    90: aload_1         /* compileContext */
        //    91: invokevirtual   com/hypixel/hytale/server/npc/util/expression/compile/CompileContext.getInstructions:()Ljava/util/List;
        //    94: astore          instructionList
        //    96: aload           instructionList
        //    98: invokeinterface java/util/List.clear:()V
        //   103: aload           lhs
        //   105: aload           instructionList
        //   107: aconst_null    
        //   108: invokevirtual   com/hypixel/hytale/server/npc/util/expression/compile/ast/AST.genCode:(Ljava/util/List;Lcom/hypixel/hytale/server/npc/util/expression/Scope;)Lcom/hypixel/hytale/server/npc/util/expression/ValueType;
        //   111: pop            
        //   112: aload_3         /* rhs */
        //   113: aload           instructionList
        //   115: aconst_null    
        //   116: invokevirtual   com/hypixel/hytale/server/npc/util/expression/compile/ast/AST.genCode:(Ljava/util/List;Lcom/hypixel/hytale/server/npc/util/expression/Scope;)Lcom/hypixel/hytale/server/npc/util/expression/ValueType;
        //   119: pop            
        //   120: aload           instructionList
        //   122: aload           operatorBinary
        //   124: invokevirtual   com/hypixel/hytale/server/npc/util/expression/compile/OperatorBinary.getCodeGen:()Ljava/util/function/Function;
        //   127: aconst_null    
        //   128: invokeinterface java/util/function/Function.apply:(Ljava/lang/Object;)Ljava/lang/Object;
        //   133: checkcast       Lcom/hypixel/hytale/server/npc/util/expression/ExecutionContext$Instruction;
        //   136: invokeinterface java/util/List.add:(Ljava/lang/Object;)Z
        //   141: pop            
        //   142: aload           executionContext
        //   144: aload           instructionList
        //   146: invokevirtual   com/hypixel/hytale/server/npc/util/expression/ExecutionContext.execute:(Ljava/util/List;)Lcom/hypixel/hytale/server/npc/util/expression/ValueType;
        //   149: astore          ret
        //   151: aload           ret
        //   153: getstatic       com/hypixel/hytale/server/npc/util/expression/ValueType.VOID:Lcom/hypixel/hytale/server/npc/util/expression/ValueType;
        //   156: if_acmpne       169
        //   159: new             Ljava/lang/IllegalStateException;
        //   162: dup            
        //   163: ldc             "Failed to evaluate constant binary AST"
        //   165: invokespecial   java/lang/IllegalStateException.<init>:(Ljava/lang/String;)V
        //   168: athrow         
        //   169: aload_2         /* operandStack */
        //   170: aload_0         /* operator */
        //   171: getfield        com/hypixel/hytale/server/npc/util/expression/compile/Parser$ParsedToken.token:Lcom/hypixel/hytale/server/npc/util/expression/compile/Token;
        //   174: aload_0         /* operator */
        //   175: getfield        com/hypixel/hytale/server/npc/util/expression/compile/Parser$ParsedToken.tokenPosition:I
        //   178: aload           executionContext
        //   180: invokevirtual   com/hypixel/hytale/server/npc/util/expression/ExecutionContext.top:()Lcom/hypixel/hytale/server/npc/util/expression/ExecutionContext$Operand;
        //   183: invokestatic    invokestatic   !!! ERROR
        //   186: invokevirtual   java/util/Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
        //   189: pop            
        //   190: goto            218
        //   193: aload_2         /* operandStack */
        //   194: new             Lcom/hypixel/hytale/server/npc/util/expression/compile/ast/ASTOperatorBinary;
        //   197: dup            
        //   198: aload           operatorBinary
        //   200: aload_0         /* operator */
        //   201: getfield        com/hypixel/hytale/server/npc/util/expression/compile/Parser$ParsedToken.token:Lcom/hypixel/hytale/server/npc/util/expression/compile/Token;
        //   204: aload_0         /* operator */
        //   205: getfield        com/hypixel/hytale/server/npc/util/expression/compile/Parser$ParsedToken.tokenPosition:I
        //   208: aload           lhs
        //   210: aload_3         /* rhs */
        //   211: invokespecial   com/hypixel/hytale/server/npc/util/expression/compile/ast/ASTOperatorBinary.<init>:(Lcom/hypixel/hytale/server/npc/util/expression/compile/OperatorBinary;Lcom/hypixel/hytale/server/npc/util/expression/compile/Token;ILcom/hypixel/hytale/server/npc/util/expression/compile/ast/AST;Lcom/hypixel/hytale/server/npc/util/expression/compile/ast/AST;)V
        //   214: invokevirtual   java/util/Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
        //   217: pop            
        //   218: goto            243
        //   221: astore_3        /* e */
        //   222: new             Ljava/text/ParseException;
        //   225: dup            
        //   226: aload_0         /* operator */
        //   227: getfield        com/hypixel/hytale/server/npc/util/expression/compile/Parser$ParsedToken.tokenString:Ljava/lang/String;
        //   230: invokedynamic   BootstrapMethod #1, makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
        //   235: aload_0         /* operator */
        //   236: getfield        com/hypixel/hytale/server/npc/util/expression/compile/Parser$ParsedToken.tokenPosition:I
        //   239: invokespecial   java/text/ParseException.<init>:(Ljava/lang/String;I)V
        //   242: athrow         
        //   243: return         
        //    Exceptions:
        //  throws java.text.ParseException
        //    StackMapTable: 00 06 FF 00 45 00 06 07 00 2A 07 00 1C 07 00 22 07 00 27 07 00 27 07 00 02 00 00 FE 00 63 07 00 6C 07 00 56 07 00 72 F8 00 17 F8 00 18 42 07 00 8E 15
        //    Exceptions:
        //  Try           Handler
        //  Start  End    Start  End    Type                              
        //  -----  -----  -----  -----  ----------------------------------
        //  5      218    221    243    Ljava/util/NoSuchElementException;
        // 
        // The error that occurred was:
        // 
        // java.lang.ClassCastException
        // 
        throw new IllegalStateException("An error occurred while decompiling this method.");
    }
}
