public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder) { DynamicMetaObject messageSendMO; var kernel = ValueClass.ObjectSpace; var memberName = kernel.symbolFor(binder.Name); if (createMetaObjectToSendMessage("removeKey:", DynamicBindingGuru.argArrayFor(Expression.Constant(memberName).asDynamicMetaObject(BindingRestrictions.Empty, memberName)), out messageSendMO)) { return(messageSendMO); } return(binder.FallbackDeleteMember(this, messageSendMO)); }
public NamedVariableBinder(DynamicBindingGuru dynamicBindingGuru, ESSymbol name, NamespaceObject environment) { this.dynamicBindingGuru = dynamicBindingGuru; objectSpace = dynamicBindingGuru.ObjectSpace; this.name = name; this.environment = environment; if (name != null) { nameString = name.PrimitiveValue; } addToUndeclared = () => { var bindingRef = objectSpace.newBindingReference(NameString, new DirectBindingHandle((Object)null)); objectSpace.UndeclaredNamespace.add(bindingRef); return(bindingRef); }; }
public bool createMetaObjectToSendMessage(String messageName, DynamicMetaObject[] args, out DynamicMetaObject messageSendMO) { var esClass = ValueClass; var objectSpace = esClass.ObjectSpace; var dynamicBindingGuru = objectSpace.DynamicBindingGuru; long numArgs = args.Length; var method = esClass.compiledMethodAtSystemSelector(messageName, numArgs); if (method == null) { ESSymbol selector; SymbolType symbolType; long syntacicalNumArgs; long ignored; messageName = messageName.usingCapitalizationScheme(CapitalizationScheme.InitialLowerCase); messageName.classifySymbol(null, out symbolType, out syntacicalNumArgs, out ignored); switch (symbolType) { case SymbolType.Identifier: switch (numArgs) { case 0: selector = objectSpace.symbolFor(messageName); break; case 1: selector = objectSpace.symbolFor(messageName + ":"); break; default: selector = null; break; } break; case SymbolType.BinaryMessageSelector: selector = numArgs == 1 ? objectSpace.symbolFor(messageName) : null; break; case SymbolType.Keyword: selector = syntacicalNumArgs == numArgs?objectSpace.symbolFor(messageName) : null; break; default: case SymbolType.String: selector = null; break; } if (selector == null) { messageSendMO = metaObjectToSendDoesNotUnderstand(objectSpace.symbolFor(messageName), args); return(false); } else { if (dynamicBindingGuru.getMethodOrElseTryGetMetaObjectToInvokeVirtualMethodOfESObject(this, esClass, selector, args, out method, out messageSendMO)) { return(true); } if (method == null) { messageSendMO = null; return(false); } else { messageSendMO = DynamicBindingGuru.metaObjectToSendMessage(this, objectSpace, esClass, selector, method, args, this.bindingRestrictionsForESObjectReceiver(esClass)); return(true); } } } else { messageSendMO = DynamicBindingGuru.metaObjectToSendMessage(this, objectSpace, esClass, method.Selector, method, args, DefaultBindingRestrictions); return(true); } }
public Registry(DynamicBindingGuru dynamicBindingGuru) : base(dynamicBindingGuru) { }
protected SetVariableValueBinder(DynamicBindingGuru dynamicBindingGuru, ESSymbol name, NamespaceObject environment) : base(dynamicBindingGuru, name, environment) { }
protected SetVariableValueBinder(DynamicBindingGuru dynamicBindingGuru, ESSymbol name) : base(dynamicBindingGuru, name) { }
public NamedVariableBinder(DynamicBindingGuru dynamicBindingGuru, ESSymbol name) : this(dynamicBindingGuru, name, null) { }
protected Registry(DynamicBindingGuru dynamicBindingGuru) : base(dynamicBindingGuru) { defaultNamespace = objectSpace.SmalltalkNamespace; }
protected MessageSendBinder(DynamicBindingGuru dynamicBindingGuru, MessageReceiverKind receiverKind, BehavioralObject selfReceiverClass, ESSymbol selector) : this(dynamicBindingGuru, receiverKind, selector) { this.selfReceiverClass = selfReceiverClass; }
protected MessageSendBinder(DynamicBindingGuru dynamicBindingGuru, MessageReceiverKind receiverKind, ESSymbol selector) { this.dynamicBindingGuru = dynamicBindingGuru; this.receiverKind = receiverKind; this.selector = selector; }