aa
com.cliffc.aa.node.ScopeNode.IfScope Class Reference
Collaboration diagram for com.cliffc.aa.node.ScopeNode.IfScope:
[legend]

Package Functions

Node check (ScopeNode scope, boolean arm, Parse bad, GVNGCM gvn, Node ctrl, Node mem)
 
void def (String name, Access mutable, boolean create)
 
void flip ()
 

Package Attributes

boolean _arm = true
 
HashMap< String, Access_fvars
 
HashMap< String, Access_tvars
 

Detailed Description

Definition at line 198 of file ScopeNode.java.

Member Function Documentation

◆ check()

Node com.cliffc.aa.node.ScopeNode.IfScope.check ( ScopeNode  scope,
boolean  arm,
Parse  bad,
GVNGCM  gvn,
Node  ctrl,
Node  mem 
)
package

Definition at line 216 of file ScopeNode.java.

216  {
217  if( _tvars == null ) return mem; // No new vars on either arm
218  // Pull from both variable sets names that are common to both
219  if( arm ) { // Only do it first time
220  Ary<String> names = new Ary<>(String.class).addAll(_tvars.keySet());
221  while( !names.isEmpty() ) {
222  String name = names.pop();
223  if( _fvars.remove(name)!=null ) _tvars.remove(name);
224  }
225  }
226  // Everything in this set is a partially-created variable error
227  HashMap<String,Access> vars = arm ? _fvars : _tvars;
228  if( vars.isEmpty() ) return mem;
229  mem.unkeep(2); // Passed-in 'hooked' memory
230  for( String name : vars.keySet() ) {
231  String msg = "'"+name+"' not defined on "+arm+" arm of trinary";
232  Node err = gvn.xform(new ErrNode(ctrl,bad,msg));
233  // Exactly like a parser store of an error, on the missing side
234  mem = gvn.xform(new StoreNode(mem,scope.ptr(),err,Access.Final,name,bad));
235  }
236  return mem.keep(2); // Return 'hooked' memory
237  }

References com.cliffc.aa.node.ScopeNode.IfScope._fvars, com.cliffc.aa.node.ScopeNode.IfScope._tvars, com.cliffc.aa.util.Ary< E >.addAll(), com.cliffc.aa.node.ScopeNode.ctrl(), com.cliffc.aa.node.Node.err(), com.cliffc.aa.type.TypeFld.Access.Final, com.cliffc.aa.util.Ary< E >.isEmpty(), com.cliffc.aa.node.Node.keep(), com.cliffc.aa.node.ScopeNode.mem(), com.cliffc.aa.util.Ary< E >.pop(), com.cliffc.aa.node.ScopeNode.ptr(), com.cliffc.aa.node.Node.unkeep(), and com.cliffc.aa.GVNGCM.xform().

Here is the call graph for this function:

◆ def()

void com.cliffc.aa.node.ScopeNode.IfScope.def ( String  name,
Access  mutable,
boolean  create 
)
package

Definition at line 203 of file ScopeNode.java.

203  {
204  if( _tvars == null ) { _tvars = new HashMap<>(); _fvars = new HashMap<>(); }
205  // If there was no prior create inside the same if, then this update
206  // predates the if and is not involved in a partial-creation error
207  if( !create && !_arm && _tvars.get(name) != null )
208  _fvars.put(name,mutable);
209  if( create ) {
210  HashMap<String,Access> vars = _arm ? _tvars : _fvars;
211  Access res = vars.put(name,mutable);
212  assert res==null; // No double-creation
213  }
214  }

References com.cliffc.aa.node.ScopeNode.IfScope._arm, com.cliffc.aa.node.ScopeNode.IfScope._fvars, and com.cliffc.aa.node.ScopeNode.IfScope._tvars.

◆ flip()

void com.cliffc.aa.node.ScopeNode.IfScope.flip ( )
package

Definition at line 201 of file ScopeNode.java.

201 { _arm = !_arm; }

References com.cliffc.aa.node.ScopeNode.IfScope._arm.

Member Data Documentation

◆ _arm

boolean com.cliffc.aa.node.ScopeNode.IfScope._arm = true
package

◆ _fvars

HashMap<String,Access> com.cliffc.aa.node.ScopeNode.IfScope._fvars
package

◆ _tvars

HashMap<String,Access> com.cliffc.aa.node.ScopeNode.IfScope._tvars
package

The documentation for this class was generated from the following file:
com.cliffc.aa.type.TypeFld.Access.Final
Final
Definition: TypeFld.java:112
com.cliffc.aa.node.ScopeNode.IfScope._fvars
HashMap< String, Access > _fvars
Definition: ScopeNode.java:199
com.cliffc.aa.util.Ary.isEmpty
boolean isEmpty()
Definition: Ary.java:20
com.cliffc.aa.util.Ary.pop
E pop()
Definition: Ary.java:41
com.cliffc.aa.util.Ary.addAll
Ary< E > addAll(Collection<? extends E > c)
Definition: Ary.java:151
com.cliffc.aa.node.Node
Definition: Node.java:16
com.cliffc.aa.node.ScopeNode.ctrl
Node ctrl()
Definition: ScopeNode.java:44
com.cliffc.aa.util.Ary
Definition: Ary.java:11
com.cliffc.aa.node.Node.keep
public< N extends Node > N keep()
Definition: Node.java:228
com.cliffc.aa.node.Node.err
ErrMsg err(boolean fast)
Definition: Node.java:526
com.cliffc.aa.GVNGCM.xform
Node xform(Node n)
Definition: GVNGCM.java:126
com.cliffc.aa.node.ScopeNode.IfScope._arm
boolean _arm
Definition: ScopeNode.java:200
com.cliffc.aa.node.Node.unkeep
public< N extends Node > N unkeep()
Definition: Node.java:232
com.cliffc.aa.node.ScopeNode.mem
Node mem()
Definition: ScopeNode.java:45
com.cliffc.aa.node.ScopeNode.IfScope._tvars
HashMap< String, Access > _tvars
Definition: ScopeNode.java:199
com.cliffc.aa.type.TypeFld.Access
Definition: TypeFld.java:109