20000514-09:10 GMT-8 Ron Pinkas <Ron@Profit-Master.com>

* source/compiler/harbour.l
    ! Fixed parse error when DO OPTIONAL WITH ...
    * Changed FROM to FROM CLASS in AS Obect FROM CLASS ... (fixed conflict of FROM with DO FROM ...)
    * Changed AS ... ARRAY to AS ARRAY OF ...
This commit is contained in:
Ron Pinkas
2000-05-14 16:12:23 +00:00
parent aaf0d2c062
commit d1d3198841
3 changed files with 61 additions and 46 deletions

View File

@@ -1,7 +1,14 @@
20000514-09:10 GMT-8 Ron Pinkas <Ron@Profit-Master.com>
* source/compiler/harbour.l
! Fixed parse error when DO OPTIONAL WITH ...
* Changed FROM to FROM CLASS in AS Obect FROM CLASS ... (fixed conflict of FROM with DO FROM ...)
* Changed AS ... ARRAY to AS ARRAY OF ...
20000514-14:55 GMT+1 Ryszard Glab <rglab@imid.med.pl>
*source/compiler/harbour.y
* fixed bug in line counting that was causing no code
* fixed bug in line counting that was causing no code
generated for statements placed within BEGIN/END SEQUENCE
20000513-14:50 GMT+1 Ryszard Glab <rglab@imid.med.pl>
@@ -9,7 +16,7 @@
*include/hbcomp.h
* added 'int iDeclLine' to VAR structure to hold the line number
where a variable was declared
*source/compiler/harbour.c
*source/compiler/harbour.y
* fixed generation of 'unreachable code' warnings

View File

@@ -113,7 +113,7 @@ Separator {SpaceTab}
%x FOR_ FUNCTION_ IIF_ IF_ IN_ INIT_ LOCAL_ LOOP_
%x MEMVAR_ PARAM_ PRIVATE_ PUBLIC_ STATIC_ RETURN_ RECOVER_
%x INVALIDNUM_ OTHERWISE_ PROCEDURE_
%x OPTIONAL_ FROMCLASS_
%x OPTIONAL_
%s INDEX
%%
@@ -359,7 +359,21 @@ Separator {SpaceTab}
%}
<INITIAL>"optional" { BEGIN OPTIONAL_; }
<OPTIONAL_>{Separator}+"with"{Separator}+[_a-zA-Z\&] { unput( yytext[ yyleng-1 ] );
unput( ' ' );
unput( 'h' );
unput( 't' );
unput( 'i' );
unput( 'w' );
if( i_INDEX_STATE ) BEGIN INDEX; else BEGIN 0;
yylval.string = hb_strdup( "OPTIONAL" );
hb_comp_iState = IDENTIFIER;
return IDENTIFIER;
}
<OPTIONAL_>{Separator}+[_a-zA-Z\&] { unput( yytext[ yyleng-1 ] ); BEGIN 0; return OPTIONAL; }
<OPTIONAL_>{Separator}*(.|\n) { /* end of line or any operator */
if( i_INDEX_STATE ) BEGIN INDEX; else BEGIN 0;
unput( yytext[ yyleng-1 ] );
@@ -368,16 +382,6 @@ Separator {SpaceTab}
return IDENTIFIER;
}
<INITIAL>"from" { BEGIN FROMCLASS_; }
<FROMCLASS_>{Separator}+[_a-zA-Z\&] { unput( yytext[ yyleng-1 ] ); BEGIN 0; return FROMCLASS; }
<FROMCLASS_>{Separator}*(.|\n) { /* end of line or any operator */
if( i_INDEX_STATE ) BEGIN INDEX; else BEGIN 0;
unput( yytext[ yyleng-1 ] );
yylval.string = hb_strdup( "FROM" );
hb_comp_iState = IDENTIFIER;
return IDENTIFIER;
}
"do" BEGIN DO_;
<DO_>{Separator}+"case" { /* DO CASE statement */
if( i_INDEX_STATE ) BEGIN INDEX; else BEGIN 0;
@@ -1334,26 +1338,28 @@ Separator {SpaceTab}
"as var" { return AS_VARIANT; }
"as variant" { return AS_VARIANT; }
"as var array" { return AS_ARRAY; }
"as variant array" { return AS_ARRAY; }
"as array array" { return AS_ARRAY_ARRAY; }
"as block array" { return AS_BLOCK_ARRAY; }
"as char array" { return AS_CHARACTER_ARRAY; }
"as character array" { return AS_CHARACTER_ARRAY; }
"as string array" { return AS_CHARACTER_ARRAY; }
"as date array" { return AS_DATE_ARRAY; }
"as logical array" { return AS_LOGICAL_ARRAY; }
"as bool array" { return AS_LOGICAL_ARRAY; }
"as boolean array" { return AS_LOGICAL_ARRAY; }
"as num array" { return AS_NUMERIC_ARRAY; }
"as numeric array" { return AS_NUMERIC_ARRAY; }
"as object array" { return AS_OBJECT_ARRAY; }
"as array of var" { return AS_ARRAY; }
"as array of variant" { return AS_ARRAY; }
"as array of array" { return AS_ARRAY_ARRAY; }
"as array of block" { return AS_BLOCK_ARRAY; }
"as array of char" { return AS_CHARACTER_ARRAY; }
"as array of character" { return AS_CHARACTER_ARRAY; }
"as array of string" { return AS_CHARACTER_ARRAY; }
"as array of date" { return AS_DATE_ARRAY; }
"as array of logical" { return AS_LOGICAL_ARRAY; }
"as array of bool" { return AS_LOGICAL_ARRAY; }
"as array of boolean" { return AS_LOGICAL_ARRAY; }
"as array of num" { return AS_NUMERIC_ARRAY; }
"as array of numeric" { return AS_NUMERIC_ARRAY; }
"as array of object" { return AS_OBJECT_ARRAY; }
"declare function" { return DECLARE_FUN; }
"declare class" { return DECLARE_CLASS; }
"has method" { return CLASS_METHOD; }
"has data" { return CLASS_DATA; }
"from class" { return FROMCLASS; }
%{
/* ************************************************************************ */
%}

View File

@@ -7,24 +7,24 @@
#pragma -es0
#else
#TRANSLATE AS CHAR ARRAY =>
#TRANSLATE AS CHARACTER ARRAY =>
#TRANSLATE AS STRING ARRAY =>
#TRANSLATE AS ARRAY OF CHAR =>
#TRANSLATE AS ARRAY OF CHARACTER =>
#TRANSLATE AS ARRAY OF STRING =>
#TRANSLATE AS NUM ARRAY =>
#TRANSLATE AS NUMERIC ARRAY =>
#TRANSLATE AS ARRAY OF NUM =>
#TRANSLATE AS ARRAY OF NUMERIC =>
#TRANSLATE AS DATE ARRAY =>
#TRANSLATE AS ARRAY ARRAY =>
#TRANSLATE AS BLOCK ARRAY =>
#TRANSLATE AS OBJECT ARRAY =>
#TRANSLATE AS ARRAY OF DATE =>
#TRANSLATE AS ARRAY OF ARRAY =>
#TRANSLATE AS ARRAY OF BLOCK =>
#TRANSLATE AS ARRAY OF OBJECT =>
#TRANSLATE AS BOOL ARRAY =>
#TRANSLATE AS BOOLEAN ARRAY =>
#TRANSLATE AS LOGICAL ARRAY =>
#TRANSLATE AS ARRAY OF BOOL =>
#TRANSLATE AS ARRAY OF BOOLEAN =>
#TRANSLATE AS ARRAY OF LOGICAL =>
#TRANSLATE AS VAR ARRAY =>
#TRANSLATE AS VARIANT ARRAY =>
#TRANSLATE AS ARRAY OF VAR =>
#TRANSLATE AS ARRAY OF VARIANT =>
#TRANSLATE AS CHAR =>
@@ -61,7 +61,7 @@ DECLARE FUNCTION int( n AS NUMERIC ) AS NUMERIC
DECLARE FUNCTION TEST AS NUMERIC
DECLARE CLASS MyClass ;
DECLARE CLASS MyClass ;
Has METHOD nMyFunc( nVal As Num ) As Num ;
Has METHOD nMyFunc( nVal As Num ) As Num ;
Has Data cMyData ;
@@ -76,7 +76,7 @@ STATIC lGlobal AS LOGICAL
PROCEDURE THEMAIN( optional )
STATIC lStatic := 0, oMyObj As Object From WrongClass
STATIC lStatic := 0, oMyObj As Object From CLASS WrongClass
LOCAL cVar AS CHAR := [declare function]
oMyObj:MyMethod( 2, 3, 4 )
@@ -89,9 +89,11 @@ PROCEDURE THEMAIN( optional )
PRIVATE TEST AS CHAR
DO Optional WITH cVar
FOR Conter := 1 TO 10
? "For with End"
NEXT
End
IF optional
? 'Ok'
@@ -129,7 +131,7 @@ PROCEDURE SOMEPROC()
REPLACE a WITH 1
M->public_var := 0 //core dumps (GPF) on Linux
//M->public_var := 0 //core dumps (GPF) on Linux
b := 0
@@ -172,7 +174,7 @@ Return( NIL )
FUNCTION Main3()
LOCAL n AS NUMERIC, cVar AS CHARACTER, a[5,5,5] AS CHARACTER ARRAY
LOCAL n AS NUMERIC, cVar AS CHARACTER, a[5,5,5] AS ARRAY OF Char
cVar := a[1]