rltk3 3.0.2

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 (56) hide show
  1. checksums.yaml +7 -0
  2. data/AUTHORS +1 -0
  3. data/LICENSE +27 -0
  4. data/README.md +852 -0
  5. data/Rakefile +197 -0
  6. data/lib/rltk/ast.rb +573 -0
  7. data/lib/rltk/cfg.rb +683 -0
  8. data/lib/rltk/cg/basic_block.rb +157 -0
  9. data/lib/rltk/cg/bindings.rb +151 -0
  10. data/lib/rltk/cg/builder.rb +1127 -0
  11. data/lib/rltk/cg/context.rb +48 -0
  12. data/lib/rltk/cg/contractor.rb +51 -0
  13. data/lib/rltk/cg/execution_engine.rb +194 -0
  14. data/lib/rltk/cg/function.rb +237 -0
  15. data/lib/rltk/cg/generated_bindings.rb +8118 -0
  16. data/lib/rltk/cg/generic_value.rb +95 -0
  17. data/lib/rltk/cg/instruction.rb +519 -0
  18. data/lib/rltk/cg/llvm.rb +150 -0
  19. data/lib/rltk/cg/memory_buffer.rb +75 -0
  20. data/lib/rltk/cg/module.rb +451 -0
  21. data/lib/rltk/cg/pass_manager.rb +252 -0
  22. data/lib/rltk/cg/support.rb +29 -0
  23. data/lib/rltk/cg/target.rb +230 -0
  24. data/lib/rltk/cg/triple.rb +58 -0
  25. data/lib/rltk/cg/type.rb +554 -0
  26. data/lib/rltk/cg/value.rb +1272 -0
  27. data/lib/rltk/cg.rb +32 -0
  28. data/lib/rltk/lexer.rb +372 -0
  29. data/lib/rltk/lexers/calculator.rb +44 -0
  30. data/lib/rltk/lexers/ebnf.rb +38 -0
  31. data/lib/rltk/parser.rb +1702 -0
  32. data/lib/rltk/parsers/infix_calc.rb +43 -0
  33. data/lib/rltk/parsers/postfix_calc.rb +34 -0
  34. data/lib/rltk/parsers/prefix_calc.rb +34 -0
  35. data/lib/rltk/token.rb +90 -0
  36. data/lib/rltk/version.rb +11 -0
  37. data/lib/rltk.rb +16 -0
  38. data/test/cg/tc_basic_block.rb +83 -0
  39. data/test/cg/tc_control_flow.rb +191 -0
  40. data/test/cg/tc_function.rb +54 -0
  41. data/test/cg/tc_generic_value.rb +33 -0
  42. data/test/cg/tc_instruction.rb +256 -0
  43. data/test/cg/tc_llvm.rb +25 -0
  44. data/test/cg/tc_math.rb +88 -0
  45. data/test/cg/tc_module.rb +89 -0
  46. data/test/cg/tc_transforms.rb +68 -0
  47. data/test/cg/tc_type.rb +69 -0
  48. data/test/cg/tc_value.rb +151 -0
  49. data/test/cg/ts_cg.rb +23 -0
  50. data/test/tc_ast.rb +332 -0
  51. data/test/tc_cfg.rb +164 -0
  52. data/test/tc_lexer.rb +216 -0
  53. data/test/tc_parser.rb +711 -0
  54. data/test/tc_token.rb +34 -0
  55. data/test/ts_rltk.rb +47 -0
  56. metadata +317 -0
data/Rakefile ADDED
@@ -0,0 +1,197 @@
1
+ # Author: Chris Wailes <chris.wailes@gmail.com>
2
+ # Project: Ruby Language Toolkit
3
+ # Date: 2011/04/06
4
+ # Description: This is RLTK's Rakefile.
5
+
6
+ ##############
7
+ # Rake Tasks #
8
+ ##############
9
+
10
+ # Gems
11
+ require 'filigree/request_file'
12
+
13
+ # RLTK
14
+ require File.expand_path("../lib/rltk/version", __FILE__)
15
+
16
+ ###########
17
+ # Bundler #
18
+ ###########
19
+
20
+ request_file('bundler', 'Bundler is not installed.') do
21
+ Bundler::GemHelper.install_tasks
22
+ end
23
+
24
+ ########
25
+ # Flay #
26
+ ########
27
+
28
+ request_file('flay', 'Flay is not installed.') do
29
+ desc 'Analyze code for similarities with Flay'
30
+ task :flay do
31
+ flay = Flay.new
32
+ flay.process(*Dir['lib/**/*.rb'])
33
+ flay.report
34
+ end
35
+ end
36
+
37
+ ########
38
+ # Flog #
39
+ ########
40
+
41
+ request_file('flog_cli', 'Flog is not installed.') do
42
+ desc 'Analyze code complexity with Flog'
43
+ task :flog do
44
+ whip = FlogCLI.new
45
+ whip.flog('lib')
46
+ whip.report
47
+ end
48
+ end
49
+
50
+ ############
51
+ # MiniTest #
52
+ ############
53
+
54
+ request_file('rake/testtask', 'Minitest is not installed.') do
55
+ Rake::TestTask.new do |t|
56
+ t.libs << 'test'
57
+ t.test_files = FileList['test/ts_rltk.rb']
58
+ end
59
+ end
60
+
61
+ #########
62
+ # Notes #
63
+ #########
64
+
65
+ request_file('rake/notes/rake_task', 'Rake-notes is not installed.')
66
+
67
+ ########
68
+ # Reek #
69
+ ########
70
+
71
+ request_file('reek/rake/task', 'Reek is not installed.') do
72
+ Reek::Rake::Task.new do |t|
73
+ t.fail_on_error = false
74
+ end
75
+ end
76
+
77
+ ##################
78
+ # Rubygems Tasks #
79
+ ##################
80
+
81
+ request_file('rubygems/tasks', 'Rubygems-tasks is not installed.') do
82
+ Gem::Tasks.new do |t|
83
+ t.console.command = 'pry'
84
+ end
85
+ end
86
+
87
+ ########
88
+ # YARD #
89
+ ########
90
+
91
+ request_file('yard', 'Yard is not installed.') do
92
+ YARD::Rake::YardocTask.new do |t|
93
+ yardlib = File.join(File.dirname(__FILE__), 'yardlib/rltk.rb')
94
+
95
+ t.options = [
96
+ '-e', yardlib,
97
+ '--title', 'The Ruby Language Toolkit',
98
+ '-m', 'markdown',
99
+ '-M', 'redcarpet',
100
+ '--private'
101
+ ]
102
+
103
+ t.files = Dir['lib/**/*.rb'] +
104
+ ['-'] +
105
+ Dir['examples/kazoo/**/*.md'].sort
106
+ end
107
+ end
108
+
109
+ ##############
110
+ # RLTK Tasks #
111
+ ##############
112
+
113
+ desc 'Generate the bindings for LLVM.'
114
+ task :gen_bindings do
115
+ require 'ffi_gen'
116
+
117
+ # Generate the standard LLVM bindings.
118
+
119
+ deprecated = [
120
+ # BitReader.h
121
+ 'LLVMGetBitcodeModuleProviderInContext',
122
+ 'LLVMGetBitcodeModuleProvider',
123
+
124
+ # BitWriter.h
125
+ 'LLVMWriteBitcodeToFileHandle',
126
+
127
+ # Core.h
128
+ 'LLVMCreateFunctionPassManager',
129
+
130
+ # ExectionEngine.h
131
+ 'LLVMCreateExecutionEngine',
132
+ 'LLVMCreateInterpreter',
133
+ 'LLVMCreateJITCompiler',
134
+ 'LLVMAddModuleProvider',
135
+ 'LLVMRemoveModuleProvider'
136
+ ]
137
+
138
+ headers = [
139
+ 'llvm-c/Core.h',
140
+
141
+ 'llvm-c/Analysis.h',
142
+ 'llvm-c/BitReader.h',
143
+ 'llvm-c/BitWriter.h',
144
+ 'llvm-c/Disassembler.h',
145
+ 'llvm-c/ExecutionEngine.h',
146
+ 'llvm-c/Initialization.h',
147
+ 'llvm-c/IRReader.h',
148
+ 'llvm-c/Linker.h',
149
+ 'llvm-c/LinkTimeOptimizer.h',
150
+ 'llvm-c/Object.h',
151
+ 'llvm-c/Support.h',
152
+ 'llvm-c/Target.h',
153
+ 'llvm-c/TargetMachine.h',
154
+
155
+ 'llvm-c/Transforms/IPO.h',
156
+ 'llvm-c/Transforms/PassManagerBuilder.h',
157
+ 'llvm-c/Transforms/Scalar.h',
158
+ 'llvm-c/Transforms/Vectorize.h'
159
+ ]
160
+
161
+ FFIGen.generate(
162
+ module_name: 'RLTK::CG::Bindings',
163
+ ffi_lib: "LLVM-#{RLTK::LLVM_TARGET_VERSION}",
164
+ headers: headers,
165
+ cflags: `llvm-config --cflags`.split,
166
+ prefixes: ['LLVM'],
167
+ blacklist: deprecated,
168
+ output: 'lib/rltk/cg/generated_bindings.rb'
169
+ )
170
+ end
171
+
172
+ desc 'Find LLVM bindings with a regular expression.'
173
+ task :find_bind, :part do |t, args|
174
+
175
+ # Get the task argument.
176
+ part = Regexp.new(args[:part])
177
+
178
+ # Require the Bindings module.
179
+ require 'rltk/cg/bindings'
180
+
181
+ syms =
182
+ Symbol.all_symbols.select do |sym|
183
+ sym = sym.to_s.downcase
184
+
185
+ sym[0..3] == 'llvm' and sym[4..-1] =~ part
186
+ end.sort
187
+
188
+ puts
189
+ if not syms.empty?
190
+ puts "Matching bindings [#{syms.length}]:"
191
+ syms.each { |sym| puts "\t#{sym}" }
192
+
193
+ else
194
+ puts 'No matching bindings.'
195
+ end
196
+ puts
197
+ end