]> git.xonotic.org Git - xonotic/gmqcc.git/log
xonotic/gmqcc.git
11 years agoir_values which are members of a vector should know that, so that liferange calc...
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 19:37:29 +0000 (21:37 +0200)]
ir_values which are members of a vector should know that, so that liferange calc can use the vector rather than the member

11 years agoadded -Wused-uninitialized and warning about variables which may be used without...
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 19:26:14 +0000 (21:26 +0200)]
added -Wused-uninitialized and warning about variables which may be used without being initialized

11 years agoRemoving the old LIFE_RANGE_WITHOUT_LAST_READ support
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 19:00:42 +0000 (21:00 +0200)]
Removing the old LIFE_RANGE_WITHOUT_LAST_READ support

11 years agostrip the newlines out of ir error messages, they're added by the msgprint routine
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 18:45:26 +0000 (20:45 +0200)]
strip the newlines out of ir error messages, they're added by the msgprint routine

11 years agomore context copies
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 18:43:34 +0000 (20:43 +0200)]
more context copies

11 years agohave the ir take over some more context data from the ast
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 18:43:04 +0000 (20:43 +0200)]
have the ir take over some more context data from the ast

11 years agoadd the backticks for a warning
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 18:41:31 +0000 (20:41 +0200)]
add the backticks for a warning

11 years agoadd the type for the invalid-type-for-global message
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 18:37:10 +0000 (20:37 +0200)]
add the type for the invalid-type-for-global message

11 years agoir_value_set_string needs to use a strdup which doesn't return NULL for an emptystring
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 18:35:51 +0000 (20:35 +0200)]
ir_value_set_string needs to use a strdup which doesn't return NULL for an emptystring

11 years agotake 'warnreturn' into account, don't ignore the parsewarnin's Werror status
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 18:32:07 +0000 (20:32 +0200)]
take 'warnreturn' into account, don't ignore the parsewarnin's Werror status

11 years agoDon't have the ast's codegen error on missing returns
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 18:28:14 +0000 (20:28 +0200)]
Don't have the ast's codegen error on missing returns

11 years agoset -Wmissing-return-values to on by default, new warning: control reaches end of...
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 18:26:54 +0000 (20:26 +0200)]
set -Wmissing-return-values to on by default, new warning: control reaches end of non-void...

11 years agoparse_block gets a warn-return bool flag
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 18:20:39 +0000 (20:20 +0200)]
parse_block gets a warn-return bool flag

11 years agofunctions which have no living values but store_return values may cause the allocator...
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 17:54:15 +0000 (19:54 +0200)]
functions which have no living values but store_return values may cause the allocator to be run with no allocations being made - in this case we shouldn't try accessing the empty array and simply exit the allocator

11 years agosame as before for loops: don't try creating a jump if the body ends in a return
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 17:45:53 +0000 (19:45 +0200)]
same as before for loops: don't try creating a jump if the body ends in a return

11 years agodon't try to create jumps in ifs if the block is already done
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 17:43:41 +0000 (19:43 +0200)]
don't try to create jumps in ifs if the block is already done

11 years agohave function declarations of functions with prototypes take over the actual declarat...
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 17:39:58 +0000 (19:39 +0200)]
have function declarations of functions with prototypes take over the actual declaration's body's context data

11 years agoprovide the context to ir_functions
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 17:37:46 +0000 (19:37 +0200)]
provide the context to ir_functions

11 years agorelax parse_close_paren to allow values in parenthesis with no operators... duh
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 17:35:45 +0000 (19:35 +0200)]
relax parse_close_paren to allow values in parenthesis with no operators... duh

11 years agofix: use thinkfunc not nextthink, nextthink is set later
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 17:25:37 +0000 (19:25 +0200)]
fix: use thinkfunc not nextthink, nextthink is set later

11 years agoAutomatic prototyping of frame-functions
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 17:24:43 +0000 (19:24 +0200)]
Automatic prototyping of frame-functions

11 years agoRemoving old commented-out code
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 17:01:31 +0000 (19:01 +0200)]
Removing old commented-out code

11 years agomissing initializer
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 16:03:56 +0000 (18:03 +0200)]
missing initializer

11 years agoIR generation: for functions: first generate all defs, then the code, so access to...
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 16:00:53 +0000 (18:00 +0200)]
IR generation: for functions: first generate all defs, then the code, so access to prototyped functions doesn't result in NULL code

11 years agosetting data/frames.qc right again
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 15:52:44 +0000 (17:52 +0200)]
setting data/frames.qc right again

11 years agoSTOREP instructions' first operand has to be considered a read-operand, not a write...
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 15:46:10 +0000 (17:46 +0200)]
STOREP instructions' first operand has to be considered a read-operand, not a write operand, otherwise the life ranges will be wrong, and the value itself IS only read, not written to

11 years agofor void returning functions we can use store_return to avoid a useless store after it
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 15:42:22 +0000 (17:42 +0200)]
for void returning functions we can use store_return to avoid a useless store after it

11 years agocalls for now use store_value since we don't properly deal with its liferange yet...
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 15:29:36 +0000 (17:29 +0200)]
calls for now use store_value since we don't properly deal with its liferange yet; fixing some local-alloation things; taking call parameters into account in ir_block_life_propagate

11 years agoFixing a misleading error message in ir.c
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 14:59:59 +0000 (16:59 +0200)]
Fixing a misleading error message in ir.c

11 years agoir: fix bug that functions without declared locals would put temps at position zero ...
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 14:49:24 +0000 (16:49 +0200)]
ir: fix bug that functions without declared locals would put temps at position zero ...

11 years agoNicer prints in exec's prog_print_statement
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 14:42:12 +0000 (16:42 +0200)]
Nicer prints in exec's prog_print_statement

11 years agofix a wrong print in parsing.qc test
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 14:41:45 +0000 (16:41 +0200)]
fix a wrong print in parsing.qc test

11 years agoOops setting wrong members
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 14:18:39 +0000 (16:18 +0200)]
Oops setting wrong members

11 years agodata/frames.qc to test [frame,think]
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 14:14:19 +0000 (16:14 +0200)]
data/frames.qc to test [frame,think]

11 years agoFirst draft of handling the [frame,think] notation
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 14:13:29 +0000 (16:13 +0200)]
First draft of handling the [frame,think] notation

11 years agoqcvm: -trace flag
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 13:19:43 +0000 (15:19 +0200)]
qcvm: -trace flag

11 years agoFactoring out duplicate code into a function: create_vector_members; creating vector...
Wolfgang (Blub) Bumiller [Sun, 19 Aug 2012 12:34:23 +0000 (14:34 +0200)]
Factoring out duplicate code into a function: create_vector_members; creating vector members for vector function parameters

11 years agoimplement correct behaviour for shadows locals
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 19:56:42 +0000 (21:56 +0200)]
implement correct behaviour for shadows locals

11 years ago-Wlocal-shadows - note that -std=gmqcc is very different from the rest
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 19:54:19 +0000 (21:54 +0200)]
-Wlocal-shadows - note that -std=gmqcc is very different from the rest

11 years agosplitting parser_find_local up into find_local and find_param - find_local also takes...
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 19:42:52 +0000 (21:42 +0200)]
splitting parser_find_local up into find_local and find_param - find_local also takes a bool-ptr to tell the caller if it was a local or a global

11 years agoquotes around the variable name in some messages
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 19:35:47 +0000 (21:35 +0200)]
quotes around the variable name in some messages

11 years agoremove trailing \n from 2 error messages
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 19:32:29 +0000 (21:32 +0200)]
remove trailing \n from 2 error messages

11 years agoset olddecl so we don't access a NULL value when a variable already exists
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 19:31:53 +0000 (21:31 +0200)]
set olddecl so we don't access a NULL value when a variable already exists

11 years agooops - parsewarning returns true on -Werror, so we gotta invert here
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 19:07:23 +0000 (21:07 +0200)]
oops - parsewarning returns true on -Werror, so we gotta invert here

11 years ago-Wtoo-few-parameters on by deafult - for -std=gmqcc it's always an error
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 19:04:16 +0000 (21:04 +0200)]
-Wtoo-few-parameters on by deafult - for -std=gmqcc it's always an error

11 years agoast_type_adopt - ast_entfield now adopts the full type of the field
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 18:30:24 +0000 (20:30 +0200)]
ast_type_adopt - ast_entfield now adopts the full type of the field

11 years ago-Wmissing-return-values, off by default, ignored with -std=gmqcc because in that...
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 18:19:43 +0000 (20:19 +0200)]
-Wmissing-return-values, off by default, ignored with -std=gmqcc because in that standard it'll error

11 years agodata/vars.qc - when declaring a function, and it had a prototype - use the new parame...
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 18:16:51 +0000 (20:16 +0200)]
data/vars.qc - when declaring a function, and it had a prototype - use the new parameter names instead of the ones from the prototype, otherwise things get messy

11 years agoast_unary needs to set its type
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 18:02:18 +0000 (20:02 +0200)]
ast_unary needs to set its type

11 years agoDisable the member-of namespace check when -std != gmqcc
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 17:43:34 +0000 (19:43 +0200)]
Disable the member-of namespace check when -std != gmqcc

11 years agomove the member-of check for '.' to after applying the previous dot operators so...
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 17:42:38 +0000 (19:42 +0200)]
move the member-of check for '.' to after applying the previous dot operators so we don't need parens around 'a.b' of 'a.b.c = x'

11 years agodata/functions.qc for some more tests
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 17:39:48 +0000 (19:39 +0200)]
data/functions.qc for some more tests

11 years agoast_call: adopt the funciton's return type
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 17:37:51 +0000 (19:37 +0200)]
ast_call: adopt the funciton's return type

11 years agoast_return_delete: check if self->operand is actually set before ast_unref-ing it
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 16:01:52 +0000 (18:01 +0200)]
ast_return_delete: check if self->operand is actually set before ast_unref-ing it

11 years agoUse the current context, not the one from a NULL value... for ast_return
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 16:00:20 +0000 (18:00 +0200)]
Use the current context, not the one from a NULL value... for ast_return

11 years ago parse 'return' without values better
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 15:58:51 +0000 (17:58 +0200)]
 parse 'return' without values better

11 years agoast_return should accept NULL as value to create a simple 'return' without a value
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 15:58:38 +0000 (17:58 +0200)]
ast_return should accept NULL as value to create a simple 'return' without a value

11 years agoFixup some possibly uninitialized value when parsing 'return'
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 15:48:21 +0000 (17:48 +0200)]
Fixup some possibly uninitialized value when parsing 'return'

11 years agoset expression.next to NULL in ast_block_set_type if it won't be set to a new value
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 15:46:02 +0000 (17:46 +0200)]
set expression.next to NULL in ast_block_set_type if it won't be set to a new value

11 years agoDon't re-add defs which had a prototype
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 15:42:38 +0000 (17:42 +0200)]
Don't re-add defs which had a prototype

11 years agoadding data/proto.qc
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 15:32:32 +0000 (17:32 +0200)]
adding data/proto.qc

11 years agoast_value_copy should copy the expression substructure as well - exposing ast_value_c...
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 15:16:20 +0000 (17:16 +0200)]
ast_value_copy should copy the expression substructure as well - exposing ast_value_copy to the outside since the parser needs to copy complete types when multiple variables are declared with commas

11 years agoinitialize the ast_expression node in ast_shallow_type properly as well
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:58:17 +0000 (16:58 +0200)]
initialize the ast_expression node in ast_shallow_type properly as well

11 years agoinitialize the ast_expression node in ast_type_copy properly
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:57:22 +0000 (16:57 +0200)]
initialize the ast_expression node in ast_type_copy properly

11 years agokeep the filenames of all lexed files in a global lex_filenames vector because we...
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:47:33 +0000 (16:47 +0200)]
keep the filenames of all lexed files in a global lex_filenames vector because we don't strdup the filenames into lex_ctx, but copy the pointer

11 years agoset parser->lex to NULL after closing
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:42:17 +0000 (16:42 +0200)]
set parser->lex to NULL after closing

11 years agodon't deallocate the parser on a compile error -_-
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:40:20 +0000 (16:40 +0200)]
don't deallocate the parser on a compile error -_-

11 years agoast_member's are now kept, since they are used like variables: multiple times
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:38:50 +0000 (16:38 +0200)]
ast_member's are now kept, since they are used like variables: multiple times

11 years agoAdd a comment about why we don't delete the owner
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:32:07 +0000 (16:32 +0200)]
Add a comment about why we don't delete the owner

11 years agoDoh... wrong comment type
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:30:28 +0000 (16:30 +0200)]
Doh... wrong comment type

11 years agoast_member will not unref/delete the owner: first of all the owner is always an ast_v...
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:30:09 +0000 (16:30 +0200)]
ast_member will not unref/delete the owner: first of all the owner is always an ast_value, which won't get deleted anyway, secondly: the ast_members are collected and deleted after the owners, so ast_unref(owner) will cause invalid memory access

11 years agoast_block_collect: add to ast_block->collect and set the node's .keep=true, those...
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:27:40 +0000 (16:27 +0200)]
ast_block_collect: add to ast_block->collect and set the node's .keep=true, those will now always be deleted by the ast_block dtor

11 years agoinitialize ast_block->collect properly
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:25:21 +0000 (16:25 +0200)]
initialize ast_block->collect properly

11 years agocollect vector-member locals in ast_block->collect, like a garbage collection...
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:24:26 +0000 (16:24 +0200)]
collect vector-member locals in ast_block->collect, like a garbage collection...

11 years agoRevert "let ast_node have a use-counter, helpful for the parser to delete unused...
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:20:45 +0000 (16:20 +0200)]
Revert "let ast_node have a use-counter, helpful for the parser to delete unused fields which otherwise get lost in the void"

This reverts commit 25ffd11aa63c018632f3906092622353f79a8129.

11 years agoRevert "ast_usecount macro for convenience"
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:20:36 +0000 (16:20 +0200)]
Revert "ast_usecount macro for convenience"

This reverts commit e86c8ff0eb55b40c5a30accd5915be3a9b08e784.

11 years agoRevert "delete ast_members from parser->locals when they were unused"
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:20:23 +0000 (16:20 +0200)]
Revert "delete ast_members from parser->locals when they were unused"

This reverts commit cdeffb6de9b92b7c498380d802d3250ef9ba73aa.

11 years agodelete ast_members from parser->locals when they were unused
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:20:17 +0000 (16:20 +0200)]
delete ast_members from parser->locals when they were unused

11 years agoast_usecount macro for convenience
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:18:51 +0000 (16:18 +0200)]
ast_usecount macro for convenience

11 years agolet ast_node have a use-counter, helpful for the parser to delete unused fields which...
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:16:43 +0000 (16:16 +0200)]
let ast_node have a use-counter, helpful for the parser to delete unused fields which otherwise get lost in the void

11 years agoclear lex->modelname
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 14:04:20 +0000 (16:04 +0200)]
clear lex->modelname

11 years agoclear all the remaining vectors in the parser
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 13:59:29 +0000 (15:59 +0200)]
clear all the remaining vectors in the parser

11 years agoclear items_data in main
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 13:58:20 +0000 (15:58 +0200)]
clear items_data in main

11 years agoclean lex->frames in lex_close
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 13:57:21 +0000 (15:57 +0200)]
clean lex->frames in lex_close

11 years agofree parser->fields and parser->locals at parser_cleanup
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 13:55:50 +0000 (15:55 +0200)]
free parser->fields and parser->locals at parser_cleanup

11 years agofix a MEM_VECTOR_CLEAR to be done AFTER clearing the contents...
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 13:53:35 +0000 (15:53 +0200)]
fix a MEM_VECTOR_CLEAR to be done AFTER clearing the contents...

11 years agoDelete fields in parser_cleanup
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 13:51:53 +0000 (15:51 +0200)]
Delete fields in parser_cleanup

11 years agothe opening paren is now an operator - to fix up the precedence rules, now 'anentity...
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 13:25:45 +0000 (15:25 +0200)]
the opening paren is now an operator - to fix up the precedence rules, now 'anentity.afunction()' compiles

11 years agoadd 'local' keyword in fields.qc, it's for qcc standard anyway
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 12:56:15 +0000 (14:56 +0200)]
add 'local' keyword in fields.qc, it's for qcc standard anyway

11 years agoget rid of additional trailing \n on parseerror
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 12:55:37 +0000 (14:55 +0200)]
get rid of additional trailing \n on parseerror

11 years agoWARN_ERROR -> opts_werror in parser.c
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 12:51:12 +0000 (14:51 +0200)]
WARN_ERROR -> opts_werror in parser.c

11 years agofields: testing function-fields
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 12:50:30 +0000 (14:50 +0200)]
fields: testing function-fields

11 years agoreplacing WARN_ERROR with opts_werror
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 12:36:33 +0000 (14:36 +0200)]
replacing WARN_ERROR with opts_werror

11 years agoFix indentation of lexer.c - was still using some tabs there
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 12:27:19 +0000 (14:27 +0200)]
Fix indentation of lexer.c - was still using some tabs there

11 years agolexer now turns '(' into an operator if noops=false
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 12:26:25 +0000 (14:26 +0200)]
lexer now turns '(' into an operator if noops=false

11 years agodebug warn def on top of the flag list
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 12:23:38 +0000 (14:23 +0200)]
debug warn def on top of the flag list

11 years agoadd the type of whatever is 'not a function' to that error message
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 10:45:51 +0000 (12:45 +0200)]
add the type of whatever is 'not a function' to that error message

11 years agoAdd an error output in the ast where I missed one (there are probably more places...
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 10:45:29 +0000 (12:45 +0200)]
Add an error output in the ast where I missed one (there are probably more places which need one)

11 years agoadd LOAD for TYPE_FUNCTION as LOAD_FNC so we can actually access function fields
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 10:44:17 +0000 (12:44 +0200)]
add LOAD for TYPE_FUNCTION as LOAD_FNC so we can actually access function fields

11 years agoparser_strdup to wrap util_strdup and actually dup empty strings
Wolfgang (Blub) Bumiller [Sat, 18 Aug 2012 10:26:21 +0000 (12:26 +0200)]
parser_strdup to wrap util_strdup and actually dup empty strings