Back to index
LispMe Error Messages
The error codes in square brackets are the ones defined in lispme.h.
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.
The LispMe reader encountered an invalid character. The help text
shows the allowed characters.
The LispMe reader encountered a token that cannot start a valid
symbolic expression. This also happens, when the expression to be read
is empty.
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.
A single token (a symbol, number or string) must not contain more than
512 characters.
The character read is not a valid digit in the current number base.
The LispMe reader encountered an invalid floating point constant.
Possible reasons are:
- neither a digit or + or - after the e
in the exponent part
- not a digit after the e and sign
in the exponent part
- not a digit after the decimal point
This error occurres, when there's an illegal character after
the hash sign # in a constant. The only allowed #
constants are
- #f the constant false
- #t the constant true
- #n the non-printing value
- #(, introducing a vector.
- #\, introducing a character constant.
Additionally, this error is raised when in a string containing
hex escape sequences #hh one of the characters
h is not a hexadecimal digit.
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.
The LispMe reader encountered an invalid complex number.
Possible reasons are:
- You forgot the i after the imaginary part
- You didn't put a space between two real numbers, so LispMe
tried to interpret the second as the imaginary part of a complex.
[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.
The given name is not defined in the lexical environment. Check for
a spelling error or for having loaded all required memos.
The number of arguments for the noted special form or built-in
procedure is wrong.
expr was found, when there was a variable name expected in
the special forms
define,
let,
letrec, or
set!.
The variable binding list of a
do,
let,
let*, or
letrec form is
not a proper variable binding list.
The argument list for the
lambda special
form has not one the three allowed shapes. This also applies to
the second form of define.
An expression list in a function call is not a proper list.
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.
The variable bindings expected are not a proper list.
A define expression is not
allowed in this context. Definitions must appear before all other
expressions in an 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.
A case or
cond
clause is not of the form
(guard expr1 expr2 ...).
The name given has a special definition as a keyword for a syntactic
form and can't be used as a variable name.
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.
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.
A definition (see define)
has not of one of the allowed shapes.
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):
- The number of VM steps for a single expansion. This is 1600,
which should suffice to distinguish between sensible macros
and non-termination.
- The number of macro expansion during a single compilation. This
is 200 which should also suffice.
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.
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
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
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.
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.
A more specific version of error [R1].
There is no call-back function defined for the port indicated.
All extension port modules have to define and register a call-back
function.
The integer argument passed to the function is out of range, e.g. it
is not a 32 bit integer as required.
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.
Caused by integer and floating point division.
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.
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.
The native function doesn't allow calling with the specified number
of arguments.
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.
There was an attempt to output to a closed port or to input from a
closed port.
The two objects compared by one of the procedures
< <= > >=
have non-compatible types.
The parameter parm is invalid for the built-in
procedure proc. Have a look at the catalog for valid arguments.
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.
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).
A file which is currently open (either for reading or writing) has
been deleted. Just simply don't do that!
LispMe can't resize the file to append the output. Probably there's
not enough memory left on your Pilot.
One of the lists compared by equal? contains a cycle.
[M] Memory Errors
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.
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.
The database for the new session name couldn't be created. There
are several reasons for that, which are indicated within this error
message:
- invalid name:The name given is not a valid Pilot database
name. Using only letters and digits for the name (embedded spaces
could cause problems on Hotsync) should help.
- already exists:A database with name name already exists
on your Pilot. Not only LispMe databases must have unique names, they
mustn't be the same as any other application or database on your
Pilot. Sess here for details.
- general error:any other error occurred. Most probably you haven't
enough memory left to create the new session database.
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.
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.
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.
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.
The foreign type is using a type tag which is too large, it should be
less than MAX_FOREIGN_TYPES.
The port is using a type tag which is too large, it should be
less than MAX_PORT_TYPES.
[U] User Interface Errors
The form specified in a
frm-popup or
frm-goto call
does not exist. Perhaps you opened the wrong resource DB with
set-resdb?
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.
Your event handler needed more time than allowed to process an
event. Maybe you wrote an endless loop?
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.
A frm-goto call is
not allowed until
frm-popup has been
called once at least.
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
A memo to be loaded must consist of a sequence of
define forms. No other
expressions are allowed.
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!
The reload command can't be used for one of these reasons:
- no memo has been loaded yet
- the last environment frame results from an interactive define
- a pop command has already removed the last memo
Just use the ordinary load button in this case.
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.
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
The stack of loaded memos or entered
definitions is already
empty, you can't pop anymore.
You pressed the break button to
interrupt a running evaluation. The interrupted process cannot be
resumed.
Only 32 parallel sessions are allowed at any time. Just delete
unneeded sessions.
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.
This message can have three causes:
- reading a deeply nested list (about 30 levels deep)
- compiling a very complex expression
- garbage-collecting a deeply nested list (about 50 levels)
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.
You must select any session by tapping its name before issuing any
button command.
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.
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
You can't use any HanDBase function when HanDBase is not installed.
(What did you expect?) Go to the
HanDBase homepage to obtain it.
The HanDBase API returned the error code indicated. A list of HanDBase
error codes is here.
[N] Net errors
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
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
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.
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.
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.
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,
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...