NEW
  AUTO 3,1
*--------------------------------------
STMT.Get		jsr CC.GetCharNB
				jsr CC.IsLetter
				ldx #$ff
				bcc .20

				>LDYA L.CC.PREOPS		++var ?
				jsr CC.LookupOP
				bcs .9

.20				stx StmtPreOp

				jsr SYM.Lookup			var or func() ?
				bcs .99

				ldy #SYM.SC
				lda (ZPLookupSymPtr),y
				cmp #SYM.SC.TYPEDEF
				bne .60
*--------------------------------------
				jsr CORE.GetNCharNB
				bcs .9

				ldy #SYM.Q
				lda (ZPLookupSymPtr),y
				pha
				lda (ZPLookupSymPtr)
				pha

				jsr SYM.LookupFree

				ply
				pla

				sec						Reset Buffer

				jmp DECL.YAC
*--------------------------------------
.60				ldy #SYM.Q
				lda (ZPLookupSymPtr),y
				bit #SYM.Q.FUNC
				beq .61

				bit StmtPreOp
				bpl .9					++func ????????

				jsr F.CallNoRetV		func( ... );
				bcs .99

				jmp SYM.LookupFree
*--------------------------------------
.61				jsr STMT.SetVar
				bcs .99

				jmp SYM.LookupFree

.9				lda #E.CSYN
				sec
.99				rts
*--------------------------------------
STMT.SetVar		stz ExpState

				jsr EXP.POSTOPS			var++, var[0]... ?
				bcs .99

				ldx StmtPreOp
				jsr EXP.PREOPS			apply ++var, ....
				bcs .99

				jsr CC.GetCharNB
				bcs .90

				jsr CC.IsEndArg			var++; or ++var; ?
				bcc .8

				jsr CC.LookupAOP		var=, var+= ... ?
				bcs .90

			cpx #0						TOTO : all AOPS
			bne *

				lda ExpState
				bmi .90					VonStack

				asl

				bmi .7					AinPTR

				asl
				bmi .6					AonStack

				jsr EXP.GetAddr1
				bcc .7

				rts

.6				>LDYA L.PCC.PopAddr1
				jsr CODE.EmitPCC
				bcs .99

.7				ldy #SYM.Q
				lda (ZPLookupSymPtr),y
				pha
				lda (ZPLookupSymPtr)
				tay
				pla						get expected T/Q

				jsr EXP.Eval
				bcs .99

				jmp SYM.PopValue

.8				clc
				rts

.90				lda #E.CSYN
				sec

.99				rts
*--------------------------------------

*--------------------------------------
STMT.Stmt.END	ldy StmtPtr
				beq STMT.End.8			Global context

				lda (StmtStk),y
				bmi STMT.End.8			local F context
* in an instruction ...
				iny 					STMT.TERM
				lda (StmtStk),y
				cmp #'}'
				beq STMT.End.8			in a STMT...

				cmp #';'				must be ';' on stack....
				bne STMT.End.9
				
				jsr STMT.End
				bcc STMT.Stmt.END

				rts

STMT.End.9		lda #E.STACKERROR
				sec
				rts

STMT.End.8		clc
				rts
*--------------------------------------
STMT.CPStmt.END	ldy StmtPtr
				beq STMT.End.9

				lda (StmtStk),y
				bpl .1

				jmp F.Def.END			local F context

.1				iny
				lda (StmtStk),y			STMT.TERM

				cmp #'}'				must be '}' on stack....
				bne STMT.End.9
*--------------------------------------
STMT.End		ldy StmtPtr				STMT.KW
				lda (StmtStk),y
				tax
				jmp (J.CC.KW.END,x)
*--------------------------------------
STMT.New00		lda #0
				jsr CC.Push				STMT.hMEM
				bcs STMT.New.RTS

				jsr CC.Push				STMT.MemPtr
				bcs STMT.New.RTS

STMT.New		lda #';'				STMT.TERM
				jsr CC.Push
				bcs .99

				>LDA.G CC.CmdSave		STMT.KW
				jmp CC.Push

.99
STMT.New.RTS	rts
*--------------------------------------
STMT.SetType	jsr CORE.GetNCharNBNL
				bcs STMT.SetType.9

				ldx #';'

				cmp #'{'
				bne STMT.SetType.1

STMT.SetTypeCP	jsr SCOPE.New
				bcs STMT.New.RTS

				ldx #'}'

STMT.SetType.1	txa
				ldy StmtPtr
				iny						STMT.TERM
				sta (StmtStk),y

				clc
				rts

STMT.SetType.9	lda #E.CSYN
				sec
				rts
*--------------------------------------
STMT.Close		lda StmtPtr
				clc
				adc #STMT.hMEM
				tay
				lda (StmtStk),y
				beq .1

				>SYSCALL FreeMem

.1				ldy StmtPtr				STMT.KW
				iny						STMT.TERM
				lda (StmtStk),y
				cmp #'}'
				bne .2

				jsr SCOPE.Close			{};
				bcs .99

.2				lda StmtPtr
				clc
				adc #STMT
				sta StmtPtr

				clc

.99				rts
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.stmt
LOAD usr/src/bin/cc.s
ASM
