return newVals;
}
- private static void splitByConstructors(CodeWriter w, final CompilationContext context, IVal[] scrutinee, final ICont success, ICont failure, List<Row> rows, int columnId) {
+ private static void splitByConstructors(long location, CodeWriter w, final CompilationContext context, IVal[] scrutinee, final ICont success, ICont failure, List<Row> rows, int columnId) {
THashMap<Object, ExpressionMatrix> matrixMap = new THashMap<Object, ExpressionMatrix>();
ArrayList<Branch> branches = new ArrayList<Branch>();
ArrayList<ExpressionMatrix> matrices = new ArrayList<ExpressionMatrix>();
CodeWriter newW = w.createBlock();
ICont cont = newW.getContinuation();
branches.add(new Branch(null, cont));
- split(newW, context, scrutinee, success, failure, rows.subList(i, rows.size()));
+ split(location, newW, context, scrutinee, success, failure, rows.subList(i, rows.size()));
failure = cont;
}
else {
}
for(ExpressionMatrix mx : matrices)
- split(mx.w, context, mx.scrutinee, success, failure, mx.rows);
- w.switch_(scrutinee[columnId], branches.toArray(new Branch[branches.size()]));
+ split(location, mx.w, context, mx.scrutinee, success, failure, mx.rows);
+ w.switch_(location, scrutinee[columnId], branches.toArray(new Branch[branches.size()]));
}
- private static void splitByViewPattern(CodeWriter w, CompilationContext context, IVal[] scrutinee, ICont success,
+ private static void splitByViewPattern(long location, CodeWriter w, CompilationContext context, IVal[] scrutinee, ICont success,
ICont failure, List<Row> rows, int viewPatternColumn) {
Row firstRow = rows.get(0);
EViewPattern firstViewPattern = (EViewPattern)firstRow.patterns[viewPatternColumn];
firstViewPattern.expression.toVal(context, w),
scrutinee[viewPatternColumn]);
if(i == rows.size()) {
- split(w, context, newScrutinee, success, failure, rows);
+ split(location, w, context, newScrutinee, success, failure, rows);
}
else {
CodeWriter cont = w.createBlock();
- split(w, context, newScrutinee, success, cont.getContinuation(), rows.subList(0, i));
- split(cont, context, scrutinee, success, failure, rows.subList(i, rows.size()));
+ split(location, w, context, newScrutinee, success, cont.getContinuation(), rows.subList(0, i));
+ split(location, cont, context, scrutinee, success, failure, rows.subList(i, rows.size()));
}
}
- public static void split(CodeWriter w, CompilationContext context, IVal[] scrutinee, ICont success, ICont failure, List<Row> rows) {
+ public static void split(long location, CodeWriter w, CompilationContext context, IVal[] scrutinee, ICont success, ICont failure, List<Row> rows) {
Row firstRow = rows.get(0);
Expression[] patterns = firstRow.patterns;
if(scrutinee.length != patterns.length)
viewPatternColumn = i;
}
else if(!(pattern instanceof EVariable)) {
- splitByConstructors(w, context, scrutinee, success, failure, rows, i);
+ splitByConstructors(location, w, context, scrutinee, success, failure, rows, i);
return;
}
}
if(viewPatternColumn >= 0) {
- splitByViewPattern(w, context, scrutinee, success, failure, rows, viewPatternColumn);
+ splitByViewPattern(location, w, context, scrutinee, success, failure, rows, viewPatternColumn);
return;
}
CodeWriter newW = w.createBlock();
ICont cont = newW.getContinuation();
group.compile(context, w, success, cont);
- split(newW, context, scrutinee, success, failure, rows.subList(1, rows.size()));
+ split(location, newW, context, scrutinee, success, failure, rows.subList(1, rows.size()));
}
}
else
- w.jump(success, firstRow.value.toVal(context, w));
+ w.jump(location, success, firstRow.value.toVal(context, w));
}
}