Bill Currie
f224eadbb8
[qfcc] Rework QuakeC function type manging
...
It is now "consistent" with the rest of the type building in that it
uses find_type(append_type(return, params)) like the C version, thus
allowing append_type to do its thing with type aliases. This fixes the
overload test.
2020-03-28 19:01:49 +09:00
Bill Currie
b6ea47dca6
[qfcc] Add failing function overload test
...
This is a bit of a weird one because it's a combination of the aliasing
code and mixing C prototypes with QuakeC function definitions, and the
function type rebuilding in qc-parse.y not being very "consistent" in
its abuse of the type system.
2020-03-28 18:58:08 +09:00
Bill Currie
eacdd0d3de
[qfcc] Make file_basename accessible and more usable
2020-03-28 18:55:51 +09:00
Bill Currie
69037fe5eb
[qfcc] Strip alias info off function params
...
For now. This fixes many problems but does lose type aliasing info from
function parameters.
2020-03-28 18:55:51 +09:00
Bill Currie
da39e675b8
[qfcc] Copy type chain for type aliases
...
The full_type branch of an alias splitter (alias with null name) needs
to mirror the clean side up to the type alias. It is causing problems
with functions, but that's expected because parameters complicate
things.
2020-03-28 18:55:51 +09:00
Bill Currie
ec3c2426ff
[qfcc] Add type dot dumping
...
It's not connected up yet because I'm unsure of just where to put things
(it gets messy fast), but just being able to see the structure of
complex types is nice.
2020-03-28 16:22:44 +09:00
Bill Currie
8479cad8a8
[qfcc] Record alias-free type in function_t
...
This eases type unaliasing on functions a little.
Still more to to go, but this fixes a really hair-pulling bug: linux's
heap randomiser was making the typedef test fail randomly whenever
typedef.qfo was compiled.
2020-03-28 15:10:14 +09:00
Bill Currie
1eef2a8b5e
[qfcc] Implement type aliasing again
...
When a type is aliased, the alias has two type chains: the simple type
chain with all other aliases stripped, and the full type chain. There
are still plenty of bugs in it, but having the clean type chain takes
care of the major issue that was in the previous attempt as only the
head of the type-chain needs to be skipped for type comparison.
Most of the bugs are in finding the locations where the head needs to be
skipped.
2020-03-28 12:10:23 +09:00
Bill Currie
734f10d43e
[qfcc] Dump local defs for qfo functions
2020-03-28 12:06:34 +09:00
Bill Currie
e31f03fd36
[qfcc] Add type aliasing test again
2020-03-28 09:59:01 +09:00
Bill Currie
c6746fa391
[qfcc] Fix out-by-one in type meta check
2020-03-27 22:48:38 +09:00
Bill Currie
1da6eb5f51
[qfcc] Fix a typo in a comment
2020-03-27 22:17:36 +09:00
Bill Currie
653eabfdbf
[qfcc] Clean up inconsistent type building idioms
2020-03-27 22:11:18 +09:00
Bill Currie
c6483b617c
[qfcc] Remove obsolete notes
...
nil seems to have sorted himself out with the recent reworking of how
qfcc handles nil.
2020-03-27 20:52:37 +09:00
Bill Currie
4d616fab4a
[qfcc] Use the correct statement type for memset
2020-03-27 20:47:42 +09:00
Bill Currie
fdf6fac077
[qfcc] Rewrite expr_nil to use memset if necessary
...
This fixes the problem with returning nil through @param (and probably
structs in general).
2020-03-27 20:32:52 +09:00
Bill Currie
9c556c07bb
[qfcc] Add failing nil return through @param bug
...
I suspect it's general for struts, but nil really is a troubling
character sometimes.
2020-03-27 20:32:52 +09:00
Bill Currie
9e529d1508
[qfcc] Fix some incorrect test runs
...
Checking for float return when should be checking for int return.
Fortunately, the tests still passed.
2020-03-27 20:32:52 +09:00
Bill Currie
01cf28e436
[qfcc] Treat C-style function decls as prototypes
...
This removes the need for extern from the declaration.
2020-03-27 18:08:26 +09:00
Bill Currie
643711ef40
[qfcc] Pre-initialize type_object's strct pointer
...
This ensures that pointers to incomplete struct types are not
misidentified as id before the class system has been initialized.
2020-03-27 17:29:42 +09:00
Bill Currie
498dfdbfef
[qfcc] Clean up Obj-QC type struct names
...
I decided that the obj_ tag was unnecessary.
2020-03-27 15:33:53 +09:00
Bill Currie
ab3d91f0c3
[qfcc] Clean up simple type checking
...
All simple type checks are now done using is_* helper functions. This
will help hide the implementation details of the type system from the
rest of the compiler (especially the changes needed for type aliasing).
2020-03-27 15:16:41 +09:00
Bill Currie
8b1e4eea58
[qfcc] Bring back the core of type aliasing
...
No aliasing is done yet, but most of the infrastructure is there again.
2020-03-27 12:27:46 +09:00
Bill Currie
53fd55143e
[qfcc] Fix missed none->basic rename
2020-03-27 12:26:44 +09:00
Bill Currie
75394cc4f8
[gamecode,qfcc] Use enums for type encoding types
...
The enums are forced to 32 bits via bitfield spec, so can't use sizeof
on them, but this makes switch enum checks work in gcc.
2020-03-27 12:24:14 +09:00
Bill Currie
4de2c6b30e
[qfcc] Move alias expr inside call block expression
...
This fixes the trampled return value when the first expression aliases
the return result.
2020-03-26 20:16:52 +09:00
Bill Currie
98eac2afbc
[qfcc] Hide dependency generation commands
2020-03-26 20:16:32 +09:00
Bill Currie
15d4186fff
[qfcc] Show line numbers in block sub expressions
...
Seems more useful than expression index.
2020-03-26 20:15:50 +09:00
Bill Currie
5fd63b95db
[qfcc] Add a new failing test
...
The struct alias is somehow blocking the detection of the call so the
return value gets corrupted.
2020-03-26 19:22:41 +09:00
Bill Currie
1f8cc7186c
[qfcc] Hide "function" type behind an @
...
I'm not sure it's all that useful and thus it clutters the namespace.
2020-03-25 21:04:22 +09:00
Bill Currie
4cef9792f4
[util] Make hash-tables semi-thread-safe
...
They take a pointer to a free-list used for hashlinks so the hashlink
pools can be per-thread. However, hash tables that are not updated are
always thread-safe, so this affects only updates. progs_t has been set
up such that it is easy for multiple progs within one thread can share
hashlinks.
2020-03-25 15:43:16 +09:00
Bill Currie
9bfd14b687
[qwaq] Bring in qc gcd to use for debugger testing
...
It was even recent enough to compile first try.
2020-03-24 23:02:19 +09:00
Bill Currie
298fcbbf70
[qfcc] Add ExitCode support to quake-pascal
...
gcd now passes :)
2020-03-20 12:59:25 +09:00
Bill Currie
ed03eeb8d2
[qfcc] Resync qc and qp common symbols
...
Forgot I needed to remove PAS from pascal as well.
2020-03-20 12:59:25 +09:00
Bill Currie
f64038b872
[qfcc] Add gcd.pas to the tests
2020-03-20 12:59:25 +09:00
Bill Currie
7447854d7c
[qfcc] Recover from syntax errors in abstract_decl
2020-03-19 11:01:26 +09:00
Bill Currie
4c6e1b7fc4
[qfcc] Fix some uninitialized variable warnings
...
I really wish gcc would catch more issues when not optimizing.
2020-03-18 01:51:52 +09:00
Bill Currie
0293d335d0
[qfcc] Mark known source def live for movep
...
This fixes ivar-struct-return (and qwaq).
2020-03-18 00:02:36 +09:00
Bill Currie
43ea34535e
[qfcc] Make ivar-struct-return fail
...
It turns out that assignments to struct fields are not counted as live
when the whole struct is later used via a pointer move.
2020-03-17 23:39:17 +09:00
Bill Currie
22cd39c853
[qfcc] Mark ptr assignment offset as an operand
...
This fixes structptr. All current tests pass.
2020-03-17 23:05:57 +09:00
Bill Currie
578bf9a16f
[qfcc] Set dag node value for movep
...
This fixes compilation of all tests. However, structptr still fails.
2020-03-17 22:54:27 +09:00
Bill Currie
34c9ec51bb
[qfcc] Make opcode and statement type names available
2020-03-17 22:46:23 +09:00
Bill Currie
77806f4b1b
[qfcc] Get dag code generation mostly working
...
There's an ICE in return-ivar, but assignchain passes let alone builds.
2020-03-17 22:35:36 +09:00
Bill Currie
16bda66785
[qfcc] Add more statement types for move/memset
...
They ease the statement checks between assign/move/memset and the
pointer versions (don't need all those strcmps)
2020-03-17 21:39:49 +09:00
Bill Currie
3c2f6c8447
[qfcc] Simplify flow_analyize_pointer_operand
...
and its usage. The parts of flow_analyze_statement that use it know
where the returned operand needs to go. Unfortunately, this breaks dags
pretty hard, but that's because dags needs to learn about the fancy
assignment-type statements.
2020-03-17 21:30:16 +09:00
Bill Currie
dec2e6249e
[qfcc] Increase flow operand count to 5
...
MOVEP instructions have up to 5 operands: 2 pointers, the count, and 0-2
referenced variables (when known).
2020-03-17 21:24:12 +09:00
Bill Currie
fa2cbc72d8
[qfcc] Analyze tempop pointers in move/memset statements
2020-03-17 15:48:06 +09:00
Bill Currie
6ec92fb83b
[qfcc] Point pointer tempop to the operand
...
It turns out I need the operand itself, not just the tempop.
2020-03-17 15:47:42 +09:00
Bill Currie
0de011d0bf
[qfcc] Add some disabled additional statement info
...
It's a bit cluttered for normal debugging, but I haven't decided how to
make it optional just yet.
2020-03-17 15:23:24 +09:00
Bill Currie
c5cbe83f71
[qfcc] Initialize statement numbers to -1
...
This is to indicate the statement has not yet been flow analyzed.
2020-03-17 15:05:58 +09:00