@Override public Type typecheck(Environment env, Optional<Type> expected) { Environment outerEnv = env.lookupBinding("oev", TSLBlock.OuterTypecheckBinding.class) .map(oeb -> oeb.getStore()) .orElse(Environment.getEmptyEnvironment()); Type exnType = exn.typecheck(outerEnv, expected); cached = Optional.of(exnType); return exnType; }
public <T> Optional<T> lookupBinding(String name, Class<T> bindingType) { if (this.name == null) return Optional.empty(); if (this.name.equals(name) && bindingType.isAssignableFrom(this.binding.getClass())) return Optional.of((T) binding); return parentEnvironment.lookupBinding(name, bindingType); }