delorean_lang 0.3.6 → 0.3.7

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.
@@ -74,6 +74,12 @@ grammar Delorean
74
74
  rule set_expr
75
75
  '{-}' <SetExpr>
76
76
  /
77
+ '{' sp? e2:expression sp
78
+ 'for' sp args:unpack_args sp
79
+ 'in' sp e1:expression sp?
80
+ ifexp:('if' sp e3:expression sp?)?
81
+ '}' <SetComprehension>
82
+ /
77
83
  '{' sp? args:fn_args sp? '}' <SetExpr>
78
84
  end
79
85
 
@@ -459,6 +459,12 @@ eos
459
459
  end
460
460
  end
461
461
 
462
+ class SetComprehension < ListComprehension
463
+ def rewrite(context)
464
+ "Set[*#{super}]"
465
+ end
466
+ end
467
+
462
468
  class HashComprehension < SNode
463
469
  # used in generating unique hash names
464
470
  @@comp_count = 0
@@ -1,3 +1,3 @@
1
1
  module Delorean
2
- VERSION = "0.3.6"
2
+ VERSION = "0.3.7"
3
3
  end
@@ -534,20 +534,23 @@ eof
534
534
  ]
535
535
  end
536
536
 
537
- it "should eval sets" do
537
+ it "should eval sets and set comprehension" do
538
538
  engine.parse defn("A:",
539
539
  " a = {-}",
540
+ " b = {i*5 for i in {1,2,3}}",
540
541
  " c = {1,2,3} | {4,5}",
541
542
  )
542
- engine.evaluate_attrs("A", ["a", "c"]).should ==
543
- [Set[], Set[1,2,3,4,5]]
543
+ engine.evaluate_attrs("A", ["a", "b", "c"]).should ==
544
+ [Set[], Set[5,10,15], Set[1,2,3,4,5]]
544
545
  end
545
546
 
546
547
  it "should eval list comprehension" do
547
548
  engine.parse defn("A:",
548
549
  " b = [i*5 for i in [1,2,3]]",
550
+ " c = [a-b for a, b in [[1,2],[4,3]]]"
549
551
  )
550
552
  engine.evaluate("A", "b").should == [5, 10, 15]
553
+ engine.evaluate("A", "c").should == [-1, 1]
551
554
  end
552
555
 
553
556
  it "should eval nested list comprehension" do
@@ -647,8 +650,10 @@ eof
647
650
  it "should eval multi-var hash comprehension" do
648
651
  engine.parse defn("A:",
649
652
  " b = {k*5 : v+1 for k, v in {1:2, 7:-30}}",
653
+ " c = [k-v for k, v in {1:2, 7:-30}]",
650
654
  )
651
655
  engine.evaluate("A", "b").should == {5=>3, 35=>-29}
656
+ engine.evaluate("A", "c").should == [-1, 37]
652
657
  end
653
658
 
654
659
  it "should be able to amend node calls" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delorean_lang
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arman Bostani
@@ -44,28 +44,28 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '2.10'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '2.10'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: sqlite3
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '1.3'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '1.3'
69
69
  description: A "compiler" for the Delorean programming language
70
70
  email:
71
71
  - arman.bostani@pnmac.com