laser 0.7.0.pre1

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 (319) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +14 -0
  4. data/LICENSE +661 -0
  5. data/README.md +158 -0
  6. data/Rakefile +104 -0
  7. data/VERSION +1 -0
  8. data/bin/laser +7 -0
  9. data/design_docs/goals.md +57 -0
  10. data/design_docs/object_regex.md +426 -0
  11. data/design_docs/type_annotations.md +80 -0
  12. data/ext/laser/BasicBlock.cpp +572 -0
  13. data/ext/laser/BasicBlock.h +118 -0
  14. data/ext/laser/extconf.rb +3 -0
  15. data/features/laser.feature +25 -0
  16. data/features/step_definitions/laser_steps.rb +39 -0
  17. data/features/support/env.rb +14 -0
  18. data/features/support/testdata/1_input +1 -0
  19. data/features/support/testdata/1_output +1 -0
  20. data/features/support/testdata/2_input +4 -0
  21. data/features/support/testdata/2_output +4 -0
  22. data/features/support/testdata/3_input +8 -0
  23. data/features/support/testdata/3_output +11 -0
  24. data/features/support/testdata/4_input +5 -0
  25. data/features/support/testdata/4_output +5 -0
  26. data/features/support/testdata/5_input +13 -0
  27. data/laser.gemspec +382 -0
  28. data/lib/laser.rb +98 -0
  29. data/lib/laser/analysis/annotations.rb +95 -0
  30. data/lib/laser/analysis/annotations/annotation_config.yaml +3 -0
  31. data/lib/laser/analysis/annotations/comment_attachment_annotation.rb +66 -0
  32. data/lib/laser/analysis/annotations/node_pointers_annotation.rb +36 -0
  33. data/lib/laser/analysis/annotations/runtime_annotation.rb +55 -0
  34. data/lib/laser/analysis/argument_expansion.rb +132 -0
  35. data/lib/laser/analysis/arity.rb +34 -0
  36. data/lib/laser/analysis/bindings.rb +144 -0
  37. data/lib/laser/analysis/bootstrap/bootstrap.rb +298 -0
  38. data/lib/laser/analysis/bootstrap/laser_class.rb +106 -0
  39. data/lib/laser/analysis/bootstrap/laser_method.rb +255 -0
  40. data/lib/laser/analysis/bootstrap/laser_module.rb +403 -0
  41. data/lib/laser/analysis/bootstrap/laser_module_copy.rb +74 -0
  42. data/lib/laser/analysis/bootstrap/laser_object.rb +69 -0
  43. data/lib/laser/analysis/bootstrap/laser_proc.rb +150 -0
  44. data/lib/laser/analysis/bootstrap/laser_singleton_class.rb +44 -0
  45. data/lib/laser/analysis/comments.rb +35 -0
  46. data/lib/laser/analysis/control_flow.rb +28 -0
  47. data/lib/laser/analysis/control_flow/alias_analysis.rb +31 -0
  48. data/lib/laser/analysis/control_flow/basic_block.rb +105 -0
  49. data/lib/laser/analysis/control_flow/cfg_builder.rb +2505 -0
  50. data/lib/laser/analysis/control_flow/cfg_instruction.rb +190 -0
  51. data/lib/laser/analysis/control_flow/constant_propagation.rb +742 -0
  52. data/lib/laser/analysis/control_flow/control_flow_graph.rb +370 -0
  53. data/lib/laser/analysis/control_flow/lifetime_analysis.rb +91 -0
  54. data/lib/laser/analysis/control_flow/method_call_search.rb +26 -0
  55. data/lib/laser/analysis/control_flow/raise_properties.rb +25 -0
  56. data/lib/laser/analysis/control_flow/simulation.rb +385 -0
  57. data/lib/laser/analysis/control_flow/static_single_assignment.rb +185 -0
  58. data/lib/laser/analysis/control_flow/unreachability_analysis.rb +57 -0
  59. data/lib/laser/analysis/control_flow/unused_variables.rb +91 -0
  60. data/lib/laser/analysis/control_flow/yield_properties.rb +103 -0
  61. data/lib/laser/analysis/errors.rb +131 -0
  62. data/lib/laser/analysis/laser_utils.rb +18 -0
  63. data/lib/laser/analysis/lexical_analysis.rb +172 -0
  64. data/lib/laser/analysis/method_call.rb +68 -0
  65. data/lib/laser/analysis/protocol_registry.rb +30 -0
  66. data/lib/laser/analysis/scope.rb +118 -0
  67. data/lib/laser/analysis/sexp.rb +159 -0
  68. data/lib/laser/analysis/sexp_analysis.rb +40 -0
  69. data/lib/laser/analysis/sexp_extensions/constant_extraction.rb +115 -0
  70. data/lib/laser/analysis/sexp_extensions/source_location.rb +164 -0
  71. data/lib/laser/analysis/sexp_extensions/type_inference.rb +47 -0
  72. data/lib/laser/analysis/signature.rb +76 -0
  73. data/lib/laser/analysis/special_methods/send.rb +67 -0
  74. data/lib/laser/analysis/unused_methods.rb +21 -0
  75. data/lib/laser/analysis/visitor.rb +141 -0
  76. data/lib/laser/annotation_parser/annotations.treetop +126 -0
  77. data/lib/laser/annotation_parser/annotations_parser.rb +748 -0
  78. data/lib/laser/annotation_parser/class_annotations.treetop +82 -0
  79. data/lib/laser/annotation_parser/class_annotations_parser.rb +654 -0
  80. data/lib/laser/annotation_parser/overload.treetop +24 -0
  81. data/lib/laser/annotation_parser/overload_parser.rb +167 -0
  82. data/lib/laser/annotation_parser/parsers.rb +6 -0
  83. data/lib/laser/annotation_parser/structural.treetop +37 -0
  84. data/lib/laser/annotation_parser/structural_parser.rb +406 -0
  85. data/lib/laser/annotation_parser/useful_parsers.treetop +47 -0
  86. data/lib/laser/annotation_parser/useful_parsers_parser.rb +674 -0
  87. data/lib/laser/rake/task.rb +46 -0
  88. data/lib/laser/runner.rb +189 -0
  89. data/lib/laser/scanner.rb +169 -0
  90. data/lib/laser/standard_library/_thread.rb +110 -0
  91. data/lib/laser/standard_library/abbrev.rb +103 -0
  92. data/lib/laser/standard_library/array.rb +418 -0
  93. data/lib/laser/standard_library/base64.rb +91 -0
  94. data/lib/laser/standard_library/basic_object.rb +55 -0
  95. data/lib/laser/standard_library/benchmark.rb +556 -0
  96. data/lib/laser/standard_library/bignum.rb +185 -0
  97. data/lib/laser/standard_library/cgi.rb +275 -0
  98. data/lib/laser/standard_library/cgi/cookie.rb +147 -0
  99. data/lib/laser/standard_library/cgi/core.rb +791 -0
  100. data/lib/laser/standard_library/cgi/html.rb +1021 -0
  101. data/lib/laser/standard_library/cgi/session.rb +537 -0
  102. data/lib/laser/standard_library/cgi/session/pstore.rb +111 -0
  103. data/lib/laser/standard_library/cgi/util.rb +188 -0
  104. data/lib/laser/standard_library/class_definitions.rb +333 -0
  105. data/lib/laser/standard_library/comparable.rb +125 -0
  106. data/lib/laser/standard_library/complex.rb +162 -0
  107. data/lib/laser/standard_library/enumerable.rb +178 -0
  108. data/lib/laser/standard_library/exceptions.rb +135 -0
  109. data/lib/laser/standard_library/fixnum.rb +188 -0
  110. data/lib/laser/standard_library/float.rb +180 -0
  111. data/lib/laser/standard_library/hash.rb +237 -0
  112. data/lib/laser/standard_library/integer.rb +123 -0
  113. data/lib/laser/standard_library/laser_magic.rb +7 -0
  114. data/lib/laser/standard_library/nil_false_true.rb +113 -0
  115. data/lib/laser/standard_library/numbers.rb +192 -0
  116. data/lib/laser/standard_library/proc.rb +31 -0
  117. data/lib/laser/standard_library/set.rb +1348 -0
  118. data/lib/laser/standard_library/string.rb +666 -0
  119. data/lib/laser/standard_library/stringio.rb +2 -0
  120. data/lib/laser/standard_library/symbol.rb +125 -0
  121. data/lib/laser/standard_library/tsort.rb +242 -0
  122. data/lib/laser/support/acts_as_struct.rb +66 -0
  123. data/lib/laser/support/frequency.rb +55 -0
  124. data/lib/laser/support/inheritable_attributes.rb +145 -0
  125. data/lib/laser/support/module_extensions.rb +94 -0
  126. data/lib/laser/support/placeholder_object.rb +13 -0
  127. data/lib/laser/third_party/rgl/adjacency.rb +221 -0
  128. data/lib/laser/third_party/rgl/base.rb +228 -0
  129. data/lib/laser/third_party/rgl/bidirectional.rb +39 -0
  130. data/lib/laser/third_party/rgl/condensation.rb +47 -0
  131. data/lib/laser/third_party/rgl/connected_components.rb +138 -0
  132. data/lib/laser/third_party/rgl/control_flow.rb +170 -0
  133. data/lib/laser/third_party/rgl/depth_first_spanning_tree.rb +37 -0
  134. data/lib/laser/third_party/rgl/dominators.rb +124 -0
  135. data/lib/laser/third_party/rgl/dot.rb +93 -0
  136. data/lib/laser/third_party/rgl/graphxml.rb +51 -0
  137. data/lib/laser/third_party/rgl/implicit.rb +174 -0
  138. data/lib/laser/third_party/rgl/mutable.rb +117 -0
  139. data/lib/laser/third_party/rgl/rdot.rb +445 -0
  140. data/lib/laser/third_party/rgl/topsort.rb +72 -0
  141. data/lib/laser/third_party/rgl/transitivity.rb +180 -0
  142. data/lib/laser/third_party/rgl/traversal.rb +348 -0
  143. data/lib/laser/types/types.rb +433 -0
  144. data/lib/laser/version.rb +14 -0
  145. data/lib/laser/warning.rb +149 -0
  146. data/lib/laser/warning_sets/default.yml +13 -0
  147. data/lib/laser/warnings/assignment_in_condition.rb +20 -0
  148. data/lib/laser/warnings/comment_spacing.rb +31 -0
  149. data/lib/laser/warnings/extra_blank_lines.rb +30 -0
  150. data/lib/laser/warnings/extra_whitespace.rb +16 -0
  151. data/lib/laser/warnings/hash_symbol_18_warning.rb +63 -0
  152. data/lib/laser/warnings/hash_symbol_19_warning.rb +29 -0
  153. data/lib/laser/warnings/line_length.rb +115 -0
  154. data/lib/laser/warnings/misaligned_unindentation.rb +17 -0
  155. data/lib/laser/warnings/operator_spacing.rb +68 -0
  156. data/lib/laser/warnings/parens_on_declaration.rb +30 -0
  157. data/lib/laser/warnings/rescue_exception.rb +42 -0
  158. data/lib/laser/warnings/semicolon.rb +25 -0
  159. data/lib/laser/warnings/sexp_errors.rb +24 -0
  160. data/lib/laser/warnings/uncalled_method_warning.rb +7 -0
  161. data/lib/laser/warnings/useless_double_quotes.rb +38 -0
  162. data/spec/analysis_specs/annotations_spec.rb +47 -0
  163. data/spec/analysis_specs/annotations_specs/comment_attachment_spec.rb +68 -0
  164. data/spec/analysis_specs/annotations_specs/node_pointers_annotation_spec.rb +90 -0
  165. data/spec/analysis_specs/annotations_specs/runtime_annotation_spec.rb +135 -0
  166. data/spec/analysis_specs/annotations_specs/spec_helper.rb +33 -0
  167. data/spec/analysis_specs/argument_expansion_spec.rb +113 -0
  168. data/spec/analysis_specs/bindings_spec.rb +36 -0
  169. data/spec/analysis_specs/comment_spec.rb +93 -0
  170. data/spec/analysis_specs/control_flow_specs/cfg_instruction_spec.rb +111 -0
  171. data/spec/analysis_specs/control_flow_specs/constant_propagation_spec.rb +560 -0
  172. data/spec/analysis_specs/control_flow_specs/control_flow_graph_spec.rb +5 -0
  173. data/spec/analysis_specs/control_flow_specs/raise_properties_spec.rb +310 -0
  174. data/spec/analysis_specs/control_flow_specs/raise_type_inference_spec.rb +301 -0
  175. data/spec/analysis_specs/control_flow_specs/return_type_inference_spec.rb +431 -0
  176. data/spec/analysis_specs/control_flow_specs/simulation_spec.rb +158 -0
  177. data/spec/analysis_specs/control_flow_specs/spec_helper.rb +110 -0
  178. data/spec/analysis_specs/control_flow_specs/tuple_misuse_inference_spec.rb +125 -0
  179. data/spec/analysis_specs/control_flow_specs/unreachability_analysis_spec.rb +76 -0
  180. data/spec/analysis_specs/control_flow_specs/unused_variable_spec.rb +99 -0
  181. data/spec/analysis_specs/control_flow_specs/yield_properties_spec.rb +372 -0
  182. data/spec/analysis_specs/error_spec.rb +30 -0
  183. data/spec/analysis_specs/laser_class_spec.rb +322 -0
  184. data/spec/analysis_specs/lexical_analysis_spec.rb +184 -0
  185. data/spec/analysis_specs/protocol_registry_spec.rb +63 -0
  186. data/spec/analysis_specs/scope_annotation_spec.rb +1013 -0
  187. data/spec/analysis_specs/scope_spec.rb +126 -0
  188. data/spec/analysis_specs/sexp_analysis_spec.rb +30 -0
  189. data/spec/analysis_specs/sexp_extension_specs/constant_extraction_spec.rb +309 -0
  190. data/spec/analysis_specs/sexp_extension_specs/source_location_spec.rb +231 -0
  191. data/spec/analysis_specs/sexp_extension_specs/spec_helper.rb +1 -0
  192. data/spec/analysis_specs/sexp_extension_specs/type_inference_spec.rb +252 -0
  193. data/spec/analysis_specs/sexp_spec.rb +167 -0
  194. data/spec/analysis_specs/spec_helper.rb +27 -0
  195. data/spec/analysis_specs/unused_methods_spec.rb +65 -0
  196. data/spec/analysis_specs/visitor_spec.rb +64 -0
  197. data/spec/annotation_parser_specs/annotations_parser_spec.rb +89 -0
  198. data/spec/annotation_parser_specs/class_annotation_parser_spec.rb +120 -0
  199. data/spec/annotation_parser_specs/overload_parser_spec.rb +39 -0
  200. data/spec/annotation_parser_specs/parsers_spec.rb +14 -0
  201. data/spec/annotation_parser_specs/spec_helper.rb +1 -0
  202. data/spec/annotation_parser_specs/structural_parser_spec.rb +67 -0
  203. data/spec/laser_spec.rb +14 -0
  204. data/spec/rake_specs/spec_helper.rb +1 -0
  205. data/spec/rake_specs/task_spec.rb +67 -0
  206. data/spec/runner_spec.rb +207 -0
  207. data/spec/scanner_spec.rb +75 -0
  208. data/spec/spec_helper.rb +121 -0
  209. data/spec/standard_library/exceptions_spec.rb +19 -0
  210. data/spec/standard_library/globals_spec.rb +14 -0
  211. data/spec/standard_library/set_spec.rb +31 -0
  212. data/spec/standard_library/spec_helper.rb +1 -0
  213. data/spec/standard_library/standard_library_spec.rb +302 -0
  214. data/spec/support_specs/acts_as_struct_spec.rb +94 -0
  215. data/spec/support_specs/frequency_spec.rb +23 -0
  216. data/spec/support_specs/module_extensions_spec.rb +117 -0
  217. data/spec/support_specs/spec_helper.rb +1 -0
  218. data/spec/type_specs/spec_helper.rb +1 -0
  219. data/spec/type_specs/types_spec.rb +133 -0
  220. data/spec/warning_spec.rb +95 -0
  221. data/spec/warning_specs/assignment_in_condition_spec.rb +68 -0
  222. data/spec/warning_specs/comment_spacing_spec.rb +65 -0
  223. data/spec/warning_specs/extra_blank_lines_spec.rb +70 -0
  224. data/spec/warning_specs/extra_whitespace_spec.rb +33 -0
  225. data/spec/warning_specs/hash_symbol_18_warning_spec.rb +89 -0
  226. data/spec/warning_specs/hash_symbol_19_warning_spec.rb +63 -0
  227. data/spec/warning_specs/line_length_spec.rb +173 -0
  228. data/spec/warning_specs/misaligned_unindentation_spec.rb +35 -0
  229. data/spec/warning_specs/operator_spacing_spec.rb +104 -0
  230. data/spec/warning_specs/parens_on_declaration_spec.rb +57 -0
  231. data/spec/warning_specs/rescue_exception_spec.rb +105 -0
  232. data/spec/warning_specs/semicolon_spec.rb +58 -0
  233. data/spec/warning_specs/spec_helper.rb +1 -0
  234. data/spec/warning_specs/useless_double_quotes_spec.rb +74 -0
  235. data/status_reports/2010/12/2010-12-14.md +163 -0
  236. data/status_reports/2010/12/2010-12-23.md +298 -0
  237. data/status_reports/2010/12/2010-12-24.md +6 -0
  238. data/test/third_party_tests/rgl_tests/TestComponents.rb +65 -0
  239. data/test/third_party_tests/rgl_tests/TestCycles.rb +61 -0
  240. data/test/third_party_tests/rgl_tests/TestDirectedGraph.rb +125 -0
  241. data/test/third_party_tests/rgl_tests/TestDot.rb +18 -0
  242. data/test/third_party_tests/rgl_tests/TestEdge.rb +34 -0
  243. data/test/third_party_tests/rgl_tests/TestGraph.rb +71 -0
  244. data/test/third_party_tests/rgl_tests/TestGraphXML.rb +57 -0
  245. data/test/third_party_tests/rgl_tests/TestImplicit.rb +52 -0
  246. data/test/third_party_tests/rgl_tests/TestRdot.rb +863 -0
  247. data/test/third_party_tests/rgl_tests/TestTransitivity.rb +129 -0
  248. data/test/third_party_tests/rgl_tests/TestTraversal.rb +220 -0
  249. data/test/third_party_tests/rgl_tests/TestUnDirectedGraph.rb +102 -0
  250. data/test/third_party_tests/rgl_tests/examples/north/Graph.log +128 -0
  251. data/test/third_party_tests/rgl_tests/examples/north/g.10.0.graphml +28 -0
  252. data/test/third_party_tests/rgl_tests/examples/north/g.10.1.graphml +28 -0
  253. data/test/third_party_tests/rgl_tests/examples/north/g.10.11.graphml +31 -0
  254. data/test/third_party_tests/rgl_tests/examples/north/g.10.12.graphml +27 -0
  255. data/test/third_party_tests/rgl_tests/examples/north/g.10.13.graphml +27 -0
  256. data/test/third_party_tests/rgl_tests/examples/north/g.10.14.graphml +27 -0
  257. data/test/third_party_tests/rgl_tests/examples/north/g.10.15.graphml +26 -0
  258. data/test/third_party_tests/rgl_tests/examples/north/g.10.16.graphml +26 -0
  259. data/test/third_party_tests/rgl_tests/examples/north/g.10.17.graphml +26 -0
  260. data/test/third_party_tests/rgl_tests/examples/north/g.10.19.graphml +37 -0
  261. data/test/third_party_tests/rgl_tests/examples/north/g.10.2.graphml +28 -0
  262. data/test/third_party_tests/rgl_tests/examples/north/g.10.20.graphml +38 -0
  263. data/test/third_party_tests/rgl_tests/examples/north/g.10.22.graphml +43 -0
  264. data/test/third_party_tests/rgl_tests/examples/north/g.10.24.graphml +30 -0
  265. data/test/third_party_tests/rgl_tests/examples/north/g.10.25.graphml +45 -0
  266. data/test/third_party_tests/rgl_tests/examples/north/g.10.27.graphml +38 -0
  267. data/test/third_party_tests/rgl_tests/examples/north/g.10.28.graphml +30 -0
  268. data/test/third_party_tests/rgl_tests/examples/north/g.10.29.graphml +38 -0
  269. data/test/third_party_tests/rgl_tests/examples/north/g.10.3.graphml +26 -0
  270. data/test/third_party_tests/rgl_tests/examples/north/g.10.30.graphml +34 -0
  271. data/test/third_party_tests/rgl_tests/examples/north/g.10.31.graphml +42 -0
  272. data/test/third_party_tests/rgl_tests/examples/north/g.10.34.graphml +42 -0
  273. data/test/third_party_tests/rgl_tests/examples/north/g.10.37.graphml +28 -0
  274. data/test/third_party_tests/rgl_tests/examples/north/g.10.38.graphml +38 -0
  275. data/test/third_party_tests/rgl_tests/examples/north/g.10.39.graphml +36 -0
  276. data/test/third_party_tests/rgl_tests/examples/north/g.10.4.graphml +26 -0
  277. data/test/third_party_tests/rgl_tests/examples/north/g.10.40.graphml +37 -0
  278. data/test/third_party_tests/rgl_tests/examples/north/g.10.41.graphml +37 -0
  279. data/test/third_party_tests/rgl_tests/examples/north/g.10.42.graphml +26 -0
  280. data/test/third_party_tests/rgl_tests/examples/north/g.10.45.graphml +28 -0
  281. data/test/third_party_tests/rgl_tests/examples/north/g.10.46.graphml +32 -0
  282. data/test/third_party_tests/rgl_tests/examples/north/g.10.5.graphml +31 -0
  283. data/test/third_party_tests/rgl_tests/examples/north/g.10.50.graphml +30 -0
  284. data/test/third_party_tests/rgl_tests/examples/north/g.10.56.graphml +29 -0
  285. data/test/third_party_tests/rgl_tests/examples/north/g.10.57.graphml +32 -0
  286. data/test/third_party_tests/rgl_tests/examples/north/g.10.58.graphml +32 -0
  287. data/test/third_party_tests/rgl_tests/examples/north/g.10.6.graphml +26 -0
  288. data/test/third_party_tests/rgl_tests/examples/north/g.10.60.graphml +32 -0
  289. data/test/third_party_tests/rgl_tests/examples/north/g.10.61.graphml +34 -0
  290. data/test/third_party_tests/rgl_tests/examples/north/g.10.62.graphml +34 -0
  291. data/test/third_party_tests/rgl_tests/examples/north/g.10.68.graphml +30 -0
  292. data/test/third_party_tests/rgl_tests/examples/north/g.10.69.graphml +32 -0
  293. data/test/third_party_tests/rgl_tests/examples/north/g.10.7.graphml +29 -0
  294. data/test/third_party_tests/rgl_tests/examples/north/g.10.70.graphml +26 -0
  295. data/test/third_party_tests/rgl_tests/examples/north/g.10.71.graphml +27 -0
  296. data/test/third_party_tests/rgl_tests/examples/north/g.10.72.graphml +28 -0
  297. data/test/third_party_tests/rgl_tests/examples/north/g.10.74.graphml +29 -0
  298. data/test/third_party_tests/rgl_tests/examples/north/g.10.75.graphml +29 -0
  299. data/test/third_party_tests/rgl_tests/examples/north/g.10.78.graphml +27 -0
  300. data/test/third_party_tests/rgl_tests/examples/north/g.10.79.graphml +34 -0
  301. data/test/third_party_tests/rgl_tests/examples/north/g.10.8.graphml +29 -0
  302. data/test/third_party_tests/rgl_tests/examples/north/g.10.80.graphml +34 -0
  303. data/test/third_party_tests/rgl_tests/examples/north/g.10.82.graphml +35 -0
  304. data/test/third_party_tests/rgl_tests/examples/north/g.10.83.graphml +32 -0
  305. data/test/third_party_tests/rgl_tests/examples/north/g.10.85.graphml +34 -0
  306. data/test/third_party_tests/rgl_tests/examples/north/g.10.86.graphml +34 -0
  307. data/test/third_party_tests/rgl_tests/examples/north/g.10.88.graphml +37 -0
  308. data/test/third_party_tests/rgl_tests/examples/north/g.10.89.graphml +29 -0
  309. data/test/third_party_tests/rgl_tests/examples/north/g.10.9.graphml +26 -0
  310. data/test/third_party_tests/rgl_tests/examples/north/g.10.90.graphml +32 -0
  311. data/test/third_party_tests/rgl_tests/examples/north/g.10.91.graphml +31 -0
  312. data/test/third_party_tests/rgl_tests/examples/north/g.10.92.graphml +26 -0
  313. data/test/third_party_tests/rgl_tests/examples/north/g.10.93.graphml +32 -0
  314. data/test/third_party_tests/rgl_tests/examples/north/g.10.94.graphml +34 -0
  315. data/test/third_party_tests/rgl_tests/examples/north/g.12.8.graphml +40 -0
  316. data/test/third_party_tests/rgl_tests/examples/north/g.14.9.graphml +36 -0
  317. data/test/third_party_tests/rgl_tests/test_helper.rb +7 -0
  318. data/test/third_party_tests/test_inheritable_attributes.rb +187 -0
  319. metadata +470 -0
@@ -0,0 +1,82 @@
1
+ require 'laser/annotation_parser/useful_parsers_parser'
2
+ module Laser
3
+ module Parsers
4
+ grammar Class
5
+ include GeneralPurpose
6
+ rule class_based_constraint
7
+ hash_constraint / array_constraint / generic_constraint / dont_care_constraint / tuple_constraint
8
+ end
9
+
10
+ rule hash_constraint
11
+ variance_constraint space* '=>' space* variance_constraint {
12
+ def type
13
+ Types::GenericType.new(Types::ClassType.new('Hash', :covariant),
14
+ [variance_constraint1.type, variance_constraint2.type])
15
+ end
16
+ }
17
+ end
18
+
19
+ rule dont_care_constraint
20
+ '_' {
21
+ def type
22
+ Types::ClassType.new('Object', :covariant)
23
+ end
24
+ }
25
+ end
26
+
27
+ rule array_constraint
28
+ '[' space* type space* ']' {
29
+ def type
30
+ Types::GenericType.new(Types::ClassType.new('Array', :covariant),
31
+ [elements[2].type])
32
+ end
33
+ }
34
+ end
35
+
36
+ rule tuple_constraint
37
+ parenthesized_type_list {
38
+ def type
39
+ Types::TupleType.new(all_types)
40
+ end
41
+ }
42
+ end
43
+
44
+ rule generic_constraint
45
+ variance_constraint space* '<' space* type_list space* '>' {
46
+ def type
47
+ type_to_generify = variance_constraint.type
48
+ Types::GenericType.new(type_to_generify, type_list.all_types)
49
+ end
50
+ } / variance_constraint
51
+ end
52
+
53
+ rule variance_constraint
54
+ constant "=" !'>' {
55
+ def type
56
+ result = constant.type
57
+ result.variance = :invariant
58
+ result
59
+ end
60
+ } / constant "-" {
61
+ def type
62
+ result = constant.type
63
+ result.variance = :contravariant
64
+ result
65
+ end
66
+ } / constant
67
+ end
68
+
69
+ rule constant
70
+ 'Boolean' {
71
+ def type
72
+ Types::BOOLEAN
73
+ end
74
+ } / ( '::'? [A-Z] [A-Za-z_]* )+ {
75
+ def type
76
+ Types::ClassType.new(text_value, :covariant)
77
+ end
78
+ }
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,654 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ require 'laser/annotation_parser/useful_parsers_parser'
5
+ module Laser
6
+ module Parsers
7
+ module Class
8
+ include Treetop::Runtime
9
+
10
+ def root
11
+ @root ||= :class_based_constraint
12
+ end
13
+
14
+ include GeneralPurpose
15
+
16
+ def _nt_class_based_constraint
17
+ start_index = index
18
+ if node_cache[:class_based_constraint].has_key?(index)
19
+ cached = node_cache[:class_based_constraint][index]
20
+ if cached
21
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
22
+ @index = cached.interval.end
23
+ end
24
+ return cached
25
+ end
26
+
27
+ i0 = index
28
+ r1 = _nt_hash_constraint
29
+ if r1
30
+ r0 = r1
31
+ else
32
+ r2 = _nt_array_constraint
33
+ if r2
34
+ r0 = r2
35
+ else
36
+ r3 = _nt_generic_constraint
37
+ if r3
38
+ r0 = r3
39
+ else
40
+ r4 = _nt_dont_care_constraint
41
+ if r4
42
+ r0 = r4
43
+ else
44
+ r5 = _nt_tuple_constraint
45
+ if r5
46
+ r0 = r5
47
+ else
48
+ @index = i0
49
+ r0 = nil
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ node_cache[:class_based_constraint][start_index] = r0
57
+
58
+ r0
59
+ end
60
+
61
+ module HashConstraint0
62
+ def variance_constraint1
63
+ elements[0]
64
+ end
65
+
66
+ def variance_constraint2
67
+ elements[4]
68
+ end
69
+ end
70
+
71
+ module HashConstraint1
72
+ def type
73
+ Types::GenericType.new(Types::ClassType.new('Hash', :covariant),
74
+ [variance_constraint1.type, variance_constraint2.type])
75
+ end
76
+ end
77
+
78
+ def _nt_hash_constraint
79
+ start_index = index
80
+ if node_cache[:hash_constraint].has_key?(index)
81
+ cached = node_cache[:hash_constraint][index]
82
+ if cached
83
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
84
+ @index = cached.interval.end
85
+ end
86
+ return cached
87
+ end
88
+
89
+ i0, s0 = index, []
90
+ r1 = _nt_variance_constraint
91
+ s0 << r1
92
+ if r1
93
+ s2, i2 = [], index
94
+ loop do
95
+ r3 = _nt_space
96
+ if r3
97
+ s2 << r3
98
+ else
99
+ break
100
+ end
101
+ end
102
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
103
+ s0 << r2
104
+ if r2
105
+ if has_terminal?('=>', false, index)
106
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 2))
107
+ @index += 2
108
+ else
109
+ terminal_parse_failure('=>')
110
+ r4 = nil
111
+ end
112
+ s0 << r4
113
+ if r4
114
+ s5, i5 = [], index
115
+ loop do
116
+ r6 = _nt_space
117
+ if r6
118
+ s5 << r6
119
+ else
120
+ break
121
+ end
122
+ end
123
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
124
+ s0 << r5
125
+ if r5
126
+ r7 = _nt_variance_constraint
127
+ s0 << r7
128
+ end
129
+ end
130
+ end
131
+ end
132
+ if s0.last
133
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
134
+ r0.extend(HashConstraint0)
135
+ r0.extend(HashConstraint1)
136
+ else
137
+ @index = i0
138
+ r0 = nil
139
+ end
140
+
141
+ node_cache[:hash_constraint][start_index] = r0
142
+
143
+ r0
144
+ end
145
+
146
+ module DontCareConstraint0
147
+ def type
148
+ Types::ClassType.new('Object', :covariant)
149
+ end
150
+ end
151
+
152
+ def _nt_dont_care_constraint
153
+ start_index = index
154
+ if node_cache[:dont_care_constraint].has_key?(index)
155
+ cached = node_cache[:dont_care_constraint][index]
156
+ if cached
157
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
158
+ @index = cached.interval.end
159
+ end
160
+ return cached
161
+ end
162
+
163
+ if has_terminal?('_', false, index)
164
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
165
+ r0.extend(DontCareConstraint0)
166
+ @index += 1
167
+ else
168
+ terminal_parse_failure('_')
169
+ r0 = nil
170
+ end
171
+
172
+ node_cache[:dont_care_constraint][start_index] = r0
173
+
174
+ r0
175
+ end
176
+
177
+ module ArrayConstraint0
178
+ def type
179
+ elements[2]
180
+ end
181
+
182
+ end
183
+
184
+ module ArrayConstraint1
185
+ def type
186
+ Types::GenericType.new(Types::ClassType.new('Array', :covariant),
187
+ [elements[2].type])
188
+ end
189
+ end
190
+
191
+ def _nt_array_constraint
192
+ start_index = index
193
+ if node_cache[:array_constraint].has_key?(index)
194
+ cached = node_cache[:array_constraint][index]
195
+ if cached
196
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
197
+ @index = cached.interval.end
198
+ end
199
+ return cached
200
+ end
201
+
202
+ i0, s0 = index, []
203
+ if has_terminal?('[', false, index)
204
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
205
+ @index += 1
206
+ else
207
+ terminal_parse_failure('[')
208
+ r1 = nil
209
+ end
210
+ s0 << r1
211
+ if r1
212
+ s2, i2 = [], index
213
+ loop do
214
+ r3 = _nt_space
215
+ if r3
216
+ s2 << r3
217
+ else
218
+ break
219
+ end
220
+ end
221
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
222
+ s0 << r2
223
+ if r2
224
+ r4 = _nt_type
225
+ s0 << r4
226
+ if r4
227
+ s5, i5 = [], index
228
+ loop do
229
+ r6 = _nt_space
230
+ if r6
231
+ s5 << r6
232
+ else
233
+ break
234
+ end
235
+ end
236
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
237
+ s0 << r5
238
+ if r5
239
+ if has_terminal?(']', false, index)
240
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
241
+ @index += 1
242
+ else
243
+ terminal_parse_failure(']')
244
+ r7 = nil
245
+ end
246
+ s0 << r7
247
+ end
248
+ end
249
+ end
250
+ end
251
+ if s0.last
252
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
253
+ r0.extend(ArrayConstraint0)
254
+ r0.extend(ArrayConstraint1)
255
+ else
256
+ @index = i0
257
+ r0 = nil
258
+ end
259
+
260
+ node_cache[:array_constraint][start_index] = r0
261
+
262
+ r0
263
+ end
264
+
265
+ module TupleConstraint0
266
+ def type
267
+ Types::TupleType.new(all_types)
268
+ end
269
+ end
270
+
271
+ def _nt_tuple_constraint
272
+ start_index = index
273
+ if node_cache[:tuple_constraint].has_key?(index)
274
+ cached = node_cache[:tuple_constraint][index]
275
+ if cached
276
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
277
+ @index = cached.interval.end
278
+ end
279
+ return cached
280
+ end
281
+
282
+ r0 = _nt_parenthesized_type_list
283
+ r0.extend(TupleConstraint0)
284
+
285
+ node_cache[:tuple_constraint][start_index] = r0
286
+
287
+ r0
288
+ end
289
+
290
+ module GenericConstraint0
291
+ def variance_constraint
292
+ elements[0]
293
+ end
294
+
295
+ def type_list
296
+ elements[4]
297
+ end
298
+
299
+ end
300
+
301
+ module GenericConstraint1
302
+ def type
303
+ type_to_generify = variance_constraint.type
304
+ Types::GenericType.new(type_to_generify, type_list.all_types)
305
+ end
306
+ end
307
+
308
+ def _nt_generic_constraint
309
+ start_index = index
310
+ if node_cache[:generic_constraint].has_key?(index)
311
+ cached = node_cache[:generic_constraint][index]
312
+ if cached
313
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
314
+ @index = cached.interval.end
315
+ end
316
+ return cached
317
+ end
318
+
319
+ i0 = index
320
+ i1, s1 = index, []
321
+ r2 = _nt_variance_constraint
322
+ s1 << r2
323
+ if r2
324
+ s3, i3 = [], index
325
+ loop do
326
+ r4 = _nt_space
327
+ if r4
328
+ s3 << r4
329
+ else
330
+ break
331
+ end
332
+ end
333
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
334
+ s1 << r3
335
+ if r3
336
+ if has_terminal?('<', false, index)
337
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
338
+ @index += 1
339
+ else
340
+ terminal_parse_failure('<')
341
+ r5 = nil
342
+ end
343
+ s1 << r5
344
+ if r5
345
+ s6, i6 = [], index
346
+ loop do
347
+ r7 = _nt_space
348
+ if r7
349
+ s6 << r7
350
+ else
351
+ break
352
+ end
353
+ end
354
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
355
+ s1 << r6
356
+ if r6
357
+ r8 = _nt_type_list
358
+ s1 << r8
359
+ if r8
360
+ s9, i9 = [], index
361
+ loop do
362
+ r10 = _nt_space
363
+ if r10
364
+ s9 << r10
365
+ else
366
+ break
367
+ end
368
+ end
369
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
370
+ s1 << r9
371
+ if r9
372
+ if has_terminal?('>', false, index)
373
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
374
+ @index += 1
375
+ else
376
+ terminal_parse_failure('>')
377
+ r11 = nil
378
+ end
379
+ s1 << r11
380
+ end
381
+ end
382
+ end
383
+ end
384
+ end
385
+ end
386
+ if s1.last
387
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
388
+ r1.extend(GenericConstraint0)
389
+ r1.extend(GenericConstraint1)
390
+ else
391
+ @index = i1
392
+ r1 = nil
393
+ end
394
+ if r1
395
+ r0 = r1
396
+ else
397
+ r12 = _nt_variance_constraint
398
+ if r12
399
+ r0 = r12
400
+ else
401
+ @index = i0
402
+ r0 = nil
403
+ end
404
+ end
405
+
406
+ node_cache[:generic_constraint][start_index] = r0
407
+
408
+ r0
409
+ end
410
+
411
+ module VarianceConstraint0
412
+ def constant
413
+ elements[0]
414
+ end
415
+
416
+ end
417
+
418
+ module VarianceConstraint1
419
+ def type
420
+ result = constant.type
421
+ result.variance = :invariant
422
+ result
423
+ end
424
+ end
425
+
426
+ module VarianceConstraint2
427
+ def constant
428
+ elements[0]
429
+ end
430
+
431
+ end
432
+
433
+ module VarianceConstraint3
434
+ def type
435
+ result = constant.type
436
+ result.variance = :contravariant
437
+ result
438
+ end
439
+ end
440
+
441
+ def _nt_variance_constraint
442
+ start_index = index
443
+ if node_cache[:variance_constraint].has_key?(index)
444
+ cached = node_cache[:variance_constraint][index]
445
+ if cached
446
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
447
+ @index = cached.interval.end
448
+ end
449
+ return cached
450
+ end
451
+
452
+ i0 = index
453
+ i1, s1 = index, []
454
+ r2 = _nt_constant
455
+ s1 << r2
456
+ if r2
457
+ if has_terminal?("=", false, index)
458
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
459
+ @index += 1
460
+ else
461
+ terminal_parse_failure("=")
462
+ r3 = nil
463
+ end
464
+ s1 << r3
465
+ if r3
466
+ i4 = index
467
+ if has_terminal?('>', false, index)
468
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
469
+ @index += 1
470
+ else
471
+ terminal_parse_failure('>')
472
+ r5 = nil
473
+ end
474
+ if r5
475
+ r4 = nil
476
+ else
477
+ @index = i4
478
+ r4 = instantiate_node(SyntaxNode,input, index...index)
479
+ end
480
+ s1 << r4
481
+ end
482
+ end
483
+ if s1.last
484
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
485
+ r1.extend(VarianceConstraint0)
486
+ r1.extend(VarianceConstraint1)
487
+ else
488
+ @index = i1
489
+ r1 = nil
490
+ end
491
+ if r1
492
+ r0 = r1
493
+ else
494
+ i6, s6 = index, []
495
+ r7 = _nt_constant
496
+ s6 << r7
497
+ if r7
498
+ if has_terminal?("-", false, index)
499
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
500
+ @index += 1
501
+ else
502
+ terminal_parse_failure("-")
503
+ r8 = nil
504
+ end
505
+ s6 << r8
506
+ end
507
+ if s6.last
508
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
509
+ r6.extend(VarianceConstraint2)
510
+ r6.extend(VarianceConstraint3)
511
+ else
512
+ @index = i6
513
+ r6 = nil
514
+ end
515
+ if r6
516
+ r0 = r6
517
+ else
518
+ r9 = _nt_constant
519
+ if r9
520
+ r0 = r9
521
+ else
522
+ @index = i0
523
+ r0 = nil
524
+ end
525
+ end
526
+ end
527
+
528
+ node_cache[:variance_constraint][start_index] = r0
529
+
530
+ r0
531
+ end
532
+
533
+ module Constant0
534
+ def type
535
+ Types::BOOLEAN
536
+ end
537
+ end
538
+
539
+ module Constant1
540
+ end
541
+
542
+ module Constant2
543
+ def type
544
+ Types::ClassType.new(text_value, :covariant)
545
+ end
546
+ end
547
+
548
+ def _nt_constant
549
+ start_index = index
550
+ if node_cache[:constant].has_key?(index)
551
+ cached = node_cache[:constant][index]
552
+ if cached
553
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
554
+ @index = cached.interval.end
555
+ end
556
+ return cached
557
+ end
558
+
559
+ i0 = index
560
+ if has_terminal?('Boolean', false, index)
561
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
562
+ r1.extend(Constant0)
563
+ @index += 7
564
+ else
565
+ terminal_parse_failure('Boolean')
566
+ r1 = nil
567
+ end
568
+ if r1
569
+ r0 = r1
570
+ else
571
+ s2, i2 = [], index
572
+ loop do
573
+ i3, s3 = index, []
574
+ if has_terminal?('::', false, index)
575
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 2))
576
+ @index += 2
577
+ else
578
+ terminal_parse_failure('::')
579
+ r5 = nil
580
+ end
581
+ if r5
582
+ r4 = r5
583
+ else
584
+ r4 = instantiate_node(SyntaxNode,input, index...index)
585
+ end
586
+ s3 << r4
587
+ if r4
588
+ if has_terminal?('\G[A-Z]', true, index)
589
+ r6 = true
590
+ @index += 1
591
+ else
592
+ r6 = nil
593
+ end
594
+ s3 << r6
595
+ if r6
596
+ s7, i7 = [], index
597
+ loop do
598
+ if has_terminal?('\G[A-Za-z_]', true, index)
599
+ r8 = true
600
+ @index += 1
601
+ else
602
+ r8 = nil
603
+ end
604
+ if r8
605
+ s7 << r8
606
+ else
607
+ break
608
+ end
609
+ end
610
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
611
+ s3 << r7
612
+ end
613
+ end
614
+ if s3.last
615
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
616
+ r3.extend(Constant1)
617
+ else
618
+ @index = i3
619
+ r3 = nil
620
+ end
621
+ if r3
622
+ s2 << r3
623
+ else
624
+ break
625
+ end
626
+ end
627
+ if s2.empty?
628
+ @index = i2
629
+ r2 = nil
630
+ else
631
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
632
+ r2.extend(Constant2)
633
+ end
634
+ if r2
635
+ r0 = r2
636
+ else
637
+ @index = i0
638
+ r0 = nil
639
+ end
640
+ end
641
+
642
+ node_cache[:constant][start_index] = r0
643
+
644
+ r0
645
+ end
646
+
647
+ end
648
+
649
+ class ClassParser < Treetop::Runtime::CompiledParser
650
+ include Class
651
+ end
652
+
653
+ end
654
+ end