Commit Graph

3570 Commits

Author SHA1 Message Date
Bill Currie 4c40928112 Remove what appears to be a redundant check
It was long wrong anyway as it checked past the end of the function's
parameters, which caused a segfault when calling varargs functions with
no formal parameters.
2020-02-19 02:53:38 +09:00
Bill Currie a65d6bce09 Fix a warning that got through
I forgot to compile test in optimized...
2020-02-19 02:43:27 +09:00
Bill Currie bd6dcafdc8 Replace system defines/includes with qfcc's
Right now, it probably works only with modern gcc.
2020-02-19 02:35:09 +09:00
Bill Currie 2d52da9c0d Fix segfault in unlimited params 2020-02-19 02:35:09 +09:00
Bill Currie c61d0b6ff0 Allow unlimited parameters in function declarations
However, definitions are still limited to 8 parameters. This allows
processing of C headers for type information.
2020-02-19 02:35:09 +09:00
Bill Currie ee228504aa Fix self-referenced enum declarations
eg:
typedef enum foo {
    bar = 1,
    baz = bar,
} foo;
2020-02-19 02:35:09 +09:00
Bill Currie 7a399c956b Encode function parameter alignment
The encoding is 3:5 giving 3 bits for alignment (log2) and 5 bits for
size, with alignment in the 3 most significant bits. This keeps the
format backwards compatible as until doubles were added, all types were
aligned to 1 word which gets encoded as 0, and the size is unaffected.
2020-02-16 17:10:43 +09:00
Bill Currie 1bc08c59f6 Add tests for %%
double fails due to qfcc aligning double param locals, but the engine
not doing so.
2020-02-16 17:02:38 +09:00
Bill Currie 1a9510834a Add a missed opcode conversion for %% 2020-02-16 12:10:09 +09:00
Bill Currie 9d2d33fa50 Implement %% (true modulo) support in qfcc
However, it's not quite working yet
2020-02-16 11:57:58 +09:00
Bill Currie 4269c8cb07 Rename the mod instruction to rem
Because % really implements remainder rather than true modulo, and I
plan on adding %% to implement true modulo.
2020-02-16 11:04:30 +09:00
Bill Currie db9996023f Add some tests for double comparison
More testing the engine than the compiler, but hey :)
2020-02-15 23:49:12 +09:00
Bill Currie 14acfad7c4 Fix incorrect placement of far data
All the care in aligning things was undone by not updating the
calculations of the pointers.
2020-02-15 23:49:12 +09:00
Bill Currie 1985b6d4fd Avoid creating a struct temp for ivar struct return
This fixed the uninitialized temp warning in HUD.r. The problem was
caused by the flow analyzer not being able to detect that the struct
temp was being initialized by the move statement due to the address of
the temp being in a pointer temp. While it would be good to use a
constant pointer for the address of the struct temp or improving the
flow analyzer to track actual data, avoiding the temp in the first place
results in nicer code as it removes a move statement.
2020-02-15 23:49:12 +09:00
Bill Currie 9c996df7b4 Add a test case for the uninit temp in HUD.r 2020-02-15 23:49:12 +09:00
Bill Currie 7bfa0f7a92 Allow pragmas to have arguments
It does mean only one pragma per line, but that's not such a big deal.
2020-02-15 23:49:12 +09:00
Bill Currie 91f5023681 Promote bugs to internal errors
Mostly so I can catch them in test cases
2020-02-15 23:49:12 +09:00
Bill Currie 344d429134 Test array initializer double demotions
Turns out array inits are very strict about types (bug?).
2020-02-15 23:49:12 +09:00
Bill Currie 6ce99afa5b Catch double demotion in global initializers
Local initializers are handled by regular assignments
2020-02-15 23:49:12 +09:00
Bill Currie c5ce18591f Catch and warn demotion of double in assignments 2020-02-15 23:49:12 +09:00
Bill Currie 08ca59d0df Add tests for double demotion 2020-02-15 23:49:12 +09:00
Bill Currie 4bf37b274b Ensure double is not in zero or param structs for v6 2020-02-15 23:49:12 +09:00
Bill Currie be30a0eb19 Fix missing alignment init on zero and param types 2020-02-15 23:49:12 +09:00
Bill Currie 3e651b43f8 Handle aliased values when emitting statements
With this, cast address initializers work. I have to wonder if the alias
value short-circuit was legacy from long before the rewrite, as it was
quite trivial to handle in the back-end.
2020-02-15 23:49:12 +09:00
Bill Currie e4eb793fb3 Treat aliased values as constant
One step closer to cast address initializers working.
2020-02-15 23:49:12 +09:00
Bill Currie ce9902baed Don't short-circuit aliased values
Not sure why I thought it was a good idea as it turns out this is why
cast pointer initializers were being lost.
2020-02-15 23:49:12 +09:00
Bill Currie 3257e7145b Add failing global init test too 2020-02-15 23:49:12 +09:00
Bill Currie 4caa875442 Finish up alignment tests and add address cast
It turns out that initializing a local int with a pointer cast doesn't
work.
2020-02-15 23:49:12 +09:00
Bill Currie a4a57b6ffd Implement aligned allocations 2020-02-15 23:49:12 +09:00
Bill Currie 293f10211a Start on alignment test
Currently fails (deliberately, WIP)
2020-02-15 23:49:12 +09:00
Bill Currie 0542daacdf Create more double related tests
Including catching warnings :) (yay -Werror)
2020-02-15 23:49:12 +09:00
Bill Currie 7e09a94469 Fix "casts" between signed and unsigned int 2020-02-15 23:49:12 +09:00
Bill Currie 5d8d805b60 Fix test for single overload functions
All functions are stored in the overload functions table, even those
that are never explicitly overloaded, but only explicitly overloaded
functions (those with @overload) use the type-qualified naming.
2020-02-15 23:49:12 +09:00
Bill Currie 533fb8acc9 Implement double constants 2020-02-15 23:49:12 +09:00
Bill Currie 2cd62fe01b Fix several double-related bug
float is promoted to double through ... for non-v6 code.
PR_Sprintf has custom param access via P_*, messed up doubles.
2020-02-15 23:49:12 +09:00
Bill Currie eb7f825158 Test for full-float % 2020-02-15 23:49:12 +09:00
Bill Currie 8920c59515 Find @override functions even when there's only one 2020-02-15 23:49:12 +09:00
Bill Currie df7c08a010 Add support for doubles to Ruamoko
Only as scalars, I still need to think about what to do for vectors and
quaternions due to param size issues. Also, doubles are not yet
guaranteed to be correctly aligned.
2020-02-15 23:49:12 +09:00
Bill Currie 13b608f40c Don't truncat float % float
This allows full usage, eg, x % pi, but otherwise maintains
compatibility with integer %
2020-02-15 23:49:12 +09:00
Bill Currie 16f8dca72e Align local and far data spaces
I plan on adding doubles, and so it's necessary to ensure that attempts
to align doubles in local or far data spaces remain aligned after final
linking.
2020-02-15 23:49:12 +09:00
Bill Currie 197f856a30 Fix incorrect scalar/quaternion division
It's just not possible.
2020-02-15 23:49:12 +09:00
Bill Currie 9248e8cf01 Update for doxygen 1.8.16 2020-02-11 15:22:42 +09:00
Bill Currie 9d09d65d9a Clean up some export stuff
While it's not there yet, the eventual goal is to support multiple
models in the one blend file, so per-object settings is a requirement.
2019-08-20 16:52:43 +09:00
Bill Currie c14e5623ad Get the mdl frames script property working
Maybe late 2.78+, blender added the ability to use any ID type in
PointerProperty, which is just what I wanted for the frames script.
2019-08-16 22:34:45 +09:00
Bill Currie 839d90981d Clean up a few last things for blender 2.80
Many many thanks to Aleksander Marhall for the initial work.
2019-08-16 22:32:37 +09:00
khreathor 008b5a4d2c Import/Export fixes after some Blender 2.8 API changes 2019-08-16 21:38:29 +09:00
khreathor 11e5f39fdc Fix for the export error when there is no Shape Keys available 2019-08-16 21:38:29 +09:00
khreathor 36da80c0d0 Export proper frame names 2019-08-16 21:38:29 +09:00
khreathor 33d114c09e Set playback/animation range to start from frame 1 2019-08-16 21:38:29 +09:00
khreathor ff5f9f1831 Add "empty" skin during export for models with no materials or texture nodes 2019-08-16 21:38:29 +09:00
khreathor 3913febace MDL properties in object panel are back 2019-08-16 21:38:29 +09:00
khreathor 31fa7a81ef Fix for single skin being marked as skingroup 2019-08-16 21:38:29 +09:00
khreathor 94c3c8c2cb Skingroup image export order based on texture node position (height) in shader editor. Nodes with higher position are exported first. 2019-08-16 21:38:29 +09:00
khreathor 4f29f57e77 Proper node positioning after import 2019-08-16 21:38:29 +09:00
khreathor a13c382969 Skingroup images import order fix 2019-08-16 21:38:29 +09:00
khreathor 4d1f05186b Skingroups export added 2019-08-16 21:38:29 +09:00
khreathor 17e76149a1 Adjust playback range on import, to fit mdl's animation length 2019-08-16 21:38:29 +09:00
khreathor 66fe862a87 Import skingroups as separate materials with skins as textures 2019-08-16 21:38:29 +09:00
khreathor ae86790e6c Initial Blender 2.8 changes - it works, now it's time for improvements 2019-08-16 21:38:29 +09:00
khreathor 8112c4e8b6 Moved MDL settings from Object tab to export options/presets 2019-08-16 21:38:29 +09:00
khreathor 90a707f7f9 Export animation range selected with start/end playback range in Timeline Editor 2019-08-16 21:38:29 +09:00
Bill Currie c3fa78ef4d Include test for 2d vector expressions 2019-07-06 14:49:28 +09:00
Bill Currie 8caf2eb584 Mark some new functions as pure 2019-06-27 21:37:48 +09:00
Bill Currie a5ee58cebb Support 2d vector expressions
[x, y] expands to [x, y, 0] (for now, might add a 2d vector type).
2019-06-18 11:54:45 +09:00
Bill Currie 83fac13a0c Fix debug line numbers for vector expressions 2019-06-18 11:53:58 +09:00
Bill Currie b37c331e76 Catch taking size of null type
This should help catch similar errors in the future.
2019-06-18 10:39:17 +09:00
Bill Currie 0f1f477e64 Set up temp aliases correctly
Fixes vector expressions as sub-expresses. I really don't know why I did
the temp alias setup that way.
2019-06-18 10:38:19 +09:00
Bill Currie fc50376297 Fix a minor error check mistake 2019-06-18 08:54:18 +09:00
Bill Currie fe73547f43 Update alias type sameness check
This one seems to be fairly robust. Fixes alias being used to cast
pointers (maybe a better way, but this works for now).
2019-06-18 08:53:05 +09:00
Bill Currie f7825fe7cf Print types properly in pointer value expressions 2019-06-18 00:22:24 +09:00
Bill Currie b996fb7aa4 Make operand->type actual type instead of low-level
And clean up the resulting mess. This fixes struct copy, but uncovers
another bug :/
2019-06-17 23:38:34 +09:00
Bill Currie e0c8285f07 Extend nested struct test to cover struct copy
Fails :P
2019-06-17 22:57:40 +09:00
Bill Currie dd52b7fea1 Merge aliased alias expressions
This comes up when accessing struct fields nested in another struct.
Fixes the nested struct fields test.
2019-06-17 22:48:42 +09:00
Bill Currie e9c24dbf1c Test case for accessing nested struct fields
Currently fails.
2019-06-17 22:47:44 +09:00
Bill Currie ec128ffeee Leave a FIXME for daglabel_t.live 2019-06-16 19:24:19 +09:00
Bill Currie d6d3027411 Mark the correct operand as live
This fixes vecexpr (and possibly other cases).
2019-06-16 19:21:02 +09:00
Bill Currie 6e21c3ae2e Treat func statements similarly to flow statements
func statements need their operands marked live like flow statements do
because usage is more indirect.
2019-06-16 19:20:21 +09:00
Bill Currie db4a7a139e Use the alias code when making vars live
Not sure the live forcing flag is needed anymore (need to test).
2019-06-16 19:17:45 +09:00
Bill Currie 2977c145d0 Clean up dag live alias code a little
Mainly, this makes it possible to reuse the alias code.
2019-06-16 19:17:01 +09:00
Bill Currie 82b334e919 Number dot dumps to help identify order 2019-06-16 19:12:18 +09:00
Bill Currie c40f4194e9 Use tempop_visit_all for flow and dags
Fixes t3 of vecexpr, but t2 is broken (lost first assignment).
2019-06-16 16:56:39 +09:00
Bill Currie 3c4903245a Fix some curly space 2019-06-16 16:55:54 +09:00
Bill Currie bc271d8a02 Add tempop_visit_all
Works the same as def_visit_all, but for temp operands.
2019-06-16 16:52:49 +09:00
Bill Currie fa69aeef0f Improve handling of temp aliases
This makes all tests pass when not optimizing. More work needs to be
done in dags.
2019-06-12 00:37:02 +09:00
Bill Currie b18a744288 Use offset alias expressions
They are not quite working yet as the operand generator does not use the
offset yet.
2019-06-10 23:55:16 +09:00
Bill Currie cc27949a34 Ensure pointer values always have a type
The dags generator was creating a pointer value with no type which
caused print_statement to segfault.
2019-06-10 23:52:39 +09:00
Bill Currie ee1f5f9478 Add support for binary alias expressions
Doesn't quite work yet.
2019-06-10 23:48:58 +09:00
Bill Currie 913b9f52e0 Add an offset alias expression
This should make dealing with def elements (vector etc) easier.
2019-06-10 18:13:28 +09:00
Bill Currie efdfc7436f Move ev_types into types.[ch]
No wonder I couldn't find it the other day...
2019-06-10 18:04:25 +09:00
Bill Currie 08ab42fc15 Handle vector expressions as sub-expressions
Now my little game builds again :)
2019-06-10 15:50:35 +09:00
Bill Currie 49ed4310fd Fix assigning int to enum or enum to int
Or float, for v6 progs.
2019-06-10 08:46:40 +09:00
Bill Currie 83fb588727 Support vector/quaternion division by float
Implemented via v*(1/f) or q*(1/f) to give CSE a chance to optimize the
division if necessary as otherwise the engine would have to divide every
time.
2019-06-10 08:44:36 +09:00
Bill Currie 7dc1a0640a Delay creating actual enum symbols
In order to keep enumerator type and enum type the same, the values need
to have their type set after the enum type is finalized, and then the
appropriate symbols created in the parent scope. This fixes the infinite
recursion when assigning an enum value to its own type.
2019-06-10 07:44:23 +09:00
Bill Currie f81484a068 Test compiling enums
It turns out the enumerator type and enum type wind up with different
instances of the same type (due to the way type chaining works). This
results in infinite recursion in assign_expr and check_types_compatible.
2019-06-10 07:17:41 +09:00
Bill Currie ef4ad52239 Make binary_expr fold constants
This is where constant folding should have happened all along. While
unary_expr should fold constants too, it seems to already try to do so
and it's a bit much of a mess to clean up right now.
2019-06-10 00:36:13 +09:00
Bill Currie bf0543f7fb Be paranoid about temp var sizes
Prevents array index errors.
2019-06-10 00:19:48 +09:00
Bill Currie 28a2b96800 Implement automatic array sizing from initializer 2019-06-09 23:11:38 +09:00
Bill Currie 00f12263ca Fix casting arrays to pointers 2019-06-09 22:55:38 +09:00
Bill Currie 3196bcc851 Allow fold_constants to handle some math identities
Such as x*0 -> 0, x*1 -> x, x+0 ->x, etc.
2019-06-09 22:34:23 +09:00
Bill Currie c98d1ff08c Document some problems with nil
While he's a pretty cool character in HZD, he seems to have some
identity problems when in a compiler.
2019-06-09 22:29:51 +09:00
Bill Currie 439cd15620 Do type promotion for short
fold_constants used to do this when it was overly aggressive. Fixes the
ICE when accessing an array in a struct via a pointer.
2019-06-09 22:27:53 +09:00
Bill Currie 227ac46ffe Clean up array expression processing
And make sure constants are folded since fold_constants is no longer
recursive.
2019-06-09 22:25:55 +09:00
Bill Currie f70801fa52 Add a test for accessing an array in a struct
That's accessed via a pointer. Whee. However, at this stage, the problem
is really a promotion issue for short -> integer.
2019-06-09 21:44:58 +09:00
Bill Currie e46a44d9c6 Update TODO 2019-06-09 21:37:46 +09:00
Bill Currie 6253623e9b Remove some weird dereference code
It appears to have been an attempt at optimizing dereferences, but it
instead just utterly mangled them.
2019-06-09 21:37:46 +09:00
Bill Currie f49303e774 Emit code for address expressions
It helps if the necessary code is actually emitted in the first place.
2019-06-09 21:37:46 +09:00
Bill Currie 8cef85e5de Cast scalar types when necessary on assignment
This fixes type promotion errors that broke some tests.
2019-06-09 20:12:50 +09:00
Bill Currie e849c2d1ce Mark block expr result as rvalue when used as one
At least for return. There may be other cases that need it, but this
fixes comma-expr.r (minus int->float promotion issues).
2019-06-09 19:29:21 +09:00
Bill Currie d9c9686288 Make initialized globals non-constant
This is for modern code. Traditional code still treats initialized
globals as constant and nosave. This will make a bit of a mess of
modern code that expects traditional behavior.
2019-06-09 19:23:23 +09:00
Bill Currie b7b6a89b91 Simplify fold_constants
While this does break automatic type promotion, it does stop
fold_constants recursing through complex expressions: only the top level
expression needs to be folded, and then only if both sides are actually
constant.
2019-06-09 19:20:35 +09:00
Bill Currie 2ee36e8b99 Rename qfot_type_t.ty to meta
When I did up a ruamoko implementation of a type encoding dumper, I
named the field meta, which feels much better than ty.
2019-06-09 18:10:07 +09:00
Bill Currie f093516962 Move qfo type encoding structs
This makes them available to the gamecode VM, and thus the debugger.
2019-06-09 18:07:58 +09:00
Bill Currie 7fce68649a Implement comma expressions
Doesn't quite work (attempt to suppress warning for return a = 3, 5;
failed).
2019-06-09 16:56:20 +09:00
Bill Currie 689d1ad3ec Remove some debug prints 2019-06-09 16:45:01 +09:00
Bill Currie 33c2eb430f Stop bison complaining about %expect
And make sure warnings get fixed.
2019-06-09 16:19:27 +09:00
Bill Currie 1db600548e Fix for decl test scope issue 2019-06-09 13:55:07 +09:00
Bill Currie ec89149b29 Build for loop decl inits correctly
The multiple expressions are chained together and evaluate in left to
right order.
2019-06-09 13:54:03 +09:00
Bill Currie d29ea55826 Add a test for for loop declarations
I think the compiler segfaulting indicates a test failure.
2019-06-09 13:02:36 +09:00
Bill Currie 625e767684 Update qf dependency stuff for recent automake
Not sure just what version of automake broke things, but I do remember
having a bad time getting the dependencies to work in the first place.
At least now they should be more reliable (until automake changes
things).
2019-06-09 13:00:55 +09:00
Bill Currie 5bd3c8c985 Allow variable declarations in for loops
Matches C, C++ and C#
2019-06-08 21:52:17 +09:00
Bill Currie be4c3a82a2 Detect redefinitions of structs and unions
While the redefinition was being detected, it was misreported as the tag
being wrong, and on the wrong line, too.
2019-06-08 19:25:25 +09:00
Bill Currie f2102187b9 Clean up emit_protocol_list
Now it uses emit_structure, which will make it easier should things go
wrong.
2019-06-08 19:23:49 +09:00
Bill Currie 6acbdcb3e5 Correct a typo 2019-06-08 19:23:10 +09:00
Bill Currie df0316bb13 Clean up some comment FIXMEs 2019-06-08 19:22:29 +09:00
Bill Currie e217bdd55f Assign vector expressions to a temp for return
Rather than direct to .return, allowing return of vector expressions
with function calls without trashing the vector.
2019-06-08 13:36:03 +09:00
Bill Currie ebab6574b9 Allow taking the address of a temporary variable 2019-06-08 13:35:47 +09:00
Bill Currie e27da9c7db Avoid folding constants in assign_expr
This prevents fold_constants from complaining about attempts to take
the address of a vector.
2019-06-08 13:31:30 +09:00
Bill Currie 398e1cf83a Use output file as base for dot files
Ensures the output goes not go into the source directory when using a
separate build tree.
2019-06-08 13:30:06 +09:00
Bill Currie 3327127e36 Fix a typo in a comment 2019-06-08 13:28:29 +09:00
Bill Currie 4ef4a7e955 Start work on simple names in symbol tables
I don't remember what the goal was (stopped working on it eight months
ago), but some possibilities include:
 - better handling of nil (have trouble with assigning into struts)
 - automatic forward declarations ala C# and jai (I was watching vids
   about jai at the time)
 - something for pascal
 - simply that the default symbol type should not be var (in which case,
   goal accomplished)
2019-06-06 07:01:44 +09:00
Bill Currie 7e31704ebe Be more informative for pass by value size errors 2019-06-06 06:46:38 +09:00
Bill Currie a5da8da1dc Be more informative for symbol type internal errors 2019-06-06 06:45:48 +09:00
Bill Currie d00a2ef82d Convert constant vector expressions in binary expressions
Fixes not being able to compare with eg [1, 2, 3]
2019-06-06 06:44:19 +09:00
Bill Currie 319ecfbbfa Create a usable dot for vector expressions
It leaves a lot to be desired, but it beats "FIXME".
2019-06-06 06:42:31 +09:00
Bill Currie 607ec3124e More dead code removal.
I have no idea why this hung around. It appears to be old array/struct
initialization.
2018-10-15 22:12:40 +09:00
Bill Currie ff5c1cd4c2 Clean up redundant type parameter to initialize_def. 2018-10-15 22:11:20 +09:00
Bill Currie 1746ce3af5 Make int type name reflect its keyword.
Makes qc error messages make more sense.
2018-10-15 20:54:05 +09:00
Bill Currie 302934a1e4 Remove some dead code. 2018-10-15 20:52:46 +09:00
Bill Currie 2a2754e581 More ways to break qfcc :/ 2018-10-15 19:48:19 +09:00
Bill Currie 6c53be928b Support returning vector expressions.
Currently fails due to a scheduling problem when the vector expression
contains functions.
2018-10-13 23:32:53 +09:00
Bill Currie aaab18c9a7 Nuke a dead field.
It looks like ex_temp_t.expr was never really used, and I have no idea
what I had intended (not surprising after ~17 years).
2018-10-13 12:07:50 +09:00
Bill Currie 2f2edae43b Make error, warning and notice give compiler file/line too.
But only when verbosity > 1 (-vv).
2018-10-13 09:31:00 +09:00
Bill Currie 4828934e50 Fix a equality check typo.
Fixes bad code generation when assigning to vector.x in a function with no
parameters and the vector is the first local var.
2018-10-12 23:39:05 +09:00
Bill Currie 78e0a8dc52 Support assigning non-constant vector expressions. 2018-10-12 22:05:17 +09:00
Bill Currie e03dfa29b4 Clean up the module .ctor construction a little. 2018-10-12 21:09:36 +09:00
Bill Currie f56d25cda6 Don't double print messages. 2018-10-12 20:46:45 +09:00
Bill Currie 668896aa82 More diagnostic improvements. 2018-10-12 16:01:11 +09:00
Bill Currie 71b3d30aa1 Make the ice a little more informative. 2018-10-12 14:51:39 +09:00
Bill Currie f58c2fef5a Switch QF's quaterions from wxyz to xyzw.
After messing with SIMD stuff for a little, I think I now understand why
the industry went with xyzw instead of the mathematical wxyz. Anyway, this
will make for less pain in the future (assuming I got everything).
2018-10-12 14:33:55 +09:00
Bill Currie b7aa5bb8fe Fix an oops messing up edict size. 2018-10-12 14:33:26 +09:00
Bill Currie f8606ebab8 Fix a object file segfault when spaces have no data.
ie, don't attempt to copy memory from a null pointer (just copy the null
pointer).
2018-10-12 14:00:34 +09:00
Bill Currie 3bd9f96b07 Make internal error messages a little more helpful.
They now include the file and line of the compiler as well.
2018-10-12 13:57:59 +09:00
Bill Currie 3656cb966c Fix some bison deprecation warnings. 2018-10-12 09:32:49 +09:00
Bill Currie 3bc664811e Fix lost error count tracking. 2018-10-11 22:03:14 +09:00
Bill Currie a096babb1f Duplicate memory when creating a qfo from progs.
Fixes some double-free bugs when linking after compiling.
2018-10-11 21:37:01 +09:00
Bill Currie f673ab9c3d Fix misreporting of failed progs load. 2018-10-11 13:39:48 +09:00
Bill Currie 82809eb856 Simplify the call to PR_LoadProgsFile.
I've decided that setting pr.max_edicts and pr.zone_size as part of the
local progs initialization rather than in PR_LoadProgsFile makes more
sense. For one, it is unlikely for the limits to change every time progs is
reloaded. Also, they seem to be a property of the VM rather than the progs.
However, there is nothing stopping the caller from updating max_edicts and
zone_size every call.
2018-10-11 10:06:48 +09:00
Bill Currie 673b45be05 Add diagnostic hooks. 2018-10-09 12:46:13 +09:00
Bill Currie d95c01be1a More defspace tests. 2018-10-09 12:45:26 +09:00
Bill Currie 34bcf7faab Do a pure/const/noreturn/format attribute pass.
I always wanted these, but as gcc now provides warnings for functions that
could do with such attributes, finding all the functions is much easier.
2018-10-09 12:42:21 +09:00
Bill Currie 05fd2d8cdd Start work on a unit test for defspace. 2018-09-09 22:37:09 +09:00
Bill Currie 3a4667318c Fix the qfcc test autodependencies. 2018-09-09 22:36:20 +09:00
Bill Currie d1cb15664f Fix some spelling issues in a comment. 2018-09-09 22:34:24 +09:00
Bill Currie 71569b45c9 Pre-format diagnostic messages.
This will make it easier to hook diagnostics enabling unit tests.
2018-09-09 18:09:32 +09:00
Bill Currie 113e0d82ba Fix a signed comparison error.
Not sure how this fix got lost.
2018-09-09 16:48:19 +09:00
Bill Currie aebd9288cd Force thread count to 1 when pthreads is unavailable.
Don't want the thread count being misreported.
2018-09-09 13:41:22 +09:00
Bill Currie fa1514798b Print the number of threads used by qfvis. 2018-09-09 13:41:00 +09:00
Bill Currie 06ab36de3d Slight cleanup of winding allocation.
It seems gcc doesn't care if the & is present when calculating field
offsets, but it not being there bothered me very much and might as well use
our "standard" macro anyway.
2018-09-09 13:38:32 +09:00
Bill Currie 59e85b7d5e Fix a pile of dead assignments.
Some were actual bugs!
2018-09-08 22:23:57 +09:00
Bill Currie 59b04dbcca Make many qfo int fields unsigned.
I don't remember why I thought signed was a good idea, but unsigned does
make more sense for most fields.
2018-09-08 19:45:19 +09:00
Bill Currie f75ff2d269 Fix some null argument issues. 2018-09-07 22:30:44 +09:00
Bill Currie 8f028b8a0d Fix some double frees. 2018-09-07 20:03:19 +09:00
Bill Currie 8fd5be0ee0 Fix a pile of sizeof goofs.
While scan-build wasn't what I was looking for, it has proven useful
anyway: many of the sizeof errors were just noise, but a few were actual
bugs (allocating too much or too little memory).
2018-09-07 20:00:57 +09:00
Bill Currie b37b0180cb Actually do a test for triangle.r.
If the kahan triangle area method breaks, I did something wrong with qfcc's
handling of parentheses (ie, floating point math is not truly associative).
2018-08-23 20:52:32 +09:00
Bill Currie 1b9149ef31 Fix an argument passing error in test-harness.
It failed to pass the last argument to the ruamoko program being run.
2018-08-23 20:22:29 +09:00
Bill Currie 2fcda44ab0 Kill dag leaf nodes on assignment.
Fixes the failing swap test caused by a's original value being used (via t)
after being written.
2018-08-23 20:07:22 +09:00
Bill Currie cb366dd825 Better flow dot dump "scripting".
Not sure I want to keep the statements in the live dump, but the system
is more flexible now.
2018-08-23 20:07:11 +09:00
Bill Currie cdbdf3f0eb Make print_operand global. 2018-08-23 20:05:16 +09:00
Bill Currie 8b8b42bde2 Fix a typo in a comment. 2018-08-23 20:04:51 +09:00
Bill Currie f250065003 Add tests for swapping vars and triangle area.
Triangle area was meant just to check Kahan's equation, but it found a
problem with swapping vars. swap.r currently fails.
2018-08-21 16:27:22 +09:00
Bill Currie 0f279cd3f0 Add a comment about fake statement numbers.
I had forgotten how they worked (not surprising after 6 years).
2018-08-21 15:57:51 +09:00
Bill Currie 1b84ea747c Dump statements during flow analysis. 2018-08-21 15:56:39 +09:00
Bill Currie 5ba13d759b Fix a FIXME.
Set of everything got added shortly after that FIXME was added, but I
forgot to fix it.
2018-08-21 15:56:03 +09:00
Bill Currie fbdf560a7a Rename print_extra_live to print_flow_vars. 2018-08-21 15:55:11 +09:00
Bill Currie 5dbb7b6d4d Handle all modelgen commands.
Just in case someone ever adds models.qc to progs.src.
2018-08-20 00:11:02 +09:00
Bill Currie 027e76b4c9 Add a doc block to parse_cpp_line.
It took me too long to figure it out :P
2018-08-20 00:09:20 +09:00
Bill Currie 4f58429137 Fix an unhealthy pile of gcc 8 warnings.
While some of the warnings were merely annoying, some where actual bugs or
unearthed bugs in related code.
2018-08-20 00:05:00 +09:00
Bill Currie 81202d7b29 Add a shutdown builtin to qwaq. 2018-08-19 19:44:45 +09:00
Bill Currie b795beb520 Add support for \? to qc strings.
And fix up the man page a bit.
2018-08-19 19:31:52 +09:00
Bill Currie 0de0eb2fc7 Fix a bunch of bit-rot. 2018-06-08 13:21:30 +09:00
Bill Currie f522e58d53 Fix some blender warnings. 2018-06-08 12:45:57 +09:00
Bill Currie 2329fb1885 Fix some warnings and bitrot. 2016-10-25 00:10:30 +09:00
Bill Currie 932647bad3 Fix a segfault with switch on an undefined symbol.
Forgot to check if the test expression was not an error.
2016-01-10 13:41:49 +09:00
Bill Currie bf40f0126e Convert vector expressions when passing parameters.
Calling a function with [vector stuff] caused an ICE.
2016-01-08 21:16:37 +09:00
Bill Currie 1061256c4f Add a missing expression type to dot_expr. 2016-01-08 21:15:47 +09:00
Bill Currie 431074d58f Update label destination when moving labels.
This fixes a segfault when optimizing the empty-body test. The label was
getting moved, but the statement block to which it pointed was not updated
and thus it pointed to dead data.
2016-01-07 21:24:29 +09:00
Bill Currie d54ee6c8c3 Do not promote debug messages to warnings.
I think I copied the notice code for debug and forgot to edit the
promotion. Oops.
2016-01-07 20:08:07 +09:00
Bill Currie 6e65de251c Put qwaq's epoch back to 0.
4Gs causes a few problems at this stage. I really need to look into putting
long and double into qc.
2016-01-04 20:42:57 +09:00
Bill Currie 735fcf68d5 Clean up usage of va_copy.
AC_TYPE_VA_LIST is no longer necessary, and the code is easier to read.
2016-01-03 21:16:23 +09:00
Bill Currie a54f3d9035 Shutdown some subsystems on exit.
This fixes the problem with X keyboard repeat not being restored.
2016-01-03 17:39:03 +09:00