[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