Illegal Targets

I am getting an error that I’ve never seen before today, and don’t see where I’m doing anything out of the ordinary (I’ve pasted it below), and the jump sequences look right. What exactly is this error telling me?

Unable to register action actionPerformed
Parse Error:
Traceback (innermost last):
  (no code object) at line 0
java.lang.VerifyError: (class: org/python/pycode/_pyx104, method: f$0 signature: (Lorg/python/core/PyFrame;)Lorg/python/core/PyObject;) Illegal target of jump or branch

	at java.lang.Class.getDeclaredConstructors0(Native Method)

	at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)

	at java.lang.Class.getConstructor0(Unknown Source)

	at java.lang.Class.newInstance0(Unknown Source)

	at java.lang.Class.newInstance(Unknown Source)

	at org.python.core.BytecodeLoader.makeCode(BytecodeLoader.java)

	at org.python.core.Py.compile_flags(Py.java)

	at org.python.core.Py.compile_flags(Py.java)

	at org.python.core.Py.compile_flags(Py.java)

	at com.inductiveautomation.factorypmi.designer.designer.jython.ActionConfigDialog.doApply(ActionConfigDialog.java:226)

	at com.inductiveautomation.factorypmi.designer.designer.jython.ActionConfigDialog.actionPerformed(ActionConfigDialog.java:345)

	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

	at java.awt.Component.processMouseEvent(Unknown Source)

	at javax.swing.JComponent.processMouseEvent(Unknown Source)

	at java.awt.Component.processEvent(Unknown Source)

	at java.awt.Container.processEvent(Unknown Source)

	at java.awt.Component.dispatchEventImpl(Unknown Source)

	at java.awt.Container.dispatchEventImpl(Unknown Source)

	at java.awt.Component.dispatchEvent(Unknown Source)

	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

	at java.awt.Container.dispatchEventImpl(Unknown Source)

	at java.awt.Window.dispatchEventImpl(Unknown Source)

	at java.awt.Component.dispatchEvent(Unknown Source)

	at java.awt.EventQueue.dispatchEvent(Unknown Source)

	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

	at java.awt.Dialog$1.run(Unknown Source)

	at java.awt.Dialog$3.run(Unknown Source)

	at java.security.AccessController.doPrivileged(Native Method)

	at java.awt.Dialog.show(Unknown Source)

	at java.awt.Component.show(Unknown Source)

	at java.awt.Component.setVisible(Unknown Source)

	at java.awt.Window.setVisible(Unknown Source)

	at java.awt.Dialog.setVisible(Unknown Source)

	at com.inductiveautomation.factorypmi.designer.designer.jython.ActionConfigDialog.showDialog(ActionConfigDialog.java:295)

	at com.inductiveautomation.factorypmi.designer.model.ObjectHolder$Handler.handleConfigActions(ObjectHolder.java:1281)

	at com.inductiveautomation.factorypmi.designer.model.ObjectHolder$Handler.access$1200(ObjectHolder.java:626)

	at com.inductiveautomation.factorypmi.designer.model.ObjectHolder$Handler$15.actionPerformed(ObjectHolder.java:934)

	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

	at javax.swing.AbstractButton.doClick(Unknown Source)

	at javax.swing.AbstractButton.doClick(Unknown Source)

	at javax.swing.plaf.basic.BasicMenuItemUI$Actions.actionPerformed(Unknown Source)

	at javax.swing.SwingUtilities.notifyAction(Unknown Source)

	at javax.swing.JComponent.processKeyBinding(Unknown Source)

	at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(Unknown Source)

	at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(Unknown Source)

	at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(Unknown Source)

	at javax.swing.JMenuBar.processKeyBinding(Unknown Source)

	at javax.swing.KeyboardManager.fireBinding(Unknown Source)

	at javax.swing.KeyboardManager.fireKeyboardAction(Unknown Source)

	at javax.swing.JComponent.processKeyBindingsForAllComponents(Unknown Source)

	at javax.swing.JComponent.processKeyBindings(Unknown Source)

	at javax.swing.JComponent.processKeyEvent(Unknown Source)

	at java.awt.Component.processEvent(Unknown Source)

	at java.awt.Container.processEvent(Unknown Source)

	at java.awt.Component.dispatchEventImpl(Unknown Source)

	at java.awt.Container.dispatchEventImpl(Unknown Source)

	at java.awt.Component.dispatchEvent(Unknown Source)

	at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)

	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)

	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)

	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)

	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)

	at java.awt.Component.dispatchEventImpl(Unknown Source)

	at java.awt.Container.dispatchEventImpl(Unknown Source)

	at java.awt.Window.dispatchEventImpl(Unknown Source)

	at java.awt.Component.dispatchEvent(Unknown Source)

	at java.awt.EventQueue.dispatchEvent(Unknown Source)

	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

	at java.awt.EventDispatchThread.run(Unknown Source)


java.lang.VerifyError: java.lang.VerifyError: (class: org/python/pycode/_pyx104, method: f$0 signature: (Lorg/python/core/PyFrame;)Lorg/python/core/PyObject;) Illegal target of jump or branch

Hmm, looking up that error google, the only explanation I can find is that perhaps the code is compiling down into a function that is too large - apparently there’s a limit on function sizes (64kb).

Could you email us what you’re trying to do on that actionPerformed event?

Regards,

You’ve got mail.

One thing that is surprising (at least to me) is that the 64kb limit seems to be based on the uncompiled raw code, because I was able to get around this for the moment by renaming a dictionary to a shorter name (it had a bunch of references in the script). Does this make sense? I’m aware of the 64kb limit in other environments, but it always applied to the compiled code, not the symbolic code. On the other hand, is this compiled when I hit “OK”, or when it is actually run? Just want to understand this.

Hi-

I don’t have your email yet, it looks like something strange might be going on with the support mail system. At any rate, the code is compiled when you click “ok”, in order to check for (and display) compilation errors.

I actually wasn’t aware of this limitation (or even if I knew about it, I’ve never run into it), so I can really give you much more information about whether it’s compiled vs. not, etc. The main question I was trying to answer was whether it was this limitation or something else, which is why I wanted to examine the script.

I’m going to talk to the IT guys and if I can’t recover your email, perhaps you could send it to me in a PM.

Regards,

I sent it via PM and to your IA email address.

If you paste the code into an event script and then uncomment out line 296, it will throw that error. Don’t be too shocked by the code- it will be converted to a generic function later when I find out what all of the common properties are between machines. All it’s doing is looping through a bunch of messages stored in dictionaries.

Hi-

Ok, I got it. Don’t worry, I won’t be critiquing it, just trying to nail down exactly where the limit is.

Regards,