private void visitObjectLiteral(Node node, Node child)
    {
        Object[] properties = (Object[])node.getProp(Node.OBJECT_IDS_PROP);
        int count = properties.length;

        // load array with property ids
        addNewObjectArray(count);
        for (int i = 0; i != count; ++i) {
            cfw.add(ByteCode.DUP);
            cfw.addPush(i);
            Object id = properties[i];
            if (id instanceof String) {
                cfw.addPush((String)id);
            } else {
                cfw.addPush(((Integer)id).intValue());
                addScriptRuntimeInvoke("wrapInt", "(I)Ljava/lang/Integer;");
            }
            cfw.add(ByteCode.AASTORE);
        }
        // load array with property values
        addNewObjectArray(count);
        Node child2 = child;
        for (int i = 0; i != count; ++i) {
            cfw.add(ByteCode.DUP);
            cfw.addPush(i);
            int childType = child.getType();
            if (childType == Token.GET) {
                generateExpression(child.getFirstChild(), node);
            } else if (childType == Token.SET) {
                generateExpression(child.getFirstChild(), node);
            } else {
                generateExpression(child, node);
            }
            cfw.add(ByteCode.AASTORE);
            child = child.getNext();
        }
        // load array with getterSetter values
        cfw.addPush(count);
        cfw.add(ByteCode.NEWARRAY, ByteCode.T_INT);
        for (int i = 0; i != count; ++i) {
            cfw.add(ByteCode.DUP);
            cfw.addPush(i);
            int childType = child2.getType();
            if (childType == Token.GET) {
                cfw.add(ByteCode.ICONST_M1);
            } else if (childType == Token.SET) {
                cfw.add(ByteCode.ICONST_1);
            } else {
                cfw.add(ByteCode.ICONST_0);
            }
            cfw.add(ByteCode.IASTORE);
            child2 = child2.getNext();
        }

        cfw.addALoad(contextLocal);
        cfw.addALoad(variableObjectLocal);
        addScriptRuntimeInvoke("newObjectLiteral",
             "([Ljava/lang/Object;"
             +"[Ljava/lang/Object;"
             +"[I"
             +"Lorg/mozilla/javascript/Context;"
             +"Lorg/mozilla/javascript/Scriptable;"
             +")Lorg/mozilla/javascript/Scriptable;");
    }