public Binding BindSymbolForRead(BindingRequest request) { var symbol = request.Symbol; var currScope = request.Thread.CurrentScope; do { var existingSlot = currScope.ScopeInfo.GetSlot(symbol); if (existingSlot != null) { return(new SlotBinding(existingSlot, request.FromNode, request.FromScopeInfo)); } currScope = currScope.Parent; } while (currScope != null); if ((request.Flags & BindingRequestFlags.Extern) != 0) { var builtIn = BuiltIns.Bind(request); if (builtIn != null) { return(builtIn); } } if ((request.Flags & BindingRequestFlags.NullOk) != 0) { return(new NullBinding()); } return(null); }
public Binding Bind(BindingRequest request) { IBindingSource target; if (TryGetValue(request.Symbol, out target)) { return(target.Bind(request)); } return(null); }
public Binding BindSymbolForWrite(BindingRequest request) { var currScope = request.Thread.CurrentScope; var symbol = request.Symbol; var existingSlot = currScope.ScopeInfo.GetSlot(request.Symbol); if ((request.Flags & BindingRequestFlags.ExistingOrNew) != 0) { if ((request.Flags & BindingRequestFlags.Existing) != 0) { var scope = currScope; do { existingSlot = currScope.ScopeInfo.GetSlot(symbol); if (existingSlot != null) { return(new SlotBinding(existingSlot, request.FromNode, request.FromScopeInfo)); } currScope = currScope.Parent; } while (currScope != null); currScope = scope; if ((request.Flags & BindingRequestFlags.Extern) != 0) { var builtIn = BuiltIns.Bind(request); if (builtIn != null) { return(builtIn); } } } if ((request.Flags & BindingRequestFlags.NewOnly) != 0) { if (existingSlot != null) { ThrowScriptError("Var {0} is already defined!", symbol); } var newSlot = currScope.AddSlot(request.Symbol, request.Type); return(new SlotBinding(newSlot, request.FromNode, request.FromScopeInfo)); } } return(null); }
public Binding Bind(BindingRequest request) { var symbol = request.Symbol; var mode = request.Flags; if ((mode & BindingRequestFlags.Write) != 0) { return(BindSymbolForWrite(request)); } else if ((mode & BindingRequestFlags.Read) != 0) { return(BindSymbolForRead(request)); } else { request.Thread.ThrowScriptError("Invalid binding request!"); return(null); } }
public Binding Bind(BindingRequest request) => BindingInstance;
public Binding Bind(BindingRequest request) { throw new NotImplementedException(); }