• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1
2Supported C language subset:
3
4    - Expressions:
5
6        * binary operators, by decreasing priority order: '*' '/' '%',
7          '+' '-', '>>' '<<', '<' '<=' '>' '>=', '==' '!=', '&',
8          '^', '|', '=', '&&', '||'.
9
10        * '&&' and '||' have the same semantics as C : left to right
11          evaluation and early exit.
12
13        * Parenthesis are supported.
14
15        * Comma operator is supported.
16
17        * Trinary operator (?:) is not supported.
18
19        * Unary operators: '&', '*' (pointer indirection), '-'
20          (negation), '+', '!', '~', '++' and '--'.
21
22        * Pointer indirection ('*') is supported.
23
24        * Square brackets are supported.
25
26        * '=' and <op>= are supported.
27
28        * Function calls are supported with standard Linux calling
29          convention. Function pointers are supported.
30          Functions can be used before being declared.
31
32        - sizeof() is not supported.
33
34    - Types:
35        + int, short, char, float, double
36        + pointers
37        + variables can be initialized in declarations.
38        + Only ANSI-style function declarations are supported.
39           - "..." is not supported.
40        - short is supported
41        - const is not supported
42        - signed and unsigned are not supported.
43        - arrays are supported
44        - long doubles are not supported
45        - structs and unions are supported
46        - typedef is supported
47        - explicit storage class specifiers are not supported: register, auto, static, extern
48
49    - Unknown functions and variables are bound at compile time by calling
50      back to the caller. For the 'acc' command-line tool unknown functions
51      and variables are looked up using dlsym, to allow using many libc
52      functions and variables.
53
54    - Instructions: blocks ('{' '}') are supported as in C. 'if' and
55      'else' can be used for tests. The 'while' and 'for' C constructs
56      are supported for loops. 'break' can be used to exit
57      loops. 'return' is used for the return value of a function.
58
59      - switch / case is not supported.
60      - goto and labels are not supported.
61      - continue is not supported.
62
63    - Identifiers are parsed the same way as C. Local variables are
64      handled, but there is no local name space (not a problem if
65      different names are used for local and global variables).
66
67    - Numbers can be entered in decimal, hexadecimal ('0x' or '0X'
68      prefix), or octal ('0' prefix).
69
70    - Float and double constants are supported.
71
72    - '#define' is supported without function like arguments.
73    - Macro recursion is allowed.
74    - Self-referential macros are handled as in gcc.
75    - '#pragma' is supported. The pragma text is passed to a callback function,
76       and is used to implement meta-information.
77    - Other preprocessor directives are ignored.
78
79    - C Strings and C character constants are supported. All ANSI C
80      character escapes are supported.
81
82    - Both C comments ( /* */ ) and C++ comments ( // ... end-of-line ) are
83      supported.
84
85    - Some syntax errors are reported, others may cause a crash.
86
87    - Memory: the code, data, and symbol sizes are limited to 100KB
88      (it can be changed in the source code).
89
90