* source/compiler/harbour.l
- Removed: not needed states
- Removed "class method" "class data"
+ Added rules for "declare""
* source/compiler/harbour.y
* Changed rules for DECLARE FUNCTION as per Ryszard suhhestion, New Sysntax is simply:
DECLARE FunName([...]) [As ...]
* Changed rules for DECLARE CLASS as per Ryszard suhhestion, New Sysntax is simply:
DECLARE ClassName MethodName([...]) [As ...] DataVar [As ...]
* source/compiler/harbour.c
! Minor correction to allow final declaration to override previous declaration of same function.
* tests/testwarn.prg
* Modified code to demonstrate syntax functions, classes and objects of a declared class declarations.
262 lines
4.1 KiB
Plaintext
262 lines
4.1 KiB
Plaintext
//
|
|
// $Id$
|
|
//
|
|
|
|
// This file is OK to have warnings.
|
|
#ifdef __HARBOUR__
|
|
#pragma -es0
|
|
#else
|
|
|
|
#TRANSLATE AS ARRAY OF CHAR =>
|
|
#TRANSLATE AS ARRAY OF CHARACTER =>
|
|
#TRANSLATE AS ARRAY OF STRING =>
|
|
|
|
#TRANSLATE AS ARRAY OF NUM =>
|
|
#TRANSLATE AS ARRAY OF NUMERIC =>
|
|
|
|
#TRANSLATE AS ARRAY OF DATE =>
|
|
#TRANSLATE AS ARRAY OF ARRAY =>
|
|
#TRANSLATE AS ARRAY OF BLOCK =>
|
|
#TRANSLATE AS ARRAY OF OBJECT =>
|
|
|
|
#TRANSLATE AS ARRAY OF BOOL =>
|
|
#TRANSLATE AS ARRAY OF BOOLEAN =>
|
|
#TRANSLATE AS ARRAY OF LOGICAL =>
|
|
|
|
#TRANSLATE AS ARRAY OF VAR =>
|
|
#TRANSLATE AS ARRAY OF VARIANT =>
|
|
|
|
|
|
#TRANSLATE AS CHAR =>
|
|
#TRANSLATE AS CHARACTER =>
|
|
#TRANSLATE AS STRING =>
|
|
|
|
#TRANSLATE AS NUM =>
|
|
#TRANSLATE AS NUMERIC =>
|
|
|
|
#TRANSLATE AS DATE =>
|
|
#TRANSLATE AS ARRAY =>
|
|
#TRANSLATE AS BLOCK =>
|
|
#TRANSLATE AS OBJECT =>
|
|
|
|
#TRANSLATE AS BOOL =>
|
|
#TRANSLATE AS BOOLEAN =>
|
|
#TRANSLATE AS LOGICAL =>
|
|
|
|
#TRANSLATE AS VAR =>
|
|
#TRANSLATE AS VARIANT =>
|
|
|
|
#COMMAND DECLARE FUNCTION <*x*> =>
|
|
#endif
|
|
|
|
//DECLARE Function nMyFunc AS NUMERIC
|
|
|
|
DECLARE nMyFunc( cVar AS STRING, @nVar AS NUMERIC ) AS NUMERIC
|
|
|
|
DECLARE cOtherFunc( @cVar as char, optional nVar as num, optional other as variant ) AS CHAR
|
|
|
|
DECLARE cOtherFunc( ) AS CHAR
|
|
|
|
DECLARE seconds() AS NUM
|
|
|
|
DECLARE int( n AS NUMERIC ) AS NUMERIC
|
|
|
|
DECLARE TEST() AS NUMERIC
|
|
|
|
DECLARE MyClass ;
|
|
nMyFunc( nVal As Num ) As Num ;
|
|
nMyFunc( nVal As Num ) As Num ;
|
|
cMyData ;
|
|
FinalMethod
|
|
|
|
DECLARE MyClass ;
|
|
nMyFunc( nVal As Num ) As Num
|
|
|
|
FIELD a AS CHAR
|
|
FIELD b AS CHAR
|
|
|
|
MEMVAR Var1 AS CHAR
|
|
|
|
STATIC lGlobal AS LOGICAL
|
|
|
|
PROCEDURE THEMAIN( optional )
|
|
|
|
STATIC lStatic := 0, oMyObj As Object From CLASS WrongClass
|
|
LOCAL cVar AS CHAR := [declare function]
|
|
|
|
oMyObj:MyMethod( 2, 3, 4 )
|
|
|
|
FIELD b AS NUM
|
|
USE TEMP
|
|
|
|
MEMVAR a AS NUM
|
|
MEMVAR Var1 AS NUM
|
|
|
|
PRIVATE TEST AS CHAR
|
|
|
|
DO Optional WITH Var1
|
|
DO Optional WITH 1
|
|
DO Optional WITH "something"
|
|
|
|
FOR Conter := Optional TO 10
|
|
? "For with End"
|
|
End
|
|
|
|
IF optional
|
|
? 'Ok'
|
|
ENDIF
|
|
|
|
x := cOtherFunc( 'A' )
|
|
x := cOtherFunc( @Test )
|
|
x := cOtherFunc( 'A', 'A', 'A' )
|
|
|
|
M->TEST := "TEST" //OK - no warnings here
|
|
|
|
a := 'A'
|
|
|
|
b := 'a'
|
|
|
|
if lStatic
|
|
Var1 := .F.
|
|
endif
|
|
|
|
IF lGlobal
|
|
Var1 := .T.
|
|
ENDIF
|
|
|
|
RETURN
|
|
|
|
PROCEDURE SOMEPROC()
|
|
|
|
PRIVATE TEST AS NUMERIC
|
|
|
|
M->TEST := 1 //incorrect warning is printed here
|
|
|
|
FOR M->TEST := 1 TO M->TEST + 10
|
|
? "Incorrect warnings for FOR/NEXT"
|
|
NEXT
|
|
|
|
REPLACE a WITH 1
|
|
|
|
//M->public_var := 0 //core dumps (GPF) on Linux
|
|
|
|
b := 0
|
|
|
|
Var1 := 1
|
|
|
|
if lGlobal = 0
|
|
endif
|
|
|
|
RETURN
|
|
PROC MAIN1()
|
|
|
|
PRIVATE OTHER, TEST AS CHAR
|
|
|
|
Var1 := M->TEST
|
|
|
|
Var2 := Test()
|
|
|
|
? Var1 + 2
|
|
|
|
M->TEST := 1
|
|
M->TEST := "incorrect warning"
|
|
|
|
Test[ 1 ][ 2 ] := "incorrect warning"
|
|
|
|
RETURN
|
|
|
|
Function Test()
|
|
return .t.
|
|
|
|
Function Main2()
|
|
Local n As Numeric, lVar AS LOGICAL
|
|
|
|
n := IIF( lVar, 'A', 3 )
|
|
n := 2
|
|
n := 'a'
|
|
n := seconds() + 2
|
|
n := int( seconds() + 2 )
|
|
|
|
Return( NIL )
|
|
|
|
FUNCTION Main3()
|
|
|
|
LOCAL n AS NUMERIC, cVar AS CHARACTER, a[5,5,5] AS ARRAY OF Char
|
|
|
|
cVar := a[1]
|
|
|
|
n := &SomeFun( 2, 3 )
|
|
|
|
n := ExtFun()
|
|
|
|
cVar := cOtherFunc( 3 )
|
|
|
|
n := nMyFunc( a, cVar ) + 3
|
|
|
|
n := &(cVar)
|
|
|
|
n := "&SomeVar"
|
|
|
|
n := &Var.1
|
|
|
|
n := V&SomeVar.1
|
|
|
|
n[2] := 4
|
|
|
|
cVar := {|nb AS NUMERIC , cb AS CHARACTER, db AS DATE| n := .F., nb := 'A', cb := 1, db := 0, n := 'wrong type', 0 }
|
|
|
|
? "This is a compiler test."
|
|
|
|
n := 'C is Wrong Type for n'
|
|
|
|
n := {1,2,3}
|
|
|
|
n := a
|
|
|
|
IIF( n, 2, 3 )
|
|
|
|
RETURN NIL
|
|
|
|
FUNCTION Hex2Dec( lVar AS LOGICAL )
|
|
|
|
LOCAL nVar AS NUMERIC, cVar AS CHARACTER, lVar2 AS LOGICAL, nNoType := 3
|
|
PRIVATE cMemVar1 AS CHARACTER
|
|
|
|
nVar := .T.
|
|
|
|
nVar := 1
|
|
|
|
nVar := 'A'
|
|
|
|
cVar := 2
|
|
|
|
cVar := 'B'
|
|
|
|
cVar := 2
|
|
|
|
lVar := .T.
|
|
|
|
lVar := nNoType
|
|
|
|
cVar := nVar
|
|
|
|
M->cMemVar1 := 2
|
|
|
|
NondDeclared := 2
|
|
|
|
cVar := {|n AS NUMERIC , c AS CHARACTER, d AS DATE| n := nMyFunc( n,c,d ), c := 2 }
|
|
|
|
nVar := 8 + cVar
|
|
|
|
IF 1
|
|
|
|
ENDIF
|
|
|
|
RETURN NIL
|
|
|
|
Function nMyFunc( nParam )
|
|
|
|
return nParam * 2
|
|
|
|
*/
|