summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/loadinit.cc20
-rw-r--r--src/loadinit.h4
2 files changed, 14 insertions, 10 deletions
diff --git a/src/loadinit.cc b/src/loadinit.cc
index 3de07883..827d3737 100644
--- a/src/loadinit.cc
+++ b/src/loadinit.cc
@@ -38,11 +38,11 @@ using std::string;
extern RuntimeData colm_object;
-void LoadInit::walkProdElList( ProdElList *list, prod_el_list &prodElList )
+void LoadInit::walkProdElList( String defName, ProdElList *list, prod_el_list &prodElList )
{
if ( prodElList.ProdElList() != 0 ) {
prod_el_list RightProdElList = prodElList.ProdElList();
- walkProdElList( list, RightProdElList );
+ walkProdElList( defName, list, RightProdElList );
}
if ( prodElList.ProdEl() != 0 ) {
@@ -57,7 +57,10 @@ void LoadInit::walkProdElList( ProdElList *list, prod_el_list &prodElList )
}
else {
/* Default the capture to the name of the type. */
- captureField = ObjectField::cons( internal, 0, typeName );
+ String fieldName = typeName;
+ if ( strcmp( fieldName, defName ) == 0 )
+ fieldName = "_" + defName;
+ captureField = ObjectField::cons( internal, 0, fieldName );
}
RepeatType repeatType = RepeatNone;
@@ -72,16 +75,16 @@ void LoadInit::walkProdElList( ProdElList *list, prod_el_list &prodElList )
}
}
-void LoadInit::walkProdList( LelDefList *outProdList, prod_list &prodList )
+void LoadInit::walkProdList( String defName, LelDefList *outProdList, prod_list &prodList )
{
if ( prodList.ProdList() != 0 ) {
prod_list RightProdList = prodList.ProdList();
- walkProdList( outProdList, RightProdList );
+ walkProdList( defName, outProdList, RightProdList );
}
ProdElList *outElList = new ProdElList;
prod_el_list prodElList = prodList.Prod().ProdElList();
- walkProdElList( outElList, prodElList );
+ walkProdElList( defName, outElList, prodElList );
String name;
if ( prodList.Prod().OptName().Name() != 0 )
@@ -261,10 +264,11 @@ void LoadInit::walkDefinition( item &define )
{
prod_list ProdList = define.ProdList();
+ String name = define.DefId().text().c_str();
+
LelDefList *defList = new LelDefList;
- walkProdList( defList, ProdList );
+ walkProdList( name, defList, ProdList );
- String name = define.DefId().text().c_str();
NtDef *ntDef = NtDef::cons( name, namespaceStack.top(), contextStack.top(), false );
ObjectDef *objectDef = ObjectDef::cons( ObjectDef::UserType, name, pd->nextObjectId++ );
cflDef( ntDef, objectDef, defList );
diff --git a/src/loadinit.h b/src/loadinit.h
index 4a3120c7..6aea12ac 100644
--- a/src/loadinit.h
+++ b/src/loadinit.h
@@ -55,8 +55,8 @@ struct LoadInit
LexExpression *walkLexExpr( lex_expr &LexExpr );
void walkTokenList( token_list &TokenList );
void walkLexRegion( item &LexRegion );
- void walkProdElList( ProdElList *list, prod_el_list &prodElList );
- void walkProdList( LelDefList *list, prod_list &prodList );
+ void walkProdElList( String defName, ProdElList *list, prod_el_list &prodElList );
+ void walkProdList( String defName, LelDefList *list, prod_list &prodList );
void walkDefinition( item &define );
/* Constructing statements needed to parse and export the input. */