Commit Graph

10601 Commits

Author SHA1 Message Date
Bill Currie 62b6e95746 [qfcc] Show a marker at first unbound reloc 2020-03-29 14:54:28 +09:00
Bill Currie 361b3ff422 [qfcc] Treat alias nodes in alias-free branch as ICE 2020-03-29 11:49:07 +09:00
Bill Currie 218cca71b8 [qfcc] Take special care when aliasing aliased types
When aliasing a type that already has aliases, the top node needs to be
replaced if it is unnamed, or the alias-free branch of the new node
needs to reach around to the alias-free branch of the existing node.
This fixes the bogus param counts in qwaq.
2020-03-29 11:29:15 +09:00
Bill Currie 78962cb205 [qwaq] Use append_type in field/pointer/array_type
This fixes the missing alias chain splitter, allowing scheme to compile
again.
2020-03-29 10:27:16 +09:00
Bill Currie 6f871a8af9 [qfcc] Unalias def types before checking
This fixes the typelinker test, but not the linking error in
ruamoko/game that it was supposed to represent. I guess there's
something more going on (maybe type encoding relocation issues).
2020-03-29 00:58:02 +09:00
Bill Currie 8ba3ab89d5 [qfcc] Add failing aliased type linking test 2020-03-28 23:30:05 +09:00
Bill Currie c13162e41e [qfcc] Rearrange type initialization
Fixes #6
It turned out that the problem with @zero was caused by initial type
chaining occurring before the structures had been initialized and thus
the linker's @zero type encoding string was incorrect: {?=} instead of
{tag @zero-}, thus when the actual type encoding supplied by an object
file came along (with the correct encoding string), it wasn't found.
2020-03-28 22:53:35 +09:00
Bill Currie 31ea3814bb [qfcc] Decouple type encoding from the pr struct
This will allow encoding types correctly in the linker.
2020-03-28 22:15:06 +09:00
Bill Currie 54a9305dbf [qfcc] Use right object for sizeof
Since the bitfield has been abandoned, can use sizeof on the field
again.
2020-03-28 22:02:42 +09:00
Bill Currie ac9f3404ef [qfcc] Improve string quoting when dumping strings
Not knowing if a blank line is an empty string or spaces...
2020-03-28 21:46:46 +09:00
Bill Currie 1cd7bd2bf0 [qfcc] Use correct meta for zerolinker test
Still fails, of course :)
2020-03-28 21:31:04 +09:00
Bill Currie 869efa7239 [gamecode] Use etype_t in more places
But forget about bitfields. If enum isn't int and int isn't 32-bits,
we've probably got other problems (and there may be a better way).
2020-03-28 21:19:55 +09:00
Bill Currie 7218af6be4 [qfcc] Print qfo def type address 2020-03-28 21:19:20 +09:00
Bill Currie 262c6a61f5 [qfcc] Add failing test for linker zero/param issue
This tests issue #6
2020-03-28 21:11:42 +09:00
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 8997c81bd1 [qwaq] Implement rectangular region clearing
You'd think ncurses would have this, but I guess it's too
window-oriented.
2020-03-28 09:41:54 +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 1efbb2ab49 [cl_menu] Remove a stale FIXME 2020-03-27 22:12:45 +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 09d3e1b59f [qwaq] Remove extern from function prototypes
Yay.
2020-03-27 18:17:24 +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 b2de2a9f3b [qwaq] Display values for simple defs
Mostly works, but need to sort out clearing the view without clearing
the window (silly curses and its full-line clears)
2020-03-26 21:01:39 +09:00
Bill Currie 8dcb3fefb3 [qwaq] Offset position when forwardning mvaddstr 2020-03-26 20:31: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 adb7b018d9 [qwaq] Improve focus setting
The view is recorded as having focus but is not given focus until the
parent view is actually in focus. This fixes the locals view not having
focus at startup and thus blocking F7.
2020-03-26 18:27:02 +09:00
Bill Currie b2814700b9 [qwaq] Hook up locals view for events
The same debugger method is used because the idea is that all the
window in a group respond to the same commands in general.
2020-03-26 18:25:26 +09:00