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 + -
显示快捷键?