Skip to content

Commit 94b10cd

Browse files
committed
I did head and not v0.29.0 of prism...correct to release
1 parent b387402 commit 94b10cd

4 files changed

Lines changed: 91 additions & 169 deletions

File tree

src/main/java/org/jruby/prism/builder/IRBuilderPrism.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.jruby.ir.operands.MutableString;
4242
import org.jruby.ir.operands.NullBlock;
4343
import org.jruby.ir.operands.Operand;
44+
import org.jruby.ir.operands.Rational;
4445
import org.jruby.ir.operands.Regexp;
4546
import org.jruby.ir.operands.Splat;
4647
import org.jruby.ir.operands.Symbol;
@@ -65,6 +66,7 @@
6566
import org.prism.Nodes.*;
6667
import org.jruby.prism.parser.ParseResultPrism;
6768

69+
import java.math.BigDecimal;
6870
import java.util.ArrayList;
6971
import java.util.HashSet;
7072
import java.util.List;
@@ -1803,7 +1805,19 @@ private Operand buildPreExecution(PreExecutionNode node) {
18031805
}
18041806

18051807
private Operand buildRational(RationalNode node) {
1806-
return buildRational((Node) node.numerator, (Node) node.denominator);
1808+
if (node.numeric instanceof FloatNode) {
1809+
BigDecimal bd = new BigDecimal(bytelistFrom(node.numeric).toString());
1810+
BigDecimal denominator = BigDecimal.ONE.scaleByPowerOfTen(bd.scale());
1811+
BigDecimal numerator = bd.multiply(denominator);
1812+
1813+
try {
1814+
return new Rational(fix(numerator.longValueExact()), fix(denominator.longValueExact()));
1815+
} catch (ArithmeticException ae) {
1816+
return new Rational(new Bignum(numerator.toBigIntegerExact()), new Bignum(denominator.toBigIntegerExact()));
1817+
}
1818+
}
1819+
1820+
return new Rational((ImmutableLiteral) build(node.numeric), fix(1));
18071821
}
18081822

18091823
private Operand buildRange(RangeNode node) {

src/main/java/org/prism/AbstractNodeVisitor.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -884,16 +884,6 @@ public T visitInterpolatedXStringNode(Nodes.InterpolatedXStringNode node) {
884884
return defaultVisit(node);
885885
}
886886

887-
/**
888-
* Visit a ItLocalVariableReadNode node.
889-
*
890-
* @param node The node to visit.
891-
* @return The result of visiting the node.
892-
*/
893-
public T visitItLocalVariableReadNode(Nodes.ItLocalVariableReadNode node) {
894-
return defaultVisit(node);
895-
}
896-
897887
/**
898888
* Visit a ItParametersNode node.
899889
*

src/main/java/org/prism/Loader.java

Lines changed: 63 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ private ParseResult.Warning[] loadWarnings() {
209209

210210
// warning messages only contain ASCII characters
211211
for (int i = 0; i < count; i++) {
212-
Nodes.WarningType type = Nodes.WARNING_TYPES[loadVarUInt() - 276];
212+
Nodes.WarningType type = Nodes.WARNING_TYPES[loadVarUInt() - 273];
213213
byte[] bytes = loadEmbeddedString();
214214
String message = new String(bytes, StandardCharsets.US_ASCII);
215215
Nodes.Location location = loadLocation();
@@ -529,132 +529,130 @@ private Nodes.Node loadNode() {
529529
case 87:
530530
return new Nodes.InterpolatedXStringNode(loadNodes(), startOffset, length);
531531
case 88:
532-
return new Nodes.ItLocalVariableReadNode(startOffset, length);
533-
case 89:
534532
return new Nodes.ItParametersNode(startOffset, length);
535-
case 90:
533+
case 89:
536534
return new Nodes.KeywordHashNode(loadFlags(), loadNodes(), startOffset, length);
537-
case 91:
535+
case 90:
538536
return new Nodes.KeywordRestParameterNode(loadFlags(), loadOptionalConstant(), startOffset, length);
539-
case 92:
537+
case 91:
540538
return new Nodes.LambdaNode(loadConstants(), loadOptionalNode(), loadOptionalNode(), startOffset, length);
541-
case 93:
539+
case 92:
542540
return new Nodes.LocalVariableAndWriteNode(loadNode(), loadConstant(), loadVarUInt(), startOffset, length);
543-
case 94:
541+
case 93:
544542
return new Nodes.LocalVariableOperatorWriteNode(loadNode(), loadConstant(), loadConstant(), loadVarUInt(), startOffset, length);
545-
case 95:
543+
case 94:
546544
return new Nodes.LocalVariableOrWriteNode(loadNode(), loadConstant(), loadVarUInt(), startOffset, length);
547-
case 96:
545+
case 95:
548546
return new Nodes.LocalVariableReadNode(loadConstant(), loadVarUInt(), startOffset, length);
549-
case 97:
547+
case 96:
550548
return new Nodes.LocalVariableTargetNode(loadConstant(), loadVarUInt(), startOffset, length);
551-
case 98:
549+
case 97:
552550
return new Nodes.LocalVariableWriteNode(loadConstant(), loadVarUInt(), loadNode(), startOffset, length);
553-
case 99:
551+
case 98:
554552
return new Nodes.MatchLastLineNode(loadFlags(), loadString(), startOffset, length);
555-
case 100:
553+
case 99:
556554
return new Nodes.MatchPredicateNode(loadNode(), loadNode(), startOffset, length);
557-
case 101:
555+
case 100:
558556
return new Nodes.MatchRequiredNode(loadNode(), loadNode(), startOffset, length);
559-
case 102:
557+
case 101:
560558
return new Nodes.MatchWriteNode((Nodes.CallNode) loadNode(), loadLocalVariableTargetNodes(), startOffset, length);
561-
case 103:
559+
case 102:
562560
return new Nodes.MissingNode(startOffset, length);
563-
case 104:
561+
case 103:
564562
return new Nodes.ModuleNode(loadConstants(), loadNode(), loadOptionalNode(), loadConstant(), startOffset, length);
565-
case 105:
563+
case 104:
566564
return new Nodes.MultiTargetNode(loadNodes(), loadOptionalNode(), loadNodes(), startOffset, length);
567-
case 106:
565+
case 105:
568566
return new Nodes.MultiWriteNode(loadNodes(), loadOptionalNode(), loadNodes(), loadNode(), startOffset, length);
569-
case 107:
567+
case 106:
570568
return new Nodes.NextNode((Nodes.ArgumentsNode) loadOptionalNode(), startOffset, length);
571-
case 108:
569+
case 107:
572570
return new Nodes.NilNode(startOffset, length);
573-
case 109:
571+
case 108:
574572
return new Nodes.NoKeywordsParameterNode(startOffset, length);
575-
case 110:
573+
case 109:
576574
return new Nodes.NumberedParametersNode(buffer.get(), startOffset, length);
577-
case 111:
575+
case 110:
578576
return new Nodes.NumberedReferenceReadNode(loadVarUInt(), startOffset, length);
579-
case 112:
577+
case 111:
580578
return new Nodes.OptionalKeywordParameterNode(loadFlags(), loadConstant(), loadNode(), startOffset, length);
581-
case 113:
579+
case 112:
582580
return new Nodes.OptionalParameterNode(loadFlags(), loadConstant(), loadNode(), startOffset, length);
583-
case 114:
581+
case 113:
584582
return new Nodes.OrNode(loadNode(), loadNode(), startOffset, length);
585-
case 115:
583+
case 114:
586584
return new Nodes.ParametersNode(loadNodes(), loadOptionalParameterNodes(), loadOptionalNode(), loadNodes(), loadNodes(), loadOptionalNode(), (Nodes.BlockParameterNode) loadOptionalNode(), startOffset, length);
587-
case 116:
585+
case 115:
588586
return new Nodes.ParenthesesNode(loadOptionalNode(), startOffset, length);
589-
case 117:
587+
case 116:
590588
return new Nodes.PinnedExpressionNode(loadNode(), startOffset, length);
591-
case 118:
589+
case 117:
592590
return new Nodes.PinnedVariableNode(loadNode(), startOffset, length);
593-
case 119:
591+
case 118:
594592
return new Nodes.PostExecutionNode((Nodes.StatementsNode) loadOptionalNode(), startOffset, length);
595-
case 120:
593+
case 119:
596594
return new Nodes.PreExecutionNode((Nodes.StatementsNode) loadOptionalNode(), startOffset, length);
597-
case 121:
595+
case 120:
598596
return new Nodes.ProgramNode(loadConstants(), (Nodes.StatementsNode) loadNode(), startOffset, length);
599-
case 122:
597+
case 121:
600598
return new Nodes.RangeNode(loadFlags(), loadOptionalNode(), loadOptionalNode(), startOffset, length);
599+
case 122:
600+
return new Nodes.RationalNode(loadNode(), startOffset, length);
601601
case 123:
602-
return new Nodes.RationalNode(loadFlags(), loadInteger(), loadInteger(), startOffset, length);
603-
case 124:
604602
return new Nodes.RedoNode(startOffset, length);
605-
case 125:
603+
case 124:
606604
return new Nodes.RegularExpressionNode(loadFlags(), loadString(), startOffset, length);
607-
case 126:
605+
case 125:
608606
return new Nodes.RequiredKeywordParameterNode(loadFlags(), loadConstant(), startOffset, length);
609-
case 127:
607+
case 126:
610608
return new Nodes.RequiredParameterNode(loadFlags(), loadConstant(), startOffset, length);
611-
case 128:
609+
case 127:
612610
return new Nodes.RescueModifierNode(loadNode(), loadNode(), startOffset, length);
613-
case 129:
611+
case 128:
614612
return new Nodes.RescueNode(loadNodes(), loadOptionalNode(), (Nodes.StatementsNode) loadOptionalNode(), (Nodes.RescueNode) loadOptionalNode(), startOffset, length);
615-
case 130:
613+
case 129:
616614
return new Nodes.RestParameterNode(loadFlags(), loadOptionalConstant(), startOffset, length);
617-
case 131:
615+
case 130:
618616
return new Nodes.RetryNode(startOffset, length);
619-
case 132:
617+
case 131:
620618
return new Nodes.ReturnNode(loadFlags(), (Nodes.ArgumentsNode) loadOptionalNode(), startOffset, length);
621-
case 133:
619+
case 132:
622620
return new Nodes.SelfNode(startOffset, length);
623-
case 134:
621+
case 133:
624622
return new Nodes.ShareableConstantNode(loadFlags(), loadNode(), startOffset, length);
625-
case 135:
623+
case 134:
626624
return new Nodes.SingletonClassNode(loadConstants(), loadNode(), loadOptionalNode(), startOffset, length);
627-
case 136:
625+
case 135:
628626
return new Nodes.SourceEncodingNode(startOffset, length);
629-
case 137:
627+
case 136:
630628
return new Nodes.SourceFileNode(loadFlags(), loadString(), startOffset, length);
631-
case 138:
629+
case 137:
632630
return new Nodes.SourceLineNode(startOffset, length);
633-
case 139:
631+
case 138:
634632
return new Nodes.SplatNode(loadOptionalNode(), startOffset, length);
635-
case 140:
633+
case 139:
636634
return new Nodes.StatementsNode(loadNodes(), startOffset, length);
637-
case 141:
635+
case 140:
638636
return new Nodes.StringNode(loadFlags(), loadString(), startOffset, length);
639-
case 142:
637+
case 141:
640638
return new Nodes.SuperNode((Nodes.ArgumentsNode) loadOptionalNode(), loadOptionalNode(), startOffset, length);
641-
case 143:
639+
case 142:
642640
return new Nodes.SymbolNode(loadFlags(), loadString(), startOffset, length);
643-
case 144:
641+
case 143:
644642
return new Nodes.TrueNode(startOffset, length);
645-
case 145:
643+
case 144:
646644
return new Nodes.UndefNode(loadNodes(), startOffset, length);
647-
case 146:
645+
case 145:
648646
return new Nodes.UnlessNode(loadNode(), (Nodes.StatementsNode) loadOptionalNode(), (Nodes.ElseNode) loadOptionalNode(), startOffset, length);
649-
case 147:
647+
case 146:
650648
return new Nodes.UntilNode(loadFlags(), loadNode(), (Nodes.StatementsNode) loadOptionalNode(), startOffset, length);
651-
case 148:
649+
case 147:
652650
return new Nodes.WhenNode(loadNodes(), (Nodes.StatementsNode) loadOptionalNode(), startOffset, length);
653-
case 149:
651+
case 148:
654652
return new Nodes.WhileNode(loadFlags(), loadNode(), (Nodes.StatementsNode) loadOptionalNode(), startOffset, length);
655-
case 150:
653+
case 149:
656654
return new Nodes.XStringNode(loadFlags(), loadString(), startOffset, length);
657-
case 151:
655+
case 150:
658656
return new Nodes.YieldNode((Nodes.ArgumentsNode) loadOptionalNode(), startOffset, length);
659657
default:
660658
throw new Error("Unknown node type: " + type);

0 commit comments

Comments
 (0)