Преглед на файлове

Store function name on the function node

master
Dylan Baker преди 5 години
родител
ревизия
48b94af6f6
променени са 4 файла, в които са добавени 8 реда и са изтрити 5 реда
  1. 5
    3
      lib/chervil/ast/function.rb
  2. 1
    1
      lib/chervil/parser.rb
  3. 1
    1
      spec/ast/function_spec.rb
  4. 1
    0
      spec/parser_spec.rb

+ 5
- 3
lib/chervil/ast/function.rb Целия файл

1
 module Chervil::AST
1
 module Chervil::AST
2
   class Function
2
   class Function
3
+    attr_reader :name
3
     attr_reader :params
4
     attr_reader :params
4
     attr_reader :body
5
     attr_reader :body
5
 
6
 
6
-    def initialize(params, body)
7
+    def initialize(name, params, body)
8
+      @name = name
7
       @params = params
9
       @params = params
8
       @body = body
10
       @body = body
9
     end
11
     end
10
 
12
 
11
     def ==(other)
13
     def ==(other)
12
-      @params == other.params && @body == other.body
14
+      @name == other.name && @params == other.params && @body == other.body
13
     end
15
     end
14
 
16
 
15
     def evaluate(env)
17
     def evaluate(env)
35
     end
37
     end
36
 
38
 
37
     def to_s
39
     def to_s
38
-      "<function>"
40
+      "<function: #{@name.name}(#{@params.map(&:name).join(' ')})>"
39
     end
41
     end
40
   end
42
   end
41
 end
43
 end

+ 1
- 1
lib/chervil/parser.rb Целия файл

66
 
66
 
67
         eat(:rparen)
67
         eat(:rparen)
68
 
68
 
69
-        AST::Definition.new(name, AST::Function.new(params, body))
69
+        AST::Definition.new(name, AST::Function.new(name, params, body))
70
       end
70
       end
71
     end
71
     end
72
 
72
 

+ 1
- 1
spec/ast/function_spec.rb Целия файл

1
 module Chervil
1
 module Chervil
2
   RSpec.describe AST::Definition do
2
   RSpec.describe AST::Definition do
3
     it 'evaluates its body with its arguments when called' do
3
     it 'evaluates its body with its arguments when called' do
4
-      env = Env.new
5
       expect(
4
       expect(
6
         AST::Function.new(
5
         AST::Function.new(
6
+          AST::Identifier.new("square"),
7
           [
7
           [
8
             AST::Identifier.new("x")
8
             AST::Identifier.new("x")
9
           ],
9
           ],

+ 1
- 0
spec/parser_spec.rb Целия файл

71
         AST::Definition.new(
71
         AST::Definition.new(
72
           AST::Identifier.new("square"),
72
           AST::Identifier.new("square"),
73
           AST::Function.new(
73
           AST::Function.new(
74
+            AST::Identifier.new("square"),
74
             [
75
             [
75
               AST::Identifier.new("x")
76
               AST::Identifier.new("x")
76
             ],
77
             ],

Loading…
Отказ
Запис