Skip to content

Commit

Permalink
Vala: handle nested classes
Browse files Browse the repository at this point in the history
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
  • Loading branch information
masatake committed Dec 10, 2023
1 parent b3426b1 commit bb54fdb
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 7 deletions.
5 changes: 4 additions & 1 deletion Units/parser-vala.r/class.vala.d/expected.tags
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,13 @@ age input.vala /^ public int age {$/;" property line:30 language:Vala class:Pe
getLastAge input.vala /^ int getLastAge (int n) throws GLib.Error { return d_age - n; }$/;" method line:41 language:Vala class:Person typeref:typename:int signature:(int n) end:41
table input.vala /^ string [] table = {"a", "b"};$/;" field line:43 language:Vala class:Person typeref:typename:string end:43
ctable input.vala /^ const string [] ctable = {"a", "b"};$/;" field line:44 language:Vala class:Person typeref:typename:string end:44
Car input.vala /^public class Car {$/;" class line:47 language:Vala end:60
Car input.vala /^public class Car {$/;" class line:47 language:Vala end:66
n_seat input.vala /^ public int n_seat;$/;" field line:48 language:Vala class:Car typeref:typename:int access:public end:48
Car input.vala /^ public Car () {$/;" method line:49 language:Vala class:Car access:public signature:() end:51
sctable input.vala /^ static const string [] sctable = {"a", "b"};$/;" field line:52 language:Vala class:Car typeref:typename:string end:52 properties:static
@get input.vala /^ public new string? @get (string key) {$/;" method line:54 language:Vala class:Car typeref:typename:string access:public signature:(string key) end:56
value_changed input.vala /^ public signal void value_changed (string name, Variant value);$/;" signal line:58 language:Vala class:Car typeref:typename:void access:public signature:(string name, Variant value) end:58
addSeat input.vala /^ int addSeat (int n) { return n_seat + n; }$/;" method line:59 language:Vala class:Car typeref:typename:int signature:(int n) end:59
Seat input.vala /^ public class Seat {$/;" class line:61 language:Vala class:Car end:63
x input.vala /^ int x;$/;" field line:62 language:Vala class:Car.Seat typeref:typename:int end:62
more input.vala /^ public int more;$/;" field line:65 language:Vala class:Car typeref:typename:int access:public end:65
6 changes: 6 additions & 0 deletions Units/parser-vala.r/class.vala.d/input.vala
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,10 @@ public class Car {

public signal void value_changed (string name, Variant value);
int addSeat (int n) { return n_seat + n; }

public class Seat {
int x;
}

public int more;
}
22 changes: 16 additions & 6 deletions parsers/vala.c
Original file line number Diff line number Diff line change
Expand Up @@ -667,6 +667,15 @@ static bool recurseValaTags (tokenInfo *token, int parentIndex)
parseClass (token, K_STRUCT, parentIndex);
else if (tokenIsType (token, IDENTIFIER))
parseStatement (token, parentIndex);
else if (tokenIsKeyword(token, CONSTRUCT))
{
tokenRead (token);
if (tokenIsTypeVal (token, '{'))
{
/* TODO: we can make an anonymous tag for the constructor. */
tokenSkipOverPair (token);
}
}
else
r = false;

Expand Down Expand Up @@ -792,15 +801,16 @@ static void parseClassBody (tokenInfo *const token, int classCorkIndex)
break;
}

if (tokenIsKeyword(token, CONSTRUCT))
if (tokenIsKeyword(token, CLASS)
|| tokenIsKeyword(token, CONSTRUCT))
{
tokenRead (token);
if (tokenIsTypeVal (token, '{'))
recurseValaTags (token, classCorkIndex);
if (visiblity)
{
/* TODO: we can make an anonymous tag for the constructor. */
tokenSkipOverPair (token);
continue;
eFree (visiblity);
visiblity = NULL;
}
continue;
}

if (tokenIsType (token, IDENTIFIER)
Expand Down

0 comments on commit bb54fdb

Please sign in to comment.