laerad 0.1.3 → 0.1.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cc4aba5b10777aeac869643bacc35c67a718111bbf3fba0f9565adaf9ae7feda
4
- data.tar.gz: 07f3e5a2e2bc0ce751b983ced23cd3f800e1b5b5faed771ab89eaf8cb1fd8f41
3
+ metadata.gz: b261cc9887d95310e55ec298d704b10d897c33efab020de4911093abaf2ec867
4
+ data.tar.gz: '0681f30617fd4d7f319f7677c1e9545ebf747a57bede300d09209d569561425c'
5
5
  SHA512:
6
- metadata.gz: 37fbe81640c7637723514412ba77b4a1e5179f33f8e632ff2d137c98177a7793731d8e4b7b4da629f2e1579e7a75c922cf417d40493c5cff5709af17a18b174c
7
- data.tar.gz: b39c39ef6759a111cc777a649341cce2c30ab61d59aae267c310a08be76b3f055b96ff95ebb230acd0a8cc51f1387e3c699591c75f8f406b5541b2024be69c45
6
+ metadata.gz: 314e0f6970ed63ad8a8522e83428cc1752084d3aebff81a95f6bc196cabf03ccd5e8cb39c1e54bd43238b9d4594c3a4e1efb01236c7b37ae1777fb1358abc123
7
+ data.tar.gz: c8ddb6b2bc18348cd53b88cea53b22b6ea4d453a6b1fec8239bb2c50fa5c5f13953ce40b9587cba8c29681a33f744c59306d78d1ccd809a49894e50b576e9fad
@@ -41,6 +41,10 @@ module Laerad
41
41
  scope
42
42
  end
43
43
 
44
+ def find_defining_scope(name)
45
+ @scope_stack.reverse.find { |s| s.variable_defined?(name) }
46
+ end
47
+
44
48
  def finalize_scope(scope)
45
49
  scope.single_use_variables.each do |name|
46
50
  line = scope.variable_definition_line(name)
@@ -71,14 +75,22 @@ module Laerad
71
75
 
72
76
  when SyntaxTree::VarRef
73
77
  name = extract_var_name(node)
74
- current_scope.register_variable_ref(name) if name
78
+ if name
79
+ scope = find_defining_scope(name) || current_scope
80
+ scope.register_variable_ref(name)
81
+ end
75
82
 
76
83
  when SyntaxTree::Assign
77
84
  visit(node.target)
78
85
  visit(node.value)
79
86
 
80
87
  when SyntaxTree::OpAssign
81
- visit(node.target)
88
+ name = extract_var_name(node.target)
89
+ if name && (defining_scope = find_defining_scope(name))
90
+ defining_scope.register_variable_ref(name)
91
+ else
92
+ visit(node.target)
93
+ end
82
94
  visit(node.value)
83
95
 
84
96
  when SyntaxTree::DefNode
data/lib/laerad/scope.rb CHANGED
@@ -29,5 +29,9 @@ module Laerad
29
29
  def variable_count(name)
30
30
  @variables[name]
31
31
  end
32
+
33
+ def variable_defined?(name)
34
+ @variable_def_lines.key?(name)
35
+ end
32
36
  end
33
37
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Laerad
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.4"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: laerad
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Giles Bowkett