diff options
author | Adrian Thurston <thurston@complang.org> | 2014-01-05 18:03:23 -0500 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2014-01-05 18:03:23 -0500 |
commit | f48bd57fd3abd855fe14b2c8d1a8d166ddf08ef4 (patch) | |
tree | 46ff5fdb6fcc0c82dd335fe3532242d0786bf642 | |
parent | 9d8a2ce75c15c5564f0eb598f6d28f40dbb69947 (diff) | |
download | colm-f48bd57fd3abd855fe14b2c8d1a8d166ddf08ef4.tar.gz |
added checkRedecl and insertField to scope object
-rw-r--r-- | src/declare.cc | 9 | ||||
-rw-r--r-- | src/lookup.cc | 6 | ||||
-rw-r--r-- | src/parsetree.h | 6 |
3 files changed, 17 insertions, 4 deletions
diff --git a/src/declare.cc b/src/declare.cc index 982148d8..aa42beb4 100644 --- a/src/declare.cc +++ b/src/declare.cc @@ -47,6 +47,15 @@ void Compiler::initUniqueTypes( ) uniqeTypeMap.insert( uniqueTypeAny ); } +ObjectField *ObjNameScope::checkRedecl( const String &name ) +{ + return owner->checkRedecl( name ); +} + +void ObjNameScope::insertField( const String &name, ObjectField *value ) +{ + return owner->insertField( name, value ); +} ObjectField *ObjectDef::checkRedecl( const String &name ) { diff --git a/src/lookup.cc b/src/lookup.cc index 437cd477..05b5f5ad 100644 --- a/src/lookup.cc +++ b/src/lookup.cc @@ -40,19 +40,19 @@ ObjectDef *UniqueType::objectDef() } /* Recurisve find through a single object def's scope. */ -ObjectField *ObjectDef::findFieldInScope( const String &name, const ObjNameScope *inScope ) const +ObjectField *ObjectDef::findFieldInScope( const ObjNameScope *inScope, const String &name ) const { ObjFieldMapEl *objDefMapEl = inScope->objFieldMap->find( name ); if ( objDefMapEl != 0 ) return objDefMapEl->value; if ( inScope->parentScope != 0 ) - return findFieldInScope( name, inScope->parentScope ); + return findFieldInScope( inScope->parentScope, name ); return 0; } ObjectField *ObjNameScope::findField( const String &name ) const { - return owner->findFieldInScope( name, this ); + return owner->findFieldInScope( this, name ); } ObjMethod *ObjectDef::findMethod( const String &name ) const diff --git a/src/parsetree.h b/src/parsetree.h index 9d147589..fbe3395b 100644 --- a/src/parsetree.h +++ b/src/parsetree.h @@ -2393,6 +2393,9 @@ struct ObjNameScope } ObjectField *findField( const String &name ) const; + + ObjectField *checkRedecl( const String &name ); + void insertField( const String &name, ObjectField *value ); }; struct ObjectDef @@ -2442,12 +2445,13 @@ struct ObjectDef long nextOffset; long firstNonTree; + void referenceField( Compiler *pd, ObjectField *field ); void initField( Compiler *pd, ObjectField *field ); void createCode( Compiler *pd, CodeVect &code ); ObjectField *checkRedecl( const String &name ); ObjMethod *findMethod( const String &name ) const; - ObjectField *findFieldInScope( const String &name, const ObjNameScope *inScope ) const; + ObjectField *findFieldInScope( const ObjNameScope *scope, const String &name ) const; void insertField( const String &name, ObjectField *value ); void resolve( Compiler *pd ); ObjectField *findFieldNum( long offset ); |