aa
ErrNode.java
Go to the documentation of this file.
1 package com.cliffc.aa.node;
2 
3 import com.cliffc.aa.GVNGCM;
4 import com.cliffc.aa.Parse;
5 import com.cliffc.aa.type.Type;
6 import com.cliffc.aa.type.TypeMem;
7 
10 public final class ErrNode extends Node {
11  final ErrMsg _err;
12  public ErrNode( Node ctrl, Parse loc, String msg ) { this(ctrl,new ErrMsg(loc,msg,Level.ErrNode)); }
13  public ErrNode( Node ctrl, ErrMsg err ) {
14  super(OP_ERR,ctrl);
15  _err = err;
17  }
18  @Override public String xstr() { return _err._msg; }
19  @Override String str() { return "Err"; }
20  @Override public Node ideal_reduce() { Node cc = in(0).is_copy(0); return cc==null ? null : set_def(0,cc); }
21  @Override public Type value(GVNGCM.Mode opt_mode) {
22  Type t = val(0);
23  return t == Type.ANY || t == Type.XCTRL ? Type.ANY : Type.ALL; // For dead data errors return ANY (no error)
24  }
25  @Override public TypeMem live_use( GVNGCM.Mode opt_mode, Node def ) { return TypeMem.ALIVE; }
26  @Override public ErrMsg err( boolean fast ) {
27  // While you might think we should ALWAYS report these, as their existence
28  // means the program is in-error - the program may have other earlier
29  // errors we want to report in preference to this one. If any user
30  // has ANOTHER ALL/Err input, return null instead.
31  for( Node use : _uses )
32  for( Node def : use._defs )
33  if( def != null && def != this && def._val ==Type.ALL )
34  return null;
35  return _err;
36  }
37  @Override public int hashCode() { return super.hashCode()+_err.hashCode(); }
38  @Override public boolean equals(Object o) {
39  if( this==o ) return true;
40  if( !super.equals(o) ) return false;
41  if( !(o instanceof ErrNode) ) return false;
42  ErrNode err = (ErrNode)o;
43  return _err.equals(err._err);
44  }
45 }
com.cliffc.aa.node.ErrNode.hashCode
int hashCode()
Definition: ErrNode.java:37
com.cliffc.aa.node.Node.ErrMsg.equals
boolean equals(Object obj)
Definition: Node.java:956
com.cliffc.aa.node.ErrNode.err
ErrMsg err(boolean fast)
Definition: ErrNode.java:26
com.cliffc.aa.node.Node.Level.ErrNode
ErrNode
Definition: Node.java:874
com.cliffc.aa.type.TypeMem
Memory type; the state of all of memory; memory edges order memory ops.
Definition: TypeMem.java:53
com.cliffc.aa.node.Node._live
TypeMem _live
Definition: Node.java:89
com.cliffc.aa.node.Node.OP_ERR
static final byte OP_ERR
Definition: Node.java:24
com.cliffc
com.cliffc.aa.type.TypeMem.LIVE_BOT
static final TypeMem LIVE_BOT
Definition: TypeMem.java:226
com.cliffc.aa.node.Node
Definition: Node.java:16
com.cliffc.aa.node.ErrNode.live_use
TypeMem live_use(GVNGCM.Mode opt_mode, Node def)
Definition: ErrNode.java:25
com.cliffc.aa.type.Type
an implementation of language AA
Definition: Type.java:94
com.cliffc.aa.node.ErrNode.str
String str()
Definition: ErrNode.java:19
com.cliffc.aa.node.Node.ErrMsg._msg
final String _msg
Definition: Node.java:890
com.cliffc.aa.node.Node._val
Type _val
Definition: Node.java:88
com.cliffc.aa.type.Type.ANY
static final Type ANY
Definition: Type.java:325
com.cliffc.aa.node.ErrNode.ErrNode
ErrNode(Node ctrl, ErrMsg err)
Definition: ErrNode.java:13
com.cliffc.aa.type.Type.ALL
static final Type ALL
Definition: Type.java:324
com.cliffc.aa.node.ErrNode.ideal_reduce
Node ideal_reduce()
Definition: ErrNode.java:20
com.cliffc.aa.node.ErrNode
Error nodes.
Definition: ErrNode.java:10
com.cliffc.aa.node.Node.is_copy
Node is_copy(int idx)
Definition: Node.java:827
com.cliffc.aa.node.ErrNode.equals
boolean equals(Object o)
Definition: ErrNode.java:38
com.cliffc.aa.node.ErrNode.xstr
String xstr()
Definition: ErrNode.java:18
com.cliffc.aa.node.ErrNode.ErrNode
ErrNode(Node ctrl, Parse loc, String msg)
Definition: ErrNode.java:12
com.cliffc.aa.node.Node.in
Node in(int i)
Definition: Node.java:126
com.cliffc.aa.node.ErrNode._err
final ErrMsg _err
Definition: ErrNode.java:11
com.cliffc.aa.type.TypeMem.ALIVE
static final TypeMem ALIVE
Definition: TypeMem.java:226
com.cliffc.aa.type.Type.XCTRL
static final Type XCTRL
Definition: Type.java:327
com.cliffc.aa.GVNGCM
Definition: GVNGCM.java:12
com.cliffc.aa.node.Node._uses
Ary< Node > _uses
Definition: Node.java:245
com.cliffc.aa.node.Node.val
Type val(int idx)
Definition: Node.java:470
com.cliffc.aa
Definition: AA.java:1
com.cliffc.aa.node.Node.set_def
Node set_def(int idx, Node n)
Definition: Node.java:154
com.cliffc.aa.node.Node.Level
Definition: Node.java:872
com.cliffc.aa.node.ErrNode.value
Type value(GVNGCM.Mode opt_mode)
Definition: ErrNode.java:21
com.cliffc.aa.node.Node.ErrMsg.hashCode
int hashCode()
Definition: Node.java:967
com
com.cliffc.aa.type
Definition: Bits.java:1
com.cliffc.aa.node.Node._defs
Ary< Node > _defs
Definition: Node.java:124
com.cliffc.aa.Parse
an implementation of language AA
Definition: Parse.java:68
com.cliffc.aa.GVNGCM.Mode
Definition: GVNGCM.java:14