Browse Source

Allow calling anonymous functions directly

master
Dylan Baker 4 years ago
parent
commit
eb9b1b9c5e
2 changed files with 22 additions and 1 deletions
  1. 6
    1
      lib/ahem/ast/function_call.rb
  2. 16
    0
      spec/ast/function_call_spec.rb

+ 6
- 1
lib/ahem/ast/function_call.rb View File

@@ -13,7 +13,12 @@ class AST::FunctionCall
13 13
 
14 14
   def execute(env)
15 15
     env = Environment.new(env)
16
-    function = env.get(@function.name)
16
+
17
+    function = if @function.is_a?(AST::Identifier)
18
+      env.get(@function.name)
19
+    elsif @function.is_a?(AST::FunctionDefinition)
20
+      @function
21
+    end
17 22
 
18 23
     if function.is_a?(AST::FunctionDefinition)
19 24
       if @arguments.size != function.parameters.size

+ 16
- 0
spec/ast/function_call_spec.rb View File

@@ -184,4 +184,20 @@ RSpec.describe AST::FunctionCall do
184 184
 
185 185
     expect(result).to eq(6)
186 186
   end
187
+
188
+  it 'allows calling an anonymous function directly' do
189
+    result = AST::FunctionCall.new(
190
+      AST::FunctionDefinition.new(
191
+        nil,
192
+        [],
193
+        AST::Block.new(
194
+          [
195
+            AST::Number.new(5.0)
196
+          ]
197
+        )
198
+      ),
199
+      []
200
+    ).execute(Environment.new)
201
+    expect(result).to eq(5.0)
202
+  end
187 203
 end

Loading…
Cancel
Save