| 2581 | } |
| 2582 | |
| 2583 | BoundFunc *BoundFunc::Bind(IObject *aFunc, int aFlags, LPCTSTR aMember, ExprTokenType **aParam, int aParamCount) |
| 2584 | { |
| 2585 | LPTSTR member; |
| 2586 | if (!aMember) |
| 2587 | member = nullptr; |
| 2588 | else if (!(member = _tcsdup(aMember))) |
| 2589 | return nullptr; |
| 2590 | if (auto params = Array::Create(aParam, aParamCount)) |
| 2591 | { |
| 2592 | if (BoundFunc *bf = new BoundFunc(aFunc, member, params, aFlags)) |
| 2593 | { |
| 2594 | aFunc->AddRef(); |
| 2595 | // bf has taken over our reference to params. |
| 2596 | return bf; |
| 2597 | } |
| 2598 | // malloc failure; release params and return. |
| 2599 | params->Release(); |
| 2600 | } |
| 2601 | free(member); |
| 2602 | return nullptr; |
| 2603 | } |
| 2604 | |
| 2605 | BoundFunc::~BoundFunc() |
| 2606 | { |