delorean_lang 2.4.0 → 2.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/delorean/nodes.rb +20 -9
- data/lib/delorean/version.rb +1 -1
- data/spec/eval_spec.rb +47 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2f391feb742261cf7205700f71a6455c3994b88ff33e07ec3acc8b5bba322e7
|
4
|
+
data.tar.gz: af2616d688fc0b18844737aaa26dd37a597ed92a8ef338a46fc27c252beab739
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 202515ed652a577f8eb270116397254c0d46e601e4062db196f8c4dd07abd13914e74dce21ee4a086d9e7e404b823f56671573bbafc382f950b32fec9fdfdab8
|
7
|
+
data.tar.gz: 2fca9df1461cc20b7e5a4c0e6aa60c9c54d35ec2bbe3b954b539b5b757818cfab5d315bc8bbd48d53aa35a2beb3a8fdb3f914dfced09068299cc104da0088578
|
data/lib/delorean/nodes.rb
CHANGED
@@ -464,7 +464,7 @@ eos
|
|
464
464
|
|
465
465
|
return "#{a_name}#{POST}" if expr.empty?
|
466
466
|
|
467
|
-
"#{a_name}#{POST} = #{expr}"
|
467
|
+
"#{a_name}#{POST} = (#{expr})"
|
468
468
|
end
|
469
469
|
|
470
470
|
def force_def(context)
|
@@ -523,10 +523,6 @@ eos
|
|
523
523
|
element.force_def(context)
|
524
524
|
end
|
525
525
|
|
526
|
-
formulas = expressions.elements.select do |elem|
|
527
|
-
elem.is_a? BlockFormula
|
528
|
-
end
|
529
|
-
|
530
526
|
result_formula = formulas.find do |formula|
|
531
527
|
formula.i.text_value == 'result'
|
532
528
|
end
|
@@ -548,6 +544,12 @@ eos
|
|
548
544
|
end
|
549
545
|
end
|
550
546
|
|
547
|
+
def formulas
|
548
|
+
expressions.elements.select do |elem|
|
549
|
+
elem.is_a? BlockFormula
|
550
|
+
end
|
551
|
+
end
|
552
|
+
|
551
553
|
def rewrite(context, vcode)
|
552
554
|
if !respond_to?(:al) || al.text_value.empty?
|
553
555
|
args_str = ''
|
@@ -556,6 +558,7 @@ eos
|
|
556
558
|
args_str = al.rewrite(context)
|
557
559
|
arg_count = al.arg_count
|
558
560
|
end
|
561
|
+
|
559
562
|
if vcode.is_a?(ClassText)
|
560
563
|
# FIXME: Do we really need this check here?
|
561
564
|
# ruby class call
|
@@ -567,6 +570,10 @@ eos
|
|
567
570
|
element.force_def(context)
|
568
571
|
end
|
569
572
|
|
573
|
+
formulas.each do |element|
|
574
|
+
element.force_def(context)
|
575
|
+
end
|
576
|
+
|
570
577
|
block_args_str = if b_args.elements.any?
|
571
578
|
block_args = b_args.elements.map do |v|
|
572
579
|
v.rewrite(context)
|
@@ -587,6 +594,10 @@ eos
|
|
587
594
|
element.force_undef(context)
|
588
595
|
end
|
589
596
|
|
597
|
+
formulas.each do |element|
|
598
|
+
element.force_undef(context)
|
599
|
+
end
|
600
|
+
|
590
601
|
block = "{ #{block_args_str} #{expression_str} }"
|
591
602
|
|
592
603
|
"_instance_call(#{vcode}, '#{i.text_value}', [#{args_str}], _e) #{block}"
|
@@ -654,8 +665,8 @@ eos
|
|
654
665
|
end
|
655
666
|
|
656
667
|
def rewrite(context)
|
657
|
-
"(#{v.rewrite(context)}) ? (#{e1.rewrite(context)}) :
|
658
|
-
(#{e2.rewrite(context)})"
|
668
|
+
"((#{v.rewrite(context)}) ? (#{e1.rewrite(context)}) :
|
669
|
+
(#{e2.rewrite(context)}))"
|
659
670
|
end
|
660
671
|
end
|
661
672
|
|
@@ -678,12 +689,12 @@ eos
|
|
678
689
|
(#{node.e1.rewrite(context)})"
|
679
690
|
end.join("\n")
|
680
691
|
|
681
|
-
"if (#{v.rewrite(context)})
|
692
|
+
"(if (#{v.rewrite(context)})
|
682
693
|
(#{e1.rewrite(context)})
|
683
694
|
#{elsifs_string}
|
684
695
|
else
|
685
696
|
(#{e2.rewrite(context)})
|
686
|
-
end"
|
697
|
+
end)"
|
687
698
|
end
|
688
699
|
end
|
689
700
|
|
data/lib/delorean/version.rb
CHANGED
data/spec/eval_spec.rb
CHANGED
@@ -1386,6 +1386,17 @@ eof
|
|
1386
1386
|
expect(r).to eq [5, 2460, 128, 1230]
|
1387
1387
|
end
|
1388
1388
|
|
1389
|
+
it 'works with the weird if case' do
|
1390
|
+
engine.parse defn('A:',
|
1391
|
+
' a = 1',
|
1392
|
+
' b = 1',
|
1393
|
+
' c = nil',
|
1394
|
+
' d = a || if b || c then 999 else 0',
|
1395
|
+
)
|
1396
|
+
r = engine.evaluate('A', 'd')
|
1397
|
+
expect(r).to eq 1
|
1398
|
+
end
|
1399
|
+
|
1389
1400
|
describe 'blocks' do
|
1390
1401
|
let(:default_node) do
|
1391
1402
|
['A:',
|
@@ -1560,6 +1571,42 @@ eof
|
|
1560
1571
|
expect(r).to eq([[3], 1])
|
1561
1572
|
end
|
1562
1573
|
|
1574
|
+
it 'works with custom formulas in blocks' do
|
1575
|
+
engine.parse defn(*default_node,
|
1576
|
+
' a = 1',
|
1577
|
+
' b = 1',
|
1578
|
+
' c = array.select ',
|
1579
|
+
' b =? 1',
|
1580
|
+
' base_result = (b + a) > 2',
|
1581
|
+
' base_result2 = base_result || false',
|
1582
|
+
' result = base_result2',
|
1583
|
+
' result = 10',
|
1584
|
+
)
|
1585
|
+
r = engine.evaluate('A', 'c')
|
1586
|
+
expect(r).to eq([2, 3])
|
1587
|
+
|
1588
|
+
r = engine.evaluate('A', 'result')
|
1589
|
+
expect(r).to eq(10)
|
1590
|
+
end
|
1591
|
+
|
1592
|
+
it 'block parameter can reference another block parameter or outside var' do
|
1593
|
+
engine.parse defn(*default_node,
|
1594
|
+
' a = 1',
|
1595
|
+
' ab = 1',
|
1596
|
+
' b = 1',
|
1597
|
+
' c = array.select ',
|
1598
|
+
' b =? 1',
|
1599
|
+
' ab =? b + a - 1',
|
1600
|
+
' result = ab > 2',
|
1601
|
+
' result = 10',
|
1602
|
+
)
|
1603
|
+
r = engine.evaluate('A', 'c')
|
1604
|
+
expect(r).to eq([3])
|
1605
|
+
|
1606
|
+
r = engine.evaluate('A', ['c', 'ab'])
|
1607
|
+
expect(r).to eq([[3], 1])
|
1608
|
+
end
|
1609
|
+
|
1563
1610
|
it 'works with syntax in blocks' do
|
1564
1611
|
engine.parse defn(*default_node,
|
1565
1612
|
' b = 1',
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delorean_lang
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arman Bostani
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|