Smallworld 5 BOLOs

Be On the Look Out!!! These are things to look for if you have weirdness with Smallworld 5 that worked under previous versions….

SWIFT Issues

Resizing/Redrawing Issues

Here are a few things to check…

  • Verify that you aren't creating a secondary sw_canvas_container instead of using a sw_container. The top most container under a frame should be sw_canvas_container, but containers under this should not be sw_canvas_container, except for specialized coding…

Tabular_list_view Issues

The pre SWIFT tabular_list_views don't really work within SW5 that well. The sizing is all messed up if on a panel, or even on a multi row/col rowcol object. The best way I have seen to get the tabular_list_view working correctly is to place them inside a 1x1 rowcol object. You should still use num_rows option on the tabular_list_view along with height on the rowcol.

Java Related

JARs are Locked

JARs are Locked This link provides details about JAR locking and builds.


Weird stuff with text input streams

I was seeing a "Failed to translate characters: %nul" pop up (at which point I had to kill Smallworld as there was no end to it). Error raised was text_converter_strange_input. This was reading a stream from a HTTP request. It turns out you need to define the encoding like the following before initializing the stream. Same code worked fine in 4.3, but in 5.1.5 it was failing.

_dynamic !text_encoding! << :iso8859_1

Session Start up


  • {Error: unset define_shared_constant() may not be used on unset}

If you see this during session load with compiled JAR files, but it works without the compiled jars. Check that there is a package definition on top of the file. Setting this to appropriate (probably user) will fix you problem. Or at least identify the next problem:)

Magik Session


There is a note under the Magik Sessions documentation about the _proc properties can be a symbol, which will run a method on magik_session. I use this option to limit the creation of a bunch of locals or globals for the procedures. However the property :startup_proc must be an actual procedure or the symbol that is used to look up globally defined procedure. As Aug 26, 2020 this is is (and prior). I assume it is in 5.2, but haven't tested it.


Inter-Package Inheritance

Magik allows you to inherit from "foreign" packages. (those that the current package do not inherit from)

Typical syntax looks like the following. Notice the '@' package reference.

_package user

However in SW5, you can call a _super.a_method() within a locally defined a_method(). The following error occurs.

AS of 5.1.9 and 5.2.2 This is still an error. However there is a work around.

  • Create an current package exemplar that inherits from the foreign package
_package user
  • Do not create any local methods!
  • Inherit from the current package exemplar
_package user
The user_expl2 can subclass t1_explr methods and call _super successfully. package_test.magik has an example of this.


SER files for product serialisation do not seeme to compatible between versions (even dot releases). It is best to regenerate these whenever anything changes with the core or your layered product. For vendors, probably best not to send SER files with your delivery.

Sub Products & Serialisation

When you serialise a product, the sub products will not be automatically added to the known products & modules. if you serialise the product, you must add all sub products into your session.

Other Magik Errors

java.lang.ClassFormatError: Illegal zero length constant pool entry at 40 in class magik/a_1004876
This was due to some typo in the code that had the following. Useless message, so if you run across the same error, look for double pipes ||…

total << jRec.||

The above was part of jdbc_user sql_select() statement that returned the size of the table/view. I had to add a 'AS' clause like the following:

ju << .sql_select("SELECT COUNT(*) FROM dbo.RowInfo")
# is now
ju << .sql_select("SELECT COUNT(*) AS size FROM dbo.RowInfo")

Application Anomalies

Look & Feel

Task Bar Missing Icons

If you display the task bar with layouts and are missing the icons next to the layout name… You need to copy the PNG files to the task_bar module resources directory. These can be added to a customisation product directory structure.

Different Size Toolbars

The PNG icons only support 1 size per file. ICOs had the ability to store different sized images. For toolbars you want to be 16x16 pixel PNG file. If you have a PNG that is larger, it will cause the entire row of toolbars to be higher. And some components may not adjust so you may have differing sizes of icons and widgets across the toolbar.

Application Minimum Sizing

We have noticed that on some laptops with smaller resolutions, The application will not fit on the window. You have to use the Development Tools' GUI Explorer to identify the containers (and the owning plugin) that are forcing high minimum values. Those are shown within the ()'s. Eg. 472(356), the min size is 356.

We have also noticed that even though you might have minimum to a number, some users may not see the same minimums. Eg. We reduced the PNI application to less than 1600x900. But there was a user who remote desktop (RDP) and there application minimums were reported as 1800x1100. It was finally determined that the client laptop had the Display Settings->Scale & Layout set to 125%. When we reset this to 100%, reconnected to RDP and restarted the session, the application minimums were at the expected 1600x900 range.

The java error we were seeing was "java.awt.image.RasterFormatException: (y + height) is outside raster" with a large java trace stack.



If the application seems to start up and then disappears quickly, check the following

in config.xml ensure:
 <plugin name="control_panel" class_name="swift_control_panel_plugin">
versus pre sw5:
 <plugin name="control_panel" class_name="control_panel_plugin">

Load or Serialization

Error: No definition for binary operator: unset(unset) cf integer(1)

If you get this error with the following traceback when starting a session, loading a product, or serializing a product, check for a missing version number in a module.def file

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License