{
HashMap<StringValue,EnvVar> map = new HashMap<StringValue,EnvVar>(8);
if (useParams != null) {
for (int i = 0; i < useParams.length; i++) {
map.put(useParams[i].getName(), new EnvVarImpl(useArgs[i].toVar()));
}
}
for (int i = 0; i < args.length; i++) {
Arg arg = null;
if (i < _args.length) {
arg = _args[i];
}
if (arg == null) {
}
else if (arg.isReference()) {
map.put(arg.getName(), new EnvVarImpl(args[i].toLocalVarDeclAsRef()));
}
else {
// XXX: php/1708, toVar() may be doing another copy()
Var var = args[i].toLocalVar();
if (arg.getExpectedClass() != null
&& arg.getDefault() instanceof ParamRequiredExpr) {
env.checkTypeHint(var,
arg.getExpectedClass(),
arg.getName().toString(),
getName());
}
// quercus/0d04
map.put(arg.getName(), new EnvVarImpl(var));
}
}
for (int i = args.length; i < _args.length; i++) {
Arg arg = _args[i];
Expr defaultExpr = arg.getDefault();
if (defaultExpr == null)
return env.error("expected default expression");
else if (arg.isReference())
map.put(arg.getName(), new EnvVarImpl(defaultExpr.evalVar(env).toVar()));
else {
map.put(arg.getName(), new EnvVarImpl(defaultExpr.eval(env).toLocalVar()));
}
}
Map<StringValue,EnvVar> oldMap = env.pushEnv(map);
Value []oldArgs = env.setFunctionArgs(args);