[Lazarus] Where is the System Unit source?
Curt Carpenter
1cjcarpenter at att.net
Wed Nov 14 16:58:07 CET 2012
Hello Sven.
Thank you for the help.
I tried this code:
procedure test;
var c: integer;
loc,hic: byte;
begin
c := 1000;
hic := hi(c);
loc := lo(c);
end;
The result is always hic = 0 and loc = 0 for me.
I have looked in ninl.pas as you suggested, and found the in_lo_xxxxxx
items around line 2780 in that file. I note that in_lo_integer and
in_hi_integer do not appear among the items listed.
In fpc/rtl/inc/system.inc, I find Hi(b:byte): byte declared.
in fpc/rtl/inc/systemh.inc, I find only declarations for hi and lo.
I'm guessing that somehow hi(i:integer): byte and lo(i:integer): byte
got dropped from the code base somehow (but remained in the fpc
documentation).
Perhaps it's located somewhere that I have not looked yet?
Anyway -- thanks to all who gave me some pointers! I don't have the
skill to try to suggest a fix, if in fact one is required. The
work-around for me is to simply use word rather than integer types.
Regards,
Curt Carpenter
On 11/14/2012 4:50 AM, Sven Barth wrote:
> Am 14.11.2012 05:19, schrieb Curt Carpenter:
>> Hello.
>>
>> I am using Lazarus 0.9.30.4 with FPC 2.6.0 under Windows XP.
>>
>> In my system, the two functions "hi(x)" and "lo(x)" don't seem to
>> work if the argument x is an integer variable (although both
>> functions work fine if x is a WORD variable).
>>
> Why do you come to the conclusion that they work incorrectly? Do you
> have an example where you can state what you expect and what you get?
>
>> To see if I could figure out why this is, I started trying to find
>> the System unit that contains these two functions. I haven't been
>> able to locate it though.
>
> The hi and lo functions are compiler intrinsics and are not visible in
> code (the compiler generates specific code for them). If you still
> want to explore: they are implemented in compiler/ninl.pas (look for
> "in_XX_YYY" where "XX" is either "hi" or "lo" and "YYY" is "word",
> "long" or "qword").
>
>>
>> Could anyone tell me where I'll find the system unit source? I have
>> the source for FPC, but can's seem to find system.pas anywhere.
>>
> The system units are called "system.pp" (not .pas) and are located for
> each target in rtl/TARGET/system.pp (these usually include files from
> rtl/inc or rtl/TARGET or rtl/PLATFORM) (example for TARGET is win32 or
> linux, example for PLATFORM is i386 or arm)
>
> Regards,
> Sven
>
> --
> _______________________________________________
> Lazarus mailing list
> Lazarus at lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
>
More information about the Lazarus
mailing list