本文整理汇总了Java中jdk.nashorn.internal.runtime.linker.Bootstrap类的典型用法代码示例。如果您正苦于以下问题:Java Bootstrap类的具体用法?Java Bootstrap怎么用?Java Bootstrap使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
Bootstrap类属于jdk.nashorn.internal.runtime.linker包,在下文中一共展示了Bootstrap类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: toString
import jdk.nashorn.internal.runtime.linker.Bootstrap; //导入依赖的package包/类
/**
* ECMA 15.4.4.2 Array.prototype.toString ( )
*
* @param self self reference
* @return string representation of array
*/
@Function(attributes = Attribute.NOT_ENUMERABLE)
public static Object toString(final Object self) {
final Object obj = Global.toObject(self);
if (obj instanceof ScriptObject) {
final InvokeByName joinInvoker = getJOIN();
final ScriptObject sobj = (ScriptObject)obj;
try {
final Object join = joinInvoker.getGetter().invokeExact(sobj);
if (Bootstrap.isCallable(join)) {
return joinInvoker.getInvoker().invokeExact(join, sobj);
}
} catch (final RuntimeException | Error e) {
throw e;
} catch (final Throwable t) {
throw new RuntimeException(t);
}
}
// FIXME: should lookup Object.prototype.toString and call that?
return ScriptRuntime.builtinObjectToString(self);
}
示例2: toLocaleString
import jdk.nashorn.internal.runtime.linker.Bootstrap; //导入依赖的package包/类
/**
* ECMA 15.2.4.3 Object.prototype.toLocaleString ( )
*
* @param self self reference
* @return localized ToString
*/
@Function(attributes = Attribute.NOT_ENUMERABLE)
public static Object toLocaleString(final Object self) {
final Object obj = JSType.toScriptObject(self);
if (obj instanceof ScriptObject) {
final InvokeByName toStringInvoker = getTO_STRING();
final ScriptObject sobj = (ScriptObject)self;
try {
final Object toString = toStringInvoker.getGetter().invokeExact(sobj);
if (Bootstrap.isCallable(toString)) {
return toStringInvoker.getInvoker().invokeExact(toString, sobj);
}
} catch (final RuntimeException | Error e) {
throw e;
} catch (final Throwable t) {
throw new RuntimeException(t);
}
throw typeError("not.a.function", "toString");
}
return ScriptRuntime.builtinObjectToString(self);
}
示例3: bindAllProperties
import jdk.nashorn.internal.runtime.linker.Bootstrap; //导入依赖的package包/类
/**
* Binds the source mirror object's properties to the target object. Binding
* properties allows two-way read/write for the properties of the source object.
* All inherited, enumerable properties are also bound. This method is used to
* to make 'with' statement work with ScriptObjectMirror as scope object.
*
* @param target the target object to which the source object's properties are bound
* @param source the source object whose properties are bound to the target
* @return the target object after property binding
*/
public static Object bindAllProperties(final ScriptObject target, final ScriptObjectMirror source) {
final Set<String> keys = source.keySet();
// make accessor properties using dynamic invoker getters and setters
final AccessorProperty[] props = new AccessorProperty[keys.size()];
int idx = 0;
for (final String name : keys) {
final MethodHandle getter = Bootstrap.createDynamicInvoker("dyn:getMethod|getProp|getElem:" + name, MIRROR_GETTER_TYPE);
final MethodHandle setter = Bootstrap.createDynamicInvoker("dyn:setProp|setElem:" + name, MIRROR_SETTER_TYPE);
props[idx] = AccessorProperty.create(name, 0, getter, setter);
idx++;
}
target.addBoundProperties(source, props);
return target;
}
示例4: replace
import jdk.nashorn.internal.runtime.linker.Bootstrap; //导入依赖的package包/类
/**
* ECMA 15.5.4.11 String.prototype.replace (searchValue, replaceValue)
* @param self self reference
* @param string item to replace
* @param replacement item to replace it with
* @return string after replacement
* @throws Throwable if replacement fails
*/
@Function(attributes = Attribute.NOT_ENUMERABLE)
public static String replace(final Object self, final Object string, final Object replacement) throws Throwable {
final String str = checkObjectToString(self);
final NativeRegExp nativeRegExp;
if (string instanceof NativeRegExp) {
nativeRegExp = (NativeRegExp) string;
} else {
nativeRegExp = NativeRegExp.flatRegExp(JSType.toString(string));
}
if (Bootstrap.isCallable(replacement)) {
return nativeRegExp.replace(str, "", replacement);
}
return nativeRegExp.replace(str, JSType.toString(replacement), null);
}
示例5: forEach
import jdk.nashorn.internal.runtime.linker.Bootstrap; //导入依赖的package包/类
/**
*
* @param self the self reference
* @param callbackFn the callback function
* @param thisArg optional this-object
*/
@Function(attributes = Attribute.NOT_ENUMERABLE, arity = 1)
public static void forEach(final Object self, final Object callbackFn, final Object thisArg) {
final NativeMap map = getNativeMap(self);
if (!Bootstrap.isCallable(callbackFn)) {
throw typeError("not.a.function", ScriptRuntime.safeToString(callbackFn));
}
final MethodHandle invoker = Global.instance().getDynamicInvoker(FOREACH_INVOKER_KEY,
() -> Bootstrap.createDynamicCallInvoker(Object.class, Object.class, Object.class, Object.class, Object.class, Object.class));
final LinkedMap.LinkedMapIterator iterator = map.getJavaMap().getIterator();
for (;;) {
final LinkedMap.Node node = iterator.next();
if (node == null) {
break;
}
try {
final Object result = invoker.invokeExact(callbackFn, thisArg, node.getValue(), node.getKey(), self);
} catch (final RuntimeException | Error e) {
throw e;
} catch (final Throwable t) {
throw new RuntimeException(t);
}
}
}
示例6: forEach
import jdk.nashorn.internal.runtime.linker.Bootstrap; //导入依赖的package包/类
/**
* ECMA6 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
*
* @param self the self reference
* @param callbackFn the callback function
* @param thisArg optional this object
*/
@Function(attributes = Attribute.NOT_ENUMERABLE, arity = 1)
public static void forEach(final Object self, final Object callbackFn, final Object thisArg) {
final NativeSet set = getNativeSet(self);
if (!Bootstrap.isCallable(callbackFn)) {
throw typeError("not.a.function", ScriptRuntime.safeToString(callbackFn));
}
final MethodHandle invoker = Global.instance().getDynamicInvoker(FOREACH_INVOKER_KEY,
() -> Bootstrap.createDynamicCallInvoker(Object.class, Object.class, Object.class, Object.class, Object.class, Object.class));
final LinkedMap.LinkedMapIterator iterator = set.getJavaMap().getIterator();
for (;;) {
final LinkedMap.Node node = iterator.next();
if (node == null) {
break;
}
try {
final Object result = invoker.invokeExact(callbackFn, thisArg, node.getKey(), node.getKey(), self);
} catch (final RuntimeException | Error e) {
throw e;
} catch (final Throwable t) {
throw new RuntimeException(t);
}
}
}
示例7: toLocaleString
import jdk.nashorn.internal.runtime.linker.Bootstrap; //导入依赖的package包/类
/**
* ECMA 15.2.4.3 Object.prototype.toLocaleString ( )
*
* @param self self reference
* @return localized ToString
*/
@Function(attributes = Attribute.NOT_ENUMERABLE)
public static Object toLocaleString(final Object self) {
final Object obj = JSType.toScriptObject(self);
if (obj instanceof ScriptObject) {
final InvokeByName toStringInvoker = getTO_STRING();
final ScriptObject sobj = (ScriptObject)obj;
try {
final Object toString = toStringInvoker.getGetter().invokeExact(sobj);
if (Bootstrap.isCallable(toString)) {
return toStringInvoker.getInvoker().invokeExact(toString, sobj);
}
} catch (final RuntimeException | Error e) {
throw e;
} catch (final Throwable t) {
throw new RuntimeException(t);
}
throw typeError("not.a.function", "toString");
}
return ScriptRuntime.builtinObjectToString(self);
}
示例8: convert
import jdk.nashorn.internal.runtime.linker.Bootstrap; //导入依赖的package包/类
/**
* Convert the given object to the given type.
*
* @param obj object to be converted
* @param type destination type to convert to
* @return converted object
*/
public static Object convert(final Object obj, final Object type) {
if (obj == null) {
return null;
}
final Class<?> clazz;
if (type instanceof Class) {
clazz = (Class<?>)type;
} else if (type instanceof StaticClass) {
clazz = ((StaticClass)type).getRepresentedClass();
} else {
throw new IllegalArgumentException("type expected");
}
final LinkerServices linker = Bootstrap.getLinkerServices();
final Object objToConvert = unwrap(obj);
final MethodHandle converter = linker.getTypeConverter(objToConvert.getClass(), clazz);
if (converter == null) {
// no supported conversion!
throw new UnsupportedOperationException("conversion not supported");
}
try {
return converter.invoke(objToConvert);
} catch (final RuntimeException | Error e) {
throw e;
} catch (final Throwable t) {
throw new RuntimeException(t);
}
}
示例9: bind
import jdk.nashorn.internal.runtime.linker.Bootstrap; //导入依赖的package包/类
/**
* ECMA 15.3.4.5 Function.prototype.bind (thisArg [, arg1 [, arg2, ...]])
*
* @param self self reference
* @param args arguments for bind
* @return function with bound arguments
*/
@Function(attributes = Attribute.NOT_ENUMERABLE, arity = 1)
public static Object bind(final Object self, final Object... args) {
final Object thiz = (args.length == 0) ? UNDEFINED : args[0];
Object[] arguments;
if (args.length > 1) {
arguments = new Object[args.length - 1];
System.arraycopy(args, 1, arguments, 0, arguments.length);
} else {
arguments = ScriptRuntime.EMPTY_ARRAY;
}
return Bootstrap.bindCallable(self, thiz, arguments);
}
示例10: getREPLACER_INVOKER
import jdk.nashorn.internal.runtime.linker.Bootstrap; //导入依赖的package包/类
private static MethodHandle getREPLACER_INVOKER() {
return Global.instance().getDynamicInvoker(REPLACER_INVOKER,
new Callable<MethodHandle>() {
@Override
public MethodHandle call() {
return Bootstrap.createDynamicInvoker("dyn:call", Object.class,
ScriptFunction.class, ScriptObject.class, Object.class, Object.class);
}
});
}
示例11: createIteratorCallbackInvoker
import jdk.nashorn.internal.runtime.linker.Bootstrap; //导入依赖的package包/类
private static MethodHandle createIteratorCallbackInvoker(final Object key, final Class<?> rtype) {
return Global.instance().getDynamicInvoker(key,
new Callable<MethodHandle>() {
@Override
public MethodHandle call() {
return Bootstrap.createDynamicInvoker("dyn:call", rtype, Object.class, Object.class, Object.class,
long.class, Object.class);
}
});
}
示例12: getREDUCE_CALLBACK_INVOKER
import jdk.nashorn.internal.runtime.linker.Bootstrap; //导入依赖的package包/类
private static MethodHandle getREDUCE_CALLBACK_INVOKER() {
return Global.instance().getDynamicInvoker(REDUCE_CALLBACK_INVOKER,
new Callable<MethodHandle>() {
@Override
public MethodHandle call() {
return Bootstrap.createDynamicInvoker("dyn:call", Object.class, Object.class,
Undefined.class, Object.class, Object.class, long.class, Object.class);
}
});
}
示例13: getCALL_CMP
import jdk.nashorn.internal.runtime.linker.Bootstrap; //导入依赖的package包/类
private static MethodHandle getCALL_CMP() {
return Global.instance().getDynamicInvoker(CALL_CMP,
new Callable<MethodHandle>() {
@Override
public MethodHandle call() {
return Bootstrap.createDynamicInvoker("dyn:call", double.class,
ScriptFunction.class, Object.class, Object.class, Object.class);
}
});
}
示例14: toJSON
import jdk.nashorn.internal.runtime.linker.Bootstrap; //导入依赖的package包/类
/**
* ECMA 15.9.5.44 Date.prototype.toJSON ( key )
*
* Provides a string representation of this Date for use by {@link NativeJSON#stringify(Object, Object, Object, Object)}
*
* @param self self reference
* @param key ignored
* @return JSON representation of this date
*/
@Function(attributes = Attribute.NOT_ENUMERABLE)
public static Object toJSON(final Object self, final Object key) {
// NOTE: Date.prototype.toJSON is generic. Accepts other objects as well.
final Object selfObj = Global.toObject(self);
if (!(selfObj instanceof ScriptObject)) {
return null;
}
final ScriptObject sobj = (ScriptObject)selfObj;
final Object value = sobj.getDefaultValue(Number.class);
if (value instanceof Number) {
final double num = ((Number)value).doubleValue();
if (isInfinite(num) || isNaN(num)) {
return null;
}
}
try {
final InvokeByName toIsoString = getTO_ISO_STRING();
final Object func = toIsoString.getGetter().invokeExact(sobj);
if (Bootstrap.isCallable(func)) {
return toIsoString.getInvoker().invokeExact(func, sobj, key);
}
throw typeError("not.a.function", ScriptRuntime.safeToString(func));
} catch (final RuntimeException | Error e) {
throw e;
} catch (final Throwable t) {
throw new RuntimeException(t);
}
}
示例15: getBoundBeanMethodGetter
import jdk.nashorn.internal.runtime.linker.Bootstrap; //导入依赖的package包/类
private static MethodHandle getBoundBeanMethodGetter(final Object source, final MethodHandle methodGetter) {
try {
// NOTE: we're relying on the fact that "dyn:getMethod:..." return value is constant for any given method
// name and object linked with BeansLinker. (Actually, an even stronger assumption is true: return value is
// constant for any given method name and object's class.)
return MethodHandles.dropArguments(MethodHandles.constant(Object.class,
Bootstrap.bindCallable(methodGetter.invoke(source), source, null)), 0, Object.class);
} catch(RuntimeException|Error e) {
throw e;
} catch(final Throwable t) {
throw new RuntimeException(t);
}
}