Skip to content

[VFP] Problem with /fox3 and accessing protected/private members #2056

Description

@cpyrgas

Following problems exist only with protected/private members, they all cause a Runtime Error: No exported variable . Not high priority of course

#pragma options("fox3", enable)
#pragma options("allowdot", enable)
#pragma options("lb", enable)
#pragma options("memvar", enable)
#pragma options("undeclared", enable)

CLASS Customers
	STATIC PROTECT StaticProtect AS INT
	STATIC PROTECT StaticPrivate AS INT
	
	PROTECT InstanceProtect AS INT
	PRIVATE InstancePrivate AS INT
	
	STATIC PROPERTY StaticProperty AS INT AUTO
	STATIC PROPERTY StaticProtectedProperty AS INT AUTO
	PROPERTY InstanceProperty AS INT AUTO
	PROPERTY OnlyGetProperty AS INT GET 100
	
	STATIC METHOD StaticMethod() AS VOID
		Customers.StaticProtect := 200
		xAssert( Customers.StaticProtect == 200 )
		Customers.StaticPrivate := 300
		xAssert( Customers.StaticPrivate == 300 )

		LOCAL localthis := Customers{} AS Customers
		localthis.InstanceProtect := 321
		xAssert( localthis.InstanceProtect == 321 )

		localthis.InstancePrivate := 333
		xAssert( localthis.InstancePrivate == 333 )

		LOCAL localusual := Customers{} AS USUAL
		localusual.InstanceProtect := 321
		xAssert( localusual.InstanceProtect == 321 )
		localusual.InstancePrivate := 333
		xAssert( localusual.InstancePrivate == 333 )
	
	METHOD InstanceMethod() AS VOID
		Customers.StaticProtect := 200
		xAssert( Customers.StaticProtect == 200 )
		Customers.StaticPrivate := 300
		xAssert( Customers.StaticPrivate == 300 )

		LOCAL localthis := Customers{} AS Customers
		localthis.InstanceProtect := 321
		xAssert( localthis.InstanceProtect == 321 )

		localthis.InstancePrivate := 333
		xAssert( localthis.InstancePrivate == 333 )

		LOCAL localusual := Customers{} AS USUAL
		localusual.InstanceProtect := 321
		xAssert( localusual.InstanceProtect == 321 )
		localusual.InstancePrivate := 333
		xAssert( localusual.InstancePrivate == 333 )
	
END CLASS

FUNCTION Start( ) AS VOID
	Customers.StaticMethod()
	Customers{}:InstanceMethod()
	
PROC xAssert(l AS LOGIC) AS VOID
IF .NOT. l
	THROW Exception{"Incorrect result in line " + System.Diagnostics.StackTrace{TRUE}:GetFrame(1):GetFileLineNumber():ToString()}
END IF
? "Assertion passed"

Metadata

Metadata

Type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions