/**
* Copyright (c) 2012-2016 André Bargull
* Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms.
*
* <https://github.com/anba/es6draft>
*/
package com.github.anba.es6draft.parser;
import static com.github.anba.es6draft.runtime.AbstractOperations.CreateDataPropertyOrThrow;
import static com.github.anba.es6draft.runtime.types.Null.NULL;
import static com.github.anba.es6draft.runtime.types.builtins.ArrayObject.ArrayCreate;
import static com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject.ObjectCreate;
import com.github.anba.es6draft.runtime.ExecutionContext;
import com.github.anba.es6draft.runtime.types.Intrinsics;
import com.github.anba.es6draft.runtime.types.builtins.ArrayObject;
import com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject;
/**
*
*/
public final class JSONObjectBuilder implements
JSONBuilder<Object, OrdinaryObject, ArrayObject, Object> {
private final ExecutionContext cx;
public JSONObjectBuilder(ExecutionContext cx) {
this.cx = cx;
}
@Override
public Object createDocument(Object value) {
return value;
}
@Override
public OrdinaryObject newObject() {
return ObjectCreate(cx, Intrinsics.ObjectPrototype);
}
@Override
public Object finishObject(OrdinaryObject object) {
return object;
}
@Override
public void newProperty(OrdinaryObject object, String name, String rawName, long index) {
// empty
}
@Override
public void finishProperty(OrdinaryObject object, String name, String rawName, long index,
Object value) {
CreateDataPropertyOrThrow(cx, object, name, value);
}
@Override
public ArrayObject newArray() {
return ArrayCreate(cx, 0);
}
@Override
public Object finishArray(ArrayObject array) {
return array;
}
@Override
public void newElement(ArrayObject array, long index) {
// empty
}
@Override
public void finishElement(ArrayObject array, long index, Object value) {
CreateDataPropertyOrThrow(cx, array, index, value);
}
@Override
public Object newNull() {
return NULL;
}
@Override
public Object newBoolean(boolean value) {
return value;
}
@Override
public Object newNumber(double value, String rawValue) {
return value;
}
@Override
public Object newString(String value, String rawValue) {
return value;
}
}