summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cgil/ril.lm4
-rw-r--r--src/cgil/rlhc-c.lm8
-rw-r--r--src/cgil/rlhc-crack.lm8
-rw-r--r--src/cgil/rlhc-csharp.lm8
-rw-r--r--src/cgil/rlhc-d.lm8
-rw-r--r--src/cgil/rlhc-go.lm4
-rw-r--r--src/cgil/rlhc-java.lm8
-rw-r--r--src/cgil/rlhc-js.lm14
-rw-r--r--src/cgil/rlhc-julia.lm8
-rw-r--r--src/cgil/rlhc-ocaml.lm16
-rw-r--r--src/cgil/rlhc-ruby.lm4
-rw-r--r--src/cgil/rlhc-rust.lm8
-rw-r--r--src/libfsm/codegen.cc14
-rw-r--r--src/libfsm/codegen.h1
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();