238 public boolean hasMember(final String name) {
239 Objects.requireNonNull(name);
240 return inGlobal(new Callable<Boolean>() {
241 @Override public Boolean call() {
242 return sobj.has(name);
243 }
244 });
245 }
246
247 @Override
248 public boolean hasSlot(final int slot) {
249 return inGlobal(new Callable<Boolean>() {
250 @Override public Boolean call() {
251 return sobj.has(slot);
252 }
253 });
254 }
255
256 @Override
257 public void removeMember(final String name) {
258 Objects.requireNonNull(name);
259 remove(name);
260 }
261
262 @Override
263 public void setMember(final String name, final Object value) {
264 Objects.requireNonNull(name);
265 put(name, value);
266 }
267
268 @Override
269 public void setSlot(final int index, final Object value) {
270 inGlobal(new Callable<Void>() {
271 @Override public Void call() {
272 sobj.set(index, unwrap(value, global), getCallSiteFlags());
273 return null;
274 }
275 });
276 }
277
278 /**
279 * Nashorn extension: setIndexedPropertiesToExternalArrayData.
280 * set indexed properties be exposed from a given nio ByteBuffer.
281 *
282 * @param buf external buffer - should be a nio ByteBuffer
283 */
284 public void setIndexedPropertiesToExternalArrayData(final ByteBuffer buf) {
285 inGlobal(new Callable<Void>() {
412 return Collections.unmodifiableSet(keySet);
413 }
414 });
415 }
416
417 @Override
418 public Object put(final String key, final Object value) {
419 checkKey(key);
420 final ScriptObject oldGlobal = Context.getGlobal();
421 final boolean globalChanged = (oldGlobal != global);
422 return inGlobal(new Callable<Object>() {
423 @Override public Object call() {
424 final Object modValue = globalChanged? wrapLikeMe(value, oldGlobal) : value;
425 return translateUndefined(wrapLikeMe(sobj.put(key, unwrap(modValue, global), strict)));
426 }
427 });
428 }
429
430 @Override
431 public void putAll(final Map<? extends String, ? extends Object> map) {
432 Objects.requireNonNull(map, "map is null");
433 final ScriptObject oldGlobal = Context.getGlobal();
434 final boolean globalChanged = (oldGlobal != global);
435 inGlobal(new Callable<Object>() {
436 @Override public Object call() {
437 for (final Map.Entry<? extends String, ? extends Object> entry : map.entrySet()) {
438 final Object value = entry.getValue();
439 final Object modValue = globalChanged? wrapLikeMe(value, oldGlobal) : value;
440 final String key = entry.getKey();
441 checkKey(key);
442 sobj.set(key, unwrap(modValue, global), getCallSiteFlags());
443 }
444 return null;
445 }
446 });
447 }
448
449 @Override
450 public Object remove(final Object key) {
451 checkKey(key);
452 return inGlobal(new Callable<Object>() {
|
238 public boolean hasMember(final String name) {
239 Objects.requireNonNull(name);
240 return inGlobal(new Callable<Boolean>() {
241 @Override public Boolean call() {
242 return sobj.has(name);
243 }
244 });
245 }
246
247 @Override
248 public boolean hasSlot(final int slot) {
249 return inGlobal(new Callable<Boolean>() {
250 @Override public Boolean call() {
251 return sobj.has(slot);
252 }
253 });
254 }
255
256 @Override
257 public void removeMember(final String name) {
258 remove(Objects.requireNonNull(name));
259 }
260
261 @Override
262 public void setMember(final String name, final Object value) {
263 put(Objects.requireNonNull(name), value);
264 }
265
266 @Override
267 public void setSlot(final int index, final Object value) {
268 inGlobal(new Callable<Void>() {
269 @Override public Void call() {
270 sobj.set(index, unwrap(value, global), getCallSiteFlags());
271 return null;
272 }
273 });
274 }
275
276 /**
277 * Nashorn extension: setIndexedPropertiesToExternalArrayData.
278 * set indexed properties be exposed from a given nio ByteBuffer.
279 *
280 * @param buf external buffer - should be a nio ByteBuffer
281 */
282 public void setIndexedPropertiesToExternalArrayData(final ByteBuffer buf) {
283 inGlobal(new Callable<Void>() {
410 return Collections.unmodifiableSet(keySet);
411 }
412 });
413 }
414
415 @Override
416 public Object put(final String key, final Object value) {
417 checkKey(key);
418 final ScriptObject oldGlobal = Context.getGlobal();
419 final boolean globalChanged = (oldGlobal != global);
420 return inGlobal(new Callable<Object>() {
421 @Override public Object call() {
422 final Object modValue = globalChanged? wrapLikeMe(value, oldGlobal) : value;
423 return translateUndefined(wrapLikeMe(sobj.put(key, unwrap(modValue, global), strict)));
424 }
425 });
426 }
427
428 @Override
429 public void putAll(final Map<? extends String, ? extends Object> map) {
430 Objects.requireNonNull(map);
431 final ScriptObject oldGlobal = Context.getGlobal();
432 final boolean globalChanged = (oldGlobal != global);
433 inGlobal(new Callable<Object>() {
434 @Override public Object call() {
435 for (final Map.Entry<? extends String, ? extends Object> entry : map.entrySet()) {
436 final Object value = entry.getValue();
437 final Object modValue = globalChanged? wrapLikeMe(value, oldGlobal) : value;
438 final String key = entry.getKey();
439 checkKey(key);
440 sobj.set(key, unwrap(modValue, global), getCallSiteFlags());
441 }
442 return null;
443 }
444 });
445 }
446
447 @Override
448 public Object remove(final Object key) {
449 checkKey(key);
450 return inGlobal(new Callable<Object>() {
|