diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cgil/ril.lm | 4 | ||||
-rw-r--r-- | src/cgil/rlhc-c.lm | 8 | ||||
-rw-r--r-- | src/cgil/rlhc-crack.lm | 8 | ||||
-rw-r--r-- | src/cgil/rlhc-csharp.lm | 8 | ||||
-rw-r--r-- | src/cgil/rlhc-d.lm | 8 | ||||
-rw-r--r-- | src/cgil/rlhc-go.lm | 4 | ||||
-rw-r--r-- | src/cgil/rlhc-java.lm | 8 | ||||
-rw-r--r-- | src/cgil/rlhc-js.lm | 14 | ||||
-rw-r--r-- | src/cgil/rlhc-julia.lm | 8 | ||||
-rw-r--r-- | src/cgil/rlhc-ocaml.lm | 16 | ||||
-rw-r--r-- | src/cgil/rlhc-ruby.lm | 4 | ||||
-rw-r--r-- | src/cgil/rlhc-rust.lm | 8 | ||||
-rw-r--r-- | src/libfsm/codegen.cc | 14 | ||||
-rw-r--r-- | src/libfsm/codegen.h | 1 |
14 files changed, 63 insertions, 50 deletions
diff --git a/src/cgil/ril.lm b/src/cgil/ril.lm index cde6ce93..8a50bf50 100644 --- a/src/cgil/ril.lm +++ b/src/cgil/ril.lm @@ -88,8 +88,8 @@ def expr_factor | [ident] :Ident | [ident `[ expr `]] :ArraySub | [ident `[ expr `] `. Field: ident] :ArraySubField -| [`offset `( ident `, expr `)] :Offset -| [`deref `( ident `, expr `)] :Deref +| [`offset `( base: expr `, expr `)] :Offset +| [`deref `( base: expr `, expr `)] :Deref | [number] :Number | [`TRUE] :True | [`FALSE] :False diff --git a/src/cgil/rlhc-c.lm b/src/cgil/rlhc-c.lm index dfc24d1d..66061e98 100644 --- a/src/cgil/rlhc-c.lm +++ b/src/cgil/rlhc-c.lm @@ -112,21 +112,21 @@ namespace c_gen } case Offset { - << "[ident] + [expr( expr )]" + << "[base] + [expr( expr )]" } case Deref { << "(*( [expr(expr)] )) } - case [`TRUE] + case True { << "1" } - case [`FALSE] + case False { << "1" } - case [N: `nil] + case Nil { << "0" } diff --git a/src/cgil/rlhc-crack.lm b/src/cgil/rlhc-crack.lm index bebe7cd5..75358a30 100644 --- a/src/cgil/rlhc-crack.lm +++ b/src/cgil/rlhc-crack.lm @@ -117,15 +117,15 @@ namespace crack_gen send Parser "[I]\[[expr( E )]\]" } - case [`offset `( ident `, expr `)] + case [`offset `( Base: expr `, Offset: expr `)] { send Parser - [expr( ExprFactor.expr )] + [expr( Offset )] } - case [`deref `( ident `, expr `)] + case [`deref `( Base: expr `, Offset: expr `)] { send Parser - [ ExprFactor.ident '[' expr( ExprFactor.expr ) ']'] + [ expr( Base ) '[' expr( Offset ) ']'] } case [`TRUE] { diff --git a/src/cgil/rlhc-csharp.lm b/src/cgil/rlhc-csharp.lm index 078157c5..0b3eb8ba 100644 --- a/src/cgil/rlhc-csharp.lm +++ b/src/cgil/rlhc-csharp.lm @@ -108,15 +108,15 @@ namespace csharp_gen send Parser [ExprFactor.ident O expr( TL ) C] } - case ['offset' '(' ident ',' expr ')'] + case ['offset' '(' Base: expr ',' Offset: expr ')'] { send Parser - [expr( ExprFactor.expr )] + [expr( Offset )] } - case ['deref' '(' ident ',' expr ')'] + case ['deref' '(' Base: expr ',' Offset: expr ')'] { send Parser - [ ExprFactor.ident '[' expr( ExprFactor.expr ) ']'] + [ expr( Base ) '[' expr( Offset ) ']'] } case [T: `TRUE] { diff --git a/src/cgil/rlhc-d.lm b/src/cgil/rlhc-d.lm index 2a047e68..a81259c9 100644 --- a/src/cgil/rlhc-d.lm +++ b/src/cgil/rlhc-d.lm @@ -122,16 +122,16 @@ namespace d_gen [ExprFactor.ident O expr(TL) C] } case - [`offset `( ident `, expr `)] + [`offset `( Base: expr `, Offset: expr `)] { send Parser - "& [ExprFactor.ident] \[ [expr(ExprFactor.expr)] \] + "& [expr(Base)] \[ [expr( Offset )] \] } case - [`deref `( ident `, expr `)] + [`deref `( Base: expr `, Offset: expr `)] { send Parser - "(*( [expr(ExprFactor.expr)] )) + "(*( [expr(Offset)] )) } case [T: `TRUE] diff --git a/src/cgil/rlhc-go.lm b/src/cgil/rlhc-go.lm index b8353d10..1eb2a61b 100644 --- a/src/cgil/rlhc-go.lm +++ b/src/cgil/rlhc-go.lm @@ -108,11 +108,11 @@ namespace go_gen } case Offset { - << "int([expr(expr )]) + << "int([expr(expr)]) } case Deref { - << [ident '[ ' expr( expr ) ' ]' ] + << [ base '[ ' expr( expr ) ' ]' ] } case True { diff --git a/src/cgil/rlhc-java.lm b/src/cgil/rlhc-java.lm index a458369f..e9ba3dd5 100644 --- a/src/cgil/rlhc-java.lm +++ b/src/cgil/rlhc-java.lm @@ -116,16 +116,16 @@ namespace java_gen [ExprFactor.ident O expr( TL ) C] } case - ['offset' '(' ident ',' expr ')'] + ['offset' '(' Base: expr ',' Offset: expr ')'] { send Parser - [expr( ExprFactor.expr )] + [expr( Offset )] } case - ['deref' '(' ident ',' expr ')'] + ['deref' '(' Base: expr ',' Offset: expr ')'] { send Parser - [ ExprFactor.ident '[' expr( ExprFactor.expr ) ']'] + [ expr( Base ) '[' expr( Offset ) ']'] } case [T: `TRUE] diff --git a/src/cgil/rlhc-js.lm b/src/cgil/rlhc-js.lm index 29a61346..013d391a 100644 --- a/src/cgil/rlhc-js.lm +++ b/src/cgil/rlhc-js.lm @@ -116,18 +116,18 @@ namespace js_gen send Parser [ExprFactor.ident O expr( TL ) C] } - case ['offset' '(' ident ',' expr ')'] + case ['offset' '(' Base: expr ',' Offset: expr ')'] { send Parser - [expr( ExprFactor.expr )] + [expr( Offset )] } - case ['deref' '(' ident ',' expr ')'] + case ['deref' '(' Base: expr ',' Offset: expr ')'] { - send Parser [ExprFactor.ident] - if $ExprFactor.ident == 'data' - send Parser ['.charCodeAt(' expr( ExprFactor.expr ) ')'] + send Parser [Base] + if $Base == 'data' + send Parser ['.charCodeAt(' expr( Offset ) ')'] else - send Parser ['[' expr( ExprFactor.expr ) ']'] + send Parser ['[' expr( Offset ) ']'] } case [T: `TRUE] { diff --git a/src/cgil/rlhc-julia.lm b/src/cgil/rlhc-julia.lm index 72108994..96ab4afd 100644 --- a/src/cgil/rlhc-julia.lm +++ b/src/cgil/rlhc-julia.lm @@ -125,15 +125,15 @@ namespace julia_gen send Parser "[I]\[1+([expr( E )])\]" } - case [`offset `( ident `, expr `)] + case [`offset `( Base: ident `, Offset: expr `)] { send Parser - [expr( ExprFactor.expr )] + [expr( Offset )] } - case [`deref `( I: ident `, E: expr `)] + case [`deref `( Base: expr `, Offset: expr `)] { send Parser - "[I]\[1+([ expr( E ) ])\]" + "[expr( Base )]\[1+([ expr( Offset ) ])\]" } case [`TRUE] { diff --git a/src/cgil/rlhc-ocaml.lm b/src/cgil/rlhc-ocaml.lm index f68b61be..4c6e4a73 100644 --- a/src/cgil/rlhc-ocaml.lm +++ b/src/cgil/rlhc-ocaml.lm @@ -123,23 +123,23 @@ namespace ml_gen send Parser [^I '_' ^F '.(' expr(E) ')'] } - case ['offset' '(' ident ',' expr ')'] + case ['offset' '(' expr ',' Offset: expr ')'] { send Parser - [expr( ExprFactor.expr )] + [expr( Offset )] } - case ['deref' '(' I: ident ',' Expr: expr ')'] + case ['deref' '(' Base: expr ',' Offset: expr ')'] { - if ( $I == 'data' ) + if ( $Base == 'data' ) send Parser 'Char.code ' - if ( StaticVarMap->find( $I ) ) { + if ( StaticVarMap->find( $Base ) ) { send Parser - "[I].( [ expr( Expr ) ] )" + "[expr( Base )].( [ expr( Offset ) ] )" } else { send Parser - "[I].\[[ expr( Expr ) ]\]" + "[expr( Base )].\[[ expr( Offset ) ]\]" } } case [T: `TRUE] @@ -162,7 +162,7 @@ namespace ml_gen number( Number ) } case [I: ident] { - if ( StaticVarMap->find( $I ) ) { + if ( StaticVarMap->find( $I ) || $I == 'data' ) { send Parser [^I] } diff --git a/src/cgil/rlhc-ruby.lm b/src/cgil/rlhc-ruby.lm index 87119465..d9e897c5 100644 --- a/src/cgil/rlhc-ruby.lm +++ b/src/cgil/rlhc-ruby.lm @@ -125,8 +125,8 @@ void expr_factor( ExprFactor: expr_factor ) case ['deref' '(' ident ',' expr ')'] { send Parser - [ ExprFactor.ident '[' expr( ExprFactor.expr ) ']'] - if $ExprFactor.ident == 'data' + [ ExprFactor.base '[' expr( ExprFactor.expr ) ']'] + if $ExprFactor.base == 'data' send Parser '.ord' } case [T: `TRUE] diff --git a/src/cgil/rlhc-rust.lm b/src/cgil/rlhc-rust.lm index 03f8b688..7045881d 100644 --- a/src/cgil/rlhc-rust.lm +++ b/src/cgil/rlhc-rust.lm @@ -109,15 +109,15 @@ namespace rust_gen send Parser "[I]\[([expr( E )]) as usize\]" } - case ['offset' '(' ident ',' expr ')'] + case ['offset' '(' E1: expr ',' E2: expr ')'] { send Parser - "( [expr( ExprFactor.expr )] ) as i32" + "( [expr( E2 )] ) as i32" } - case ['deref' '(' I: ident ',' E: expr ')'] + case ['deref' '(' E1: expr ',' E2: expr ')'] { send Parser - "[I]\[([expr( E )]) as usize\] + "[expr( E1 )]\[([expr( E2 )]) as usize\] } case [T: `TRUE] { diff --git a/src/libfsm/codegen.cc b/src/libfsm/codegen.cc index db8cc60a..ac06aaf8 100644 --- a/src/libfsm/codegen.cc +++ b/src/libfsm/codegen.cc @@ -413,6 +413,18 @@ string CodeGen::ACCESS() return ret.str(); } +string CodeGen::DATA() +{ + ostringstream ret; + if ( red->dataExpr == 0 ) + ret << "data"; + else { + ret << OPEN_HOST_EXPR(); + INLINE_LIST( ret, red->dataExpr, 0, false, false ); + ret << CLOSE_HOST_EXPR(); + } + return ret.str(); +} string CodeGen::P() { @@ -543,7 +555,7 @@ string CodeGen::GET_KEY() } else { /* Expression for retrieving the key, use simple dereference. */ - ret << "( " << DEREF( "data", P() ) << ")"; + ret << "( " << DEREF( DATA(), P() ) << ")"; } return ret.str(); } diff --git a/src/libfsm/codegen.h b/src/libfsm/codegen.h index dcc24e3b..e42de065 100644 --- a/src/libfsm/codegen.h +++ b/src/libfsm/codegen.h @@ -200,6 +200,7 @@ protected: virtual string GET_KEY(); + string DATA(); string P(); string PE(); string vEOF(); |