Ajout de tables de hash dans la figure CTL
This commit is contained in:
parent
942970ddc1
commit
f9c74c25c0
|
@ -57,8 +57,10 @@
|
|||
|
||||
# define CTL_DECLAR_ALL 0
|
||||
# define CTL_DECLAR_VARIABLE 1
|
||||
# define CTL_DECLAR_CONSTANT 2
|
||||
# define CTL_MAX_DECLAR_TYPE 3
|
||||
# define CTL_DECLAR_DEFINE 2
|
||||
# define CTL_DECLAR_ASSUME 3
|
||||
# define CTL_DECLAR_INITIAL 4
|
||||
# define CTL_MAX_DECLAR_TYPE 5
|
||||
|
||||
/*------------------------------------------------------\
|
||||
| |
|
||||
|
@ -82,7 +84,9 @@
|
|||
|
||||
# define GetCtlNumDecl( F ) ((F)->HASH_DECLAR[ CTL_DECLAR_ALL ]->NUMBER_ELEM)
|
||||
# define GetCtlNumDeclVar( F ) ((F)->HASH_DECLAR[ CTL_DECLAR_VARIABLE ]->NUMBER_ELEM)
|
||||
# define GetCtlNumDeclCst( F ) ((F)->HASH_DECLAR[ CTL_DECLAR_CONSTANT ]->NUMBER_ELEM)
|
||||
# define GetCtlNumDeclDef( F ) ((F)->HASH_DECLAR[ CTL_DECLAR_DEFINE ]->NUMBER_ELEM)
|
||||
# define GetCtlNumDeclAss( F ) ((F)->HASH_DECLAR[ CTL_DECLAR_ASSUME ]->NUMBER_ELEM)
|
||||
# define GetCtlNumDeclInit( F ) ((F)->HASH_DECLAR[ CTL_DECLAR_INITIAL ]->NUMBER_ELEM)
|
||||
|
||||
/*------------------------------------------------------\
|
||||
| |
|
||||
|
@ -92,8 +96,12 @@
|
|||
|
||||
# define searchctlsymvar( F, N, I ) \
|
||||
(searchctlsym( (F), (N), (I), CTL_DECLAR_VARIABLE ))
|
||||
# define searchctlsymcst( F, N, I ) \
|
||||
(searchctlsym( (F), (N), (I), CTL_DECLAR_CONSTANT ))
|
||||
# define searchctlsymdef( F, N, I ) \
|
||||
(searchctlsym( (F), (N), (I), CTL_DECLAR_DEFINE ))
|
||||
# define searchctlsymass( F, N, I ) \
|
||||
(searchctlsym( (F), (N), (I), CTL_DECLAR_ASSUME ))
|
||||
# define searchctlsyminit( F, N, I ) \
|
||||
(searchctlsym( (F), (N), (I), CTL_DECLAR_INITIAL ))
|
||||
# define searchctlsymall( F, N, I ) \
|
||||
(searchctlsym( (F), (N), (I), CTL_DECLAR_ALL ))
|
||||
|
||||
|
@ -105,8 +113,12 @@
|
|||
|
||||
# define searchctldeclvar( F, N ) \
|
||||
(searchctldecl( (F), (N), CTL_DECLAR_VARIABLE ))
|
||||
# define searchctldeclcst( F, N ) \
|
||||
(searchctldecl( (F), (N), CTL_DECLAR_CONSTANT ))
|
||||
# define searchctldecldef( F, N ) \
|
||||
(searchctldecl( (F), (N), CTL_DECLAR_DEFINE ))
|
||||
# define searchctldeclass( F, N ) \
|
||||
(searchctldecl( (F), (N), CTL_DECLAR_ASSUME ))
|
||||
# define searchctldeclinit( F, N ) \
|
||||
(searchctldecl( (F), (N), CTL_DECLAR_INITIAL ))
|
||||
# define searchctldeclall( F, N ) \
|
||||
(searchctldecl( (F), (N), CTL_DECLAR_ALL ))
|
||||
|
||||
|
@ -219,7 +231,9 @@
|
|||
struct ctlfig_list *NEXT;
|
||||
char *NAME;
|
||||
ctltype_list *TYPE;
|
||||
authtable *HASH_TYPE;
|
||||
ctlform_list *FORM;
|
||||
authtable *HASH_FORM;
|
||||
ctldecl_list *DECLAR[ CTL_MAX_DECLAR_TYPE ];
|
||||
authtable *HASH_DECLAR[ CTL_MAX_DECLAR_TYPE ];
|
||||
void *CIRCUIT;
|
||||
|
@ -288,7 +302,9 @@
|
|||
|
||||
extern ctldecl_list *addctldecl __P((ctlfig_list *Figure, vexexpr *Atom, unsigned char Type ));
|
||||
extern ctldecl_list *addctldeclvar __P((ctlfig_list *Figure, vexexpr *Atom));
|
||||
extern ctldecl_list *addctldeclcst __P((ctlfig_list *Figure, vexexpr *Atom));
|
||||
extern ctldecl_list *addctldecldef __P((ctlfig_list *Figure, vexexpr *Atom));
|
||||
extern ctldecl_list *addctldeclass __P((ctlfig_list *Figure, vexexpr *Atom));
|
||||
extern ctldecl_list *addctldeclinit __P((ctlfig_list *Figure, vexexpr *Atom));
|
||||
|
||||
extern ctlline_list *addctlline __P((ctlfig_list *Figure, ctlline_list **HeadLine, long Line));
|
||||
extern ctlline_list *addctlfileline __P((ctlfig_list *Figure, ctlline_list **HeadLine, char *File, long Line));
|
||||
|
|
|
@ -72,7 +72,9 @@
|
|||
{
|
||||
"ALL",
|
||||
"VARIABLE",
|
||||
"CONSTANT"
|
||||
"DEFINE",
|
||||
"ASSUME",
|
||||
"INITIAL"
|
||||
};
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
|
@ -109,6 +111,9 @@ ctlfig_list *addctlfig( Name )
|
|||
Figure->HASH_DECLAR[ Type ] = createauthtable( 50 );
|
||||
}
|
||||
|
||||
Figure->HASH_FORM = createauthtable( 50 );
|
||||
Figure->HASH_TYPE = createauthtable( 50 );
|
||||
|
||||
return( Figure );
|
||||
}
|
||||
|
||||
|
@ -239,51 +244,109 @@ ctldecl_list *addctldeclvar( Figure, Atom )
|
|||
ctlfig_list *Figure;
|
||||
vexexpr *Atom;
|
||||
{
|
||||
ctldecl_list *Constant;
|
||||
ctldecl_list *Variable;
|
||||
char *Name;
|
||||
|
||||
if ( ! IsVexNodeAtom( Atom ) ) Name = getvexarrayname( Atom );
|
||||
else Name = GetVexAtomValue( Atom );
|
||||
|
||||
Constant = searchctldeclall( Figure, Name );
|
||||
Variable = searchctldeclall( Figure, Name );
|
||||
|
||||
if ( Constant != (ctldecl_list *)0 )
|
||||
if ( Variable != (ctldecl_list *)0 )
|
||||
{
|
||||
ctlerror( CTL_VARIABLE_EXIST_ERROR, Name, 0 );
|
||||
ctlerror( CTL_DECLAR_EXIST_ERROR, Name, 0 );
|
||||
}
|
||||
|
||||
Constant = loc_addctldecl( Figure, Atom, CTL_DECLAR_VARIABLE );
|
||||
Variable = loc_addctldecl( Figure, Atom, CTL_DECLAR_VARIABLE );
|
||||
|
||||
return( Constant );
|
||||
return( Variable );
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Ctl Add Declaration Constant |
|
||||
| Ctl Add Declaration Define |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
ctldecl_list *addctldeclcst( Figure, Atom )
|
||||
ctldecl_list *addctldecldef( Figure, Atom )
|
||||
|
||||
ctlfig_list *Figure;
|
||||
vexexpr *Atom;
|
||||
{
|
||||
ctldecl_list *Constant;
|
||||
ctldecl_list *Define;
|
||||
char *Name;
|
||||
|
||||
if ( ! IsVexNodeAtom( Atom ) ) Name = getvexarrayname( Atom );
|
||||
else Name = GetVexAtomValue( Atom );
|
||||
|
||||
Constant = searchctldeclall( Figure, Name );
|
||||
Define = searchctldeclall( Figure, Name );
|
||||
|
||||
if ( Constant != (ctldecl_list *)0 )
|
||||
if ( Define != (ctldecl_list *)0 )
|
||||
{
|
||||
ctlerror( CTL_CONSTANT_EXIST_ERROR, Name, 0 );
|
||||
ctlerror( CTL_DECLAR_EXIST_ERROR, Name, 0 );
|
||||
}
|
||||
|
||||
Constant = loc_addctldecl( Figure, Atom, CTL_DECLAR_CONSTANT );
|
||||
Define = loc_addctldecl( Figure, Atom, CTL_DECLAR_DEFINE );
|
||||
|
||||
return( Constant );
|
||||
return( Define );
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Ctl Add Declaration Assume |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
ctldecl_list *addctldeclass( Figure, Atom )
|
||||
|
||||
ctlfig_list *Figure;
|
||||
vexexpr *Atom;
|
||||
{
|
||||
ctldecl_list *Assume;
|
||||
char *Name;
|
||||
|
||||
if ( ! IsVexNodeAtom( Atom ) ) Name = getvexarrayname( Atom );
|
||||
else Name = GetVexAtomValue( Atom );
|
||||
|
||||
Assume = searchctldeclall( Figure, Name );
|
||||
|
||||
if ( Assume != (ctldecl_list *)0 )
|
||||
{
|
||||
ctlerror( CTL_DECLAR_EXIST_ERROR, Name, 0 );
|
||||
}
|
||||
|
||||
Assume = loc_addctldecl( Figure, Atom, CTL_DECLAR_ASSUME );
|
||||
|
||||
return( Assume );
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Ctl Add Declaration Initial |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
ctldecl_list *addctldeclinit( Figure, Atom )
|
||||
|
||||
ctlfig_list *Figure;
|
||||
vexexpr *Atom;
|
||||
{
|
||||
ctldecl_list *Initial;
|
||||
char *Name;
|
||||
|
||||
if ( ! IsVexNodeAtom( Atom ) ) Name = getvexarrayname( Atom );
|
||||
else Name = GetVexAtomValue( Atom );
|
||||
|
||||
Initial = searchctldeclall( Figure, Name );
|
||||
|
||||
if ( Initial != (ctldecl_list *)0 )
|
||||
{
|
||||
ctlerror( CTL_DECLAR_EXIST_ERROR, Name, 0 );
|
||||
}
|
||||
|
||||
Initial = loc_addctldecl( Figure, Atom, CTL_DECLAR_INITIAL );
|
||||
|
||||
return( Initial );
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
|
@ -371,6 +434,8 @@ ctlform_list *addctlform( Figure, Name, Expr )
|
|||
|
||||
*(Form->PREV) = Form;
|
||||
|
||||
addauthelem( Figure->HASH_FORM, Name, (long)Form );
|
||||
|
||||
return( Form );
|
||||
}
|
||||
|
||||
|
@ -408,6 +473,8 @@ ctltype_list *addctltype( Figure, Name, Index,
|
|||
Type->BASE = Base;
|
||||
Figure->TYPE = Type;
|
||||
|
||||
addauthelem( Figure->HASH_TYPE, Name, (long)Type );
|
||||
|
||||
return( Type );
|
||||
}
|
||||
|
||||
|
|
|
@ -165,6 +165,8 @@ int delctlfig( Name )
|
|||
destroyauthtable( Figure->HASH_DECLAR[ Type ] );
|
||||
}
|
||||
|
||||
destroyauthtable( Figure->HASH_FORM );
|
||||
|
||||
ScanForm = Figure->FORM;
|
||||
|
||||
while ( ScanForm != (ctlform_list *)0 )
|
||||
|
@ -177,6 +179,8 @@ int delctlfig( Name )
|
|||
freectlform( Delete );
|
||||
}
|
||||
|
||||
destroyauthtable( Figure->HASH_TYPE );
|
||||
|
||||
ScanType = Figure->TYPE;
|
||||
|
||||
while ( ScanType != (ctltype_list *)0 )
|
||||
|
|
|
@ -97,12 +97,6 @@ void ctl_error( Error, Text1, Text2, File, Line )
|
|||
case CTL_UNKNOWN_DECLAR_TYPE :
|
||||
fprintf( stderr, "unknown declar type %ld for %s\n", (long)Text1, Text2 );
|
||||
break;
|
||||
case CTL_VARIABLE_EXIST_ERROR :
|
||||
fprintf( stderr, "variable %s exists already\n", Text1 );
|
||||
break;
|
||||
case CTL_CONSTANT_EXIST_ERROR :
|
||||
fprintf( stderr, "constant %s exists already\n", Text1 );
|
||||
break;
|
||||
case CTL_DECLAR_EXIST_ERROR :
|
||||
fprintf( stderr, "symbol %s already declared\n", Text1 );
|
||||
break;
|
||||
|
|
|
@ -52,14 +52,12 @@
|
|||
| |
|
||||
\------------------------------------------------------------*/
|
||||
|
||||
# define CTL_VARIABLE_EXIST_ERROR 0
|
||||
# define CTL_CONSTANT_EXIST_ERROR 1
|
||||
# define CTL_UNKNOWN_DECLAR_TYPE 2
|
||||
# define CTL_UNDECLARED_SYMBOL 3
|
||||
# define CTL_DECLAR_EXIST_ERROR 4
|
||||
# define CTL_BAD_DECLAR_TYPE 5
|
||||
# define CTL_ILLEGAL_INDEX_ERROR 6
|
||||
# define CTL_ILLEGAL_POSITION_ERROR 7
|
||||
# define CTL_UNKNOWN_DECLAR_TYPE 1
|
||||
# define CTL_UNDECLARED_SYMBOL 2
|
||||
# define CTL_DECLAR_EXIST_ERROR 3
|
||||
# define CTL_BAD_DECLAR_TYPE 4
|
||||
# define CTL_ILLEGAL_INDEX_ERROR 5
|
||||
# define CTL_ILLEGAL_POSITION_ERROR 6
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
|
|
|
@ -210,18 +210,17 @@ ctlform_list *searchctlform( Figure, Name )
|
|||
ctlfig_list *Figure;
|
||||
char *Name;
|
||||
{
|
||||
ctlform_list *Form;
|
||||
authelem *Element;
|
||||
|
||||
Name = namealloc( Name );
|
||||
Name = namealloc( Name );
|
||||
Element = searchauthelem( Figure->HASH_FORM, Name );
|
||||
|
||||
for ( Form = Figure->FORM;
|
||||
Form != (ctlform_list *)0;
|
||||
Form = Form->NEXT )
|
||||
if ( Element != (authelem *)0 )
|
||||
{
|
||||
if ( Form->NAME == Name ) break;
|
||||
return( (ctlform_list *)( Element->VALUE ) );
|
||||
}
|
||||
|
||||
return( Form );
|
||||
return( (ctlform_list *)0 );
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
|
@ -235,17 +234,16 @@ ctltype_list *searchctltype( Figure, Name )
|
|||
ctlfig_list *Figure;
|
||||
char *Name;
|
||||
{
|
||||
ctltype_list *Type;
|
||||
authelem *Element;
|
||||
|
||||
Name = namealloc( Name );
|
||||
Name = namealloc( Name );
|
||||
Element = searchauthelem( Figure->HASH_TYPE, Name );
|
||||
|
||||
for ( Type = Figure->TYPE;
|
||||
Type != (ctltype_list *)0;
|
||||
Type = Type->NEXT )
|
||||
if ( Element != (authelem *)0 )
|
||||
{
|
||||
if ( Type->NAME == Name ) break;
|
||||
return( (ctltype_list *)( Element->VALUE ) );
|
||||
}
|
||||
|
||||
return( Type );
|
||||
return( (ctltype_list *)0 );
|
||||
}
|
||||
|
||||
|
|
|
@ -161,6 +161,9 @@ void viewctldecl( Decl )
|
|||
fprintf( stdout, "\n\t\tVEX_INIT : " );
|
||||
viewvexexprbound( Decl->VEX_INIT );
|
||||
|
||||
fprintf( stdout, "\n\t\tTYPE : %s",
|
||||
( Decl->TYPE != (ctltype_list *)0 ) ? Decl->TYPE->NAME : "ERROR" );
|
||||
|
||||
fprintf( stdout, "\n\t\tDECL_SYM :\n" );
|
||||
|
||||
DeclSym = Decl->DECL_SYM;
|
||||
|
|
Loading…
Reference in New Issue