rltk3 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
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