mutant-melbourne 2.0.1

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.
Files changed (64) hide show
  1. data/LICENSE +25 -0
  2. data/README.md +69 -0
  3. data/Rakefile +14 -0
  4. data/ext/melbourne/.gitignore +3 -0
  5. data/ext/melbourne/bstring-license.txt +29 -0
  6. data/ext/melbourne/bstrlib.c +2687 -0
  7. data/ext/melbourne/bstrlib.h +267 -0
  8. data/ext/melbourne/encoding_compat.cpp +188 -0
  9. data/ext/melbourne/encoding_compat.hpp +57 -0
  10. data/ext/melbourne/extconf.rb +87 -0
  11. data/ext/melbourne/grammar18.cpp +11280 -0
  12. data/ext/melbourne/grammar18.hpp +13 -0
  13. data/ext/melbourne/grammar18.y +6088 -0
  14. data/ext/melbourne/grammar19.cpp +12420 -0
  15. data/ext/melbourne/grammar19.hpp +11 -0
  16. data/ext/melbourne/grammar19.y +7113 -0
  17. data/ext/melbourne/lex.c.blt +152 -0
  18. data/ext/melbourne/lex.c.tab +136 -0
  19. data/ext/melbourne/local_state.hpp +43 -0
  20. data/ext/melbourne/melbourne.cpp +88 -0
  21. data/ext/melbourne/melbourne.hpp +19 -0
  22. data/ext/melbourne/node18.hpp +262 -0
  23. data/ext/melbourne/node19.hpp +271 -0
  24. data/ext/melbourne/node_types.rb +304 -0
  25. data/ext/melbourne/node_types18.cpp +255 -0
  26. data/ext/melbourne/node_types18.hpp +129 -0
  27. data/ext/melbourne/node_types19.cpp +249 -0
  28. data/ext/melbourne/node_types19.hpp +126 -0
  29. data/ext/melbourne/parser_state18.hpp +181 -0
  30. data/ext/melbourne/parser_state19.hpp +251 -0
  31. data/ext/melbourne/quark.cpp +42 -0
  32. data/ext/melbourne/quark.hpp +45 -0
  33. data/ext/melbourne/symbols.cpp +224 -0
  34. data/ext/melbourne/symbols.hpp +119 -0
  35. data/ext/melbourne/var_table18.cpp +83 -0
  36. data/ext/melbourne/var_table18.hpp +33 -0
  37. data/ext/melbourne/var_table19.cpp +65 -0
  38. data/ext/melbourne/var_table19.hpp +35 -0
  39. data/ext/melbourne/visitor18.cpp +963 -0
  40. data/ext/melbourne/visitor18.hpp +12 -0
  41. data/ext/melbourne/visitor19.cpp +960 -0
  42. data/ext/melbourne/visitor19.hpp +15 -0
  43. data/lib/compiler/ast/constants.rb +81 -0
  44. data/lib/compiler/ast/control_flow.rb +290 -0
  45. data/lib/compiler/ast/data.rb +14 -0
  46. data/lib/compiler/ast/definitions.rb +749 -0
  47. data/lib/compiler/ast/encoding.rb +18 -0
  48. data/lib/compiler/ast/exceptions.rb +138 -0
  49. data/lib/compiler/ast/file.rb +11 -0
  50. data/lib/compiler/ast/grapher.rb +89 -0
  51. data/lib/compiler/ast/literals.rb +207 -0
  52. data/lib/compiler/ast/node.rb +362 -0
  53. data/lib/compiler/ast/operators.rb +106 -0
  54. data/lib/compiler/ast/self.rb +15 -0
  55. data/lib/compiler/ast/sends.rb +615 -0
  56. data/lib/compiler/ast/transforms.rb +298 -0
  57. data/lib/compiler/ast/values.rb +88 -0
  58. data/lib/compiler/ast/variables.rb +351 -0
  59. data/lib/compiler/ast.rb +20 -0
  60. data/lib/compiler/locals.rb +109 -0
  61. data/lib/melbourne/processor.rb +651 -0
  62. data/lib/melbourne/version.rb +3 -0
  63. data/lib/melbourne.rb +143 -0
  64. metadata +112 -0
@@ -0,0 +1,20 @@
1
+ # -*- encoding: us-ascii -*-
2
+
3
+ base = File.expand_path "../", __FILE__
4
+
5
+ require base + "/ast/node"
6
+ require base + "/ast/self"
7
+ require base + "/ast/constants"
8
+ require base + "/ast/control_flow"
9
+ require base + "/ast/data"
10
+ require base + "/ast/definitions"
11
+ require base + "/ast/encoding"
12
+ require base + "/ast/exceptions"
13
+ require base + "/ast/file"
14
+ require base + "/ast/grapher"
15
+ require base + "/ast/literals"
16
+ require base + "/ast/operators"
17
+ require base + "/ast/sends"
18
+ require base + "/ast/values"
19
+ require base + "/ast/variables"
20
+ require base + "/ast/transforms"
@@ -0,0 +1,109 @@
1
+ # -*- encoding: us-ascii -*-
2
+
3
+ module Rubinius
4
+ class Compiler
5
+ module LocalVariables
6
+ def variables
7
+ @variables ||= {}
8
+ end
9
+
10
+ def local_count
11
+ variables.size
12
+ end
13
+
14
+ def local_names
15
+ names = []
16
+ eval_names = []
17
+ variables.each_pair do |name, var|
18
+ case var
19
+ when EvalLocalVariable
20
+ eval_names << name
21
+ when LocalVariable
22
+ names[var.slot] = name
23
+ # We ignore NestedLocalVariables because they're
24
+ # tagged as existing only in their source scope.
25
+ end
26
+ end
27
+ names += eval_names
28
+ end
29
+
30
+ def allocate_slot
31
+ variables.size
32
+ end
33
+ end
34
+
35
+ class LocalVariable
36
+ attr_reader :slot
37
+
38
+ def initialize(slot)
39
+ @slot = slot
40
+ end
41
+
42
+ def reference
43
+ LocalReference.new @slot
44
+ end
45
+
46
+ def nested_reference
47
+ NestedLocalReference.new @slot
48
+ end
49
+ end
50
+
51
+ class NestedLocalVariable
52
+ attr_reader :depth, :slot
53
+
54
+ def initialize(depth, slot)
55
+ @depth = depth
56
+ @slot = slot
57
+ end
58
+
59
+ def reference
60
+ NestedLocalReference.new @slot, @depth
61
+ end
62
+
63
+ alias_method :nested_reference, :reference
64
+ end
65
+
66
+ class EvalLocalVariable
67
+ attr_reader :name
68
+
69
+ def initialize(name)
70
+ @name = name
71
+ end
72
+
73
+ def reference
74
+ EvalLocalReference.new @name
75
+ end
76
+
77
+ alias_method :nested_reference, :reference
78
+ end
79
+
80
+ class LocalReference
81
+ attr_reader :slot
82
+
83
+ def initialize(slot)
84
+ @slot = slot
85
+ end
86
+ end
87
+
88
+ class NestedLocalReference
89
+ attr_accessor :depth
90
+ attr_reader :slot
91
+
92
+ def initialize(slot, depth=0)
93
+ @slot = slot
94
+ @depth = depth
95
+ end
96
+ end
97
+
98
+ class EvalLocalReference
99
+
100
+ # Ignored, but simplifies duck-typing references
101
+ attr_accessor :depth
102
+
103
+ def initialize(name)
104
+ @name = name
105
+ @depth = 0
106
+ end
107
+ end
108
+ end
109
+ end