rltk 2.2.1 → 3.0.0

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 (59) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +12 -12
  3. data/README.md +458 -285
  4. data/Rakefile +99 -92
  5. data/lib/rltk/ast.rb +221 -126
  6. data/lib/rltk/cfg.rb +218 -239
  7. data/lib/rltk/cg/basic_block.rb +1 -1
  8. data/lib/rltk/cg/bindings.rb +9 -26
  9. data/lib/rltk/cg/builder.rb +40 -8
  10. data/lib/rltk/cg/context.rb +1 -1
  11. data/lib/rltk/cg/contractor.rb +51 -0
  12. data/lib/rltk/cg/execution_engine.rb +45 -8
  13. data/lib/rltk/cg/function.rb +12 -2
  14. data/lib/rltk/cg/generated_bindings.rb +2541 -575
  15. data/lib/rltk/cg/generic_value.rb +2 -2
  16. data/lib/rltk/cg/instruction.rb +104 -83
  17. data/lib/rltk/cg/llvm.rb +44 -3
  18. data/lib/rltk/cg/memory_buffer.rb +22 -5
  19. data/lib/rltk/cg/module.rb +85 -36
  20. data/lib/rltk/cg/old_generated_bindings.rb +6152 -0
  21. data/lib/rltk/cg/pass_manager.rb +87 -43
  22. data/lib/rltk/cg/support.rb +2 -4
  23. data/lib/rltk/cg/target.rb +158 -28
  24. data/lib/rltk/cg/triple.rb +8 -8
  25. data/lib/rltk/cg/type.rb +69 -25
  26. data/lib/rltk/cg/value.rb +107 -66
  27. data/lib/rltk/cg.rb +16 -17
  28. data/lib/rltk/lexer.rb +21 -11
  29. data/lib/rltk/lexers/calculator.rb +1 -1
  30. data/lib/rltk/lexers/ebnf.rb +8 -7
  31. data/lib/rltk/parser.rb +300 -247
  32. data/lib/rltk/parsers/infix_calc.rb +1 -1
  33. data/lib/rltk/parsers/postfix_calc.rb +2 -2
  34. data/lib/rltk/parsers/prefix_calc.rb +2 -2
  35. data/lib/rltk/token.rb +1 -2
  36. data/lib/rltk/version.rb +3 -3
  37. data/lib/rltk.rb +6 -6
  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 +105 -8
  51. data/test/tc_cfg.rb +63 -48
  52. data/test/tc_lexer.rb +84 -96
  53. data/test/tc_parser.rb +224 -52
  54. data/test/tc_token.rb +6 -6
  55. data/test/ts_rltk.rb +12 -15
  56. metadata +149 -75
  57. data/lib/rltk/cg/generated_extended_bindings.rb +0 -287
  58. data/lib/rltk/util/abstract_class.rb +0 -25
  59. data/lib/rltk/util/monkeys.rb +0 -129
data/Rakefile CHANGED
@@ -8,85 +8,114 @@
8
8
  ##############
9
9
 
10
10
  # Gems
11
- require 'rake/testtask'
12
- require 'bundler'
11
+ require 'filigree/request_file'
13
12
 
13
+ # RLTK
14
14
  require File.expand_path("../lib/rltk/version", __FILE__)
15
15
 
16
- begin
17
- require 'yard'
16
+ ###########
17
+ # Bundler #
18
+ ###########
18
19
 
19
- YARD::Rake::YardocTask.new do |t|
20
- yardlib = File.join(File.dirname(__FILE__), 'yardlib/rltk.rb')
21
-
22
- t.options = [
23
- '-e', yardlib,
24
- '--title', 'The Ruby Language Toolkit',
25
- '-m', 'markdown',
26
- '-M', 'redcarpet',
27
- '-c', '.yardoc/cache',
28
- '--private'
29
- ]
30
-
31
-
32
- t.files = Dir['lib/**/*.rb'] + ['-'] + Dir['examples/kazoo/**/*.md'].sort
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
33
34
  end
34
-
35
- rescue LoadError
36
- warn 'Yard is not installed. `gem install yard` to build documentation.'
37
35
  end
38
36
 
39
- Rake::TestTask.new do |t|
40
- t.libs << 'test'
41
- t.loader = :testrb
42
- t.test_files = FileList['test/ts_rltk.rb']
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
43
48
  end
44
49
 
45
- if RUBY_VERSION[0..2] == '1.8'
46
- begin
47
- require 'rcov/rcovtask'
48
-
49
- Rcov::RcovTask.new do |t|
50
- t.libs << 'test'
51
- t.rcov_opts << '--exclude gems,ruby'
52
-
53
- t.test_files = FileList['test/tc_*.rb']
54
- end
55
-
56
- rescue LoadError
57
- warn 'Rcov not installed.'
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
58
  end
59
59
  end
60
60
 
61
- # Bundler tasks.
62
- Bundler::GemHelper.install_tasks
61
+ #########
62
+ # Notes #
63
+ #########
63
64
 
64
- # Rubygems Taks
65
- begin
66
- require 'rubygems/tasks'
67
-
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
68
82
  Gem::Tasks.new do |t|
69
83
  t.console.command = 'pry'
70
84
  end
71
-
72
- rescue LoadError
73
- 'rubygems-tasks not installed.'
74
85
  end
75
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
+
76
113
  desc 'Generate the bindings for LLVM.'
77
114
  task :gen_bindings do
78
115
  require 'ffi_gen'
79
116
 
80
117
  # Generate the standard LLVM bindings.
81
118
 
82
- blacklist = [
83
- 'LLVMGetMDNodeOperand',
84
- 'LLVMGetMDNodeNumOperands',
85
- 'LLVMInitializeAllTargetInfos',
86
- 'LLVMInitializeAllTargets',
87
- 'LLVMInitializeNativeTarget'
88
- ]
89
-
90
119
  deprecated = [
91
120
  # BitReader.h
92
121
  'LLVMGetBitcodeModuleProviderInContext',
@@ -115,51 +144,29 @@ task :gen_bindings do
115
144
  'llvm-c/Disassembler.h',
116
145
  'llvm-c/ExecutionEngine.h',
117
146
  'llvm-c/Initialization.h',
147
+ 'llvm-c/IRReader.h',
148
+ 'llvm-c/Linker.h',
149
+ 'llvm-c/LinkTimeOptimizer.h',
118
150
  'llvm-c/Object.h',
151
+ 'llvm-c/Support.h',
119
152
  'llvm-c/Target.h',
153
+ 'llvm-c/TargetMachine.h',
120
154
 
121
155
  'llvm-c/Transforms/IPO.h',
122
- 'llvm-c/Transforms/Scalar.h'
156
+ 'llvm-c/Transforms/PassManagerBuilder.h',
157
+ 'llvm-c/Transforms/Scalar.h',
158
+ 'llvm-c/Transforms/Vectorize.h'
123
159
  ]
124
160
 
125
161
  FFIGen.generate(
126
- :module_name => 'RLTK::CG::Bindings',
127
- :ffi_lib => "LLVM-#{RLTK::LLVM_TARGET_VERSION}",
128
- :headers => headers,
129
- :cflags => `llvm-config --cflags`.split,
130
- :prefixes => ['LLVM'],
131
- :blacklist => blacklist + deprecated,
132
- :output => 'lib/rltk/cg/generated_bindings.rb'
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'
133
169
  )
134
-
135
- # Generate the extended LLVM bindings.
136
-
137
- headers = [
138
- 'llvm-ecb.h',
139
-
140
- 'llvm-ecb/asm.h',
141
- 'llvm-ecb/module.h',
142
- 'llvm-ecb/support.h',
143
-
144
- 'llvm-ecb/value.h',
145
- 'llvm-ecb/target.h'
146
-
147
- # This causes value.h to not be included.
148
- #'llvm-ecb/target.h',
149
- #'llvm-ecb/value.h'
150
- ]
151
-
152
- begin
153
- FFIGen.generate(
154
- :module_name => 'RLTK::CG::Bindings',
155
- :ffi_lib => "LLVM-ECB-#{RLTK::LLVM_TARGET_VERSION}",
156
- :headers => headers,
157
- :cflags => `llvm-config --cflags`.split,
158
- :prefixes => ['LLVM'],
159
- :output => 'lib/rltk/cg/generated_extended_bindings.rb'
160
- )
161
- rescue
162
- end
163
170
  end
164
171
 
165
172
  desc 'Find LLVM bindings with a regular expression.'