Skip to content

Instantly share code, notes, and snippets.

@adriaanm
Created November 28, 2011 16:08
Show Gist options
  • Save adriaanm/1400910 to your computer and use it in GitHub Desktop.
Save adriaanm/1400910 to your computer and use it in GitHub Desktop.
virtpatmat compilation of a match and various hand-coded optimizations
import improving.benchmark.Benchmark.Race
val list = List(1, 3, 4, 7)
val race = Race(() => fastMatch(list), () => virtMatch_no_option(list))(100000).converge()
def fastMatch(x1: List[Int]) = {
x1 match {
case 1 :: 3 :: 4 :: 5 :: x => println("nope")
case 1 :: 3 :: 4 :: 6 :: x => println("nope") // only need to test whether the previous case failed due to the third element not being 5, and whether third element is 6
case 1 :: 3 :: 4 :: 7 :: x => 1
}
}
// getting rid of Option, as suggested by Tiark
def virtMatch_no_option(x1: List[Int]) = {
val zero49: Option[Nothing] = MatchingStrategy.OptionMatchingStrategy.zero;
var matchRes13: Any = null;
var keepGoing14: Boolean = true;
{
{
if (x1.isInstanceOf[collection.immutable.::[Int]])
{
val x4: collection.immutable.::[Int] = x1.asInstanceOf[collection.immutable.::[Int]];
if (x4.ne(null))
if (1.==(x4.hd$1))
{
val x37: Int = x4.hd$1;
if (x4.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x7: collection.immutable.::[Int] = x4.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x7.ne(null))
if (3.==(x7.hd$1))
{
val x38: Int = x7.hd$1;
if (x7.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x10: collection.immutable.::[Int] = x7.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x10.ne(null))
if (4.==(x10.hd$1))
{
val x39: Int = x10.hd$1;
if (x10.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x12: collection.immutable.::[Int] = x10.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x12.ne(null))
if (5.==(x12.hd$1))
{
val x40: Int = x12.hd$1;
{
matchRes13 = Predef.println("nope").asInstanceOf[Unit];
keepGoing14 = false
}
}
else
zero49
else
zero49
}
else
zero49
}
else
zero49
else
zero49
}
else
zero49
}
else
zero49
else
zero49
}
else
zero49
}
else
zero49
else
zero49
}
else
zero49;
if (keepGoing14)
if (x1.isInstanceOf[collection.immutable.::[Int]])
{
val x17: collection.immutable.::[Int] = x1.asInstanceOf[collection.immutable.::[Int]];
if (x17.ne(null))
if (1.==(x17.hd$1))
{
val x41: Int = x17.hd$1;
if (x17.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x20: collection.immutable.::[Int] = x17.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x20.ne(null))
if (3.==(x20.hd$1))
{
val x42: Int = x20.hd$1;
if (x20.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x23: collection.immutable.::[Int] = x20.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x23.ne(null))
if (4.==(x23.hd$1))
{
val x43: Int = x23.hd$1;
if (x23.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x25: collection.immutable.::[Int] = x23.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x25.ne(null))
if (6.==(x25.hd$1))
{
val x44: Int = x25.hd$1;
{
matchRes13 = Predef.println("nope").asInstanceOf[Unit];
keepGoing14 = false
}
}
else
zero49
else
zero49
}
else
zero49
}
else
zero49
else
zero49
}
else
zero49
}
else
zero49
else
zero49
}
else
zero49
}
else
zero49
else
zero49
}
else
zero49
else
zero49
};
if (keepGoing14)
if (x1.isInstanceOf[collection.immutable.::[Int]])
{
val x28: collection.immutable.::[Int] = x1.asInstanceOf[collection.immutable.::[Int]];
if (x28.ne(null))
if (1.==(x28.hd$1))
{
val x45: Int = x28.hd$1;
if (x28.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x31: collection.immutable.::[Int] = x28.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x31.ne(null))
if (3.==(x31.hd$1))
{
val x46: Int = x31.hd$1;
if (x31.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x34: collection.immutable.::[Int] = x31.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x34.ne(null))
if (4.==(x34.hd$1))
{
val x47: Int = x34.hd$1;
if (x34.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x36: collection.immutable.::[Int] = x34.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x36.ne(null))
if (7.==(x36.hd$1))
{
val x48: Int = x36.hd$1;
{
matchRes13 = 1.asInstanceOf[Int];
keepGoing14 = false
}
}
else
zero49
else
zero49
}
else
zero49
}
else
zero49
else
zero49
}
else
zero49
}
else
zero49
else
zero49
}
else
zero49
}
else
zero49
else
zero49
}
else
zero49
else
zero49
};
if (keepGoing14)
throw new MatchError(x1)
else
matchRes13
}
// hand-coded sharing
def virtMatch_sharing(x1: List[Int]) = {
var sharing = false
var shared1: Int = 0
var res: Any = null
var keepGoing = true
if (x1.isInstanceOf[collection.immutable.::[Int]]) {
val x4: collection.immutable.::[Int] = x1.asInstanceOf[collection.immutable.::[Int]];
if (1.==(x4.hd$1)) {
if (x4.tl$1.isInstanceOf[collection.immutable.::[Int]]) {
val x7: collection.immutable.::[Int] = x4.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (3.==(x7.hd$1)) {
if (x7.tl$1.isInstanceOf[collection.immutable.::[Int]]) {
val x10: collection.immutable.::[Int] = x7.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (4.==(x10.hd$1)) {
if (x10.tl$1.isInstanceOf[collection.immutable.::[Int]]) {
val x12: collection.immutable.::[Int] = x10.tl$1.asInstanceOf[collection.immutable.::[Int]];
sharing = true // the nested if's need not be repeated for the following cases since they test exactly the same thing
shared1 = (x12.hd$1) // save captured variables (by the conceptual closure of the dependent sub-patterns)
if (5 == shared1) {
res = println("nope")
keepGoing = false
}
}
}
}
}
}
}
}
if(keepGoing && sharing && 6 == shared1 ) {
res = println("nope")
keepGoing = false
}
if (keepGoing && sharing && 7 == shared1) {
res = 1
keepGoing = false
}
if (keepGoing) {throw new MatchError("meh")}
else res
}
// hand-coded inlined runOrElse
def virtMatch_inline_runOrElse(x1: List[Int]) = {
import MatchingStrategy.OptionMatchingStrategy._
val res = {
val o48: Option[AnyVal] = {
val o47: Option[AnyVal] = if (x1.isInstanceOf[collection.immutable.::[Int]])
{
val x4: collection.immutable.::[Int] = x1.asInstanceOf[collection.immutable.::[Int]];
if (x4.ne(null))
if (1.==(x4.hd$1))
{
val x35: Int = x4.hd$1;
if (x4.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x7: collection.immutable.::[Int] = x4.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x7.ne(null))
if (3.==(x7.hd$1))
{
val x36: Int = x7.hd$1;
if (x7.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x10: collection.immutable.::[Int] = x7.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x10.ne(null))
if (4.==(x10.hd$1))
{
val x37: Int = x10.hd$1;
if (x10.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x12: collection.immutable.::[Int] = x10.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x12.ne(null))
if (5.==(x12.hd$1))
{
val x38: Int = x12.hd$1;
MatchingStrategy.OptionMatchingStrategy.caseResult[Unit](println("nope"))
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero;
if (o47.isEmpty)
if (x1.isInstanceOf[collection.immutable.::[Int]])
{
val x15: collection.immutable.::[Int] = x1.asInstanceOf[collection.immutable.::[Int]];
if (x15.ne(null))
if (1.==(x15.hd$1))
{
val x39: Int = x15.hd$1;
if (x15.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x18: collection.immutable.::[Int] = x15.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x18.ne(null))
if (3.==(x18.hd$1))
{
val x40: Int = x18.hd$1;
if (x18.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x21: collection.immutable.::[Int] = x18.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x21.ne(null))
if (4.==(x21.hd$1))
{
val x41: Int = x21.hd$1;
if (x21.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x23: collection.immutable.::[Int] = x21.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x23.ne(null))
if (6.==(x23.hd$1))
{
val x42: Int = x23.hd$1;
MatchingStrategy.OptionMatchingStrategy.caseResult[Unit](println("nope"))
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
o47
};
if (o48.isEmpty)
if (x1.isInstanceOf[collection.immutable.::[Int]])
{
val x26: collection.immutable.::[Int] = x1.asInstanceOf[collection.immutable.::[Int]];
if (x26.ne(null))
if (1.==(x26.hd$1))
{
val x43: Int = x26.hd$1;
if (x26.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x29: collection.immutable.::[Int] = x26.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x29.ne(null))
if (3.==(x29.hd$1))
{
val x44: Int = x29.hd$1;
if (x29.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x32: collection.immutable.::[Int] = x29.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x32.ne(null))
if (4.==(x32.hd$1))
{
val x45: Int = x32.hd$1;
if (x32.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x34: collection.immutable.::[Int] = x32.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x34.ne(null))
if (7.==(x34.hd$1))
{
val x46: Int = x34.hd$1;
MatchingStrategy.OptionMatchingStrategy.caseResult[Int](1)
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
o48
}
res.getOrElse {throw new MatchError("meh")}
}
// hand-coded mutable var for orElse
def virtMatch_var_orElse(x1: List[Int]) = {
import MatchingStrategy.OptionMatchingStrategy._
var res: Option[AnyVal] = None
if (x1.isInstanceOf[collection.immutable.::[Int]]) {
val x4: collection.immutable.::[Int] = x1.asInstanceOf[collection.immutable.::[Int]];
if (x4.ne(null))
if (1.==(x4.hd$1))
{
val x35: Int = x4.hd$1;
if (x4.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x7: collection.immutable.::[Int] = x4.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x7.ne(null))
if (3.==(x7.hd$1))
{
val x36: Int = x7.hd$1;
if (x7.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x10: collection.immutable.::[Int] = x7.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x10.ne(null))
if (4.==(x10.hd$1))
{
val x37: Int = x10.hd$1;
if (x10.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x12: collection.immutable.::[Int] = x10.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x12.ne(null))
if (5.==(x12.hd$1))
{
val x38: Int = x12.hd$1;
res = MatchingStrategy.OptionMatchingStrategy.caseResult[Unit](println("nope"))
}
}
}
}
}
}
}
};
if (res.isEmpty)
if (x1.isInstanceOf[collection.immutable.::[Int]]) {
val x15: collection.immutable.::[Int] = x1.asInstanceOf[collection.immutable.::[Int]];
if (x15.ne(null))
if (1.==(x15.hd$1))
{
val x39: Int = x15.hd$1;
if (x15.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x18: collection.immutable.::[Int] = x15.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x18.ne(null))
if (3.==(x18.hd$1))
{
val x40: Int = x18.hd$1;
if (x18.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x21: collection.immutable.::[Int] = x18.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x21.ne(null))
if (4.==(x21.hd$1))
{
val x41: Int = x21.hd$1;
if (x21.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x23: collection.immutable.::[Int] = x21.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x23.ne(null))
if (6.==(x23.hd$1))
{
val x42: Int = x23.hd$1;
res = MatchingStrategy.OptionMatchingStrategy.caseResult[Unit](println("nope"))
}
}
}
}
}
}
}
}
if (res.isEmpty)
if (x1.isInstanceOf[collection.immutable.::[Int]]) {
val x26: collection.immutable.::[Int] = x1.asInstanceOf[collection.immutable.::[Int]];
if (x26.ne(null))
if (1.==(x26.hd$1))
{
val x43: Int = x26.hd$1;
if (x26.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x29: collection.immutable.::[Int] = x26.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x29.ne(null))
if (3.==(x29.hd$1))
{
val x44: Int = x29.hd$1;
if (x29.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x32: collection.immutable.::[Int] = x29.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x32.ne(null))
if (4.==(x32.hd$1))
{
val x45: Int = x32.hd$1;
if (x32.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x34: collection.immutable.::[Int] = x32.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x34.ne(null))
if (7.==(x34.hd$1))
{
val x46: Int = x34.hd$1;
res = MatchingStrategy.OptionMatchingStrategy.caseResult[Int](1)
}
}
}
}
}
}
}
}
res.getOrElse {throw new MatchError("meh")}
}
// what -Yvirtpatmat generates with scalac compiled from http://github.com/adriaanm/scala-dev/commit/7068e28f6ccaa14d87677c3329e096c0a7ed55b5
def virtMatch(x1: List[Int]): AnyVal = MatchingStrategy.OptionMatchingStrategy.runOrElse[List[Int], AnyVal](x1)(((x1: List[Int]) => {
val o48: Option[AnyVal] = {
val o47: Option[AnyVal] = if (x1.isInstanceOf[collection.immutable.::[Int]])
{
val x4: collection.immutable.::[Int] = x1.asInstanceOf[collection.immutable.::[Int]];
if (x4.ne(null))
if (1.==(x4.hd$1))
{
val x35: Int = x4.hd$1;
if (x4.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x7: collection.immutable.::[Int] = x4.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x7.ne(null))
if (3.==(x7.hd$1))
{
val x36: Int = x7.hd$1;
if (x7.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x10: collection.immutable.::[Int] = x7.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x10.ne(null))
if (4.==(x10.hd$1))
{
val x37: Int = x10.hd$1;
if (x10.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x12: collection.immutable.::[Int] = x10.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x12.ne(null))
if (5.==(x12.hd$1))
{
val x38: Int = x12.hd$1;
MatchingStrategy.OptionMatchingStrategy.caseResult[Unit](Predef.println("nope").asInstanceOf[Unit])
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero;
if (o47.isEmpty)
if (x1.isInstanceOf[collection.immutable.::[Int]])
{
val x15: collection.immutable.::[Int] = x1.asInstanceOf[collection.immutable.::[Int]];
if (x15.ne(null))
if (1.==(x15.hd$1))
{
val x39: Int = x15.hd$1;
if (x15.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x18: collection.immutable.::[Int] = x15.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x18.ne(null))
if (3.==(x18.hd$1))
{
val x40: Int = x18.hd$1;
if (x18.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x21: collection.immutable.::[Int] = x18.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x21.ne(null))
if (4.==(x21.hd$1))
{
val x41: Int = x21.hd$1;
if (x21.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x23: collection.immutable.::[Int] = x21.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x23.ne(null))
if (6.==(x23.hd$1))
{
val x42: Int = x23.hd$1;
MatchingStrategy.OptionMatchingStrategy.caseResult[Unit](Predef.println("nope").asInstanceOf[Unit])
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
o47
};
if (o48.isEmpty)
if (x1.isInstanceOf[collection.immutable.::[Int]])
{
val x26: collection.immutable.::[Int] = x1.asInstanceOf[collection.immutable.::[Int]];
if (x26.ne(null))
if (1.==(x26.hd$1))
{
val x43: Int = x26.hd$1;
if (x26.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x29: collection.immutable.::[Int] = x26.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x29.ne(null))
if (3.==(x29.hd$1))
{
val x44: Int = x29.hd$1;
if (x29.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x32: collection.immutable.::[Int] = x29.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x32.ne(null))
if (4.==(x32.hd$1))
{
val x45: Int = x32.hd$1;
if (x32.tl$1.isInstanceOf[collection.immutable.::[Int]])
{
val x34: collection.immutable.::[Int] = x32.tl$1.asInstanceOf[collection.immutable.::[Int]];
if (x34.ne(null))
if (7.==(x34.hd$1))
{
val x46: Int = x34.hd$1;
MatchingStrategy.OptionMatchingStrategy.caseResult[Int](1)
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
MatchingStrategy.OptionMatchingStrategy.zero
}
else
MatchingStrategy.OptionMatchingStrategy.zero
else
o48
}))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment