diff options
author | Adrian Thurston <thurston@complang.org> | 2013-03-23 09:57:36 -0400 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2013-03-23 09:57:36 -0400 |
commit | 0c280421ed17e4d93009f4a5acc3f553ba02495d (patch) | |
tree | a0e48241dadaeaa6dbab7519ee6100b7039aac26 | |
parent | 3227ec613e5350c67972bb4d36e8dc39cf7494e1 (diff) | |
download | colm-0c280421ed17e4d93009f4a5acc3f553ba02495d.tar.gz |
added export
-rw-r--r-- | colm/colm.lm | 8 | ||||
-rw-r--r-- | colm/load.cc | 26 | ||||
-rw-r--r-- | test/export1.exp | 0 | ||||
-rw-r--r-- | test/export1.in | 0 | ||||
-rw-r--r-- | test/export1.lm | 3 |
5 files changed, 32 insertions, 5 deletions
diff --git a/colm/colm.lm b/colm/colm.lm index aff87c99..8dfee66f 100644 --- a/colm/colm.lm +++ b/colm/colm.lm @@ -28,6 +28,7 @@ lex token PTR / 'ptr' / token ITER / 'iter' / token REF / 'ref' / + token EXPORT / 'export' / token LITERAL /'literal'/ token CONTEXT /'context'/ @@ -153,7 +154,7 @@ def root_item | [IterDef: iter_def] | [Statement: statement] #| [global_def] -#| [export_def] +| [ExportDef: export_def] #| [pre_eof] #| [precedence] #| [typedef] @@ -169,10 +170,13 @@ def context_item | [ContextDef: context_def] | [FunctionDef: function_def] | [IterDef: iter_def] -#| [export_def] +| [ExportDef: export_def] #| [pre_eof] #| [precedence] +def export_def + [EXPORT VarDef: var_def OptDefInit: opt_def_init] + def iter_def [ITER Id: id POPEN ParamVarDefList: param_var_def* PCLOSE COPEN LangStmtList: lang_stmt_list CCLOSE] diff --git a/colm/load.cc b/colm/load.cc index cf6c9df3..3828ec04 100644 --- a/colm/load.cc +++ b/colm/load.cc @@ -302,6 +302,22 @@ struct LoadSource { return walkPatternList( Pattern.PatternList() ); } + + LangExpr *walkOptDefInit( opt_def_init optDefInit ) + { + LangExpr *expr = 0; + if ( optDefInit.CodeExpr() != 0 ) + expr = walkCodeExpr( optDefInit.CodeExpr() ); + return expr; + } + + LangStmt *walkExportDef( export_def exportDef ) + { + ObjectField *objField = walkVarDef( exportDef.VarDef() ); + LangExpr *expr = walkOptDefInit( exportDef.OptDefInit() ); + + return exportStmt( objField, LangStmt::AssignType, expr ); + } }; @@ -1317,9 +1333,7 @@ LangStmt *LoadSource::walkStatement( statement Statement ) } else if ( Statement.VarDef() != 0 ) { ObjectField *objField = walkVarDef( Statement.VarDef() ); - LangExpr *expr = 0; - if ( Statement.OptDefInit().CodeExpr() != 0 ) - expr = walkCodeExpr( Statement.OptDefInit().CodeExpr() ); + LangExpr *expr = walkOptDefInit( Statement.OptDefInit() ); stmt = varDef( objField, expr, LangStmt::AssignType ); } else if ( Statement.ForDecl() != 0 ) { @@ -1473,6 +1487,9 @@ void LoadSource::walkContextItem( context_item contextItem ) else if ( contextItem.IterDef() != 0 ) { walkIterDef( contextItem.IterDef() ); } + else if ( contextItem.ExportDef() != 0 ) { + walkExportDef( contextItem.ExportDef() ); + } } void LoadSource::walkContextDef( context_def contextDef ) @@ -1538,6 +1555,9 @@ void LoadSource::walkRootItem( root_item &rootItem, StmtList *stmtList ) else if ( rootItem.IterDef() != 0 ) { walkIterDef( rootItem.IterDef() ); } + else if ( rootItem.ExportDef() != 0 ) { + walkExportDef( rootItem.ExportDef() ); + } } bool walkOptNoIgnore( opt_no_ignore OptNoIngore ) diff --git a/test/export1.exp b/test/export1.exp deleted file mode 100644 index e69de29b..00000000 --- a/test/export1.exp +++ /dev/null diff --git a/test/export1.in b/test/export1.in deleted file mode 100644 index e69de29b..00000000 --- a/test/export1.in +++ /dev/null diff --git a/test/export1.lm b/test/export1.lm index ae1e6c4b..8f42cec3 100644 --- a/test/export1.lm +++ b/test/export1.lm @@ -1,3 +1,4 @@ +##### LM ##### lex token id /[a-z]+/ ignore /[ \t]+/ @@ -11,3 +12,5 @@ export Error: str parse P: start[ stdin ] Error = P.error +##### IN ##### +##### EXP ##### |