@@ -259,19 +259,20 @@ fn parse_inner_external_name(stream: &mut TokenStream) -> ParseResult<ExternalNa
259259 WithPos :: from( ExternalPath :: Absolute ( path_name) , path_pos)
260260 } ,
261261 Circ => {
262- // @TODO Store number of '^' ("up-levels")
263262 stream. expect_kind( Dot ) ?;
263+ let mut up_levels = 1 ;
264264 while stream. skip_if_kind( Circ ) ? {
265265 stream. expect_kind( Dot ) ?;
266+ up_levels += 1 ;
266267 }
267268 let path_name = parse_name( stream) ?;
268269 let path_pos = path_name. pos. clone( ) . combine_into( & token) ;
269- WithPos :: from( ExternalPath :: Relative ( path_name) , path_pos)
270+ WithPos :: from( ExternalPath :: Relative ( path_name, up_levels ) , path_pos)
270271 } ,
271272 Identifier => {
272273 let path_name = parse_name_initial_token( stream, token) ?;
273274 let path_pos = path_name. pos. clone( ) ;
274- WithPos :: from( ExternalPath :: Relative ( path_name) , path_pos)
275+ WithPos :: from( ExternalPath :: Relative ( path_name, 0 ) , path_pos)
275276 }
276277 ) ;
277278
@@ -831,7 +832,7 @@ mod tests {
831832 let external_name = ExternalName {
832833 class : ExternalObjectClass :: Signal ,
833834 path : WithPos :: new (
834- ExternalPath :: Relative ( code. s1 ( "dut.foo" ) . name ( ) ) ,
835+ ExternalPath :: Relative ( code. s1 ( "dut.foo" ) . name ( ) , 0 ) ,
835836 code. s1 ( "dut.foo" ) . pos ( ) ,
836837 ) ,
837838 subtype : code. s1 ( "std_logic" ) . subtype_indication ( ) ,
@@ -848,7 +849,7 @@ mod tests {
848849 let external_name = ExternalName {
849850 class : ExternalObjectClass :: Signal ,
850851 path : WithPos :: new (
851- ExternalPath :: Relative ( code. s1 ( "dut.gen(0)" ) . name ( ) ) ,
852+ ExternalPath :: Relative ( code. s1 ( "dut.gen(0)" ) . name ( ) , 1 ) ,
852853 code. s1 ( "^.dut.gen(0)" ) . pos ( ) ,
853854 ) ,
854855 subtype : code. s1 ( "std_logic" ) . subtype_indication ( ) ,
@@ -865,7 +866,7 @@ mod tests {
865866 let external_name = ExternalName {
866867 class : ExternalObjectClass :: Signal ,
867868 path : WithPos :: new (
868- ExternalPath :: Relative ( code. s1 ( "dut.gen(0)" ) . name ( ) ) ,
869+ ExternalPath :: Relative ( code. s1 ( "dut.gen(0)" ) . name ( ) , 3 ) ,
869870 code. s1 ( "^.^.^.dut.gen(0)" ) . pos ( ) ,
870871 ) ,
871872 subtype : code. s1 ( "std_logic" ) . subtype_indication ( ) ,
@@ -922,7 +923,7 @@ mod tests {
922923 let external_name = ExternalName {
923924 class,
924925 path : WithPos :: new (
925- ExternalPath :: Relative ( code. s1 ( "dut.foo" ) . name ( ) ) ,
926+ ExternalPath :: Relative ( code. s1 ( "dut.foo" ) . name ( ) , 0 ) ,
926927 code. s1 ( "dut.foo" ) . pos ( ) ,
927928 ) ,
928929 subtype : code. s1 ( "std_logic" ) . subtype_indication ( ) ,
0 commit comments