Inno Pascal 0.1.4
Copyright (C) 2000 Jordan Russell
For conditions of distribution and use, see LICENSE.TXT.
Home page: http://www.jrsoftware.org/
Current Inno Pascal home page: http://other.jrsoftware.org/ip/
E-mail: jr @ jrsoftware.org

## Miscellaneous notes

Some limitations of existing features:

- The linker currently has a limit of 512 bytes on the code and import data sections. This would not be difficult to fix; I just haven't gotten around to it yet.
- Only supported types are Integer, Cardinal, Longint, LongWord, and PChar. (Actually there are smaller types like Bytes, Words, etc. but they don't work yet; don't use them.)
- Expressions are supported in variable assignments, but they must be surrounded by "`expr()`". For example: "`A := expr(1 + 2 * 3);`". Four operators are currently supported: `+ - * div`; parentheses may also be used. Functions may be called inside expressions. The code generated by expressions is far from optimal; every term is pushed and popped from the stack.
- Functions cannot be called inside a function's parameter list, e.g. "`MessageBox(0, GetCommandLine, 'Title', MB_ICONQUESTION);`". Also, expressions can't currently be used in a function's parameters list either.
- While it supports declaration of local variables, they are actually internally stored as global variables (like "static" variables in C). So don't try recursively calling a procedure yet.
- Non-`external` procedures can't take parameters yet (since it doesn't have any stack handling support yet).
- `stdcall` is the only supported calling convention

Important features it's lacking:

- "`if`"s
- boolean expressions (i.e. `A <> B`)
- ... and more

Interesting things it already supports:

- Compiler warns about uninitialized and unused variables. (Still needs some work, however. "`A := MessageBeep(A)`" doesn't warn about A being uninitialized.)
- Compiler automatically removes unused variables, imports, and procedures.
- It supports procedures and nested procedures. Constants, variables, and procedures declared inside a procedure are local only to that procedure.

## Credits

Others who have contributed to the project:

- Developers of mwEdit/SynEdit - the excellent syntax highlighting code editor used in the IDE.
- Michael Hieke - improvements to IDE's editor, debugger, and compiler.