Bill Currie
5f5060cbf0
move the users and used setting code from emit_statement to
...
PR_AddStatementRef. This removes essentially duplicate code and 3 ifs :)
2001-10-31 18:40:02 +00:00
Bill Currie
b499d7e1e8
I've decided that shuffling the `sections' like that doesn't really gain
...
anything, so I'm reverting that change.
2001-10-31 17:55:35 +00:00
Bill Currie
3b2d2a1c88
re-arrange the order of the `sections' of a .dat file to match the header
...
order. this also `happens' to put the strings section just before the globals
section (both at the end) which will make pointer bounds checking easier.
2001-10-30 19:41:27 +00:00
Bill Currie
09f19fd9c9
remove some redundant data
2001-10-28 04:42:44 +00:00
Bill Currie
3f45a8305c
*taniwha inflicts more carnage on extern
2001-10-28 04:29:30 +00:00
Jeff Teunissen
b07d60f6d6
add getopt.c and getopt1.c to the makefile. There is preprocessor
...
stuff in these files to detect when they need to be compiled, so they
don't need anything in configure.
2001-10-26 23:53:36 +00:00
Jeff Teunissen
5502558bb9
qfcc: Argument passing for cpp, shuffling the verbosity levels around a
...
bit.
2001-10-26 22:07:35 +00:00
Bill Currie
5eba9f155e
clean up some duplicate symbols
2001-10-26 17:49:23 +00:00
Bill Currie
d8e6bf9cb6
fix the verbosity levels to what they were
...
--no-cpp is now cpp or no-cpp in code
add cpp to code_options_t
2001-10-26 16:04:38 +00:00
Jeff Teunissen
c5d0d45edf
qfcc: Remove some debug info from taniwha's last commit -- I thought
...
*I*'d done that! :)
2001-10-26 08:55:24 +00:00
Jeff Teunissen
46c4174024
qfcc: forgot a newline in -V output
2001-10-26 08:17:04 +00:00
Jeff Teunissen
89c7e0df1a
qfcc: getopt support. Yes, it exists, and it works, and it's fun! :)
2001-10-26 08:14:05 +00:00
Bill Currie
5cbd50d835
count the number of digits needed rather than relying on -lm (now it's not
...
needed:)
2001-10-26 06:53:02 +00:00
Jeff Teunissen
581411e9e2
qfcc: Preparation for getopt.
2001-10-26 06:43:56 +00:00
Timothy C. McGrath
04e4da654a
Changes taniwha did to make qfcc work with statically compiled libs.
...
This is what was bugging me all night long with qfcc ><;;
Tim McGrath (Misty-chan)
2001-10-26 02:32:40 +00:00
Bill Currie
70bedc149f
allow returning NIL
2001-10-25 21:15:48 +00:00
Bill Currie
bc44f950af
enable passing NIL into a function
2001-10-25 20:51:56 +00:00
Bill Currie
f8a41cb1bc
completely nuke the concept of "priority" from opcodes and use get_op_string
...
in emit_sub_expr instead of a redundant switch.
2001-10-25 17:48:35 +00:00
Bill Currie
f029687ff0
switch statement. could do with lots of improvements, but this should be a
...
good start.
2001-10-25 06:41:52 +00:00
Bill Currie
09405469f6
throw PR_BeginCompilation's arguments out the nearest airlock
2001-10-24 22:53:27 +00:00
Adam Olsen
3bba5398ba
- audit malloc usage. now everything checks the return value :)
2001-10-24 22:50:06 +00:00
Bill Currie
133ce647fb
implement break and continue. only loops covered for now, but that's because
...
switch isn't implemented yet
2001-10-24 18:57:29 +00:00
Bill Currie
743bc5178b
fix uninitialized variable detection for nested scopes
2001-10-24 15:21:21 +00:00
Bill Currie
6553c81a41
proper scoping for QC ala C.
2001-10-24 06:39:49 +00:00
Bill Currie
2ef8adea09
handle more conditional code and check for unitied vars in the test of if ()
...
etc
2001-10-19 05:16:24 +00:00
Bill Currie
16c334b6b9
uninit var detection seems to work for if and if else
2001-10-19 03:22:04 +00:00
Bill Currie
3572a6be28
change def_list from def_t ** to hashtab_t * and comment out some debug code
2001-10-19 00:45:56 +00:00
Bill Currie
237d238a65
beginnings of "if" uninitialized variable support. doesn't make any
...
difference yet
2001-10-18 23:06:39 +00:00
Bill Currie
5ca785e7e8
uninitialized variable detection. not perfect (lots of false negatives, but
...
fewer than before;) but prozac isn't giving any false positives.
2001-10-18 20:05:26 +00:00
Bill Currie
96e4e1a232
the beginning of unititialized var detection. first victim: functions.
...
--undefined-function-warning is now --no-undefined-function-warning and
the default is to detect called but undefined functions.
2001-10-18 17:41:22 +00:00
Bill Currie
952f029e6d
rename def_t.initialized to def_t.constant
2001-10-18 17:15:05 +00:00
Bill Currie
85834ab8c3
handle a couple of missed ex_nil cases
2001-10-17 18:36:19 +00:00
Bill Currie
79ac85b54f
type checking now works much better and there is now a NIL builtin constant
...
which can be assigned (/only/) to anything.
2001-10-17 07:45:37 +00:00
Bill Currie
2d068c0745
massive windows.h and WIN32 cleanup.
2001-10-16 21:40:45 +00:00
Bill Currie
c8e1e7942a
correct type error checking for vectors vs floats
2001-10-12 03:58:22 +00:00
Bill Currie
356492f683
don't convert float test epxressions for --id and fix a typo in an error
...
message for !expr
2001-10-06 04:48:52 +00:00
Bill Currie
67635e9dd0
fix a d'oh in the param/return type checking
2001-10-02 19:03:28 +00:00
Bill Currie
dcb51dc586
expr.h:
...
get_type and extract_type prototypes and add extern for type_names
emit.c:
use extract_type instead of get_type
expr.c:
get_type now returns the type pointer rather than the qc type enum.
extract_type uses get_type to return the qc type enum.
make type_names global
use get_type instead of ex_expr/ex_def to cover more cases
clean up function call/return processing as a result of get_type
pr_opcode.c:
use opcode_priority_type_table_ab when var_c is null and a minor
cleanup in PR_Opcode_Find
2001-10-02 18:55:52 +00:00
Bill Currie
7407e4f1b7
and some more
2001-09-28 07:09:38 +00:00
Bill Currie
c74fc1c0df
make the unused var warning like gcc's
2001-09-24 17:51:15 +00:00
Bill Currie
789a11d2d8
don't print the file or line number for "warnings treated as errors"
2001-09-23 04:08:28 +00:00
Bill Currie
2054ec016a
fix a slew of false positives with unused var checking
2001-09-23 04:08:03 +00:00
Bill Currie
7aec6e253a
unused local variable detection
2001-09-22 23:41:47 +00:00
Bill Currie
9f715ae9f8
more small old-parser cleanups
2001-09-15 20:31:17 +00:00
Bill Currie
d7675ada7a
move the particle count multiplication out of the renderer and into the clien
...
(for blood and gunshot, anyway).
2001-09-06 05:41:15 +00:00
Bill Currie
805c1bd242
foo (snafu, bar (baz)) no longer uses a temp for bar's return value
2001-08-24 23:22:02 +00:00
Bill Currie
f16886b7f1
missed a need to increment the users of the temp for chained functions
2001-08-24 22:29:06 +00:00
Bill Currie
cee850e499
remove debug
2001-08-24 22:03:50 +00:00
Bill Currie
8166ee7bfb
fix a whitespace snafu (gee, vim can be a pain somethings)
2001-08-24 21:57:07 +00:00
Bill Currie
ea451ab02d
Remove unnecessary temps from function return values. This has one
...
*/CRITICAL/* implication: DO NOT /EVER/ RELY ON EVALUATION ORDER. This
isn't /really/ that bad: evaluation order will be consistent for similar
expressions, but for (eg) foo() + bar()*2, bar will be called first.
2001-08-24 21:47:52 +00:00
Bill Currie
08f73bed78
better code generation for foo(bar(baz)). foo(snafu,bar(baz)) isn't optimal
...
yet, but the code is at least correct
2001-08-24 21:14:04 +00:00
Bill Currie
eeec89e6ba
don't put function args in temps when not needed. still need to take care
...
of the return value, but that can possibly be taken care of in an optimiser
pass.
2001-08-24 05:40:48 +00:00
Bill Currie
0eda635483
fix temp reference counting on function call args
2001-08-22 23:21:47 +00:00
Bill Currie
4c48851096
fix a buffer overflow in new_label_expr
...
use reference counting for temp defs and call PR_FreeTempDefs at the end
of emit_sub_expr as well as emit_expr.
fix a (relatively harmless) bug in type processesing of foo.bar =
2001-08-22 21:55:01 +00:00
Bill Currie
a32384f16c
report the name of the function using the most locals
2001-08-21 18:23:21 +00:00
Bill Currie
8d29efe552
remove a debug print
2001-08-21 17:22:55 +00:00
Bill Currie
2af74aedca
fix a segfault due to type mangling for ... functions
2001-08-20 18:23:47 +00:00
Bill Currie
cf4ca286f0
implement pre and post increment operators (++ and --)
2001-08-20 06:22:28 +00:00
Bill Currie
cd59628199
move the chained funcion support out of emit_function_expr into funciton_expr
2001-08-20 04:56:00 +00:00
Bill Currie
9ee3450265
extend the hash api to more easily support general cases
2001-08-16 02:51:53 +00:00
Bill Currie
d55199bece
re-arrange the types of store and storep so things make a little more sense
2001-08-13 23:00:17 +00:00
Bill Currie
c103adc17d
clean up the code generated for a = b ? c : d
2001-08-12 02:38:12 +00:00
Bill Currie
79ce6c56ca
fix assignops with entity fields by cloning e1 rather than just re-using it
2001-08-11 22:02:59 +00:00
Bill Currie
248de6858d
hopefully take care of freebsd
2001-08-11 21:46:02 +00:00
Bill Currie
c2d3d8f3ab
temp def expressions and ?:
...
seems to work :)
2001-08-11 21:15:24 +00:00
Bill Currie
a8e858f77d
fix a bug where every 2nd(?) arg was being skipped when setting up a function
...
call
2001-08-10 21:31:48 +00:00
Adam Olsen
caeb31e6ca
start of the support for chained function calls. Actually, they
...
should work fine now, there's just some extra temp vars we want to
remove before we can consider it "done" :)
2001-08-10 20:35:42 +00:00
Bill Currie
b44fd6ab91
move a var
2001-08-10 18:42:13 +00:00
Bill Currie
4388bf0519
good bye, old parser
2001-08-10 18:35:55 +00:00
Bill Currie
9e46265046
fix a silly error causing integer constants to not be re-used
2001-08-10 17:41:08 +00:00
Bill Currie
a33c834a39
move SHL and SHR down in expr
2001-08-10 17:00:53 +00:00
Adam Olsen
6414897dae
got a few new operators for qc :)
...
<< >> % which all act like their C counterparts
+= -= *= /= &= ^= |= <<= >>= %= which just expand into the obvious,
also like the C versions.
2001-08-10 16:17:00 +00:00
Bill Currie
27ccfa67c5
fix the efficiency of unary expressions as args to a function
2001-08-09 17:05:30 +00:00
Bill Currie
081d8f3c47
^ and ~ operators for qc (^ from Rhamphoryncus) and clean up the punctuation
...
line in qc-lex.l (why didn't I think to do that in the first place?!?)
2001-08-09 16:34:46 +00:00
Bill Currie
b341529fce
more --id support
2001-08-07 16:50:22 +00:00
Adam Olsen
c218ede288
Add support for checkfunction, which is a builtin that searches for
...
another builtin by name, and returns it.
Soon I'll change all our new builtins to by allocated dynamically, as
well as changing the number checkfunction uses, and happily break
everything that uses them :D
2001-08-04 09:11:50 +00:00
Bill Currie
1e1cb06a1f
disable integers for --id. probably not thorough enough yet :/
2001-08-03 07:47:15 +00:00
Bill Currie
d89cd91e4b
make the expressions in for (a;b;c) optional
2001-08-01 06:29:09 +00:00
Bill Currie
bfb8eff2f0
signed_const isn't needed any more
2001-07-27 21:01:01 +00:00
Bill Currie
ecc71c4a60
local var = expr; now works (globals must still be consants)
2001-07-27 20:55:14 +00:00
Bill Currie
28b1598e7e
break the emit_* functions out of expr.c into emit.c
2001-07-26 05:15:34 +00:00
Bill Currie
7718ca4c96
various little cleanups
2001-07-26 05:08:27 +00:00
Bill Currie
d44f60f17c
drasticly simplify emit_assign_expr now that I have a much better
...
understanding of when an explicit assigment is needed. seems to work for
everything I throw at it.
Also, fix ! unary ops (caused by the - unary op fix:/)
2001-07-25 21:47:05 +00:00
Bill Currie
0c2cd8633c
fix -expr handling. generates sucky code atm, but at least it's generating
...
code now:P
2001-07-25 18:36:36 +00:00
Bill Currie
620063628c
typecheck values for [frame, think] on thost functions and fix some misplaced
...
immediate defs
2001-07-24 23:53:35 +00:00
Bill Currie
9ad075b02e
make if/while/for use test_expr, make test_expr fix the new exp line/file,
...
fix some string const issues
2001-07-24 22:30:31 +00:00
Bill Currie
576123060a
warn on passing integer constants into ... functions. Again, this will need
...
an option later
2001-07-24 20:43:18 +00:00
Bill Currie
d9cde786b3
use ev_type_count instead of ev_void for bad types so things like void
...
functions being used in expressions don't cause ICEs
2001-07-24 19:51:44 +00:00
Bill Currie
6d1671950a
expr.c:
...
warn for int const / int const. this will probably want an option for newer
games
qfcc.c:
clean up temp files when errors have occured
2001-07-24 04:45:53 +00:00
Bill Currie
a47a4d8038
make print_expr's output readable by mere mortals
2001-07-23 06:15:33 +00:00
Bill Currie
d2c266775c
fix a seg on return type mismatch
2001-07-23 05:46:00 +00:00
Bill Currie
4b744b6be5
fix numberous integer <-> float errors
...
type check function args in the correct order
2001-07-23 05:31:49 +00:00
Bill Currie
b8874cab1c
function return checking
2001-07-23 02:27:46 +00:00
Bill Currie
50fadb6866
function arg type checking with int->float /constant/ cooecion.
2001-07-23 01:56:49 +00:00
Bill Currie
c248372e20
Initial integer type support. qfcc /is/ partially broken when it comes to
...
integer constants and float function args/return values.
pr_comp.h:
o add the integer opcodes to pr_opcode_e
pr_edict.c:
o add "quaternion" and "integer" to type_name[]
o support quatnernion and integers types when printing values
o support the integer opcodes when bounds checking
pr_exec.c
o enable the integer opcodes
pr_opcode:
o add the integer opcodes to the opcode table
o logical operators all result in an integer rather than a value
expr.h:
o rename int_val to integer_val
qfcc.h:
o kill another magic number
expr.c:
o move the opcode to string conversion out of type_mismatch and into
get_op_string
o rename int_val to integer_val
o general integer type support.
o generate an internal comipiler error for null opcodes rather than
segging.
pr_imm.c:
o rename int_val to integer_val
o support integer constants, converting to float when needed.
pr_lex.c:
o magic number death and support quaternions and integers in type_size[]
qc-lex.l
o rename int_val to integer_val
o support quaternion and integer type keywords
qc-parse.y:
o rename int_val to integer_val
o use binary_expr instead of new_binary_expr for local initialized
variables
builtins.c:
o rename int_val to integer_val
o fix most (all?) of the INT related FIXMEs
defs.qc:
o use integer instead of float where it makes sense
main.c:
o read_result is now integer rather than float
main.qc:
o float -> integer where appropriate
o new test for int const to float arg
2001-07-23 01:31:22 +00:00
Bill Currie
55ac55c7ac
rename ev_int and ex_int to ev_integer and ex_integer. create type_integer
...
and def_integer (do I need that?), clean up and or coment on XXX and FIXME
2001-07-22 06:59:12 +00:00
Bill Currie
7c16afe7e9
add a --no-cpp command line option so that cpp enabled qfcc can still compile
...
qfpreqcc progs
2001-07-20 05:22:44 +00:00
Bill Currie
00d409e80c
fix constant folding for |
2001-07-19 03:00:35 +00:00
Bill Currie
47a6f2c9b5
pr_debug.c:
...
capitolise CRC and add a \n to the message
sv_progs.c (both nq and qw):
don't bother checking the progdefs.h crc: it's just not needed any more
pr_imm.c:
use r instead of rep when checking the hash tables.
main.c (quaq):
make developer work and set com_filesize (otherwise, progs crc doesn't
get set properly (com_filesize, not developer:))
2001-07-18 21:28:41 +00:00
Bill Currie
5c31fbf366
fix debug crc generation
2001-07-18 20:31:55 +00:00
Bill Currie
10ad8bebbd
Make files.dat actually useful. I really dislike the hardcoding, but it /is/
...
useful. Also, fix a bug in PrecacheModel where it was checking MAX_SOUNDS and
numsounds instead of models.
2001-07-18 17:23:42 +00:00
Bill Currie
c9af1575d3
fix emit_assign_expr to emit an explicit assignment statement whenever
...
emit_sub_expr returns a temporary def. this fixes a = b = c; expressions when
entities are involved.
2001-07-18 16:33:31 +00:00
Bill Currie
098305d649
fix (expr_type1 && expr_type2). this involed type completing expressions :/
2001-07-18 06:37:14 +00:00
Jeff Teunissen
af366764de
C preprocessor support for qfcc. Depends on the new parser. --enable-cpp
...
to activate.
2001-07-17 05:02:34 +00:00
Bill Currie
5d5d3f1416
well, that explains the loss of line number onfo on return statements :P
2001-07-16 03:53:45 +00:00
Bill Currie
cb80800732
fix debug line numbers for if and while. still `losing' them for return for
...
some reason.
2001-07-15 01:51:01 +00:00
Bill Currie
a0ba8e534c
s/IMMEDIATE/.imm/ for name of immediate defs. the latter is both shorter and
...
impossible to generate from qc
2001-07-15 01:50:10 +00:00
Bill Currie
2818d720c2
move the full info opcocde table from qfcc to gamecode (<KURGON>There can be
...
only one!</KURGON>:) and use the table in PR_PrintStatement. This means that
qfcc now links against libQFgamecode as well as libQFutil
2001-07-14 02:34:16 +00:00
Bill Currie
ae9ee57666
change the type of opcode->type to etype_t, clean up the resulting mess, and
...
rename all of the opcodes to (eg) mul.f instead of MUL_F
2001-07-14 01:52:05 +00:00
Bill Currie
6c91ee29f0
fix a missed debug test
2001-07-14 01:47:45 +00:00
Bill Currie
7acbb3a0ea
helps if I remember this :/
2001-07-14 01:16:07 +00:00
Bill Currie
64e50e1ebd
Basic debug info generation, just line numbers and local defs for each
...
function.
2001-07-14 01:15:40 +00:00
Bill Currie
8bbef35197
fix `a = b = b + c;' (probably d + c, too). Caused by forgetting to emit
...
an assignment for `a ='.
2001-07-12 18:56:43 +00:00
Bill Currie
8000c86e35
/much/ better type mismatch error reporting
...
eg:
./main.qc:55: type mismatch: float == entity
2001-07-09 18:17:04 +00:00
Bill Currie
1db6225ae7
make - - - - -2 work
2001-07-06 04:54:08 +00:00
Bill Currie
4673d701c9
fix the conflicts caused by -ve constants
2001-07-06 04:29:12 +00:00
Jeff Teunissen
35f5118803
warning/error message cleanups. Well, at least *I* think they make more
...
sense. :)
2001-07-06 02:43:39 +00:00
Bill Currie
b1f264b203
using qfpreqcc is now vewy vewy qwiet ('e's 'unting wabbits)
2001-07-03 21:17:02 +00:00
Bill Currie
1edf1e0b39
format checking for error and warning + needed fixes
...
try to give name of object when calling non-function
2001-07-03 20:53:49 +00:00
Bill Currie
ccc00b0608
fix segs on ondeclared identifiers
2001-07-03 20:42:07 +00:00
Bill Currie
f2bb7ace41
add an option (--warn=error) to treat warnings as errors
2001-06-28 23:15:10 +00:00
Bill Currie
9c2398d923
stop processing files after errors have occured
2001-06-28 23:08:52 +00:00
Bill Currie
6dfee9968b
/much/ better error handling
2001-06-28 21:26:40 +00:00
Bill Currie
eef9e8e2dc
be more accurate about the operator involved
2001-06-28 17:44:50 +00:00
Bill Currie
0271afbb10
warn about the dangers of (!foo & bar)
2001-06-28 15:20:31 +00:00
Bill Currie
01a9372add
fix the corrupted locals problem (df->locals was getting set too early)
2001-06-28 02:58:45 +00:00
Bill Currie
daf5fc96ea
reset temps after emitting a function. it helps :) (fixes the wierd entity
...
errors)
2001-06-27 23:36:03 +00:00
Bill Currie
59ff35558f
create empty defs for vertex and quaternion compontents
2001-06-27 22:24:28 +00:00
Bill Currie
768c4a49d3
fix . type checking
2001-06-27 21:43:10 +00:00
Bill Currie
774a1fe6cd
fix // comments at end of file (ie, no trailing \n)
2001-06-27 20:47:41 +00:00
Bill Currie
9c30c0c455
make simple assignments (a = b;) generate code
2001-06-27 20:32:27 +00:00
Bill Currie
1eef491c1c
handle -ve constants
2001-06-27 19:40:43 +00:00
Bill Currie
1fd4590212
report file as well
2001-06-27 18:15:24 +00:00
Bill Currie
febb139a41
free temp defs at the end of each expr block. CustomTF has gone from 64 to 25
...
locals.
2001-06-27 17:11:21 +00:00
Bill Currie
9d2bf8df19
better function argument code generation
2001-06-27 16:43:56 +00:00
Bill Currie
504d03a21a
expr.c:
...
fix a silly stanfu with goto
qc-parse.y:
suffle the debug code
2001-06-27 05:45:20 +00:00
Bill Currie
673e6e66b7
turns out qcc wasn't so stupid about = vs ||/&& precedence after all (just
...
my interpretation of the code was:/) why oh why didn't John use bison or yacc
in the first place? :/
2001-06-27 00:10:34 +00:00
Bill Currie
ff42e81127
remove some debug info
2001-06-26 23:51:15 +00:00
Bill Currie
c629de9b3b
function calls work now
2001-06-26 23:42:11 +00:00
Bill Currie
50ae388caa
initialisations now seem to work, including cows (mooOOoo:)
2001-06-26 22:43:28 +00:00
Bill Currie
c32bcb7262
immediates now seem to work
2001-06-26 22:07:09 +00:00
Bill Currie
ce2f26f0b9
lables are working, but immediates and function return values are borked
2001-06-26 21:32:22 +00:00
Bill Currie
5785b93107
implement branches and top level call
2001-06-26 20:06:56 +00:00
Bill Currie
19a7285f6c
implement state
2001-06-26 19:54:50 +00:00
Bill Currie
aee129ca7d
assignments now seem to work in that they no longer seg qfcc
2001-06-26 19:48:03 +00:00
Bill Currie
63ad87db68
return defs of the correct type
2001-06-26 17:34:21 +00:00
Bill Currie
69f869087b
oops
2001-06-26 16:24:11 +00:00
Bill Currie
d783a024b3
record an expression's line number and file and sort of handle state
...
expressions
2001-06-26 16:23:21 +00:00
Bill Currie
3242c04798
fix the redef error
2001-06-26 16:12:01 +00:00
Bill Currie
c1753046a9
start on actually generating code. doesn't work yet (getting a weird type
...
redeclaration error and not all expressions are handled yet).
2001-06-26 07:21:20 +00:00
Bill Currie
e99796c4cf
new expression type: ex_block. forms a linked list of expressions for fast
...
appending and ease of manipulation.
2001-06-26 03:33:01 +00:00
Bill Currie
749d460041
duplicate code cleanup
2001-06-26 02:46:02 +00:00
Bill Currie
3fa3ab59a9
clean up error reporting a little
2001-06-25 23:42:49 +00:00
Bill Currie
625915288c
hopefully make line directives work
2001-06-25 23:38:32 +00:00
Bill Currie
90b5c57266
fix lost initial char of string constants
...
make expression strings char * instead of string_t (don't put them into
pr_strings prematurely);
2001-06-25 22:53:15 +00:00
Bill Currie
53b66ef2e0
better label handling and strings are now completely parsed (including escapes)
2001-06-25 22:11:20 +00:00
Bill Currie
1779a124c5
expr.h:
...
nuke the ex_statement and estatement_[st] stuff
add label_expr prototype
expr.c:
ex_statement nukage
correct new_expr's decl
add label_expr to ease label creation
don't crash when printing a null expression (bare return)
qc-parse.y:
estatement_t nukage
statement statements and statement_block are type expr
generate `expressions' for statements
a full parse tree for each function is now generated. there are several
special expression opcodes for statements:
d done \
r return -> unary: expression to return or null
i if binary: evaluated expression, destination label
n ifnot binary: evaluated expression, destination label
c call binary: function def, args (expr list, rev order)
s state binary: frame const, function def
g goto unary: destination label
l label unary: label number
in a top level expression, l (label) defines the label, otherwise it is a
reference.
2001-06-25 20:52:04 +00:00
Bill Currie
2d87eeb57d
functions are now initialized, but no code is yet generated
2001-06-25 18:23:29 +00:00
Bill Currie
df897255ff
make usage of the new parser easier to configure
2001-06-25 18:22:53 +00:00
Bill Currie
ab051248e8
expr.h:
...
add prototype for print_expr
expr.c:
add print_expr
correct string accessors
currect the result type for unary operators
qc-lex.l:
correct string, vector and quaternion parsing
qc-parse.y:
precedence corrections and more function scope work
CustomTF gets through the parsing again.
2001-06-25 17:15:56 +00:00
Bill Currie
c12ac3278e
a little progress on functions
2001-06-21 07:08:34 +00:00
Bill Currie
ae98ed8603
field types are parsed correctly, but parameters have been lost for the
...
moment
2001-06-20 23:32:13 +00:00
Bill Currie
aac91d8cd6
more expression handling. turns out I'm mis-parsing field types, so that's next
2001-06-20 21:18:04 +00:00
Jeff Teunissen
ba17807833
whitespace.
2001-06-20 19:53:37 +00:00
Bill Currie
226b40483d
beginnings of expression and statement processing
2001-06-20 07:02:36 +00:00
Bill Currie
56aafce20c
qfcc.h:
...
rearrange def_t a little and add def_next (leaving next free for other
uses)
pr_def.c:
use def_next instead of next to link /all/ of the named defs
qfcc.c:
ditto
2001-06-20 03:05:50 +00:00
Bill Currie
327e95a3c8
gcc 3.0 fixes
2001-06-20 02:07:20 +00:00
Bill Currie
90a0cdfedf
now seems to get through CustomTF properly, but better def handling is needed
2001-06-19 23:35:09 +00:00
Adam Olsen
67e4fa85bf
add support for \<, \>, and \^ to qfcc. \< bolds all characters (toggles bold really) until \>, and \^ bolds (toggles) the next character.
2001-06-19 23:27:07 +00:00
Bill Currie
20bf698330
fix \x handling for 0-9
2001-06-19 22:26:16 +00:00
Bill Currie
f50ce04ccb
d'oh, forgot to add 10 for a-f and A-F
2001-06-19 22:13:35 +00:00
Bill Currie
af701d74cd
fix infinite loop for \x...
2001-06-19 21:45:57 +00:00
Bill Currie
2647e63810
finally fix the tupe corruption.
2001-06-19 16:01:38 +00:00
Bill Currie
bdc0ba32ca
pr_lex.c:
...
add PR_PrintType (and lotsa debug to PR_FindType)
qc-parse.y:
fix up one bit of type corruption, only to find another :/
2001-06-19 07:28:50 +00:00
Bill Currie
89fecd7cee
slowly getting there with defs processing. still borked
2001-06-18 22:51:49 +00:00
Bill Currie
7254dc0052
rename filelength to FileLength to avoid a name clash in windows
2001-06-16 04:27:22 +00:00
Bill Currie
b595f0122f
got function params scope sort of sorted out
2001-06-15 20:38:57 +00:00
Bill Currie
eeaab95be5
beginnings of expression and def handling.
2001-06-15 19:38:43 +00:00
Bill Currie
373ea8132a
more work on the code generation and make generally usable again by disabling
...
the new stuff
2001-06-15 07:16:18 +00:00
Bill Currie
f9baacd440
beginnings of code generation. hangs :)
2001-06-14 21:49:47 +00:00
Bill Currie
d7ebba6a74
parses CustomTF now, but no code generation
2001-06-13 18:35:41 +00:00
Bill Currie
c89da89b69
almost parses CustomTF ($macro junk next)
2001-06-13 07:16:39 +00:00
Bill Currie
2c26de2c2b
oops
2001-06-12 22:26:52 +00:00
Bill Currie
72b93d0062
more stuff
2001-06-12 22:26:10 +00:00
Bill Currie
489ddbc7a7
getting closer. soon timie to start putting real code in there
2001-06-12 21:06:28 +00:00
Bill Currie
7d52f12248
clean up C warnings
2001-06-12 20:24:02 +00:00
Bill Currie
3be018e1f9
beginnings of a bison grammar for qc
2001-06-12 19:44:26 +00:00
Bill Currie
c0654f3541
miss tagged string != string
2001-06-12 15:29:05 +00:00
Bill Currie
aa825853bf
full \ handling in strings (including \e for escape (why C doesn't have that
...
is beyond me))
2001-06-11 23:37:01 +00:00
Bill Currie
dfb6062f9d
fix an out-by-one for line directives at the beginning of the file
2001-06-11 17:51:09 +00:00
Bill Currie
c732d098f4
add '# 1 "foo.qcc" ...' (flags ignored) processing to qfcc so preprocessed
...
output can make sense.
2001-06-11 15:43:06 +00:00
Bill Currie
bbc97079e0
pr_comp.h:
...
define PROG_ID_VERSION as 6 and redefine PROG_VERSION as 0x00fff001
(0.fff.001) for the new qc features.
pr_edict.c:
support version 6 and version 0.fff.001 progs
qfcc.h:
add version field to options_t
add min_version field to opcode_t
pr_opcode.c:
set the minumum version of each opcode (gee, that table is getting ugly)
filter out opcodes with too high a min_version when initializing the opcode
hash tables.
qfcc.c:
update help output.
accept --id to limit code generation to id compatable (ver 6) progs.
default progs generation to 0.fff.001
2001-06-09 06:25:33 +00:00
Bill Currie
0186732130
make initialized local variables work /properly/
...
local float urk = 0;
STORE_F 46(IMMEDIATE) 0.0 55(?)
2001-06-08 20:13:10 +00:00
Bill Currie
7ef4c2776e
Immidiate sharing now /works/ (shaved off two pr_globals from CustomTF, too:).
...
Detect assignments to initialized globals and give an error, unless the --cow
(copy on write) option is given, and then allocate a new global for the var,
clear its initialized flag.
Relocate all globals.
2001-06-08 06:32:15 +00:00
Bill Currie
867260d27d
report the size of the locals pool
2001-06-06 00:34:35 +00:00
Bill Currie
c3cdfce12b
don't bother writing out local defs as they mess up progs dumping now that
...
they overlap
2001-06-06 00:12:10 +00:00
Bill Currie
d86ed9a3b9
relocate the locals defs as well as their references
2001-06-05 23:52:34 +00:00
Bill Currie
bbb37d0080
customTF is now down to 4989 pr_globals. all parameters, local veriables and
...
termporary variables sit in one pool of memory (at the end of the globals)
thus drasticly reducing globals requirements. This works because the whole
lot is declared to be in the function's local variable space which is copied
to the locals stack in the progs engine.
2001-06-05 08:09:12 +00:00
Bill Currie
a26f799de4
allocate temps based on size rather than type (get better re-usage this way)
...
put temps onto the local scope.
2001-06-05 05:22:11 +00:00
Bill Currie
17e19f3892
regain about 5000 globals for customTF, but this fixes possible breakage with
...
premature temp var re-usage (ie, it puts the temps back into the locals space).
2001-06-04 22:35:54 +00:00
Bill Currie
e090f3c9e3
do proper temp def handling so we don'e use any where near as many defs for
...
temporary variables (customTF went from 35941 to 12587 pr_globals).
2001-06-04 17:52:50 +00:00
Bill Currie
53e9fb65d1
prepare PR_Statement for proper temporary usage
2001-06-04 05:45:51 +00:00
Bill Currie
e339e82c01
hash.h is now const correct as is a lot of qfcc
2001-06-04 04:52:14 +00:00
Bill Currie
4aa47d728a
use the correct STORE_ op for function arges, rather than STORE_V. Should
...
speed up progs in general.
2001-06-04 03:57:15 +00:00
Bill Currie
275e74161b
string comparison operators
2001-06-04 03:36:35 +00:00
Bill Currie
7178824ee6
put ADD_S up where it belongs :)
2001-06-04 02:49:59 +00:00
Bill Currie
ddcd172a03
re-write the opcode selection to be a hash table lookup and statment generation
...
to get the opcode from the table record rather than the location within the
table (ewww). gives a nice speed boost /and/ makes the opcode table easier to
maintain.
2001-06-04 02:41:45 +00:00
Bill Currie
09118bc01e
pr_comp.h:
...
add OP_ADD_S. WARNING!!! this /will/ move.
progs.h:
add prototype for PR_PrintStatement
pr_edict.c:
add OP_ADD_S support in the progs checker
pr_exec.c:
implement OP_ADD_S
tools/qfcc/include/.gitignore:
add config.h.in
qfcc.h:
nuke PR_NameImmediate and change PR_ParseImmediate's prototype (see
pr_imm.c)
pr_comp.c:
add ADD_S, adjust for PR_ParseImmediate's prototype, make
PR_ParseExpression work with non-sequential opcodes (slow, will work on
that next). Fix up initialised global parsing.
pr_imm.c:
nuke PR_NameImmediate. didn't work well and wasn't such a good idea anyway.
PR_ParseImmediate now accepts a def_t * arg. if null, will allocate a
new global def, otherwise it will initialize the def passed in.
qwaq/main.c:
sports some debugging code (dumps info about the progs it's running)
qwaq/main.qc:
better ADD_S testing
2001-06-03 17:36:49 +00:00
Bill Currie
351e70b3bd
replace a missing / when producing files.dat
2001-05-22 18:23:29 +00:00
Bill Currie
2f2ba28bb7
pr_lex.c:
...
rewrite PR_LexPunctuation to avoid looping. 6x speedup for that function
according to gprof on customTF
configure.in:
--enable-profile
2001-04-03 16:50:31 +00:00
Bill Currie
b7aba0b643
allow named constants to be checked for immediate constants. qfcc now produces
...
the same number of globals etc as it used to
2001-04-02 18:43:10 +00:00
Bill Currie
f517dc6ce6
fix a silly bug and an incorrect interpretation of the old code
2001-04-02 18:10:43 +00:00
Bill Currie
02b09f4e5c
no more redundant strings. costs ~7ms, though, but HALVING the strofs size
...
in frikbot seems worth it.
2001-04-01 06:40:51 +00:00
Bill Currie
59e55834ed
Another massive speadup caused by using hash tables to lookup already
...
generated immediate values. frikbot now compiles in just over 1s on my
machine.
2001-04-01 06:01:02 +00:00
Bill Currie
43ea8f4fc0
Rip out I_FloatTime from cmdlib.
...
Use Sys_DoubleTime instead of I_FloatTime and print out ms for compilation
2001-04-01 03:33:11 +00:00
Bill Currie
ec16ffaa65
move to using hash tables for variable lookups.
...
WARNING: this fixes a scope bug in qcc and thus you WILL get different (but
now correct) code for the following:
float foo;
void () bar =
{
local float foo;
foo = 0;
}
ie, the local foo will, as is correct, now be a separate var to the global
foo.
2001-04-01 02:12:57 +00:00
Bill Currie
1d9791553f
make qfcc use detect and use the installed libs/headers. currently doesn't work
...
due to modularity problems in libQFutil
2001-03-29 21:26:56 +00:00
Bill Currie
8866d86fba
rip out the crc code in favour of libqfutil
2001-03-28 23:40:54 +00:00
Bill Currie
cb5c262ffc
qtypes.h:
...
remove includes of qdefs.h and compat.h
pr_comp.h:
merge pr_comp.h from quake and qfcc, removing the copy in qfcc
cmdlib.[ch]:
nuke the endian code.
qendian.c:
initialise the LittleLong etc pointers at compile time rather than run
time
com.c (both nq and qw):
nuke the LittleLong etc init code
everything else:
fix up after the qtypes.h cleanup
2001-03-28 17:17:56 +00:00
Bill Currie
cea45d19d4
bah, another premature commit
2001-03-27 21:47:44 +00:00
Bill Currie
82b533e1ef
forgot that .S files don't have dependency info :/
2001-03-27 21:46:49 +00:00
Bill Currie
5e993575a4
put a comment in the right place
2001-03-27 00:52:52 +00:00
Bill Currie
c34868c117
attack cmdlib with a chainsaw. All unused functions are gone.
2001-03-26 21:02:18 +00:00
Bill Currie
19b146748a
add .vimrc
2001-03-26 16:36:44 +00:00
Bill Currie
6247233e0e
when checking a token, they type of the token must be taken into account.
2001-03-14 04:14:09 +00:00
Bill Currie
21fa23a747
the crc field in progs.dat is evily generated from the crc of progsdef.h, so
...
change the header to produce a matching crc. This is an interrim fix until a
better solution can be found.
2001-03-12 20:04:22 +00:00
Jeff Teunissen
2dd03876af
QFCC -- the QuakeForge Code Compiler -- an autoconfiscated qcc.
...
It sucks, but it works, and will form the basis for something that Does
Not Suck.
2001-02-24 06:58:54 +00:00