/**
* 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.scripting;
import static com.github.anba.es6draft.runtime.types.Null.NULL;
import com.github.anba.es6draft.runtime.types.Type;
/**
* Type conversions from/to Java types.
*/
final class TypeConverter {
private TypeConverter() {
}
/**
* Converts a script language value to a Java value.
*
* @param value
* the script value
* @return the java value
*/
public static Object toJava(Object value) {
switch (Type.of(value)) {
case Undefined:
case Null:
return null;
case Number:
return Type.numberValue(value);
case String:
return value.toString();
case Boolean:
case Symbol:
case SIMD:
case Object:
return value;
default:
throw new AssertionError();
}
}
/**
* Converts script language values to a Java values.
*
* @param values
* the script values
* @return the java values
*/
public static Object[] toJava(Object... values) {
Object[] converted = new Object[values.length];
for (int i = 0; i < values.length; ++i) {
converted[i] = toJava(values[i]);
}
return converted;
}
/**
* Converts a Java value to a script language value.
*
* @param value
* the java value
* @return the script value
*/
public static Object fromJava(Object value) {
if (Type.isType(value)) {
return value;
}
return NULL;
}
/**
* Converts Java values to a script language values.
*
* @param values
* the java values
* @return the script values
*/
public static Object[] fromJava(Object... values) {
Object[] converted = new Object[values.length];
for (int i = 0; i < values.length; ++i) {
converted[i] = fromJava(values[i]);
}
return converted;
}
}