StdScope class

Пакет: com.hypixel.hytale.server.npc.util.expression

Файл: com/hypixel/hytale/server/npc/util/expression/StdScope.java

implements: Scope

Поля (26)

МодификаторыТипИмя
final StdScope.SymbolStringArray VAR_EMPTY_STRING_ARRAY
break
break
public final boolean isConstant
return
public final BooleanSupplier value
public final Supplier<boolean[]> value
public final Scope.Function value
public final DoubleSupplier value
public final Supplier<double[]> value
public final Supplier<String> value
public final Supplier<String[]> value
public final ValueType valueType
StdScope var1
StdScope.Symbol var2
StdScope.Symbol var2
StdScope.Symbol var2
StdScope.Symbol var2
StdScope.Symbol var2
StdScope.Symbol var2
StdScope.Symbol var2
StdScope.Symbol var2
StdScope.Symbol var2
StdScope.Symbol var2
StdScope.Symbol var3
StdScope.Symbol var3

Методы (95)

МодификаторыВозвратСигнатура
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Trying to add symbol twice to scope " + var1)
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Can't find symbol " + var1 + " in symbol table")
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Type mismatch with " + var1 + ". Got " + var2 + " but expected " + var3.valueType)
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Can't replace a constant in symbol table: " + var1)
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Can't replace a variable with a constant: " + var1)
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Can't assign an empty array to symbol " + var1 + " of type " + var2.valueType)
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Unable to find symbol: " + var1)
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Symbol is not a string: " + var1)
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Symbol is not a number: " + var1)
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Symbol is not a boolean: " + var1)
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Symbol is not a string array: " + var1)
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Symbol is not a number array: " + var1)
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Symbol is not a boolean array: " + var1)
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Unable to find function: " + var1)
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Symbol is not a function: " + var1)
public Symbolpublic Symbol(boolean var1, ValueType var2)
public SymbolBooleanpublic SymbolBoolean(boolean var1, BooleanSupplier var2)
public SymbolBooleanArraypublic SymbolBooleanArray(boolean var1, Supplier<boolean[]> var2)
public SymbolFunctionpublic SymbolFunction(boolean var1, ValueType var2, Scope.Function var3)
public SymbolNumberpublic SymbolNumber(boolean var1, DoubleSupplier var2)
public SymbolNumberArraypublic SymbolNumberArray(boolean var1, Supplier<double[]> var2)
public SymbolStringpublic SymbolString(boolean var1, Supplier<String> var2)
public SymbolStringArraypublic SymbolStringArray(boolean var1, Supplier<String[]> var2)
protected void addvoid add(String var1, StdScope.Symbol var2)
public void addBooleanArraySuppliervoid addBooleanArraySupplier(String var1, Supplier<boolean[]> var2)
public void addConstvoid addConst(String var1, @Nullable String var2)
public void addConstvoid addConst(String var1, double var2)
public void addConstvoid addConst(String var1, boolean var2)
public void addConstvoid addConst(String var1, @Nullable String[] var2)
public void addConstvoid addConst(String var1, @Nullable double[] var2)
public void addConstvoid addConst(String var1, @Nullable boolean[] var2)
public void addConstEmptyArrayvoid addConstEmptyArray(String var1)
public void addDoubleArraySuppliervoid addDoubleArraySupplier(String var1, Supplier<double[]> var2)
public void addInvariantvoid addInvariant(@Nonnull String var1, Scope.Function var2, ValueType var3, @Nonnull ValueType... var4)
public void addStringArraySuppliervoid addStringArraySupplier(String var1, Supplier<String[]> var2)
public void addSuppliervoid addSupplier(String var1, Supplier<String> var2)
public void addSuppliervoid addSupplier(String var1, DoubleSupplier var2)
public void addSuppliervoid addSupplier(String var1, BooleanSupplier var2)
public void addVarvoid addVar(String var1, @Nullable String var2)
public void addVarvoid addVar(String var1, double var2)
public void addVarvoid addVar(String var1, boolean var2)
public void addVarvoid addVar(String var1, @Nullable String[] var2)
public void addVarvoid addVar(String var1, @Nullable double[] var2)
public void addVarvoid addVar(String var1, @Nullable boolean[] var2)
public void addVariantvoid addVariant(@Nonnull String var1, Scope.Function var2, ValueType var3, @Nonnull ValueType... var4)
public void changeValuevoid changeValue(String var1, @Nullable String var2)
public void changeValuevoid changeValue(String var1, double var2)
public void changeValuevoid changeValue(String var1, boolean var2)
public void changeValuevoid changeValue(String var1, @Nullable String[] var2)
public void changeValuevoid changeValue(String var1, @Nullable double[] var2)
public void changeValuevoid changeValue(String var1, @Nullable boolean[] var2)
public void changeValueToEmptyArrayvoid changeValueToEmptyArray(String var1)
protected StdScope.Symbol getStdScope.Symbol get(String var1)
if if(var2 == null)
if if(var2 == null)
if if(var2 == null)
if if(var2 == null)
if if(var2 == null)
if if(var2 == null)
if if(var2 == null)
if if(var2 == null)
if if(var3 == null)
if if(var3.isConstant)
if if(var2.isConstant)
if if(var2 == null)
if if(var2 == null)
if if(var2 == null)
if if(var2 == null)
if if(var2.isConstant)
if if(var2 == null)
if if(this.parent != null)
if if(var2 == null)
if if(this.parent != null)
if if(var2 == null)
if if(this.parent != null)
if if(var2 == null)
if if(this.parent != null)
if if(var2 == null)
if if(this.parent != null)
if if(var2 == null)
if if(this.parent != null)
if if(var2 == null)
if if(this.parent != null)
if if(var2 != null)
if if(var2 != null)
protected void mergeSymbolsvoid mergeSymbols(@Nonnull StdScope var1)
protected void replacevoid replace(String var1, @Nonnull StdScope.Symbol var2)
abstract super super(var1, ValueType.BOOLEAN)
abstract super super(var1, ValueType.BOOLEAN_ARRAY)
abstract super super(var1, var2)
abstract super super(var1, ValueType.NUMBER)
abstract super super(var1, ValueType.NUMBER_ARRAY)
abstract super super(var1, ValueType.STRING)
abstract super super(var1, ValueType.STRING_ARRAY)
switch switch(var2.valueType)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.util.expression;

class="kw">import com.hypixel.hytale.common.util.ArrayUtil;
class="kw">import java.util.HashMap;
class="kw">import java.util.Map;
class="kw">import java.util.Objects;
class="kw">import java.util.function.BooleanSupplier;
class="kw">import java.util.function.DoubleSupplier;
class="kw">import java.util.function.Supplier;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class StdScope class="kw">implements Scope {
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolStringArray VAR_EMPTY_STRING_ARRAY = new StdScope.SymbolStringArray(false, () -> ArrayUtil.EMPTY_STRING_ARRAY);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolNumberArray VAR_EMPTY_NUMBER_ARRAY = new StdScope.SymbolNumberArray(false, () -> ArrayUtil.EMPTY_DOUBLE_ARRAY);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolBooleanArray VAR_EMPTY_BOOLEAN_ARRAY = new StdScope.SymbolBooleanArray(false, () -> ArrayUtil.EMPTY_BOOLEAN_ARRAY);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolStringArray VAR_NULL_STRING_ARRAY = new StdScope.SymbolStringArray(false, () -> null);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolNumberArray VAR_NULL_NUMBER_ARRAY = new StdScope.SymbolNumberArray(false, () -> null);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolBooleanArray VAR_NULL_BOOLEAN_ARRAY = new StdScope.SymbolBooleanArray(false, () -> null);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolString VAR_NULL_STRING = new StdScope.SymbolString(false, () -> null);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolString VAR_EMPTY_STRING = new StdScope.SymbolString(false, () -> "");
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolBoolean VAR_BOOLEAN_TRUE = new StdScope.SymbolBoolean(false, () -> true);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolBoolean VAR_BOOLEAN_FALSE = new StdScope.SymbolBoolean(false, () -> false);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolStringArray CONST_EMPTY_STRING_ARRAY = new StdScope.SymbolStringArray(true, () -> ArrayUtil.EMPTY_STRING_ARRAY);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolNumberArray CONST_EMPTY_NUMBER_ARRAY = new StdScope.SymbolNumberArray(true, () -> ArrayUtil.EMPTY_DOUBLE_ARRAY);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolBooleanArray CONST_EMPTY_BOOLEAN_ARRAY = new StdScope.SymbolBooleanArray(true, () -> ArrayUtil.EMPTY_BOOLEAN_ARRAY);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolStringArray CONST_NULL_STRING_ARRAY = new StdScope.SymbolStringArray(true, () -> null);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolNumberArray CONST_NULL_NUMBER_ARRAY = new StdScope.SymbolNumberArray(true, () -> null);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolBooleanArray CONST_NULL_BOOLEAN_ARRAY = new StdScope.SymbolBooleanArray(true, () -> null);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolString CONST_NULL_STRING = new StdScope.SymbolString(true, () -> null);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolString CONST_EMPTY_STRING = new StdScope.SymbolString(true, () -> "");
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolBoolean CONST_BOOLEAN_TRUE = new StdScope.SymbolBoolean(true, () -> true);
   class="kw">protected class="kw">static class="kw">final StdScope.SymbolBoolean CONST_BOOLEAN_FALSE = new StdScope.SymbolBoolean(true, () -> false);
   class="kw">protected Scope parent;
   class="kw">protected Map<String, StdScope.Symbol> symbolTable;

   class="kw">public StdScope(Scope var1) {
      this.parent = var1;
      this.symbolTable = new HashMap<>();
   }

   @Nonnull
   class="kw">public class="kw">static StdScope copyOf(@Nonnull StdScope var0) {
      StdScope var1 = new StdScope(var0.parent);
      var1.mergeSymbols(var0);
      class="kw">return var1;
   }

   @Nonnull
   class="kw">public StdScope merge(@Nonnull StdScope var1) {
      this.mergeSymbols(var1);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public class="kw">static StdScope mergeScopes(@Nonnull StdScope var0, @Nonnull StdScope var1) {
      class="kw">return copyOf(var0).merge(var1);
   }

   class="kw">protected void mergeSymbols(@Nonnull StdScope var1) {
      var1.symbolTable.forEach(this::add);
   }

   class="kw">protected void add(String var1, StdScope.Symbol var2) {
      if (this.symbolTable.containsKey(var1)) {
         throw new IllegalStateException("Trying to add symbol twice to scope " + var1);
      }

      this.symbolTable.put(var1, var2);
   }

   class="kw">public void addConst(String var1, @Nullable String var2) {
      if (var2 == null) {
         this.add(var1, CONST_NULL_STRING);
      } else if (var2.isEmpty()) {
         this.add(var1, CONST_EMPTY_STRING);
      } else {
         this.add(var1, new StdScope.SymbolString(true, () -> var2));
      }
   }

   class="kw">public void addConst(String var1, double var2) {
      this.add(var1, new StdScope.SymbolNumber(true, () -> var2));
   }

   class="kw">public void addConst(String var1, boolean var2) {
      this.add(var1, var2 ? CONST_BOOLEAN_TRUE : CONST_BOOLEAN_FALSE);
   }

   class="kw">public void addConst(String var1, @Nullable String[] var2) {
      if (var2 == null) {
         this.add(var1, CONST_NULL_STRING_ARRAY);
      } else if (var2.length == 0) {
         this.add(var1, CONST_EMPTY_STRING_ARRAY);
      } else {
         this.add(var1, new StdScope.SymbolStringArray(true, () -> var2));
      }
   }

   class="kw">public void addConst(String var1, @Nullable double[] var2) {
      if (var2 == null) {
         this.add(var1, CONST_NULL_NUMBER_ARRAY);
      } else if (var2.length == 0) {
         this.add(var1, CONST_EMPTY_NUMBER_ARRAY);
      } else {
         this.add(var1, new StdScope.SymbolNumberArray(true, () -> var2));
      }
   }

   class="kw">public void addConst(String var1, @Nullable boolean[] var2) {
      if (var2 == null) {
         this.add(var1, CONST_NULL_BOOLEAN_ARRAY);
      } else if (var2.length == 0) {
         this.add(var1, CONST_EMPTY_BOOLEAN_ARRAY);
      } else {
         this.add(var1, new StdScope.SymbolBooleanArray(true, () -> var2));
      }
   }

   class="kw">public void addConstEmptyArray(String var1) {
      this.add(var1, new StdScope.Symbol(true, ValueType.EMPTY_ARRAY));
   }

   class="kw">public void addVar(String var1, @Nullable String var2) {
      if (var2 == null) {
         this.add(var1, VAR_NULL_STRING);
      } else if (var2.isEmpty()) {
         this.add(var1, VAR_EMPTY_STRING);
      } else {
         this.add(var1, new StdScope.SymbolString(false, () -> var2));
      }
   }

   class="kw">public void addVar(String var1, double var2) {
      this.add(var1, new StdScope.SymbolNumber(false, () -> var2));
   }

   class="kw">public void addVar(String var1, boolean var2) {
      this.add(var1, var2 ? VAR_BOOLEAN_TRUE : VAR_BOOLEAN_FALSE);
   }

   class="kw">public void addVar(String var1, @Nullable String[] var2) {
      if (var2 == null) {
         this.add(var1, VAR_NULL_STRING_ARRAY);
      } else if (var2.length == 0) {
         this.add(var1, VAR_EMPTY_STRING_ARRAY);
      } else {
         this.add(var1, new StdScope.SymbolStringArray(false, () -> var2));
      }
   }

   class="kw">public void addVar(String var1, @Nullable double[] var2) {
      if (var2 == null) {
         this.add(var1, VAR_NULL_NUMBER_ARRAY);
      } else if (var2.length == 0) {
         this.add(var1, VAR_EMPTY_NUMBER_ARRAY);
      } else {
         this.add(var1, new StdScope.SymbolNumberArray(false, () -> var2));
      }
   }

   class="kw">public void addVar(String var1, @Nullable boolean[] var2) {
      if (var2 == null) {
         this.add(var1, VAR_NULL_BOOLEAN_ARRAY);
      } else if (var2.length == 0) {
         this.add(var1, VAR_EMPTY_BOOLEAN_ARRAY);
      } else {
         this.add(var1, new StdScope.SymbolBooleanArray(false, () -> var2));
      }
   }

   class="kw">public void addInvariant(@Nonnull String var1, Scope.Function var2, ValueType var3, @Nonnull ValueType... var4) {
      this.add(Scope.encodeFunctionName(var1, var4), new StdScope.SymbolFunction(true, var3, var2));
      this.add(var1, new StdScope.SymbolFunction(false, var3, null));
   }

   class="kw">public void addVariant(@Nonnull String var1, Scope.Function var2, ValueType var3, @Nonnull ValueType... var4) {
      this.add(Scope.encodeFunctionName(var1, var4), new StdScope.SymbolFunction(false, var3, var2));
      this.add(var1, new StdScope.SymbolFunction(false, var3, null));
   }

   class="kw">public void addSupplier(String var1, Supplier<String> var2) {
      this.add(var1, new StdScope.SymbolString(false, var2));
   }

   class="kw">public void addSupplier(String var1, DoubleSupplier var2) {
      this.add(var1, new StdScope.SymbolNumber(false, var2));
   }

   class="kw">public void addSupplier(String var1, BooleanSupplier var2) {
      this.add(var1, new StdScope.SymbolBoolean(false, var2));
   }

   class="kw">public void addStringArraySupplier(String var1, Supplier<String[]> var2) {
      this.add(var1, new StdScope.SymbolStringArray(false, var2));
   }

   class="kw">public void addDoubleArraySupplier(String var1, Supplier<double[]> var2) {
      this.add(var1, new StdScope.SymbolNumberArray(false, var2));
   }

   class="kw">public void addBooleanArraySupplier(String var1, Supplier<boolean[]> var2) {
      this.add(var1, new StdScope.SymbolBooleanArray(false, var2));
   }

   class="kw">protected StdScope.Symbol get(String var1) {
      class="kw">return this.symbolTable.get(var1);
   }

   @Nonnull
   class="kw">protected StdScope.Symbol get(String var1, ValueType var2) {
      StdScope.Symbol var3 = this.symbolTable.get(var1);
      if (var3 == null) {
         throw new IllegalStateException("Can't find symbol " + var1 + " in symbol table");
      } else if (!ValueType.isAssignableType(var2, var3.valueType)) {
         throw new IllegalStateException("Type mismatch with " + var1 + ". Got " + var2 + " but expected " + var3.valueType);
      } else {
         class="kw">return var3;
      }
   }

   class="kw">protected void replace(String var1, @Nonnull StdScope.Symbol var2) {
      StdScope.Symbol var3 = this.get(var1, var2.valueType);
      if (var3.isConstant) {
         throw new IllegalStateException("Can't replace a constant in symbol table: " + var1);
      }

      if (var2.isConstant) {
         throw new IllegalStateException("Can't replace a variable with a constant: " + var1);
      }

      this.symbolTable.put(var1, var2);
   }

   class="kw">public void changeValue(String var1, @Nullable String var2) {
      if (var2 == null) {
         this.replace(var1, VAR_NULL_STRING);
      } else if (var2.isEmpty()) {
         this.replace(var1, VAR_EMPTY_STRING);
      } else {
         this.replace(var1, new StdScope.SymbolString(false, () -> var2));
      }
   }

   class="kw">public void changeValue(String var1, double var2) {
      this.replace(var1, new StdScope.SymbolNumber(false, () -> var2));
   }

   class="kw">public void changeValue(String var1, boolean var2) {
      this.replace(var1, var2 ? VAR_BOOLEAN_TRUE : VAR_BOOLEAN_FALSE);
   }

   class="kw">public void changeValue(String var1, @Nullable String[] var2) {
      if (var2 == null) {
         this.replace(var1, VAR_NULL_STRING_ARRAY);
      } else if (var2.length == 0) {
         this.replace(var1, VAR_EMPTY_STRING_ARRAY);
      } else {
         this.replace(var1, new StdScope.SymbolStringArray(false, () -> var2));
      }
   }

   class="kw">public void changeValue(String var1, @Nullable double[] var2) {
      if (var2 == null) {
         this.replace(var1, VAR_NULL_NUMBER_ARRAY);
      } else if (var2.length == 0) {
         this.replace(var1, VAR_EMPTY_NUMBER_ARRAY);
      } else {
         this.replace(var1, new StdScope.SymbolNumberArray(false, () -> var2));
      }
   }

   class="kw">public void changeValue(String var1, @Nullable boolean[] var2) {
      if (var2 == null) {
         this.replace(var1, VAR_NULL_BOOLEAN_ARRAY);
      } else if (var2.length == 0) {
         this.replace(var1, VAR_EMPTY_BOOLEAN_ARRAY);
      } else {
         this.replace(var1, new StdScope.SymbolBooleanArray(false, () -> var2));
      }
   }

   class="kw">public void changeValueToEmptyArray(String var1) {
      StdScope.Symbol var2 = this.get(var1);
      Objects.requireNonNull(var2, "Can't find symbol in symbol table in changeValue()");
      if (var2.isConstant) {
         throw new IllegalStateException("Can't replace a constant in symbol table: " + var1);
      }

      class="kw">switch (var2.valueType) {
         case VOID:
         case NUMBER:
         case STRING:
         case BOOLEAN:
            throw new IllegalStateException("Can't assign an empty array to symbol " + var1 + "  of type " + var2.valueType);
         case EMPTY_ARRAY:
            class="kw">return;
         case NUMBER_ARRAY:
            this.symbolTable.put(var1, VAR_EMPTY_NUMBER_ARRAY);
            break;
         case STRING_ARRAY:
            this.symbolTable.put(var1, VAR_EMPTY_STRING_ARRAY);
            break;
         case BOOLEAN_ARRAY:
            this.symbolTable.put(var1, VAR_EMPTY_BOOLEAN_ARRAY);
      }
   }

   @Override
   class="kw">public Supplier<String> getStringSupplier(String var1) {
      StdScope.Symbol var2 = this.get(var1);
      if (var2 == null) {
         if (this.parent != null) {
            class="kw">return this.parent.getStringSupplier(var1);
         } else {
            throw new IllegalStateException("Unable to find symbol: " + var1);
         }
      } else if (var2 class="kw">instanceof StdScope.SymbolString) {
         class="kw">return ((StdScope.SymbolString)var2).value;
      } else {
         throw new IllegalStateException("Symbol is not a string: " + var1);
      }
   }

   @Override
   class="kw">public DoubleSupplier getNumberSupplier(String var1) {
      StdScope.Symbol var2 = this.get(var1);
      if (var2 == null) {
         if (this.parent != null) {
            class="kw">return this.parent.getNumberSupplier(var1);
         } else {
            throw new IllegalStateException("Unable to find symbol: " + var1);
         }
      } else if (var2 class="kw">instanceof StdScope.SymbolNumber) {
         class="kw">return ((StdScope.SymbolNumber)var2).value;
      } else {
         throw new IllegalStateException("Symbol is not a number: " + var1);
      }
   }

   @Override
   class="kw">public BooleanSupplier getBooleanSupplier(String var1) {
      StdScope.Symbol var2 = this.get(var1);
      if (var2 == null) {
         if (this.parent != null) {
            class="kw">return this.parent.getBooleanSupplier(var1);
         } else {
            throw new IllegalStateException("Unable to find symbol: " + var1);
         }
      } else if (var2 class="kw">instanceof StdScope.SymbolBoolean) {
         class="kw">return ((StdScope.SymbolBoolean)var2).value;
      } else {
         throw new IllegalStateException("Symbol is not a boolean: " + var1);
      }
   }

   @Override
   class="kw">public Supplier<String[]> getStringArraySupplier(String var1) {
      StdScope.Symbol var2 = this.get(var1);
      if (var2 == null) {
         if (this.parent != null) {
            class="kw">return this.parent.getStringArraySupplier(var1);
         } else {
            throw new IllegalStateException("Unable to find symbol: " + var1);
         }
      } else if (var2.valueType == ValueType.EMPTY_ARRAY) {
         class="kw">return () -> ArrayUtil.EMPTY_STRING_ARRAY;
      } else if (var2 class="kw">instanceof StdScope.SymbolStringArray) {
         class="kw">return ((StdScope.SymbolStringArray)var2).value;
      } else {
         throw new IllegalStateException("Symbol is not a string array: " + var1);
      }
   }

   @Override
   class="kw">public Supplier<double[]> getNumberArraySupplier(String var1) {
      StdScope.Symbol var2 = this.get(var1);
      if (var2 == null) {
         if (this.parent != null) {
            class="kw">return this.parent.getNumberArraySupplier(var1);
         } else {
            throw new IllegalStateException("Unable to find symbol: " + var1);
         }
      } else if (var2.valueType == ValueType.EMPTY_ARRAY) {
         class="kw">return () -> ArrayUtil.EMPTY_DOUBLE_ARRAY;
      } else if (var2 class="kw">instanceof StdScope.SymbolNumberArray) {
         class="kw">return ((StdScope.SymbolNumberArray)var2).value;
      } else {
         throw new IllegalStateException("Symbol is not a number array: " + var1);
      }
   }

   @Override
   class="kw">public Supplier<boolean[]> getBooleanArraySupplier(String var1) {
      StdScope.Symbol var2 = this.get(var1);
      if (var2 == null) {
         if (this.parent != null) {
            class="kw">return this.parent.getBooleanArraySupplier(var1);
         } else {
            throw new IllegalStateException("Unable to find symbol: " + var1);
         }
      } else if (var2.valueType == ValueType.EMPTY_ARRAY) {
         class="kw">return () -> ArrayUtil.EMPTY_BOOLEAN_ARRAY;
      } else if (var2 class="kw">instanceof StdScope.SymbolBooleanArray) {
         class="kw">return ((StdScope.SymbolBooleanArray)var2).value;
      } else {
         throw new IllegalStateException("Symbol is not a boolean array: " + var1);
      }
   }

   @Override
   class="kw">public Scope.Function getFunction(String var1) {
      StdScope.Symbol var2 = this.get(var1);
      if (var2 == null) {
         if (this.parent != null) {
            class="kw">return this.parent.getFunction(var1);
         } else {
            throw new IllegalStateException("Unable to find function: " + var1);
         }
      } else if (var2 class="kw">instanceof StdScope.SymbolFunction) {
         class="kw">return ((StdScope.SymbolFunction)var2).value;
      } else {
         throw new IllegalStateException("Symbol is not a function: " + var1);
      }
   }

   @Override
   class="kw">public boolean isConstant(String var1) {
      StdScope.Symbol var2 = this.get(var1);
      if (var2 != null) {
         class="kw">return var2.isConstant;
      } else if (this.parent == null) {
         throw new IllegalStateException("Unable to find symbol: " + var1);
      } else {
         class="kw">return this.parent.isConstant(var1);
      }
   }

   @Nullable
   @Override
   class="kw">public ValueType getType(String var1) {
      StdScope.Symbol var2 = this.get(var1);
      if (var2 != null) {
         class="kw">return var2.valueType;
      } else {
         class="kw">return this.parent != null ? this.parent.getType(var1) : null;
      }
   }

   class="kw">protected class="kw">static class Symbol {
      class="kw">public class="kw">final boolean isConstant;
      class="kw">public class="kw">final ValueType valueType;

      class="kw">public Symbol(boolean var1, ValueType var2) {
         this.isConstant = var1;
         this.valueType = var2;
      }
   }

   class="kw">protected class="kw">static class SymbolBoolean class="kw">extends StdScope.Symbol {
      class="kw">public class="kw">final BooleanSupplier value;

      class="kw">public SymbolBoolean(boolean var1, BooleanSupplier var2) {
         super(var1, ValueType.BOOLEAN);
         this.value = var2;
      }
   }

   class="kw">protected class="kw">static class SymbolBooleanArray class="kw">extends StdScope.Symbol {
      class="kw">public class="kw">final Supplier<boolean[]> value;

      class="kw">public SymbolBooleanArray(boolean var1, Supplier<boolean[]> var2) {
         super(var1, ValueType.BOOLEAN_ARRAY);
         this.value = var2;
      }
   }

   class="kw">protected class="kw">static class SymbolFunction class="kw">extends StdScope.Symbol {
      class="kw">public class="kw">final Scope.Function value;

      class="kw">public SymbolFunction(boolean var1, ValueType var2, Scope.Function var3) {
         super(var1, var2);
         this.value = var3;
      }
   }

   class="kw">protected class="kw">static class SymbolNumber class="kw">extends StdScope.Symbol {
      class="kw">public class="kw">final DoubleSupplier value;

      class="kw">public SymbolNumber(boolean var1, DoubleSupplier var2) {
         super(var1, ValueType.NUMBER);
         this.value = var2;
      }
   }

   class="kw">protected class="kw">static class SymbolNumberArray class="kw">extends StdScope.Symbol {
      class="kw">public class="kw">final Supplier<double[]> value;

      class="kw">public SymbolNumberArray(boolean var1, Supplier<double[]> var2) {
         super(var1, ValueType.NUMBER_ARRAY);
         this.value = var2;
      }
   }

   class="kw">protected class="kw">static class SymbolString class="kw">extends StdScope.Symbol {
      class="kw">public class="kw">final Supplier<String> value;

      class="kw">public SymbolString(boolean var1, Supplier<String> var2) {
         super(var1, ValueType.STRING);
         this.value = var2;
      }
   }

   class="kw">protected class="kw">static class SymbolStringArray class="kw">extends StdScope.Symbol {
      class="kw">public class="kw">final Supplier<String[]> value;

      class="kw">public SymbolStringArray(boolean var1, Supplier<String[]> var2) {
         super(var1, ValueType.STRING_ARRAY);
         this.value = var2;
      }
   }
}