Commit Graph

245 Commits

Author SHA1 Message Date
florian
9e66674ff9 + first part of qwordbool implementation
git-svn-id: trunk@4462 -
2006-08-19 23:16:17 +00:00
Jonas Maebe
be39a88daa * slice() doesn't support packed arrays
git-svn-id: trunk@4454 -
2006-08-19 16:18:42 +00:00
Jonas Maebe
eccbc78e04 + support for bitpacked arrays:
+ use {$bitpacking on/+} to change the meaning of "packed"
      into "bitpacked" for arrays. This is the default for MacPas.
      You can also define individual arrays as "bitpacked", but
      this is not encouraged since this keyword is not known by
      other compilers and therefore makes your code unportable.
    + pack(unpackedarray,index,packedarray) to pack
      length(packedarray) elements starting at
      unpackedarray[index] into packedarray.
    + unpack(packedarray,unpackedarray,index) to unpack
      packedarray into unpackedarray, with the first
      element being stored at unpackedarray[index]
  * todo:
    * "open packed arrays" and rtti for packed arrays are not
      yet supported
    * gdb does not properly support bitpacked arrays

git-svn-id: trunk@4449 -
2006-08-19 12:54:12 +00:00
Jonas Maebe
5bf38351e9 * fixed bug #7195: use regular type conversions for the results of
fpc_sqr(t)_real

git-svn-id: trunk@4290 -
2006-07-24 07:55:32 +00:00
daniel
4d37c919cc * Internal implementations of get_frame, get_caller_frame and get_caller_addr.
Not yet activated.

git-svn-id: trunk@3517 -
2006-05-14 08:39:19 +00:00
florian
9e00f894a9 + support for unaligned function
git-svn-id: trunk@3350 -
2006-04-29 11:15:29 +00:00
peter
ecdb5df2d6 * fix alignment of tdoublearray by using a variant record
git-svn-id: trunk@3071 -
2006-03-29 06:40:47 +00:00
Jonas Maebe
a15505521c * fixed handling of wrong invocations of slice + improved error reporting
git-svn-id: trunk@2614 -
2006-02-16 20:27:31 +00:00
Jonas Maebe
dc5c79194f * fixed SETTEXTBUF
git-svn-id: trunk@2566 -
2006-02-14 10:35:24 +00:00
Jonas Maebe
cd70b38e8b * kill warnings about non-longint code parameters with val()
which popped up again after yesterday's patches to the
    potential range error warnings

git-svn-id: trunk@2508 -
2006-02-10 10:08:07 +00:00
Jonas Maebe
5007ae7197 * fixed web bug #4724 (don't allow inc/dec(pointer,pointer)
* more accurate error postitions for inc/dec errors

git-svn-id: trunk@2502 -
2006-02-09 18:18:47 +00:00
Jonas Maebe
d11329f9cd * openstrings and openarrays don't have to by valid in order to use
high()/low() on them

git-svn-id: trunk@2484 -
2006-02-08 20:30:49 +00:00
peter
232555904e * symtablestack cleanup and rewrite
git-svn-id: trunk@2448 -
2006-02-05 22:24:18 +00:00
Jonas Maebe
58381ff7b6 * made chararray handling 98% TP-compatible, fixes web bugs 3012
and 4080. The compatibility differences are:
      a) writing a chararray which is zero-based but not zero-
         terminated does not cause a buffer overflow
      b) non-zero-based chararrays can also be read

    The difference was that previously, all chararrays were treated
    as pchars. In TP/Delphi (and now also in FPC), this is only done
    for zero-based chararrays. For non-zero-based ones, the entire
    contents of the array should always be used (including #0's).

    The default parameters in the system unit for the chararray
    helpers are to avoid having to use a define for bootstrapping.

git-svn-id: trunk@2152 -
2006-01-04 10:05:10 +00:00
Jonas Maebe
42ec76598c * new categories for vs_*: vs_declared, vs_initialised, vs_read,
vs_written, vs_readwritten. vs_initialised is the old vs_assigned;
    vs_used has been replaced by vs_read, vs_written and vs_readwritten
  * the valid_for_*() routines in htypechk now get an extra parameter to
    decide whether or not errors should be reported

git-svn-id: trunk@1913 -
2005-12-10 16:51:26 +00:00
florian
46ecdc8f94 * allow pred/succ on non continous enumerations in delphi mode
git-svn-id: trunk@1878 -
2005-12-04 18:35:19 +00:00
peter
5abb9d68f6 * prevent warning for val with second parameter not being a longint
git-svn-id: trunk@1463 -
2005-10-18 08:26:29 +00:00
florian
8af13ed6ae * fixed result type conversion for sqrt/sqr
git-svn-id: trunk@1425 -
2005-10-16 16:39:00 +00:00
florian
71b90d4d00 + slice implemented
git-svn-id: trunk@1384 -
2005-10-15 16:48:27 +00:00
florian
19e97e4da2 + use sse for sqrt if possible
* same optimization for sqrt as for sqr

git-svn-id: trunk@1266 -
2005-10-03 12:47:05 +00:00
florian
6371333361 + sqr uses sse on x86 if possible
* the result type of sqr is equal to the argument in case of usual floats

git-svn-id: trunk@1265 -
2005-10-03 12:31:31 +00:00
florian
77db0e5185 + length(<variant>);
git-svn-id: trunk@1154 -
2005-09-22 08:51:23 +00:00
florian
a53c9e2666 * fixed stupid copy/paste which turned softfloat always off
* fixed wince softfloat compiler proc. to be correctly named also when used outside the system unit

git-svn-id: trunk@966 -
2005-08-28 21:08:23 +00:00
florian
2f8fe7d2e6 - readln(<pchar>) forbidden, there is no way to prevent an buffer overflow, fixes 4227
git-svn-id: trunk@810 -
2005-08-07 09:18:21 +00:00
peter
f2f968f48a * fix overflow checking for inc(cardinal,x) and inc(pointer,x)
git-svn-id: trunk@593 -
2005-07-06 08:01:39 +00:00
peter
6846195a6c * insert explicit typecast to left type of inc(left,right) before
assigning the value after an addn
  * for inc(pointer,X) convert X to sinttype instead of ptrinttype
    to support also negative values of X

git-svn-id: trunk@587 -
2005-07-05 07:15:50 +00:00
florian
7cd67ea3f0 * node optimizer branch merged
* gotonode and gotolabel refactored
  * -Nu added to enable for loop unrolling

git-svn-id: trunk@446 -
2005-06-19 17:42:10 +00:00
peter
f67de71de2 * insert typeconv to ptrint for all inc(pointer) operations
git-svn-id: trunk@144 -
2005-05-29 19:17:31 +00:00
Jonas Maebe
0115a0a38e * convert inc/dec(pointertype) to add/sub if overflow checking is turned on
(fixes web bug #4004)

git-svn-id: trunk@136 -
2005-05-29 11:19:40 +00:00
fpc
790a4fe2d3 * log and id tags removed
git-svn-id: trunk@42 -
2005-05-21 09:42:41 +00:00
fpc
50778076c3 initial import
git-svn-id: trunk@1 -
2005-05-16 18:37:41 +00:00
peter
2d62e884c8 * only give warnings for uninitialized variables in low()/high()
if the value is calculated at runtime
2005-04-15 15:50:18 +00:00
peter
3f9d6ab32f * add hint when passing an uninitialized variable to a var parameter 2005-03-25 22:20:18 +00:00
Jonas Maebe
9fc51ed8f0 * terrornode.create -> cerrornode.create 2005-03-25 21:46:06 +00:00
peter
dbcfe36b70 * check parameters of str() better 2005-03-16 21:24:43 +00:00
peter
e417e34496 * truncate log 2005-02-14 17:13:06 +00:00
peter
50d0ba7a7f * low(var) var must be valid 2005-02-04 16:30:56 +00:00
florian
020bbc8913 * another improvement of pi handling 2005-01-23 21:47:14 +00:00
florian
cc9534cf41 + added pi bit pattern to the compiler, so pi should always be correct 2005-01-23 21:09:11 +00:00
peter
2b6456fe16 * procvar handling for tp procvar mode fixed
* proc to procvar moved from addrnode to typeconvnode
  * inlininginfo is now allocated only for inline routines that
    can be inlined, introduced a new flag po_has_inlining_info
2004-12-05 12:28:10 +00:00
peter
08d0d3b73c * fixed read temp for result 2004-11-26 22:33:00 +00:00
peter
9a64d34d34 * add checks for filedef type to prevent crashes 2004-11-21 21:27:31 +00:00
peter
89b1b583c9 * ttempcreatenode.create_reg merged into .create with parameter
whether a register is allowed
  * funcret_paraloc renamed to funcretloc
2004-11-21 17:54:59 +00:00
peter
4d8460ec2f * float routines all use internproc and compilerproc helpers 2004-11-21 15:35:23 +00:00
peter
95e0ed26f8 * use helper call to retrieve address of input/output to reduce
code that is generated in the main program for loading the
    threadvar
2004-11-09 23:10:22 +00:00
peter
6458bd0ce1 * tvarsym splitted 2004-11-08 22:09:58 +00:00
peter
2e161c5e9e * nf_internal flag for internal inserted typeconvs. This will
supress the generation of warning/hints
2004-11-02 12:55:16 +00:00
florian
239dd7121e - removed unnecessary printnode 2004-11-01 18:26:52 +00:00
florian
73c30d6579 * fixed arm compilation with cgutils
* ...
2004-11-01 17:41:28 +00:00
peter
c95a859f0a * generic tlocation
* move tlocation to cgutils
2004-10-31 21:45:02 +00:00
peter
4978a7635a * another fix for reading of subranges 2004-09-16 16:32:27 +00:00
peter
17f31d70c2 * fix for read(subranges) with subrange typ already being sinttype 2004-09-13 20:32:06 +00:00
peter
b815890d49 * fix sqr() and abs() constant range check errors 2004-08-25 15:56:35 +00:00
florian
120c165a62 * constant floating point assignments etc. are now overflow checked
if Q+ or R+ is turned on
2004-08-08 16:00:56 +00:00
Jonas Maebe
c7fbf7b11b + (incomplete) node_complexity function to assess the complexity of a
tree
  + support for inlining value and const parameters at the node level
    (all procedures without local variables and without formal parameters
     can now be inlined at the node level)
2004-07-15 19:55:39 +00:00
olle
e35eb9986b + added Ord(pointer) for macpas 2004-07-14 21:40:52 +00:00
Jonas Maebe
1f338ade0d * fix for web bug #3210 2004-07-14 14:38:35 +00:00
florian
8a9758c5e2 * logs truncated 2004-06-20 08:55:28 +00:00
peter
0ac4983a9b * remove obsolete cardinal() typecasts 2004-06-18 15:16:46 +00:00
florian
588e2c38bf * dwarf branch merged 2004-06-16 20:07:06 +00:00
peter
13ee9660a4 * inc(x,y) makes y always of type x to prevent 64bit operations
when x is a u32bit and y is signed
2004-05-28 21:15:20 +00:00
peter
b86f2c6a25 * methodpointer is loaded into a temp when it was a calln 2004-05-23 18:28:40 +00:00
peter
6b96b70118 * fixed operator overload allowing for pointer-string
* replaced some type_e_mismatch with more informational messages
2004-03-18 16:19:03 +00:00
peter
c844c5a505 * procvar cleanup 2004-02-20 21:55:59 +00:00
Jonas Maebe
0b1069b6ab + some more usage of register temps 2004-02-04 18:45:29 +00:00
peter
ecfbbeffc3 * renamed xNNbittype to xNNinttype
* renamed registers32 to registersint
  * replace some s32bit,u32bit with torddef([su]inttype).def.typ
2004-02-03 22:32:53 +00:00
Jonas Maebe
694eee6cae + support to store ttempcreate/ref/deletenodes in registers
* put temps for withnodes and some newnodes in registers
   Note: this currently only works because calling ungetregister()
     multiple times for the same register doesn't matter. We need again
     a way to specify that a register is currently a regvar and as such
     should not be freed when you call ungetregister() on it.
2004-02-03 16:46:51 +00:00
florian
e35b683e4d + added prefetch(const mem) support 2004-02-02 20:41:59 +00:00
daniel
97e87aaebc * reginfo now also only allocated during register allocation
* third round of gdb cleanups: kick out most of concatstabto
2004-01-26 16:12:27 +00:00
Jonas Maebe
a75ef67bfd * properly fixed assigned() mess (by handling it separately in ncginl)
-> all assigned()-related tests in the test suite work again
2003-12-31 20:47:02 +00:00
peter
ae6be6bc0e * support type convs for write typed 2003-12-27 22:27:55 +00:00
Jonas Maebe
fd8625f3eb * if there are assertions, include pi_do_call in procinfo.flags 2003-12-08 21:17:12 +00:00
peter
90a0c832e4 * Initialize() added 2003-11-29 16:19:54 +00:00
peter
f663d2488f * cross unit inlining fixed 2003-11-10 22:02:52 +00:00
peter
96f9973b46 * taicpu_abstract.oper[] changed to pointers 2003-10-21 15:15:35 +00:00
peter
95f132db3d * set_varstate cleanup 2003-10-08 19:19:45 +00:00
peter
70fe77ca7c * procinfo unit contains tprocinfo
* cginfo renamed to cgbase
  * moved cgmessage to verbose
  * fixed ppc and sparc compiles
2003-10-01 20:34:48 +00:00
peter
420c1cdfe1 * don't call firstpass in resulttypepass 2003-09-23 21:10:11 +00:00
peter
8af51ea6d3 * locals and paras are allocated in the code generation
* tvarsym.localloc contains the location of para/local when
    generating code for the current procedure
2003-09-23 17:56:05 +00:00
peter
76a53a375d * varspez in calls to push_addr_param 2003-09-16 16:17:01 +00:00
florian
eb9a587759 + support of NaN and Inf in the compiler as values of real constants 2003-09-06 16:47:24 +00:00
peter
0dceec9a64 * current_procdef removed, use current_procinfo.procdef instead 2003-06-13 21:19:30 +00:00
Jonas Maebe
4d70aebb1b * constant evaluation of trunc() and round() now also gives 64 bit
results
2003-05-31 21:29:04 +00:00
Jonas Maebe
cb279b2029 * changed tt_persistant to tt_persistent :)
* tempcreatenode now doesn't accept a boolean anymore for persistent
    temps, but a ttemptype, so you can also create ansistring temps etc
2003-05-17 13:30:08 +00:00
peter
26d78ff5c9 * moved implicit exception frame from ncgutil to psub
* constructor/destructor helpers moved from cobj/ncgutil to psub
2003-05-11 21:37:03 +00:00
peter
1a2eedd767 * self moved to hidden parameter
* removed hdisposen,hnewn,selfn
2003-05-09 17:47:02 +00:00
peter
60978ba89c * aktprocdef renamed to current_procdef
* procinfo renamed to current_procinfo
  * procinfo will now be stored in current_module so it can be
    cleaned up properly
  * gen_main_procsym changed to create_main_proc and release_main_proc
    to also generate a tprocinfo structure
  * fixed unit implicit initfinal
2003-04-27 11:21:32 +00:00
peter
c21ca3dfa0 + added currency support based on int64
+ is_64bit for use in cg units instead of is_64bitint
  * removed cgmessage from n386add, replace with internalerrors
2003-04-23 20:16:03 +00:00
peter
47489f2376 * firstpass uses expectloc
* checks if there are differences between the expectloc and
    location.loc from secondpass in EXTDEBUG
2003-04-22 23:50:22 +00:00
Jonas Maebe
9879f684d2 * don't allow erroneuos read(typedfile,...) statements 2002-12-30 12:54:45 +00:00
Jonas Maebe
8bbf574e8b * fixed web bug #2296 2002-12-30 12:48:07 +00:00
peter
46ed8eb932 * fixed pushing of records>8 bytes with stdcall
* simplified hightree loading
2002-12-17 22:19:33 +00:00
florian
1da30f2610 * tcallnode.paraitem introduced, all references to defcoll removed 2002-12-15 21:30:12 +00:00
peter
1b116848d8 * cdecl array of const fixes 2002-11-27 20:04:38 +00:00
peter
67153fd9a1 * the never ending story of tp procvar hacks 2002-11-27 15:33:46 +00:00
peter
34e8266af4 * case statement inlining added
* fixed inlining of write()
  * switched statementnode left and right parts so the statements are
    processed in the correct order when getcopy is used. This is
    required for tempnodes
2002-11-27 02:37:12 +00:00
peter
f3fc72095f * splitted defbase in defutil,symutil,defcmp
* merged isconvertable and is_equal into compare_defs(_ext)
  * made operator search faster by walking the list only once
2002-11-25 17:43:16 +00:00
peter
ef708fdab9 * Swap(QWord) constant support 2002-11-18 18:33:51 +00:00
peter
a496dbe1ff * pass proccalloption to ret_in_xxx and push_xxx functions 2002-11-18 17:31:54 +00:00
peter
2facc2b2f7 * load threadvar input/output variable in temp 2002-11-16 17:59:31 +00:00