Back to index

LispMe Error Messages

The error codes in square brackets are the ones defined in lispme.h.

[S] Syntax Errors

When a syntax error is found during loading a memo, you go back to the load dialog. Now you can use the Edit button to jump directly to the offending source text to correct your mistake.

[S1] Invalid char

The LispMe reader encountered an invalid character. The help text shows the allowed characters.

[S2] Invalid symbolic expression

The LispMe reader encountered a token that cannot start a valid symbolic expression. This also happens, when the expression to be read is empty.

[S3] Multiple dots in list

More than one dot . occurred in a list, or more than one expression is written after the dot. Make sure that you didn't put a space into a floating point constant.

[S4] Max. token length exceeded

A single token (a symbol, number or string) must not contain more than 512 characters.

[S5] Invalid digit

The character read is not a valid digit in the current number base.

[S6] Invalid real number

The LispMe reader encountered an invalid floating point constant. Possible reasons are:

[S8] Invalid # constant

This error occurres, when there's an illegal character after the hash sign # in a constant. The only allowed # constants are Additionally, this error is raised when in a string containing hex escape sequences #hh one of the characters h is not a hexadecimal digit.

[S9] Unterminated string

When writing a string constant, you forgot the closing double quote ". Perhaps you wanted to include a " in the string and forgot to escape it with \. Or the last char in the string is a \ and you forgot to escape it, resulting in an escaped double quote.

[S10] Invalid complex number

The LispMe reader encountered an invalid complex number. Possible reasons are:

[C] Compiler Errors

When a source is syntactically correct, no more source positions are recorded. So, if there's a compiler error, LispMe hasn't enough information to find the offending position in the source text. Thus when pressing the Edit button after an unsuccessfull load, you simply go to the beginning of the selected memo.

[C1] Undefined name

The given name is not defined in the lexical environment. Check for a spelling error or for having loaded all required memos.

[C2] Wrong number of arguments

The number of arguments for the noted special form or built-in procedure is wrong.

[C3] expr is not a symbol

expr was found, when there was a variable name expected in the special forms define, let, letrec, or set!.

[C4] Invalid variable binding

The variable binding list of a do, let, let*, or letrec form is not a proper variable binding list.

[C5] Invalid lambda args

The argument list for the lambda special form has not one the three allowed shapes. This also applies to the second form of define.

[C6] Improper argument list

An expression list in a function call is not a proper list.

[C7] Duplicate name

A variable name to be bound occurred twice in a lambda-, let- or letrec-binding list. Also when the same toplevel name is defined twice in a loaded memo.

[C8] Invalid let list

The variable bindings expected are not a proper list.

[C9] Definition in invalid context

A define expression is not allowed in this context. Definitions must appear before all other expressions in an expression sequence.

[C10] Empty expression sequence

An expression sequence in the body of a begin-, cond-, lambda-, let- or letrec-form is empty. It must contain at least one expression.

[C11] Invalid case/cond clause

A case or cond clause is not of the form (guard expr1 expr2 ...).

[C12] Keyword used as a variable

The name given has a special definition as a keyword for a syntactic form and can't be used as a variable name.

[C13] unquote(-splicing) invalid outside of quasiquote

One of the special forms unquote or unquote-splicing appeared outside of the special form quasiquote or the nesting depth of quasiquote expressions has reached zero by outer unquotes.

[C14] unquote-splicing allowed in list or vector template only

unquote-splicing didn't appear in a list or a vector template, so there wouldn't be a valid context into which the resulting list could be spliced.

[C15] Invalid definition

A definition (see define) has not of one of the allowed shapes.

[C16] Macro too complex

For technical reasons, compilation can't be interrupted by the Break button. So, to avoid infinite loops while compiling, there are two fixed limits for expanding a macro (which indeed calls the VM for its duty): If you should encounter a situation where these limits are too tight, please send me an email including the code you tried to compile, but watch out for non-terminating macros like (macro (defunct x) x) before.

[C17] Too many variables

LispMe can address at most 128 variables in a single environment frame and a maximum of 64 nested frames. You are very unlikely to hit this limit, but if you do, please send a mail.

Runtime Errors

[R1] expr is not a type

This is the classical runtime type error. This error is also raised, when a number is to large to be coerced to an integer by integer

[R2] String/vector index expr out of range

The index doesn't specify a valid address. String and vector accesses require their index to be non-negative integers smaller than the vector or string length. This error is also caused by the C datatype access functions if part of the C value would be outside the buffer.

[R3] Function expected n arguments, but got m as follows: expr

A function expecting n arguments was called with a wrong number of arguments, namely m. The actual argument list is printed in this error message as expr.

[R4] expr should have type type but actually was expr'

A more specific version of error [R1].

[R5] No IO hook defined for port expr

There is no call-back function defined for the port indicated. All extension port modules have to define and register a call-back function.

[R6] Integer n out of range

The integer argument passed to the function is out of range, e.g. it is not a 32 bit integer as required.

[R7] Illegal opcode

The LispMe virtual machine (VM) encountered an illegal opcode. This is a severe internal error produced by a buggy LispMe compiler (you should never see this error message), so please send mail to me with a report what caused this message.

However, if you got this error by messing around with the list returned by disasm, this is your own fault, so don't blame me.

[R8] Division by zero

Caused by integer and floating point division.

[R9] Sucked into black hole

During evaluation of the local definitions in a letrec form, the value of one of the variables just being bound was accessed. An access to the value of any variable in the binding list will cause this error while the expressions to initialize these variables are evaluated. These variables may be used inside a lambda or delay special form, as in this case their value will not be needed during evaluation of these forms.

[R10] No matching case/cond clause

All of the guards in a cond form evaluated to false or the value of the expression in a case form is not in any of the constant lists. Both cases can only happen, when the else keyword is absent.

[R11] Native function f can't be called with n arguments.

The native function doesn't allow calling with the specified number of arguments.

[R12] Can't call transcendental functions without MathLib

The mathematics library MathLib.prc (included in this package) has not been installed, so calls to transcendental functions like sin fail. The functions needing MathLib are marked in the Catalog of Language Elements.

[R13] Port has been closed

There was an attempt to output to a closed port or to input from a closed port.

[R14] Non-matching types in comparison

The two objects compared by one of the procedures < <= > >= have non-compatible types.

[R15] Invalid parameter parm for proc

The parameter parm is invalid for the built-in procedure proc. Have a look at the catalog for valid arguments.

[R16] Can't create file

A new file can't be created for output. Probably there's not enough memory left on your Pilot, or (for DOC files) a file with the specified name already exists.

[R17] File not found

The file to be opened for input can't be found. Look for a spelling error in the file name (this is always the first line of the memo).

[R18] File associated with port vanished

A file which is currently open (either for reading or writing) has been deleted. Just simply don't do that!

[R19] Can't write to file

LispMe can't resize the file to append the output. Probably there's not enough memory left on your Pilot.

[R20] Improper list or tree

One of the lists compared by equal? contains a cycle.

[M] Memory Errors

[M1] Atom space exhausted

There's not enough memory for a new symbol to be allocated. Symbols are not garbage collected, so this error may occur if you loaded and popped several different memos, as all symbols used so far accumulate in the atom space. So use the command Reset Heap, or if this doesn't help, increase the atom size via the Memory sizes dialog.

[M2] Invalid pointer

A pointer in the LispMe heap has an invalid type tag. This is a severe internal error produced by a buggy LispMe compiler or VM (you should never see this error message), so please send mail to me with a report what caused this message.

[M3] Can't create session name

The database for the new session name couldn't be created. There are several reasons for that, which are indicated within this error message:

[M4] Heap exhausted

The heap memory used for lists and program code is exhausted and even garbage collection cannot reclain sufficient space. Look for non-terminating recursion or try to increase heap size via the Memory sizes dialog.

[M6] Couldn't change blocktype size

An attempt to resize the memory block for heap, atoms, reals or output failed. You might not have enough free memory or your memory is too fragmented. The previous memory size is used. As during changing the memory size temporarily memory for both old and new block is needed, you can try to avoid this bottleneck by first changing to the smallest possible size, leave the dialog, re-enter it, and now change to the originally desired size.

[M7] Can't create array

The array (i.e. a string, vector, big integer, or string array) couldn't be allocated as a DB record in the LispMe DB, either all DB heap has been used, or the size requested is larger than 64 kByte.

[M9] FP storage exhausted

The memory used for floating point values is exhausted and even garbage collection cannot reclain sufficient space. Try to increase FP size via the Memory sizes dialog.

[M10] Invalid foreign type

The foreign type is using a type tag which is too large, it should be less than MAX_FOREIGN_TYPES.

[M11] Invalid port type

The port is using a type tag which is too large, it should be less than MAX_PORT_TYPES.

[U] User Interface Errors

[U1] Form id not found

The form specified in a frm-popup or frm-goto call does not exist. Perhaps you opened the wrong resource DB with set-resdb?

[U2] Object id not in form

The id given does not denote an object in the current form. Look for a typing mistake or for having attached the wrong handler to the form.

[U3] Too much time in event handler

Your event handler needed more time than allowed to process an event. Maybe you wrote an endless loop?

[U5] Object id is not a kind

The user interface object with this id in the current form is not of the right kind, e.g. you tried to use a field function like fld-set-text with a pushbutton.

[U6] Can't call frm-goto now

A frm-goto call is not allowed until frm-popup has been called once at least.

[U7] Forms nested too deeply

No more than 6 nested calls of frm-popup are allowed for memory reasons. (The PalmOS UI guidelines ...) You should use frm-goto to switch between forms at the same level.

[L] Loader Errors

[L3] Not only 'define' expressions in loaded memo

A memo to be loaded must consist of a sequence of define forms. No other expressions are allowed.

[L4] LispMe not installed

This message is not from LispMe itself (obviously :-), but from orphan starter applications which have been left after removing LispMe. You can delete them, too, or (better) re-install LispMe!

[L5] No memo loaded previously

The reload command can't be used for one of these reasons: Just use the ordinary load button in this case.

[L6] Couldn't create icon

The mini-application, which starts LispMe with the session database, could not be created. Probably you don't have enough memory left on your Pilot, or (less probable) an application with this name already exists. See here about database naming issues.

[L7] Invalid DOC version

The Aportis DOC file to be loaded contains an invalid version number (compression method) in its header. Please inform the provider of the DOC editor used.

Others Errors

[O1] No more sources to pop

The stack of loaded memos or entered definitions is already empty, you can't pop anymore.

[O2] Execution interrupted

You pressed the break button to interrupt a running evaluation. The interrupted process cannot be resumed.

[O3] Maximum number of sessions exceeded

Only 32 parallel sessions are allowed at any time. Just delete unneeded sessions.

[O4] LispMe needs PalmOS Version 3.0 at least

To run LispMe, you need PalmOS 3.0 at least (Palm III/V/M100/M500, Handera, Sony Clié, Handspring, or similar) or an upgraded older Pilot at least. Support for PalmOS2 has been canceled, as the memory restriction are to severe with PalmOS2. This message box can't be tapped away.

[O7] Recursion too deep

This message can have three causes: All these things are done internally by recursive functions consuming some of the (very limited!) Pilot hardware stack. To avoid overwriting memory and crashing your machine, a stack check caused this error.

Don't confuse this with recursive functions in LispMe itself, they don't use the hardware stack but the heap, so a non-terminating (non-tail) recursion in LispMe causes this error.

You may sometimes get this error when loading a memo (the compiler needs some stack) and a garbage collection is invoked (needing further stack). Tap Cancel in this case and invoke Menu/View/Memory usage, which forces a garbage collection and try to load the memo again.

[O9] No session selected

You must select any session by tapping its name before issuing any button command.

[O10] Incompatible session

The internal format of the session database selected doesn't match the format of the session databases used by the installed LispMe version. You either installed a newer version of LispMe without deleting older session DBs or you installed a 3rd-party LispMe app in an old format. In this ask for either an updated session DB or (better) for the source code. Another possible reason for this error is a prior crash of LispMe so that the session couldn't be pickled anymore. To avoid possible havoc in this case, LispMe doesn't allow continuing crashed sessions.

[OX] Can't start session name

The session name recorded within the LispMe starter application doesn't exist anymore or the session has a format incompatible with the LispMe version installed. This can happen when you deleted the session database with a third party tool, but didn't touch the starter app itself, or when you transferred only the starter app without the session database. Another possibility is that you installed a newer LispMe version and didn't delete any older sessions. See here how sessions and starter applications work.

[H] HanDBase errors

[H1] HanDBase not installed

You can't use any HanDBase function when HanDBase is not installed. (What did you expect?) Go to the HanDBase homepage to obtain it.

[H2] HanDBase returned error code

The HanDBase API returned the error code indicated. A list of HanDBase error codes is here.

[N] Net errors

[N1] NetLibxxx() returned error code c

The net library function indicated (used for socket communication) returned an unexpected error, which is displayed in hex. To find the meaning of the error code, have a look at the header file System/NetMgr.h in the Palm SDK at mark ErrorCodes. The lowest two hex digits of the error code denote the exact reason.

[V] VFS errors

[V1] Virtual file system not supported

The virtual file system (VFS) library is only supported on PalmOS4 and beyond on devices equipped with a memory card slot. You can't use any function of the vfs family on older devices.

Warnings and user queries

User error: ...

This error (note User Error in the title bar) is generated by a call to the error procedure. The text printed in the message box is the argument to error.

User message: ...

This message box (note User message in the title bar) is generated by a call to the message procedure. The text printed in the message box is the argument to message.

[O5] Output too long - truncated

Your current evaulation created a lot of output (either by display or write, or by a long return value). In any case, all output not fitting into the selected Output Size, will be omitted and the last character visible in the output field will be a ... to indicate truncation.

[O6] Zap all LispMe memory?

Tap OK to re-initialize LispMe memory. All loaded memos and other data will be cleared and you'll have a virgin heap. Tap Cancel if you selected Reset Heap by accident,

[O8] Delete session name?

Tap OK to delete the session and its database. Tap Cancel to abort.

Fatal Errors

OK, these errors are not fatal for your Pilot, but for LispMe. LispMe can't continue to work when one of these errors occurred.

Can't create LispMe DB

When starting LispMe the first time, it tries to create its database containing heap etc. memory. When this fails, LispMe can't work. You should delete some applications or databases to have more memory or use a defragmentation tool if your memory is too fragmented (not with PalmOS3).

No memoDB?

The MemoPad database was not found. Now this is very strange...