parboiled2 icon indicating copy to clipboard operation
parboiled2 copied to clipboard

Action operator with non-lambda argument crashed crashes compilation in scala 3

Open prolativ opened this issue 2 years ago • 1 comments

Trying to compile

//> using scala "3.1.1"
//> using lib "org.parboiled::parboiled:2.4.0"

import org.parboiled2.Parser

trait TestParser { this: Parser => 
  val fun = (x: Int) => x
  def testRule = rule {
    push(1) ~> fun
  }
}

throws an exception

[error] ./parboiled-debug/src/main/scala/org/parboiled/Debug.scala:9:18: Exception occurred while executing macro expansion.
[error] scala.MatchError: Select(This(Ident(TestParser)),fun) (of class dotty.tools.dotc.ast.Trees$Select)
[error]         at org.parboiled2.support.OpTreeContext.org$parboiled2$support$OpTreeContext$$expandLambda(OpTreeContext.scala:412)
[error]         at org.parboiled2.support.OpTreeContext$Action.renderInner(OpTreeContext.scala:419)
[error]         at org.parboiled2.support.OpTreeContext$NonTerminalOpTree.inline$renderInner(OpTreeContext.scala:46)
[error]         at org.parboiled2.support.OpTreeContext$NonTerminalOpTree.render$$anonfun$1(OpTreeContext.scala:39)
[error]         at org.parboiled2.support.OpTreeContext$NonTerminalOpTree.render$$anonfun$adapted$1(OpTreeContext.scala:40)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:81)
[error]         at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1430)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:106)
[error]         at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1426)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:106)
[error]         at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1410)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:106)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$.spliceTerms(PickledQuotes.scala:121)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$.unpickleTerm(PickledQuotes.scala:60)
[error]         at scala.quoted.runtime.impl.QuotesImpl.unpickleExpr(QuotesImpl.scala:2973)
[error]         at org.parboiled2.support.OpTreeContext$NonTerminalOpTree.render(OpTreeContext.scala:40)
[error]         at org.parboiled2.support.OpTreeContext.org$parboiled2$support$OpTreeContext$Sequence$$_$renderInner$$anonfun$1(OpTreeContext.scala:90)
[error]         at scala.collection.immutable.List.map(List.scala:250)
[error]         at scala.collection.immutable.List.map(List.scala:79)
[error]         at org.parboiled2.support.OpTreeContext$Sequence.renderInner(OpTreeContext.scala:90)
[error]         at org.parboiled2.support.OpTreeContext$NonTerminalOpTree.inline$renderInner(OpTreeContext.scala:46)
[error]         at org.parboiled2.support.OpTreeContext$NonTerminalOpTree.render$$anonfun$1(OpTreeContext.scala:39)
[error]         at org.parboiled2.support.OpTreeContext$NonTerminalOpTree.render$$anonfun$adapted$1(OpTreeContext.scala:40)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:81)
[error]         at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1430)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:106)
[error]         at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1426)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:106)
[error]         at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1410)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:106)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$.spliceTerms(PickledQuotes.scala:121)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$.unpickleTerm(PickledQuotes.scala:60)
[error]         at scala.quoted.runtime.impl.QuotesImpl.unpickleExpr(QuotesImpl.scala:2973)
[error]         at org.parboiled2.support.OpTreeContext$NonTerminalOpTree.render(OpTreeContext.scala:40)
[error]         at org.parboiled2.support.OpTreeContext$RuleCall.renderInner(OpTreeContext.scala:538)
[error]         at org.parboiled2.support.OpTreeContext$NonTerminalOpTree.inline$renderInner(OpTreeContext.scala:46)
[error]         at org.parboiled2.support.OpTreeContext$NonTerminalOpTree.render$$anonfun$1(OpTreeContext.scala:39)
[error]         at org.parboiled2.support.OpTreeContext$NonTerminalOpTree.render$$anonfun$adapted$1(OpTreeContext.scala:40)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:81)
[error]         at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1430)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:106)
[error]         at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1426)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:106)
[error]         at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1410)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:106)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$.spliceTerms(PickledQuotes.scala:121)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$.unpickleTerm(PickledQuotes.scala:60)
[error]         at scala.quoted.runtime.impl.QuotesImpl.unpickleExpr(QuotesImpl.scala:2973)
[error]         at org.parboiled2.support.OpTreeContext$NonTerminalOpTree.render(OpTreeContext.scala:40)
[error]         at org.parboiled2.support.OpTreeContext$RuleCall.render(OpTreeContext.scala:533)
[error]         at org.parboiled2.ParserMacros$.nameRuleImpl$$anonfun$2(ParserMacros.scala:139)
[error]         at org.parboiled2.ParserMacros$.nameRuleImpl$$anonfun$adapted$2(ParserMacros.scala:142)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:81)
[error]         at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1430)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:106)
[error]         at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1469)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:106)
[error]         at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$1(Trees.scala:1500)
[error]         at scala.collection.immutable.List.mapConserve(List.scala:472)
[error]         at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1500)
[error]         at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformStats(Trees.scala:1498)
[error]         at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1410)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$$anon$1.transform(PickledQuotes.scala:106)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$.spliceTerms(PickledQuotes.scala:121)
[error]         at dotty.tools.dotc.quoted.PickledQuotes$.unpickleTerm(PickledQuotes.scala:60)
[error]         at scala.quoted.runtime.impl.QuotesImpl.unpickleExpr(QuotesImpl.scala:2973)
[error]         at org.parboiled2.ParserMacros$.nameRuleImpl(ParserMacros.scala:142)
[error]         at org.parboiled2.ParserMacros$.ruleImpl(ParserMacros.scala:127)
[error]

prolativ avatar Apr 01 '22 08:04 prolativ

Yes, seems we haven't ported that part of the parser:

https://github.com/sirthias/parboiled2/blob/015e863338bc420101feb12d1766a5559e4d1754/parboiled-core/src/main/scala-2/org/parboiled2/support/OpTreeContext.scala#L693-L696

There seem to be no tests for it.

jrudolph avatar Apr 07 '22 09:04 jrudolph