Home | History | Annotate | Download | only in libacc
      1 
      2 Supported 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