delorean_lang 0.3.6 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -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