private IMethod makeArrayContentsConstructor(IClass cls, int nargs) { JSInstructionFactory insts = (JSInstructionFactory) cls.getClassLoader().getInstructionFactory(); MethodReference ref = JavaScriptMethods.makeCtorReference(JavaScriptTypes.Array); JavaScriptSummary S = new JavaScriptSummary(ref, nargs + 1); S.addConstant(new Integer(nargs + 3), new ConstantValue("prototype")); S.addStatement(insts.PropertyRead(nargs + 4, 1, nargs + 3)); S.getNextProgramCounter(); S.addStatement( insts.NewInstruction( nargs + 5, NewSiteReference.make(S.getNextProgramCounter(), JavaScriptTypes.Array))); S.addStatement(insts.SetPrototype(nargs + 5, nargs + 4)); // S.addStatement(insts.PutInstruction(nargs + 5, nargs + 4, "__proto__")); S.getNextProgramCounter(); S.addConstant(new Integer(nargs + 7), new ConstantValue(nargs)); S.addStatement(insts.PutInstruction(nargs + 5, nargs + 7, "length")); S.getNextProgramCounter(); int vn = nargs + 9; for (int i = 0; i < nargs; i++, vn += 2) { S.addConstant(new Integer(vn), new ConstantValue(i)); S.addStatement(insts.PropertyWrite(nargs + 5, vn, i + 1)); S.getNextProgramCounter(); } S.addStatement(insts.ReturnInstruction(5, false)); S.getNextProgramCounter(); // S.addConstant(vn, new ConstantValue("__proto__")); return new JavaScriptConstructor(ref, S, cls); }