summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2013-05-19 22:40:19 -0400
committerAdrian Thurston <thurston@complang.org>2013-05-19 22:40:19 -0400
commit51b5957878dd5689476529fcc4e44e5d01815574 (patch)
tree55cf449649343dc85e3f6e0768af8783157e1c04
parent7447c624a1c536abef03c069b2aedd776d56d622 (diff)
downloadcolm-51b5957878dd5689476529fcc4e44e5d01815574.tar.gz
trying out more production labels
-rw-r--r--colm/colm.lm34
-rw-r--r--colm/loadcolm.cc70
2 files changed, 53 insertions, 51 deletions
diff --git a/colm/colm.lm b/colm/colm.lm
index 6a0dc00a..c974b3d4 100644
--- a/colm/colm.lm
+++ b/colm/colm.lm
@@ -183,23 +183,23 @@ def start
[RootItemList: root_item*]
def root_item
- [RlDef: rl_def] commit
-| [LiteralDef: literal_def] commit
-| [TokenDef: token_def] commit
-| [IgnoreDef: ignore_def] commit
-| [CflDef: cfl_def] commit
-| [RegionDef: region_def] commit
-| [ContextDef: context_def] commit
-| [NamespaceDef: namespace_def] commit
-| [FunctionDef: function_def] commit
-| [IterDef: iter_def] commit
-| [Statement: statement] commit
-| [GlobalDef: global_def] commit
-| [ExportDef: export_def] commit
-| [PreEofDef: pre_eof_def] commit
-| [PrecedenceDef: precedence_def] commit
-| [AliasDef: alias_def] commit
-| [Include: include] commit
+ [RlDef: rl_def] :RlProd commit
+| [LiteralDef: literal_def] :LiteralProd commit
+| [TokenDef: token_def] :TokenProd commit
+| [IgnoreDef: ignore_def] :IgnoreProd commit
+| [CflDef: cfl_def] :CflProd commit
+| [RegionDef: region_def] :RegionProd commit
+| [ContextDef: context_def] :ContextProd commit
+| [NamespaceDef: namespace_def] :NamespaceProd commit
+| [FunctionDef: function_def] :FunctionProd commit
+| [IterDef: iter_def] :IterProd commit
+| [Statement: statement] :StatementProd commit
+| [GlobalDef: global_def] :GlobalProd commit
+| [ExportDef: export_def] :ExportProd commit
+| [PreEofDef: pre_eof_def] :PreEofProd commit
+| [PrecedenceDef: precedence_def] :PrecedenceProd commit
+| [AliasDef: alias_def] :AliasProd commit
+| [Include: include] :IncludeProd commit
def include
[INCLUDE File: lit]
diff --git a/colm/loadcolm.cc b/colm/loadcolm.cc
index 660b1986..e159d1cc 100644
--- a/colm/loadcolm.cc
+++ b/colm/loadcolm.cc
@@ -1789,67 +1789,69 @@ struct LoadColm
void walkRootItem( root_item &rootItem, StmtList *stmtList )
{
- if ( rootItem.RlDef() != 0 ) {
+ switch ( rootItem.prodType() ) {
+ case root_item::RlProd:
walkRlDef( rootItem.RlDef() );
- }
- else if ( rootItem.TokenDef() != 0 ) {
+ break;
+ case root_item::TokenProd:
walkTokenDef( rootItem.TokenDef() );
- }
- else if ( rootItem.IgnoreDef() != 0 ) {
+ break;
+ case root_item::IgnoreProd:
walkIgnoreDef( rootItem.IgnoreDef() );
- }
- else if ( rootItem.LiteralDef() != 0 ) {
+ break;
+ case root_item::LiteralProd:
walkLiteralDef( rootItem.LiteralDef() );
- }
- else if ( rootItem.CflDef() != 0 ) {
+ break;
+ case root_item::CflProd:
walkCflDef( rootItem.CflDef() );
- }
- else if ( rootItem.RegionDef() != 0 ) {
+ break;
+ case root_item::RegionProd:
walkLexRegion( rootItem.RegionDef() );
- }
- else if ( rootItem.Statement() != 0 ) {
+ break;
+ case root_item::StatementProd: {
LangStmt *stmt = walkStatement( rootItem.Statement() );
if ( stmt != 0 )
stmtList->append( stmt );
+ break;
}
- else if ( rootItem.ContextDef() != 0 ) {
+ case root_item::ContextProd:
walkContextDef( rootItem.ContextDef() );
- }
- else if ( rootItem.NamespaceDef() != 0 ) {
+ break;
+ case root_item::NamespaceProd:
walkNamespaceDef( rootItem.NamespaceDef() );
- }
- else if ( rootItem.FunctionDef() != 0 ) {
+ break;
+ case root_item::FunctionProd:
walkFunctionDef( rootItem.FunctionDef() );
- }
- else if ( rootItem.IterDef() != 0 ) {
- walkIterDef( rootItem.IterDef() );
- }
- else if ( rootItem.IterDef() != 0 ) {
+ break;
+ case root_item::IterProd:
walkIterDef( rootItem.IterDef() );
- }
- else if ( rootItem.PreEofDef() != 0 ) {
+ break;
+ case root_item::PreEofProd:
walkPreEof( rootItem.PreEofDef() );
- }
- else if ( rootItem.ExportDef() != 0 ) {
+ break;
+ case root_item::ExportProd: {
LangStmt *stmt = walkExportDef( rootItem.ExportDef() );
if ( stmt != 0 )
stmtList->append( stmt );
+ break;
}
- else if ( rootItem.AliasDef() != 0 ) {
+ case root_item::AliasProd:
walkAliasDef( rootItem.AliasDef() );
- }
- else if ( rootItem.PrecedenceDef() != 0 ) {
+ break;
+ case root_item::PrecedenceProd:
walkPrecedenceDef( rootItem.PrecedenceDef() );
- }
- else if ( rootItem.Include() != 0 ) {
+ break;
+ case root_item::IncludeProd: {
StmtList *includeList = walkInclude( rootItem.Include() );
stmtList->append( *includeList );
+ break;
}
- else if ( rootItem.GlobalDef() != 0 ) {
+ case root_item::GlobalProd: {
LangStmt *stmt = walkGlobalDef( rootItem.GlobalDef() );
if ( stmt != 0 )
stmtList->append( stmt );
- }
+ break;
+ }}
}
bool walkOptNoIgnore( opt_no_ignore OptNoIngore )