(throws == FlowReturns.Never) &&
(barrier == FlowReturns.Never))
return FlowReturns.Always;
- else
+ else
return FlowReturns.Sometimes;
}
}
if (parent != null) {
if (num_locals > 0)
- locals = new MyBitVector (parent.locals, CountLocals);
+ locals = new MyBitVector (parent.locals, CountLocals);
if (num_params > 0)
parameters = new MyBitVector (parent.parameters, num_params);
reachability = parent.Reachability.Clone ();
} else {
if (num_locals > 0)
- locals = new MyBitVector (null, CountLocals);
+ locals = new MyBitVector (null, CountLocals);
if (num_params > 0)
parameters = new MyBitVector (null, num_params);
CountParameters, CountLocals);
if (retval.locals != null)
- retval.locals = locals.Clone ();
+ retval.locals = locals.Clone ();
if (parameters != null)
retval.parameters = parameters.Clone ();
if ((Type == SiblingType.SwitchSection) && !new_r.IsUnreachable) {
Report.Error (163, Location,
"Control cannot fall through from one " +
- "case label to another");
+ "case label to another");
return result;
- }
+ }
if (locals != null && result.LocalVector != null)
locals.Or (result.LocalVector);
IsDirty = true;
return result;
- }
+ }
protected void MergeFinally (FlowBranching branching, UsageVector f_origins,
MyBitVector f_params)
reachability = Reachability.Never ();
for (UsageVector vector = f_origins; vector != null; vector = vector.Next) {
- Report.Debug (1, " MERGING FINALLY ORIGIN", vector);
+ Report.Debug (1, " MERGING FINALLY ORIGIN", vector);
if (parameters != null)
parameters.And (vector.parameters);
public MyBitVector Locals {
get {
if (locals != null)
- return locals.Clone ();
+ return locals.Clone ();
else
return null;
}
}
protected UsageVector Merge (UsageVector sibling_list)
- {
+ {
if (sibling_list.Next == null)
return sibling_list;
for (UsageVector child = sibling_list; child != null; child = child.Next) {
bool do_break = (Type != BranchingType.Switch) &&
(Type != BranchingType.Loop);
-
+
Report.Debug (2, " MERGING SIBLING ", child,
child.ParameterVector, child.LocalVector,
reachability, child.Reachability, do_break);
Reachability.And (ref reachability, child.Reachability, do_break);
-
+
// A local variable is initialized after a flow branching if it
// has been initialized in all its branches which do neither
// always return or always throw an exception.
UsageVector vector = CurrentUsageVector.Clone ();
vector.Next = origin_vectors;
origin_vectors = vector;
- }
+ }
CurrentUsageVector.MergeJumpOrigins (origin_vectors);
}
VariableInfo[] map;
- public VariableMap (InternalParameters ip)
+ public VariableMap (Parameters ip)
{
Count = ip != null ? ip.Count : 0;
for (int i = 0; i < Count; i++) {
Parameter.Modifier mod = ip.ParameterModifier (i);
- if ((mod & Parameter.Modifier.OUT) == 0)
+ if ((mod & Parameter.Modifier.OUT) != Parameter.Modifier.OUT)
continue;
// Dont allocate till we find an out var.
{
if (vector != null)
return;
-
+
vector = new BitArray (Count, false);
if (InheritsFrom != null)
Vector = InheritsFrom.Vector;