* source/compiler/harbour.c
- Removed static qualifier from hb_compVariableGetPos() so it can be called from hb_compStrongType()
* source/compiler/hbpcode.c
+ Added logic to hb_compStrongType() to allow assigment of NIL to any type variable.
+ Added "Adaptive Type Checking" to control type mismatch in undeclared variables.
* include/hberrors.h
! Added #define HB_COMP_ARRAY_ASSIGN_TYPE to HB_COMP_WARN_ARRAY_ASSIGN_TYPE
* source/compiler/hbgenerr.c
* Added : Moved "Suspecious ..." to level w4
* tests/testwarn.prg
+ Added code to demonstrate "Adaptive Type Checking".
174 lines
2.7 KiB
Plaintext
174 lines
2.7 KiB
Plaintext
//
|
|
// $Id$
|
|
//
|
|
|
|
// This file is OK to have warnings.
|
|
#ifdef __HARBOUR__
|
|
#pragma -es0
|
|
#else
|
|
|
|
#TRANSLATE AS CHAR ARRAY =>
|
|
#TRANSLATE AS CHARACTER ARRAY =>
|
|
#TRANSLATE AS STRING ARRAY =>
|
|
|
|
#TRANSLATE AS NUM ARRAY =>
|
|
#TRANSLATE AS NUMERIC ARRAY =>
|
|
|
|
#TRANSLATE AS DATE ARRAY =>
|
|
#TRANSLATE AS ARRAY ARRAY =>
|
|
#TRANSLATE AS BLOCK ARRAY =>
|
|
#TRANSLATE AS OBJECT ARRAY =>
|
|
|
|
#TRANSLATE AS BOOL ARRAY =>
|
|
#TRANSLATE AS BOOLEAN ARRAY =>
|
|
#TRANSLATE AS LOGICAL ARRAY =>
|
|
|
|
#TRANSLATE AS VAR ARRAY =>
|
|
#TRANSLATE AS VARIANT ARRAY =>
|
|
|
|
|
|
#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( cVar AS STRING, nVar AS NUMERIC ) AS NUMERIC
|
|
|
|
DECLARE FUNCTION cOtherFunc( ) AS CHAR
|
|
|
|
DECLARE FUNCTION cOtherFunc( ) AS CHAR
|
|
|
|
DECLARE FUNCTION seconds() AS NUM
|
|
|
|
DECLARE FUNCTION int( n AS NUMERIC ) AS NUMERIC
|
|
|
|
DECLARE FUNCTION TEST AS NUMERIC
|
|
|
|
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 CHARACTER ARRAY
|
|
|
|
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
|
|
|
|
*/
|