|
|
DataMuseum.dkPresents historical artifacts from the history of: RC3500 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC3500 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 9216 (0x2400)
Types: TextFileVerbose
Names: »editpass4«
└─⟦2c55ea56f⟧ Bits:30001844 SW-save af projekt 1000, Alarm-system
└─⟦6b41451d2⟧
└─⟦this⟧ »editpass4«
; editpass4
;(edit pass4text
;finis)
; 81.05.11 page 57 procedure inclusion
; 81.05.12 page 60 procedure actual
; page 31 procedure std_name, niltype size 2
; 81.05.29 pool n; ok
; -channel stat i z80
; function^.field; ok
; 81.06.09 save current lix; ok
; var a:alfa:='abc'; ok
; #b10000000000000000; ok
; page 1
l./versionpass4 = /, d1, i/
versionpass4 = 400; (* version this pass 4.00 *)
versionpass3 = 2; (* pass 3 version must be 2.xx *)
/,
p-1
; page 9
l./context_kind = /,
l./var_param,/, r/value_param,/value_param, return_param,/,
l./error_types = (/,
l./);/, r/)/, error_channel)/,
; page 11
l./array_types, index_types,/,
r/a/direct_return, a/,
l./: boolean/, r/ :/, param_list : /,
l./undef_nix,/, i/
niltype_nix,
/,
; page 17
l./procedure pass4error(e:/,
l./not_implemented:/, l1, i/
error_channel: writeln('channel statement not implemented in z80');
/,
; page 20
l./procedure initialize;/,
; page 21
l./export:=false;/, l1, i/
param_list:=true;
/,
; page 22
l./array_types:=/, i/
direct_return:=[int_type, char_type, bool_type, scalar_type,
dyn_subrange, pointer_type];/,
; page 24
; page 31
l./procedure std_name(ty:/,
l./xniltype:/,
l./size:=/, r/0/2/,
i/
niltype_nix:=nix;
/,
; page 32
l./procedure sub_def;/,
; page 33
l./size:=var_size(min,max);/, i/
dynamic:=false;
/,
l./begin (*dynamic*)/,
l./offset:=alloc_var(/, i/
word_allign;
/,
l./error(not_implemented)/, l1, i/
min:=0; max:=1;
/,
; page 35
l./procedure array_def(pack/,
; page 36
l./offset:=alloc_var(array_template_size);/,
i/
word_allign;
/,
; page 40
l./procedure pool_def;/,
l./data_size:=size/, i/
if stack[t] = niltype_nix then
data_size:=0
else
/,
; page 41
l./procedure formal_param(c:/,
i/
function alloc_process_param : integer; (* return = param length *)
var type_nix, no, param_size, byte_displ, parameter_length : integer;
begin
for no:=param_number - 1 downto 0 do
with nametable[ stack[t-no] ] do begin
type_nix:=comp_type;
if context = value_param then
param_size:=nametable[type_nix].size
else
param_size:=pointer_length;
if nametable[type_nix].dynamic then begin
error(error_dyn);
param_size:=0;
end;
byte_displ:=0;
if (* **z80** *) versionz80 then begin
if param_size = byte_length then param_size:=word_length;
end
else
begin (* **lambda** *)
if nametable[type_nix].context in index_types then
if param_size = byte_length then byte_displ:=1;
if odd(param_size) then param_size:=param_size+1;
end;
niv:=current_niv;
offset:=alloc_var(param_size);
offset:=offset+byte_displ;
end; (* for .. with .. *)
if (* **z80** *) versionz80 then
parameter_length:=-current_offset
else
(* **lambda** *)
parameter_length:=current_offset + 1;
display[this_level].parameter_length:=parameter_length;
alloc_process_param:=parameter_length;
end; (* alloc process param *)
function alloc_routine_param : integer; (* return = param length *)
var q, no, parameter_offset, return_size, param_size,
parameter_length, byte_displ : integer;
function alloc_param(size : integer) : integer;
begin
if (* **z80** *) versionz80 then begin
(* parameter_offset >= 0 *)
alloc_param:=parameter_offset;
if top_address - parameter_offset >= size then
parameter_offset:=parameter_offset + size
else
error(address_overflow);
end
else
begin
(* **lambda** *)
(* parameter_offset <= 0 *)
if top_address + parameter_offset >= size then
parameter_offset:=parameter_offset - size
else
error(address_overflow);
alloc_param:=parameter_offset;
end;
end; (* alloc_param *)
begin (* alloc routine param *)
return_size:=0;
q:=param_number - 1;
if mode = func_mode then
with nametable[ stack[t-q] ] do begin
if nametable[comp_type].context in direct_return then begin
context:=return_param;
return_size:=nametable[comp_type].size;
if return_size=byte_length then return_size:=word_length;
end;
if nametable[comp_type].dynamic then error(error_dyn);
end;
if (* **z80** *) versionz80 then
parameter_offset:=0
else
(* **lambda** *)
parameter_offset:=-1;
parameter_length:=0;
for no:=0 to q do
with nametable[ stack[t-no] ] do begin
if context = var_param then
param_size:=pointer_length
else
(* value param and return param *)
with nametable[ comp_type] do begin
param_size:=size;
if dynamic then begin
error(error_dyn);
param_size:=0;
end;
end;
byte_displ:=0;
if (* **z80** *) versionz80 then begin
if param_size = byte_length then param_size:=word_length;
end
else
begin (* **lambda** *)
if nametable[comp_type].context in index_types then
if param_size = byte_length then byte_displ:=1;
if odd(param_size) then param_size:=param_size + 1;
end;
parameter_length:=parameter_length + param_size;
niv:=current_niv;
offset:=alloc_param(param_size);
offset:=offset + byte_displ;
end; (* for ... with .. *)
parameter_length:=parameter_length - return_size;
alloc_routine_param:=parameter_length;
end; (* alloc routine param *)
/,
l./procedure formal_param(c:/,
l./if c=value_param/,
d./if odd(parm_size) then/, d,
l./niv:=current_niv;/, d2,
; page 43
l./procedure new_block;/,
l./if (* **z80**/,
d./display[this_level]./,
l./proc_mode, func_mode:/, l2, i/
if param_list then
parameter_length:=alloc_routine_param
else
parameter_length:=size; (* routine previous defined *)
param_list:=true;
/,
l./size:=parameter/, d, i/
display[this_level].parameter_length:=parameter_length;
size:=parameter_length;
/,
l./put_arg1(/, d,
l./process_mode:/, l1, i/
parameter_length:=alloc_process_param;
/,
l./t:=t-param_number-1;/, i/
display[this_level].saved_lix:=current_lix;
/,
l./procedure external_;/,
l./if (* **z80/, d4, i/
size:=alloc_routine_param;
/,
l./pop_level;/, i/
display[this_level].saved_lix:=current_lix;
/,
l./procedure forward_;/,
l./size:=/, r/current_offset/alloc_routine_param/,
l1, i/
display[this_level].saved_lix:=current_lix;
/,
l./current_offset:=nametable/, d, i/
param_list:=false;
/,
; page 45
l./procedure end_block;/,
l./if (* **z80/, d6, i/
if (* **lambda** *) not versionz80 then
var_length:=var_length+1;
if mode = process_mode then
var_length:=var_length - display[this_level].parameter_length
else
var_length:=var_length - activation_record_length;
/,
l./put1(zlength/, r/)/, display[this_level].parameter_length)/,
r/1/2/,
; page 48
l./procedure init_values(nix/,
l./if ops[ot].context=lconst/,
l./put0(zinitialize/, i/
if ops[ot].kind = array_type then begin
push;
ops[ot].size:=size;
adjust_string(os, ot);
pop;
end;
/,
; page 55
l./procedure equality(op:/,
; page 56
l./int_type,char_type,bool_type,scalar_type:/,
r/:/,dyn_subrange:/,
; page 57
l./procedure inclusion;/,
l./load_expr;/, i/
get_pushed_consts;
/,
; page 58
l./procedure func_call;/,
l1, r/;/; via_stack : boolean;/,
l./put1(zextfunccall/, r/1/2/, r/)/, size)/,
l./else put2(zfunccall/, r/)/, size)/,
r/2/3/,
l./result_size:=size;/, l1, i/
via_stack:=context in direct_return;
/,
l./context:=func_result;/, l1, i/
if not via_stack then begin
/,
l./offset:=q;/, l1, i/
end (* not via stack *)
else
alloc_size:=0;
/,
l./with ops/, i/
via_stack:=via_stack or (std>0);
/,
l./func_value:=std=0/, r/std=0/via_stack/,
l./procedure end_func_call;/,
l./if ops/, r/if/if not/,
l./put0(zendfunccall/, r/)/,ops[ot].size)/,
r/0/1/,
l./procedure proc_call;/,
l./put1(zextproccall/, r/1/2/, r/)/, size)/,
l./put2(zproccall/, r/2/3/, r/)/,size)/,
; page 60
l./procedure actual;/,
l1, i/
var s : integer;
/,
l./ops[ot].size:=/, l1, i/
s:=ops[ot].size;
if s < word_length then s:=word_length;
/,
l./otherwise put_arg2(addr_typ/, l2, i/
return_param: put1(zreturnparam, s);
/,
l./procedure end_actual;/,
l./var_param:/, l1, i/
return_param: ; (* no action *)
/,
; page 69
l./procedure var_;/,
l./with ops[ot]/, i/
ops[ot].func_value:=false;
/,
l./procedure arrow;/,
l./begin/, l1, i/
if ops[ot].func_value then begin
type_ref;
with ops[ot] do begin
state:=addr; context:=expr;
func_value:=false;
end;
end
else
begin
/,
l./end;/, i/
end;
/,
; page 71
l./procedure literal;/,
l./num_const:/,
l./if val>max_int then val:=val + bit_0_8;/,
r/>/>=/,
; page 76
l./procedure end_struc;/,
l./dynamic:=false;/, i/
func_value:=false;
/,
; page 81
l./xchannel:put0(zchannel);/,
d, i/
xchannel: begin
if (* **z80** *) versionz80 then error(error_channel);
put0(zchannel);
end;
/,
f
«eof»