src.org.python.modules._bytecodetools Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jython Show documentation
Show all versions of jython Show documentation
Jython is an implementation of the high-level, dynamic, object-oriented
language Python written in 100% Pure Java, and seamlessly integrated with
the Java platform. It thus allows you to run Python on any Java platform.
package org.python.modules;
import org.python.core.BytecodeNotification;
import org.python.core.PyObject;
import org.python.core.Py;
/**
* BytecodeTools provides tools for generated JVM bytecode.
*
* This module supports registering a python callback function
* to be notified when new bytecode is loaded.
* see also core/BytecodeNotification.java
*/
public class _bytecodetools {
public static final String __doc__ =
"Provides utilities for generated bytecode.\n";
public static final String __name__ = "BytecodeTools";
static class _Callback implements BytecodeNotification.Callback {
PyObject callback;
public _Callback(PyObject callback) {
this.callback = callback;
}
public void notify(String name, byte[] bytes, Class c) {
callback.__call__(Py.java2py(name), Py.java2py(bytes), Py.java2py(c));
}
public int hashCode() {
return callback.hashCode();
}
public boolean equals(Object other) {
if (!(other instanceof _Callback)) return false;
_Callback that = (_Callback) other;
return callback.equals(that.callback);
}
}
/**
* Registers a python callback function that will be notified on bytecode loading.
*
* @param callback a Python callback function
*/
public static void register(final PyObject callback) {
BytecodeNotification.register(new _Callback(callback));
}
/**
* Unregisters a python callback function.
*
* @param callback a Python callback function
*/
public static boolean unregister(final PyObject callback) {
return BytecodeNotification.unregister(new _Callback(callback));
}
/**
* Clears all the registered callbacks.
*/
public static void clear() {
BytecodeNotification.clear();
}
}