protected override void setValue(string name, Value value, VisibilityType visibility, bool overriding, bool allowNil, int index)
        {
            base.setValue(name, value, visibility, overriding, allowNil, index);
            if (value is InvokableReference)
            {
                return;
            }

            var builder = new CodeBuilder();

            builder.Parameter("$0");
            builder.AssignToField(name, new Variable("$0"), index);
            var lambda        = builder.Lambda();
            var setterName    = SetterName(name);
            var invokableName = InvokableName(setterName);

            State.SetInvokable(invokableName, lambda);
            base.setValue(setterName, new InvokableReference(invokableName), VisibilityType.Public, false, false, index);
            removeAbstracts(name);
        }