alphalang 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dbfdb16caf742bce82c36b55c0ac51952e472fb3f286c26e1a3f1114579b6968
4
- data.tar.gz: 3da5256af5667909386065af82d90d34f470ab4203fde1a36fa02dc95b4ba16d
3
+ metadata.gz: 8f0ae223746d2a819889026bde1c6ec27b0d331567aa0734fdbbc824b45d4625
4
+ data.tar.gz: d3b0e9a67edcd936217b50d931c3993ab32c5c8efca805cb1dfbe0a6b260fa3e
5
5
  SHA512:
6
- metadata.gz: 859580c36eb816c5a7f726b693784f41b0d59fa436d40ce5b9d6ff44661d15041a248c21d896e40c9fbebb9633f1b701298edd933ac1b77ed8a1ab79a4ac92cd
7
- data.tar.gz: e0afd18953789ded0647fba4bece0ae465684957a6d127c3ca17b3d7b1aa1c82679d62c273289800fc510b5dba5c72175c371b5606401f816914ffd826a3ee3c
6
+ metadata.gz: 5022eaae630f0fbc43485f5b5bf3d55e3c0bcc577818edc2f2aeb209f2f323ca233c2ae6d015f296a47caf45c5958626f5d69a6be9e8100fdf3b104f48ab2571
7
+ data.tar.gz: ae51f1d99f90e029b9a2569dd5cb3bb78c48f06bb080781b0c5a3631d05433d922eb990790f2a985dd0435fe4461f98cbbb1004e7b47e40399574271f96929b6
@@ -2,30 +2,6 @@
2
2
 
3
3
  ####################################################
4
4
 
5
- class TrueClass
6
- def evaluate
7
- self
8
- end
9
- end
10
-
11
- class FalseClass
12
- def evaluate
13
- self
14
- end
15
- end
16
-
17
- class String
18
- def name
19
- self
20
- end
21
-
22
- def evaluate
23
- self
24
- end
25
- end
26
-
27
- ####################################################
28
-
29
5
  class Node
30
6
  attr_accessor :value
31
7
 
@@ -58,7 +34,6 @@ end
58
34
 
59
35
  class BoolNode < Node
60
36
  def initialize(value)
61
- @value = false
62
37
  @value = true if value == ScopeManager.true_value
63
38
  @value = false if value == ScopeManager.false_value
64
39
  end
@@ -69,32 +44,32 @@ class BoolNode < Node
69
44
  end
70
45
 
71
46
  class AndNode < Node
72
- def initialize(node1, node2)
73
- @node1, @node2 = node1, node2
74
- if @node2.class.method_defined? (:lhs)
75
- if @node2.lhs == nil
76
- @node2.lhs = @node1.lhs
47
+ def initialize(lhs, rhs)
48
+ @lhs, @rhs = lhs, rhs
49
+ if @rhs.class.method_defined? (:lhs)
50
+ if @rhs.lhs == nil
51
+ @rhs.lhs = @lhs.lhs
77
52
  end
78
53
  end
79
54
  end
80
55
 
81
56
  def evaluate
82
- @node1.evaluate && @node2.evaluate
57
+ @lhs.evaluate && @rhs.evaluate
83
58
  end
84
59
  end
85
60
 
86
61
  class OrNode < Node
87
- def initialize(node1, node2)
88
- @node1, @node2 = node1, node2
89
- if @node2.class.method_defined? (:lhs)
90
- if @node2.lhs == nil
91
- @node2.lhs = @node1.lhs
62
+ def initialize(lhs, rhs)
63
+ @lhs, @rhs = lhs, rhs
64
+ if @rhs.class.method_defined? (:lhs)
65
+ if @rhs.lhs == nil
66
+ @rhs.lhs = @lhs.lhs
92
67
  end
93
68
  end
94
69
  end
95
70
 
96
71
  def evaluate
97
- @node1.evaluate || @node2.evaluate
72
+ @lhs.evaluate || @rhs.evaluate
98
73
  end
99
74
  end
100
75
 
@@ -113,8 +88,8 @@ end
113
88
  class CompareNode < Node
114
89
  attr_accessor :lhs, :op, :rhs
115
90
 
116
- def initialize(node1, op, node2)
117
- @lhs, @op, @rhs = node1, op, node2
91
+ def initialize(lhs, op, rhs)
92
+ @lhs, @op, @rhs = lhs, op, rhs
118
93
  end
119
94
 
120
95
  def evaluate
@@ -56,7 +56,11 @@ class ScopeManager
56
56
  end
57
57
 
58
58
  def self.add_to_current_scope(name, value)
59
- @@scopes[@@scope_lvl][name.name] = value.evaluate
59
+ if name.is_a?(String)
60
+ @@scopes[@@scope_lvl][name] = value.evaluate
61
+ else
62
+ @@scopes[@@scope_lvl][name.name] = value.evaluate
63
+ end
60
64
  end
61
65
 
62
66
  def self.add_func_to_global_scope(name, value, args)
@@ -94,32 +94,28 @@ class IfNode < Node
94
94
  end
95
95
 
96
96
  def evaluate
97
- if @argument.evaluate
98
- @value = @node.evaluate
99
- else
100
- @value = nil
101
- end
102
- @value
97
+ @value = @node.evaluate
103
98
  end
104
99
  end
105
100
 
106
101
  class ElseifNode < Node
107
102
  attr_accessor :argument
103
+
108
104
  def initialize(argument, node)
109
105
  @argument, @node = argument, node
110
106
  end
107
+
111
108
  def evaluate
112
- if @argument.evaluate
113
- @value = @node.evaluate
114
- end
109
+ @value = @node.evaluate
115
110
  end
116
111
  end
117
112
 
118
113
  class ElseNode < Node
119
114
  attr_accessor :argument, :node
115
+
120
116
  def initialize(node)
121
117
  @node = node
122
- @argument = true
118
+ @argument = BoolNode.new(ScopeManager.true_value)
123
119
  end
124
120
 
125
121
  def evaluate
@@ -194,6 +190,13 @@ class PrintNode
194
190
  print "Array #{@value.name}: "
195
191
  puts @value.evaluate.join(', ')
196
192
  else
193
+ if @value.evaluate == PrintNode
194
+ if @value.value.is_a?(VariableCallNode)
195
+ raise SyntaxError, "You have a duplicate 'print' statement! Printing #{@value.value.name} twice."
196
+ else
197
+ raise SyntaxError, "You have a duplicate 'print' statement! Printing #{@value.value} twice."
198
+ end
199
+ end
197
200
  puts @value.evaluate
198
201
  end
199
202
  self.class
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alphalang
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - mattias, victor