tdinfo3.inc
来自「Turbo Pascal 6.0编译器源码」· INC 代码 · 共 446 行
INC
446 行
l0b84 proc near
mov ax,es
cmp ax,d3cb2
jne @@3
cmp ax,LastUnit
je @@3
mov bx,es:[di+4]
cmp d3cbe,0
je @@1
test bx,8000h
jz @@3
and bx,7fffh
mov es:[di+4],bx
jmp short @@2
@@1: test bx,8000h
jnz @@3
or es:[di+4],8000h
@@2: push es di
mov bl,es:[di]
xor bh,bh
shl bx,1
call cs:ProcessSwitch[bx]
pop di es
@@3: ret
l0b84 endp
ProcessVoid proc near
mov ax,1
jmp Error
ProcessVoid endp
ProcessString proc near
mov al,3
mov dx,es:[di+2]
mov ah,dl
dec ah
xor bx,bx
call l10f1
ret
ProcessString endp
ProcessOrdinal proc near
push es di
mov bx,es:[di+10h]
mov di,es:[di+0eh]
mov es,es:[bx]
mov bx,es:[di+4]
and bx,7fffh
pop di es
mov al,es:[di]
mov dx,es:[di+2]
mov cl,es:[di+1]
mov al,8
test cl,1
jz @@1
mov al,4
@@1: test cl,4
jz @@2
inc al
@@2: test cl,8
jz @@3
inc al
@@3: xor ah,ah
call l10f1
mov ax,es:[di+6]
mov bx,es:[di+8]
mov cx,es:[di+0ah]
mov dx,es:[di+0ch]
call StoreType
ret
ProcessOrdinal endp
ProcessEnum proc near
push es di
mov dx,di
mov ax,es
mov bx,es:[di+10h]
mov di,es:[di+0eh]
mov es,es:[bx]
cmp di,dx
jne @@1
mov cx,es
cmp ax,cx
je @@2
@@1: call l0b84
mov bx,es:[di+4]
and bx,7fffh
mov cx,es:[di+1ch]
jmp short @@8
@@2: test d3caa,200h
jz @@3
mov ax,Cnt.MemberCount
mov es:[di+1ch],ax
@@3: push ax
push es:[di+1]
mov cx,es:[di+0ah]
inc cx
add di,1eh
mov si,di
mov d3ce6.B0,0
@@4: push cx bx
mov bl,es:[si+3]
xor bh,bh
lea di,[bx+si+4]
pop bx
call l0f1f
pop cx
mov si,di
add si,8
loop @@4
call PatchMember
pop cx
mov bx,8
test cl,1
jz @@5
mov bx,2
@@5: test cl,4
jz @@6
inc bx
inc bx
@@6: test cl,8
jz @@7
inc bx
inc bx
@@7: pop cx
@@8: pop di es
push cx
mov dx,es:[di+2]
mov ax,29h
call l10f1
mov ax,es:[di+6]
mov bx,es:[di+0ah]
pop cx
xor dx,dx
call StoreType
ret
ProcessEnum endp
ProcessArray proc near
push d3ce2 d3ce4 es di es di
mov bx,es:[di+8]
mov di,es:[di+6]
mov es,es:[bx]
call l0b84
mov ax,es:[di+4]
and ax,7fffh
mov d3ce2,ax
pop di es
mov bx,es:[di+0ch]
mov di,es:[di+0ah]
mov es,es:[bx]
call l0b84
mov ax,es:[di+4]
and ax,7fffh
mov d3ce4,ax
pop di es
mov al,1ch
xor ah,ah
mov dx,es:[di+2]
mov bx,d3ce2
call l10f1
mov ax,d3ce4
xor bx,bx
xor cx,cx
xor dx,dx
call StoreType
pop d3ce4 d3ce2
ret
ProcessArray endp
ProcessRecord proc near
push d3ce6
xor bx,bx
mov si,es:[di+8]
or si,si
jz @@5
call l0f5e
push es di Cnt.MemberCount
mov bx,-1
mov d3ce6.B0,0
@@1: push bx
mov bl,es:[si+3]
xor bh,bh
lea di,[bx+si+4]
pop bx
push es:[di+3]
mov ax,es:[di+1]
push ax
cmp ax,bx
jg @@2
mov bx,ax
xor cx,cx
mov al,40h
call _StoreMember
@@2: call l0ef8
pop bx si
or si,si
jnz @@1
cmp bx,-1
jne @@3
call StoreMember
jmp short @@4
@@3: call PatchMember
@@4: pop bx di es
@@5: mov al,1eh
xor ah,ah
mov dx,es:[di+2]
call l10f1
pop d3ce6
ret
ProcessRecord endp
ProcessObject proc near
push d3ce6 es di
mov si,es:[di+8]
or si,si
jz @@9
call l0f8b
mov ax,Cnt.MemberCount
push es di ax
cmp Phase,0
jne @@1
mov es:[di+1ah],ax
@@1: xor cl,cl
push bx
mov bl,es:[si+3]
xor bh,bh
lea di,[bx+si+4]
pop bx
mov al,es:[si+2]
and al,7fh
cmp al,53h
je @@2
push es:[di+3]
mov d3ce6.B0,cl
call l0ef8
jmp short @@6
@@2: push es:[di+0eh]
or cl,48h
cmp word ptr es:[di+8],0
je @@3
or cl,44h
@@3: test byte ptr es:[di],20h
jz @@4
or cl,42h
@@4: test byte ptr es:[di],40h
jz @@5
or cl,41h
@@5: mov d3ce6.B0,cl
call l0f28
@@6: pop si
or si,si
jnz @@1
pop ax
cmp ax,Cnt.MemberCount
jne @@7
call StoreMember
jmp short @@8
@@7: call PatchMember
@@8: pop di es
@@9: mov al,2eh
xor ah,ah
mov dx,es:[di+2]
mov bx,Cnt.ClassCount
call l10f1
mov bx,es:[di+0ch]
mov ax,bx
mov di,es:[di+0ah]
or ax,di
jz @@10
mov es,es:[bx]
mov ax,es:[di+4]
and ax,7fffh
push Cnt.ParentCount
call StoreParent
pop ax
mov bx,1
@@10: pop di es
mov cx,es:[di+1ah]
mov dx,es:[di+12h]
mov d3ce6.B1,8
call StoreClass
pop d3ce6
ret
ProcessObject endp
ProcessProcType proc near
mov bx,1
mov cx,es:[di+8]
mov ax,es:[di+6]
mov dx,ax
or ax,cx
jz @@1
push es di
mov bx,cx
mov di,dx
mov es,es:[bx]
call l0b84
mov bx,es:[di+4]
and bx,7fffh
pop di es
@@1: mov al,23h
mov ah,5
mov cx,es:[di+0ah]
jcxz @@5
push di
add di,0ch
@@2: test byte ptr es:[di+4],4
jz @@3
or ah,80h
jmp short @@4
@@3: add di,5
loop @@2
@@4: pop di
@@5: mov dx,es:[di+2]
call l10f1
ret
ProcessProcType endp
ProcessFile proc near
mov ax,27h
call l0ed4
ret
ProcessFile endp
ProcessPointer proc near
mov ax,16h
call l0ed4
ret
ProcessPointer endp
ProcessSet proc near
mov ax,25h
call l0ed4
ret
ProcessSet endp
l0ed4 proc near
push ax es di
mov bx,es:[di+8]
mov di,es:[di+6]
mov es,es:[bx]
call l0b84
mov bx,es:[di+4]
and bx,7fffh
pop di es ax
mov dx,es:[di+2]
call l10f1
ret
l0ed4 endp
l0ef8 proc near
push es di si
mov bx,es:[di+7]
mov di,es:[di+5]
mov es,es:[bx]
mov cx,es:[di+4]
and cx,7fffh
l0f0e label near
mov al,d3ce6.B0
mov bx,Cnt.NameCount
call _StoreMember
pop si di es
call StoreName
ret
l0ef8 endp
l0f1f proc near
push es di si
mov cx,es:[di+4]
jmp l0f0e
l0f1f endp
l0f28 proc near
mov bx,es:[di+2]
add bx,es:[0ch]
mov ax,es:[bx]
mov bx,es:[bx+4]
add bx,es:[0eh]
cmp word ptr es:[bx],-1
je @@1
push es di si
mov bx,ax
mov es,ProcInfo
mov cx,es:[bx+2]
mov bx,es:[bx+4]
mov al,d3ce6.B0
call _StoreMember
pop si di es
@@1: ret
l0f28 endp
l0f5e proc near
push es di si bx
@@1: push bx
mov bl,es:[si+3]
xor bh,bh
lea di,[bx+si+4]
pop bx
push es
push es:[di+3]
mov bx,es:[di+7]
mov di,es:[di+5]
mov es,es:[bx]
call l0b84
pop si es
or si,si
jnz @@1
pop bx si di es
ret
l0f5e endp
l0f8b proc near
push es di si bx
@@1: mov bl,es:[si].seName
xor bh,bh
lea di,[bx+size TSymbol+si]
mov al,es:[si].seType
and al,not t_Private
cmp al,t_Proc
jne @@3
push es es:[di].psType.tdNext
push d3ce8 d3cd8 CurName CurSymbol
mov CurSymbol.Segm,es
mov CurSymbol.Offs,di
mov CurName.Segm,es
mov CurName.Offs,si
call ProcessProc
jc @@2
les si,CurName
call StoreName
@@2: pop CurSymbol CurName d3cd8 d3ce8
jmp short @@4
@@3: push es es:[di].vsMap
mov bx,es:[di].vsType.Segm
mov di,es:[di].vsType.Offs
mov es,es:[bx]
call l0b84
@@4: pop si es
or si,si
jz @@5
jmp @@1
@@5: pop bx si di es
ret
l0f8b endp
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?