@@ -83,7 +83,7 @@ public class JobC extends Thread
8383
8484 public MNode job ;
8585 protected EquationSet digestedModel ;
86- protected ExponentContext exponentContext ;
86+ public ExponentContext exponentContext ;
8787 protected MVolatile params ;
8888
8989 public Host env ;
@@ -5843,7 +5843,7 @@ public void renderEquation (RendererC context, EquationEntry e)
58435843 break ;
58445844 case Variable .MULTIPLY :
58455845 // raw exponent = exponentV + exponentExpression
5846- // shift = raw - exponentV = expnentExpression
5846+ // shift = raw - exponentV = exponentExpression
58475847 shift = e .expression .exponentNext ;
58485848 if (shift != 0 && fixedPoint )
58495849 {
@@ -6480,17 +6480,18 @@ public String resolve (VariableReference r, RendererC context, boolean lvalue)
64806480 public String resolve (VariableReference r , RendererC context , boolean lvalue , String base , boolean logical )
64816481 {
64826482 if (r == null || r .variable == null ) return "unresolved" ;
6483+ Variable v = r .variable ;
64836484
64846485 // Because $live has some rather complex access rules, take special care to ensure
64856486 // that it always returns false when either $connect or $init are true.
6486- if (r . variable . name .equals ("$live" ) && r . variable .container == context .part )
6487+ if (v . name .equals ("$live" ) && v .container == context .part )
64876488 {
64886489 if (context .part .getConnect () || context .part .getInit ()) return "0" ;
64896490 }
64906491
6491- if (r . variable .hasAttribute ("constant" ) && ! lvalue ) // A constant will always be an rvalue, unless it is being loaded into a local variable (special case for $t').
6492+ if (v .hasAttribute ("constant" ) && ! lvalue ) // A constant will always be an rvalue, unless it is being loaded into a local variable (special case for $t').
64926493 {
6493- EquationEntry e = r . variable .equations .first ();
6494+ EquationEntry e = v .equations .first ();
64946495 StringBuilder temp = context .result ;
64956496 StringBuilder result = new StringBuilder ();
64966497 context .result = result ;
@@ -6501,77 +6502,75 @@ public String resolve (VariableReference r, RendererC context, boolean lvalue, S
65016502
65026503 String containers = resolveContainer (r , context , base );
65036504
6504- if (r . variable .hasAttribute ("instance" ))
6505+ if (v .hasAttribute ("instance" ))
65056506 {
65066507 return stripDereference (containers );
65076508 }
65086509
65096510 String name = "" ;
6510- BackendDataC bed = (BackendDataC ) r . variable .container .backendData ; // NOT context.bed !
6511- if (r . variable .hasAttribute ("preexistent" ))
6511+ BackendDataC vbed = (BackendDataC ) v .container .backendData ; // NOT context.bed !
6512+ if (v .hasAttribute ("preexistent" ))
65126513 {
6513- String vname = r .variable .name ;
6514- if (! vname .startsWith ("$" ))
6514+ if (! v .name .startsWith ("$" ))
65156515 {
6516- return vname ; // most likely a local variable, for example "rc" in mapIndex()
6516+ return v . name ; // most likely a local variable, for example "rc" in mapIndex()
65176517 }
65186518 else
65196519 {
6520- int vorder = r .variable .order ;
6521- if (vname .equals ("$t" ))
6520+ if (v .name .equals ("$t" ))
65226521 {
6523- if (! lvalue && vorder == 0 )
6522+ if (! lvalue && v . order == 0 )
65246523 {
65256524 name = SIMULATOR + "currentEvent->t" ;
65266525 }
65276526 // For lvalue, fall through to the main case below.
65286527 // Higher orders of $t should not be "preexistent". They are handled below.
65296528 }
6530- else if (vname .equals ("$n" ))
6529+ else if (v . name .equals ("$n" ))
65316530 {
6532- if (! lvalue && vorder == 0 )
6531+ if (! lvalue && v . order == 0 )
65336532 {
65346533 name = "n" ;
65356534 }
65366535 }
65376536 }
65386537 }
6539- if (r . variable .name .equals ("$live" ))
6538+ if (v .name .equals ("$live" ))
65406539 {
65416540 if (lvalue ) return "unresolved" ;
6542- if (r . variable .hasAttribute ("accessor" )) return containers + "getLive ()" ;
6541+ if (v .hasAttribute ("accessor" )) return containers + "getLive ()" ;
65436542
65446543 // Not "constant" or "accessor", so must be direct access.
6545- if (logical ) return "(" + bed .getFlag (containers + "flags" , false , bed .liveFlag ) + ")" ;
6546- else return "((" + bed .getFlag (containers + "flags" , false , bed .liveFlag ) + ") ? 1 : 0)" ;
6544+ if (logical ) return "(" + vbed .getFlag (containers + "flags" , false , vbed .liveFlag ) + ")" ;
6545+ else return "((" + vbed .getFlag (containers + "flags" , false , vbed .liveFlag ) + ") ? 1 : 0)" ;
65476546 }
6548- else if (r . variable .hasAttribute ("accessor" ))
6547+ else if (v .hasAttribute ("accessor" ))
65496548 {
6550- if (r . variable . name .equals ("$t" ) && r . variable .order == 1 && ! lvalue ) // $t'
6549+ if (v . name .equals ("$t" ) && v .order == 1 && ! lvalue ) // $t'
65516550 {
65526551 return containers + "getDt ()" ;
65536552 }
65546553 return "unresolved" ; // Only $live and $t' can have "accessor" attribute.
65556554 }
6556- if (r . variable .name .endsWith (".$count" ))
6555+ if (v .name .endsWith (".$count" ))
65576556 {
65586557 if (lvalue ) return "unresolved" ;
6559- String alias = r . variable . name .substring (0 , r . variable .name .lastIndexOf ("." ));
6560- name = mangle (alias ) + "->" + prefix (r . variable .container ) + "_" + mangle (alias ) + "_count" ;
6558+ String alias = v . name .substring (0 , v .name .lastIndexOf ("." ));
6559+ name = mangle (alias ) + "->" + prefix (v .container ) + "_" + mangle (alias ) + "_count" ;
65616560 }
65626561 if (name .length () == 0 )
65636562 {
65646563 // Write to buffered value, except during init phase.
6565- if (lvalue && ! context .part .getInit () && (bed .globalBuffered .contains (r . variable ) || bed .localBuffered .contains (r . variable )))
6564+ if (lvalue && ! context .part .getInit () && (vbed .globalBuffered .contains (v ) || vbed .localBuffered .contains (v )))
65666565 {
6567- name = mangle ("next_" , r . variable );
6566+ name = mangle ("next_" , v );
65686567 }
65696568 else
65706569 {
6571- name = mangle (r . variable );
6570+ name = mangle (v );
65726571 }
65736572 }
6574- if (r . variable .hasAttribute ("MatrixPointer" ) && ! lvalue )
6573+ if (v .hasAttribute ("MatrixPointer" ) && ! lvalue )
65756574 {
65766575 return "(* " + containers + name + ")" ; // Actually stored as a pointer
65776576 }
0 commit comments