Frabrice Bellard | a969305 | 2009-05-11 14:50:37 -0700 | [diff] [blame] | 1 | |
Jack Palevich | c9b8ffc | 2009-08-03 14:42:57 -0700 | [diff] [blame] | 2 | Supported C language subset: |
Frabrice Bellard | a969305 | 2009-05-11 14:50:37 -0700 | [diff] [blame] | 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 | |
Jack Palevich | c9b8ffc | 2009-08-03 14:42:57 -0700 | [diff] [blame] | 15 | * Comma operator is supported. |
| 16 | |
| 17 | * Trinary operator (?:) is not supported. |
| 18 | |
Frabrice Bellard | a969305 | 2009-05-11 14:50:37 -0700 | [diff] [blame] | 19 | * Unary operators: '&', '*' (pointer indirection), '-' |
Jack Palevich | c9b8ffc | 2009-08-03 14:42:57 -0700 | [diff] [blame] | 20 | (negation), '+', '!', '~', '++' and '--'. |
Frabrice Bellard | a969305 | 2009-05-11 14:50:37 -0700 | [diff] [blame] | 21 | |
Jack Palevich | c9b8ffc | 2009-08-03 14:42:57 -0700 | [diff] [blame] | 22 | * Pointer indirection ('*') is supported. |
Frabrice Bellard | a969305 | 2009-05-11 14:50:37 -0700 | [diff] [blame] | 23 | |
Jack Palevich | 22f5c6b | 2009-10-27 17:34:45 -0700 | [diff] [blame] | 24 | * Square brackets are supported. |
Frabrice Bellard | a969305 | 2009-05-11 14:50:37 -0700 | [diff] [blame] | 25 | |
Jack Palevich | c9b8ffc | 2009-08-03 14:42:57 -0700 | [diff] [blame] | 26 | * '=' and <op>= are supported. |
Frabrice Bellard | a969305 | 2009-05-11 14:50:37 -0700 | [diff] [blame] | 27 | |
Jack Palevich | c9b8ffc | 2009-08-03 14:42:57 -0700 | [diff] [blame] | 28 | * Function calls are supported with standard Linux calling |
| 29 | convention. Function pointers are supported. |
| 30 | Functions can be used before being declared. |
Frabrice Bellard | a969305 | 2009-05-11 14:50:37 -0700 | [diff] [blame] | 31 | |
Jack Palevich | c9b8ffc | 2009-08-03 14:42:57 -0700 | [diff] [blame] | 32 | - sizeof() is not supported. |
Frabrice Bellard | a969305 | 2009-05-11 14:50:37 -0700 | [diff] [blame] | 33 | |
Jack Palevich | c9b8ffc | 2009-08-03 14:42:57 -0700 | [diff] [blame] | 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. |
Jack Palevich | 22f5c6b | 2009-10-27 17:34:45 -0700 | [diff] [blame] | 40 | - short is supported |
Jack Palevich | c9b8ffc | 2009-08-03 14:42:57 -0700 | [diff] [blame] | 41 | - const is not supported |
Jack Palevich | 22f5c6b | 2009-10-27 17:34:45 -0700 | [diff] [blame] | 42 | - signed and unsigned are not supported. |
| 43 | - arrays are supported |
Jack Palevich | c9b8ffc | 2009-08-03 14:42:57 -0700 | [diff] [blame] | 44 | - long doubles are not supported |
Jack Palevich | 22f5c6b | 2009-10-27 17:34:45 -0700 | [diff] [blame] | 45 | - structs and unions are supported |
Jack Palevich | ee1f829 | 2009-10-28 16:10:17 -0700 | [diff] [blame] | 46 | - typedef is supported |
| 47 | - explicit storage class specifiers are not supported: register, auto, static, extern |
Jack Palevich | c9b8ffc | 2009-08-03 14:42:57 -0700 | [diff] [blame] | 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. |
Frabrice Bellard | a969305 | 2009-05-11 14:50:37 -0700 | [diff] [blame] | 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 | |
Jack Palevich | c9b8ffc | 2009-08-03 14:42:57 -0700 | [diff] [blame] | 59 | - switch / case is not supported. |
| 60 | - goto and labels are not supported. |
| 61 | - continue is not supported. |
| 62 | |
Frabrice Bellard | a969305 | 2009-05-11 14:50:37 -0700 | [diff] [blame] | 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 | |
Jack Palevich | c9b8ffc | 2009-08-03 14:42:57 -0700 | [diff] [blame] | 70 | - Float and double constants are supported. |
| 71 | |
Jack Palevich | 22f5c6b | 2009-10-27 17:34:45 -0700 | [diff] [blame] | 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. |
Frabrice Bellard | a969305 | 2009-05-11 14:50:37 -0700 | [diff] [blame] | 78 | |
Jack Palevich | c9b8ffc | 2009-08-03 14:42:57 -0700 | [diff] [blame] | 79 | - C Strings and C character constants are supported. All ANSI C |
| 80 | character escapes are supported. |
Frabrice Bellard | a969305 | 2009-05-11 14:50:37 -0700 | [diff] [blame] | 81 | |
Jack Palevich | c9b8ffc | 2009-08-03 14:42:57 -0700 | [diff] [blame] | 82 | - Both C comments ( /* */ ) and C++ comments ( // ... end-of-line ) are |
| 83 | supported. |
Frabrice Bellard | a969305 | 2009-05-11 14:50:37 -0700 | [diff] [blame] | 84 | |
Jack Palevich | c9b8ffc | 2009-08-03 14:42:57 -0700 | [diff] [blame] | 85 | - Some syntax errors are reported, others may cause a crash. |
Frabrice Bellard | a969305 | 2009-05-11 14:50:37 -0700 | [diff] [blame] | 86 | |
| 87 | - Memory: the code, data, and symbol sizes are limited to 100KB |
| 88 | (it can be changed in the source code). |
| 89 | |