Предмет:
Тип роботи:
Курсова робота
К-сть сторінок:
82
Мова:
Українська
list_ptr;
current : list_ptr;
obj : obj_ptr;
type_obj : type_def_ptr;
no_name : string;
save_in_array : boolean;
bt:byte;
begin
with def^ do
begin
if base_type in [1,2,4,6,8,$a,$e,$f,$10,$11,$12,$13,$15,$18,$19,$1a,$1b,
$21,$22,$23] then
begin
bt:=255;
case base_type of
1 : begin write('untyped'); bt:=0 end;
2 : begin write('shortint'); bt:=12; end;
4 : begin write('integer'); bt:=12; end;
6 : begin write('longint'); bt:=12; end;
8 : begin write('byte'); bt:=12; end;
$a : begin write('word'); bt:=12; end;
$e : begin write('single'); bt:=10; end;
$f : begin write('double'); bt:=10; end;
$10 : begin write('extended'); bt:=10; end;
$11 : begin write('real'); bt:=11; end;
$12 : begin write('boolean'); bt:=13; end;
$13 : begin write('char'); bt:=14; end;
$15 : begin write('comp'); bt:=10; end;
$18 : begin write('text'); bt:=5; end;
$19 : begin write('file'); bt:=4; end;
$1a : begin write('pointer'); bt:=8; end;
$1b : begin write('string'); bt:=9; end;
{ TPW types }
$21 : begin write('wordbool'); bt:=13; end;
$22 : begin write('longbool'); bt:=13; end;
$23 : begin write('pchar'); bt:=8; end;
end;
if type_type<>bt then
Write('{base type <-> type_type error}');
end
else
begin
if base_type <> 0 then
WriteError('{ unrecognized base type '+hexbyte(base_type)+'}');
case type_type of
0 : write('untyped');
1 : begin {Array}
write('array[');
write_var_type(index_unit,index_ofs);
write('] of ');
write_var_type(element_unit,element_ofs);
end;
2 : begin {Record}
save_kind := last_kind;
last_kind := record_id;
writeln ('Record ');
build_list(field_list,buffer,add_only_offset(buffer,hash_ofs));
current := field_list;
inc(indentation,2);
while current^.offset < $ffff do
begin
obj := add_only_offset(buffer,current^.offset);
print_obj(obj);
current := current^.next;
end;
dec(indentation);
indent;
dec(indentation);
write('end');
last_kind := save_kind;
end;
3 : begin {Object}
save_kind := last_kind;
last_kind := object_id;
write ('Object');
if parent_unit <> 0 then
begin
write('(');
write_var_type(parent_unit,parent_ofs);
write(')');
end;
write(tab,'{ vmt block ',hexword(handle));
if w10 <> 0 then
write(' w10=',hexword(w10));