Commit graph

42 commits

Author SHA1 Message Date
Jack Palevich
0a01a5db56 Handle functions with anonymous arguments
Example:

int f(int a, int, int c) {
    return a + c;
}
2009-08-19 10:53:43 -07:00
Jack Palevich
815d8b8fdb Allow redefinition of macros.
Example:

#define A 3
#define A 4

This used to do strange things, but now works as it should.
2009-08-18 18:25:56 -07:00
Jack Palevich
0b1827a5b2 Allow '//'-style comments in #defines. 2009-08-18 17:44:12 -07:00
Jack Palevich
0b2de0de64 Allow parenthesized expressions as the value of defines
For example, this now works:

#define A (1 + 2)

Note that we still don't support defines with argument lists, so this is
still illegal:

#define A(X) (X + 2)

Also in this change: The compiler test script allows command-line
arguments to disable testing on ARM and to disable testing the output
of the old OTCC compiler.

Disabling testing on ARM is handy for developing front-end code when no
device or emulator is available.

Disabling testing OTCC output is handy for some 64-bit Linux environments,
because the original OTCC needs some tweaking to be fully compatible, and
I don't have time to investigate this problem right now.
2009-08-18 16:04:03 -07:00
Jack Palevich
80e4972625 Support 2D arrays. 2009-08-04 15:39:49 -07:00
Jack Palevich
b61545096d Implement arrays.
Added check to see that pointer types are compatible when passing function
arguments.
2009-08-04 14:56:09 -07:00
Jack Palevich
c9b8ffc389 Add support for "short" data type. 2009-08-03 14:42:57 -07:00
Jack Palevich
96138992ac Fix parsing of function declarations that return pointers.
Check that <op>= only evaluates the left-hand-side once.
2009-07-31 15:58:19 -07:00
Jack Palevich
47cbea9c69 Support brackets for accessing array values.
Don't yet support allocating arrays.
2009-07-31 15:25:53 -07:00
Jack Palevich
aaac9284b4 Implement pre-increment / pre-decrement 2009-07-31 14:34:34 -07:00
Jack Palevich
43aaee31b9 Support the comma operator. 2009-07-31 14:01:37 -07:00
Jack Palevich
0c01774816 Implement op=. 2009-07-31 12:00:39 -07:00
Jack Palevich
beb4fe95a0 Test multiple levels of pointer indirection. 2009-07-31 11:27:29 -07:00
Jack Palevich
8f361faffc Fix bad ARM code generation for '||' and '&&' operators.
Add tests of '&', '&&', '|' and '||' operators.
2009-07-30 16:19:43 -07:00
Jack Palevich
ddf7c9c141 Implement inc/dec in a more lval-friendly way. 2009-07-29 10:28:18 -07:00
Jack Palevich
89baa2083f Fix the ARM postdecrement operator.
Add a test for ++ and -- so this bug won't happen again.
2009-07-23 11:45:15 -07:00
Jack Palevich
8148c5be54 Coerce R0 to destination type before storing it into a variable. 2009-07-16 18:24:47 -07:00
Jack Palevich
2aaf21f1be Improve numerical constant parsing. 2009-07-15 16:16:37 -07:00
Jack Palevich
fd3db48e2e Add test for passing floats and doubles as ints, floats, and doubles. 2009-07-14 19:39:36 -07:00
Jack Palevich
37c54bd22e Make forward declarations of external symbols really work.
Until now we had always been treating external variables as "int",
and external functions as int (...);
2009-07-14 18:35:36 -07:00
Jack Palevich
a8f427f606 Implement pointer arithmetic. 2009-07-13 18:40:08 -07:00
Jack Palevich
25c0ccaed4 Implement support for "char" local and global variables. 2009-07-13 16:56:28 -07:00
Jack Palevich
45431bc252 Implement general casts and pointer dereferencing.
Prior to this casts and pointer dereferencing were special-cased.
2009-07-13 15:57:26 -07:00
Jack Palevich
b7718b973c Implement floating point for ARM. 2009-07-09 22:00:24 -07:00
Jack Palevich
2a4e1a9f88 Finish implementing x86 floating point
Support floating-point if/while statements: if(1.0) { ... }
Support reading values from float and double pointers.

And some additional error checking.
Detect malformed "return" statements
Detect passing the results of "void" functions as arguments.
2009-07-09 13:34:25 -07:00
Jack Palevich
a39749f641 Implement x86 floating point operations
+ unary floating point operation -
 + unary floating point compare: !
 + binary floating point operations +-*/
 + binary floating point comparisons: < <= == != >= >
2009-07-08 20:40:31 -07:00
Jack Palevich
9cbd226960 Implement global, local, and stack based float and double variables. 2009-07-08 16:48:41 -07:00
Jack Palevich
128ad2d204 Implement x86 int <--> float. 2009-07-08 14:51:31 -07:00
Jack Palevich
1a539db23c Some x86 floating point code works.
We now check the types and number of arguments to a function.
2009-07-08 13:04:41 -07:00
Jack Palevich
95727a0b05 Initial support for float, double. 2009-07-06 12:07:15 -07:00
Jack Palevich
40600de143 Clean up expression code.
Concatenate adjacent string literals.
2009-07-01 15:32:35 -07:00
Jack Palevich
b4758ff1de Implement string and character backslash constants.
Until now we only supported '\n'. Now we support everything, including
octal ('\033') and hex '\x27' constants.
2009-06-12 12:49:14 -07:00
Jack Palevich
a6baa23f08 Improve symbol-related error checking
+ Duplicate symbols.
+ Undefined variables;
+ Forward-referenced functions that were never defined.
2009-06-12 11:25:59 -07:00
Jack Palevich
61d22dc763 Improve nested variable test.
Test that we can have two levels of local variables.
2009-06-11 22:03:24 -07:00
Jack Palevich
303d8ffca9 Improve local variable scoping.
Until now we faked local variables -- they only worked correctly if
there was no overlap between local variables and global variables.

Use a symbol table stack instead of a string list.

Fix bug with looking up undefined symbols.
2009-06-11 21:47:57 -07:00
Jack Palevich
0a280a0dde Remove use of setjmp/longjmp from libacc compiler.
It makes it harder to deal with memory allocation.

Also fix bug in the otcc-ansi.c test, where the wrong part of the
code buffer was being mprotected, so that if the code buffer happened
to be allocated across a page boundary, some code would no receive
execute permission.
2009-06-11 10:53:51 -07:00
Jack Palevich
8dc662efe9 Make otcc code work in x64 based system with 32-bit chroot.
Set execute permission on code before running it.
Handle negative relative offsets for global variables.
Add printfs to report the progress of nested compiles.
Change way we detect whether we can run the host compiler
or not. We used to check if we were running on a 32-bit
Linux. Now we check if the executable is a 32-bit Linux
executable.
2009-06-09 22:59:04 +00:00
Jack Palevich
36d9414f72 Make a host version of acc for testing.
Don't run the code we've compiled unless the -R option is present.
2009-06-08 15:55:32 -07:00
Jack Palevich
b7c81e9952 Switch to ANSI C style C function declarations.
main(argc, argv) --> int main(int argc, char** argv)

Although we accept int, void, and char types, and pointers to same,
we actually still treat everything as an int.
2009-06-04 19:56:13 -07:00
Jack Palevich
eedf9d2083 Add support for #pragma foo(bar)
Report unsupported/unknown preprocessor directives.
Report line number of error rather than character offset.
2009-06-04 16:38:35 -07:00
Jack Palevich
ac0e95eb60 Improve ACC error reporting.
Now return an error code and an error message, rather than just
printing to stderr or calling exit().

Check to see we don't exceed our code size.
2009-05-29 13:53:44 -07:00
Jack Palevich
1cdef20774 Convert libacc into a shared library.
Document internal CodeGenerator interface

Move license to a separate license file.

Define a public API for calling libacc.

Update the "acc" test program to use the public API.
Move "main.cpp" and test scripts into the tests subdirectory.
Move test data from tests to tests/data
Remove stale test data.
2009-05-22 12:09:55 -07:00