summaryrefslogtreecommitdiffstats
path: root/libacc/FEATURES
blob: 3e80890e3050d931ac4662751891467b394fb6d8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

Supported C language subset (read joint example 'otccex.c' to have
    an introduction to OTCC dialect):

    - Expressions:

        * binary operators, by decreasing priority order: '*' '/' '%',
          '+' '-', '>>' '<<', '<' '<=' '>' '>=', '==' '!=', '&',
          '^', '|', '=', '&&', '||'.

        * '&&' and '||' have the same semantics as C : left to right
          evaluation and early exit.

        * Parenthesis are supported.

        * Unary operators: '&', '*' (pointer indirection), '-'
          (negation), '+', '!', '~', post fixed '++' and '--'.

        * Pointer indirection ('*') only works with explicit cast to
          'char *', 'int *' or 'int (*)()' (function pointer).

        * '++', '--', and unary '&' can only be used with variable
          lvalue (left value).

        * '=' can only be used with variable or '*' (pointer
          indirection) lvalue.

        * Function calls are supported with standard i386 calling
          convention. Function pointers are supported with explicit
          cast. Functions can be used before being declared.

    - Types: only signed integer ('int') variables and functions can
      be declared. Variables cannot be initialized in
      declarations. Only old K&R function declarations are parsed
      (implicit integer return value and no types on arguments).

    - Any function or variable from the libc can be used because OTCC
      uses the libc dynamic linker to resolve undefined symbols.

    - Instructions: blocks ('{' '}') are supported as in C. 'if' and
      'else' can be used for tests. The 'while' and 'for' C constructs
      are supported for loops. 'break' can be used to exit
      loops. 'return' is used for the return value of a function.

    - Identifiers are parsed the same way as C. Local variables are
      handled, but there is no local name space (not a problem if
      different names are used for local and global variables).

    - Numbers can be entered in decimal, hexadecimal ('0x' or '0X'
      prefix), or octal ('0' prefix).

    - '#define' is supported without function like arguments. No macro
      recursion is tolerated. Other preprocessor directives are
      ignored.

    - C Strings and C character constants are supported. Only '\n',
      '\"', '\'' and '\\' escapes are recognized.

    - C Comments can be used (but no C++ comments).

    - No error is displayed if an incorrect program is given.

    - Memory: the code, data, and symbol sizes are limited to 100KB
      (it can be changed in the source code).