void Parameter::bind(VariableEnvironment &env, CVarRef val, bool ref /* = false */) const { if (m_kind != KindOfNull) { DataType otype = val.getType(); if (!(m_nullDefault && otype == KindOfNull || otype == m_kind && (m_kind != KindOfObject || m_kind == KindOfObject && val.toObject().instanceof(m_type.c_str())))) { throw_unexpected_argument_type(m_argNum, m_fnName, m_type.c_str(), val); } } if (ref) val.setContagious(); env.getIdx(m_idx) = val; }
void Parameter::bindDefault(VariableEnvironment &env) const { if (m_defVal) { Variant val = m_defVal->eval(env); env.getIdx(m_idx) = val; } }