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,111 @@
1
+ #
2
+ # cgi/session/pstore.rb - persistent storage of marshalled session data
3
+ #
4
+ # Documentation: William Webber (william@williamwebber.com)
5
+ #
6
+ # == Overview
7
+ #
8
+ # This file provides the CGI::Session::PStore class, which builds
9
+ # persistent of session data on top of the pstore library. See
10
+ # cgi/session.rb for more details on session storage managers.
11
+
12
+ require 'cgi/session'
13
+ require 'pstore'
14
+
15
+ class CGI
16
+ class Session
17
+ # PStore-based session storage class.
18
+ #
19
+ # This builds upon the top-level PStore class provided by the
20
+ # library file pstore.rb. Session data is marshalled and stored
21
+ # in a file. File locking and transaction services are provided.
22
+ class PStore
23
+ # Create a new CGI::Session::PStore instance
24
+ #
25
+ # This constructor is used internally by CGI::Session. The
26
+ # user does not generally need to call it directly.
27
+ #
28
+ # +session+ is the session for which this instance is being
29
+ # created. The session id must only contain alphanumeric
30
+ # characters; automatically generated session ids observe
31
+ # this requirement.
32
+ #
33
+ # +option+ is a hash of options for the initializer. The
34
+ # following options are recognised:
35
+ #
36
+ # tmpdir:: the directory to use for storing the PStore
37
+ # file. Defaults to Dir::tmpdir (generally "/tmp"
38
+ # on Unix systems).
39
+ # prefix:: the prefix to add to the session id when generating
40
+ # the filename for this session's PStore file.
41
+ # Defaults to the empty string.
42
+ #
43
+ # This session's PStore file will be created if it does
44
+ # not exist, or opened if it does.
45
+ def initialize(session, option={})
46
+ dir = option['tmpdir'] || Dir::tmpdir
47
+ prefix = option['prefix'] || ''
48
+ id = session.session_id
49
+ require 'digest/md5'
50
+ md5 = Digest::MD5.hexdigest(id)[0,16]
51
+ path = dir+"/"+prefix+md5
52
+ path.untaint
53
+ if File::exist?(path)
54
+ @hash = nil
55
+ else
56
+ unless session.new_session
57
+ raise CGI::Session::NoSession, "uninitialized session"
58
+ end
59
+ @hash = {}
60
+ end
61
+ @p = ::PStore.new(path)
62
+ @p.transaction do |p|
63
+ File.chmod(0600, p.path)
64
+ end
65
+ end
66
+
67
+ # Restore session state from the session's PStore file.
68
+ #
69
+ # Returns the session state as a hash.
70
+ def restore
71
+ unless @hash
72
+ @p.transaction do
73
+ @hash = @p['hash'] || {}
74
+ end
75
+ end
76
+ @hash
77
+ end
78
+
79
+ # Save session state to the session's PStore file.
80
+ def update
81
+ @p.transaction do
82
+ @p['hash'] = @hash
83
+ end
84
+ end
85
+
86
+ # Update and close the session's PStore file.
87
+ def close
88
+ update
89
+ end
90
+
91
+ # Close and delete the session's PStore file.
92
+ def delete
93
+ path = @p.path
94
+ File::unlink path
95
+ end
96
+
97
+ end
98
+ end
99
+ end
100
+
101
+ if $0 == __FILE__
102
+ # :enddoc:
103
+ STDIN.reopen("/dev/null")
104
+ cgi = CGI.new
105
+ session = CGI::Session.new(cgi, 'database_manager' => CGI::Session::PStore)
106
+ session['key'] = {'k' => 'v'}
107
+ puts session['key'].class
108
+ fail unless Hash === session['key']
109
+ puts session['key'].inspect
110
+ fail unless session['key'].inspect == '{"k"=>"v"}'
111
+ end
@@ -0,0 +1,188 @@
1
+ class CGI
2
+ @@accept_charset="UTF-8" unless defined?(@@accept_charset)
3
+ # URL-encode a string.
4
+ # url_encoded_string = CGI::escape("'Stop!' said Fred")
5
+ # # => "%27Stop%21%27+said+Fred"
6
+ def CGI::escape(string)
7
+ string.gsub(/([^ a-zA-Z0-9_.-]+)/) do
8
+ '%' + $1.unpack('H2' * $1.bytesize).join('%').upcase
9
+ end.tr(' ', '+')
10
+ end
11
+
12
+
13
+ # URL-decode a string with encoding(optional).
14
+ # string = CGI::unescape("%27Stop%21%27+said+Fred")
15
+ # # => "'Stop!' said Fred"
16
+ def CGI::unescape(string,encoding=@@accept_charset)
17
+ str=string.tr('+', ' ').force_encoding(Encoding::ASCII_8BIT).gsub(/((?:%[0-9a-fA-F]{2})+)/) do
18
+ [$1.delete('%')].pack('H*')
19
+ end.force_encoding(encoding)
20
+ str.valid_encoding? ? str : str.force_encoding(string.encoding)
21
+ end
22
+
23
+ TABLE_FOR_ESCAPE_HTML__ = {
24
+ '&' => '&',
25
+ '"' => '"',
26
+ '<' => '&lt;',
27
+ '>' => '&gt;',
28
+ }
29
+
30
+ # Escape special characters in HTML, namely &\"<>
31
+ # CGI::escapeHTML('Usage: foo "bar" <baz>')
32
+ # # => "Usage: foo &quot;bar&quot; &lt;baz&gt;"
33
+ def CGI::escapeHTML(string)
34
+ string.gsub(/[&\"<>]/, TABLE_FOR_ESCAPE_HTML__)
35
+ end
36
+
37
+
38
+ # Unescape a string that has been HTML-escaped
39
+ # CGI::unescapeHTML("Usage: foo &quot;bar&quot; &lt;baz&gt;")
40
+ # # => "Usage: foo \"bar\" <baz>"
41
+ def CGI::unescapeHTML(string)
42
+ enc = string.encoding
43
+ if [Encoding::UTF_16BE, Encoding::UTF_16LE, Encoding::UTF_32BE, Encoding::UTF_32LE].include?(enc)
44
+ return string.gsub(Regexp.new('&(amp|quot|gt|lt|#[0-9]+|#x[0-9A-Fa-f]+);'.encode(enc))) do
45
+ case $1.encode("US-ASCII")
46
+ when 'amp' then '&'.encode(enc)
47
+ when 'quot' then '"'.encode(enc)
48
+ when 'gt' then '>'.encode(enc)
49
+ when 'lt' then '<'.encode(enc)
50
+ when /\A#0*(\d+)\z/ then $1.to_i.chr(enc)
51
+ when /\A#x([0-9a-f]+)\z/i then $1.hex.chr(enc)
52
+ end
53
+ end
54
+ end
55
+ asciicompat = Encoding.compatible?(string, "a")
56
+ string.gsub(/&(amp|quot|gt|lt|\#[0-9]+|\#x[0-9A-Fa-f]+);/) do
57
+ match = $1.dup
58
+ case match
59
+ when 'amp' then '&'
60
+ when 'quot' then '"'
61
+ when 'gt' then '>'
62
+ when 'lt' then '<'
63
+ when /\A#0*(\d+)\z/
64
+ n = $1.to_i
65
+ if enc == Encoding::UTF_8 or
66
+ enc == Encoding::ISO_8859_1 && n < 256 or
67
+ asciicompat && n < 128
68
+ n.chr(enc)
69
+ else
70
+ "&##{$1};"
71
+ end
72
+ when /\A#x([0-9a-f]+)\z/i
73
+ n = $1.hex
74
+ if enc == Encoding::UTF_8 or
75
+ enc == Encoding::ISO_8859_1 && n < 256 or
76
+ asciicompat && n < 128
77
+ n.chr(enc)
78
+ else
79
+ "&#x#{$1};"
80
+ end
81
+ else
82
+ "&#{match};"
83
+ end
84
+ end
85
+ end
86
+ def CGI::escape_html(str)
87
+ escapeHTML(str)
88
+ end
89
+ def CGI::unescape_html(str)
90
+ unescapeHTML(str)
91
+ end
92
+
93
+ # Escape only the tags of certain HTML elements in +string+.
94
+ #
95
+ # Takes an element or elements or array of elements. Each element
96
+ # is specified by the name of the element, without angle brackets.
97
+ # This matches both the start and the end tag of that element.
98
+ # The attribute list of the open tag will also be escaped (for
99
+ # instance, the double-quotes surrounding attribute values).
100
+ #
101
+ # print CGI::escapeElement('<BR><A HREF="url"></A>', "A", "IMG")
102
+ # # "<BR>&lt;A HREF=&quot;url&quot;&gt;&lt;/A&gt"
103
+ #
104
+ # print CGI::escapeElement('<BR><A HREF="url"></A>', ["A", "IMG"])
105
+ # # "<BR>&lt;A HREF=&quot;url&quot;&gt;&lt;/A&gt"
106
+ def CGI::escapeElement(string, *elements)
107
+ elements = elements[0] if elements[0].kind_of?(Array)
108
+ unless elements.empty?
109
+ string.gsub(/<\/?(?:#{elements.join("|")})(?!\w)(?:.|\n)*?>/i) do
110
+ CGI::escapeHTML($&)
111
+ end
112
+ else
113
+ string
114
+ end
115
+ end
116
+
117
+
118
+ # Undo escaping such as that done by CGI::escapeElement()
119
+ #
120
+ # print CGI::unescapeElement(
121
+ # CGI::escapeHTML('<BR><A HREF="url"></A>'), "A", "IMG")
122
+ # # "&lt;BR&gt;<A HREF="url"></A>"
123
+ #
124
+ # print CGI::unescapeElement(
125
+ # CGI::escapeHTML('<BR><A HREF="url"></A>'), ["A", "IMG"])
126
+ # # "&lt;BR&gt;<A HREF="url"></A>"
127
+ def CGI::unescapeElement(string, *elements)
128
+ elements = elements[0] if elements[0].kind_of?(Array)
129
+ unless elements.empty?
130
+ string.gsub(/&lt;\/?(?:#{elements.join("|")})(?!\w)(?:.|\n)*?&gt;/i) do
131
+ CGI::unescapeHTML($&)
132
+ end
133
+ else
134
+ string
135
+ end
136
+ end
137
+ def CGI::escape_element(str)
138
+ escapeElement(str)
139
+ end
140
+ def CGI::unescape_element(str)
141
+ unescapeElement(str)
142
+ end
143
+
144
+ # Abbreviated day-of-week names specified by RFC 822
145
+ RFC822_DAYS = %w[ Sun Mon Tue Wed Thu Fri Sat ]
146
+
147
+ # Abbreviated month names specified by RFC 822
148
+ RFC822_MONTHS = %w[ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ]
149
+
150
+ # Format a +Time+ object as a String using the format specified by RFC 1123.
151
+ #
152
+ # CGI::rfc1123_date(Time.now)
153
+ # # Sat, 01 Jan 2000 00:00:00 GMT
154
+ def CGI::rfc1123_date(time)
155
+ t = time.clone.gmtime
156
+ return format("%s, %.2d %s %.4d %.2d:%.2d:%.2d GMT",
157
+ RFC822_DAYS[t.wday], t.day, RFC822_MONTHS[t.month-1], t.year,
158
+ t.hour, t.min, t.sec)
159
+ end
160
+
161
+ # Prettify (indent) an HTML string.
162
+ #
163
+ # +string+ is the HTML string to indent. +shift+ is the indentation
164
+ # unit to use; it defaults to two spaces.
165
+ #
166
+ # print CGI::pretty("<HTML><BODY></BODY></HTML>")
167
+ # # <HTML>
168
+ # # <BODY>
169
+ # # </BODY>
170
+ # # </HTML>
171
+ #
172
+ # print CGI::pretty("<HTML><BODY></BODY></HTML>", "\t")
173
+ # # <HTML>
174
+ # # <BODY>
175
+ # # </BODY>
176
+ # # </HTML>
177
+ #
178
+ def CGI::pretty(string, shift = " ")
179
+ lines = string.gsub(/(?!\A)<.*?>/m, "\n\\0").gsub(/<.*?>(?!\n)/m, "\\0\n")
180
+ end_pos = 0
181
+ while end_pos = lines.index(/^<\/(\w+)/, end_pos)
182
+ element = $1.dup
183
+ start_pos = lines.rindex(/^\s*<#{element}/i, end_pos)
184
+ lines[start_pos ... end_pos] = "__" + lines[start_pos ... end_pos].gsub(/\n(?!\z)/, "\n" + shift) + "__"
185
+ end
186
+ lines.gsub(/^((?:#{Regexp::quote(shift)})*)__(?=<\/?\w)/, '\1')
187
+ end
188
+ end
@@ -0,0 +1,333 @@
1
+ class Class < Module
2
+ # special: true
3
+ # pure: true
4
+ def self.new(superklass=Object)
5
+ end
6
+ def new(*args)
7
+ result = allocate
8
+ result.send(:initialize, *args)
9
+ result
10
+ end
11
+ # pure: true
12
+ # builtin: true
13
+ def superclass
14
+ end
15
+ end
16
+ class String
17
+ end
18
+ class Symbol
19
+ end
20
+ class Array
21
+ # builtin: true
22
+ # returns: Array
23
+ def self.new(arg1=0, val=nil)
24
+ end
25
+ end
26
+ class Proc
27
+ end
28
+ class Hash
29
+ end
30
+ # Still not sure why this exists.
31
+ class Data
32
+ end
33
+ #
34
+ RUBY_VERSION = '1.9.2'
35
+ $/ = "\n"
36
+ ENV = {"RUBY_VERSION"=>"ruby-1.9.2-p136"}
37
+
38
+ class << self
39
+ # special: true
40
+ def private(*args)
41
+ end
42
+ # special: true
43
+ def public(*args)
44
+ end
45
+ end
46
+ class Module
47
+ # special: true
48
+ # pure: true
49
+ def self.new
50
+ end
51
+ # special: true
52
+ def module_eval(text, filename='(eval)', line=1)
53
+ end
54
+ # pure: true
55
+ # raises: never
56
+ # builtin: true
57
+ # returns: String
58
+ def name
59
+ end
60
+ # pure: true
61
+ # raises: never
62
+ # builtin: true
63
+ # returns: Boolean
64
+ def ===(other)
65
+ end
66
+ # pure: true
67
+ # builtin: true
68
+ def instance_method(name)
69
+ end
70
+ # pure: true
71
+ # builtin: true
72
+ def method_defined?(name)
73
+ end
74
+ # pure: true
75
+ # builtin: true
76
+ def instance_methods(include_super = true)
77
+ end
78
+ # pure: true
79
+ # builtin: true
80
+ def public_instance_method(name)
81
+ end
82
+ # pure: true
83
+ # builtin: true
84
+ def public_instance_methods(include_super = true)
85
+ end
86
+ # pure: true
87
+ # builtin: true
88
+ def protected_instance_methods(include_super = true)
89
+ end
90
+ # pure: true
91
+ # builtin: true
92
+ def private_instance_methods(include_super = true)
93
+ end
94
+ # special: true
95
+ # mutation: true
96
+ # yield_usage: optional
97
+ def define_method(name, body=nil)
98
+ end
99
+ # builtin: true
100
+ # mutation: true
101
+ def remove_method(name)
102
+ end
103
+ # builtin: true
104
+ # mutation: true
105
+ def undef_method(name)
106
+ end
107
+ # builtin: true
108
+ # mutation: true
109
+ def const_set(sym, val)
110
+ end
111
+ # builtin: true
112
+ def const_defined?(sym, inherit=true)
113
+ end
114
+ # builtin: true
115
+ def const_get(sym, inherit=true)
116
+ end
117
+ # builtin: true
118
+ # mutation: true
119
+ def private(*args)
120
+ end
121
+ private :private
122
+ private
123
+ # builtin: true
124
+ # mutation: true
125
+ def include(*mods)
126
+ end
127
+ # builtin: true
128
+ # mutation: true
129
+ def extend(*mods)
130
+ end
131
+ # builtin: true
132
+ # mutation: true
133
+ def public(*args)
134
+ end
135
+ # builtin: true
136
+ # mutation: true
137
+ def protected(*args)
138
+ end
139
+ # pure: true
140
+ def attr_reader(*syms)
141
+ syms.each do |sym|
142
+ module_eval("def #{sym}; @#{sym}; end")
143
+ end
144
+ end
145
+ # pure: true
146
+ def attr_writer(*syms)
147
+ syms.each do |sym|
148
+ module_eval("def #{sym}=(val); @#{sym} = val; end")
149
+ end
150
+ end
151
+ # pure: true
152
+ def attr_accessor(*syms)
153
+ attr_reader(*syms)
154
+ attr_writer(*syms)
155
+ end
156
+ # builtin: true
157
+ # mutation: true
158
+ def module_function(*args)
159
+ end
160
+ # builtin: true
161
+ # mutation: true
162
+ # returns: Module
163
+ def alias_method(to, from)
164
+ end
165
+ end
166
+ module Kernel
167
+ # pure: true
168
+ # builtin: true
169
+ # raises: never
170
+ def eql?(other)
171
+ end
172
+ # pure: true
173
+ # builtin: true
174
+ # raises: never
175
+ def equal?(other)
176
+ end
177
+ # builtin: true
178
+ # klass: Module
179
+ # raises: never
180
+ def is_a?(klass)
181
+ end
182
+ alias kind_of? is_a?
183
+ # pure: true
184
+ # raises: never
185
+ # builtin: true
186
+ def singleton_class
187
+ end
188
+ # pure: true
189
+ # raises: never
190
+ # builtin: true
191
+ # returns: Class=
192
+ def class
193
+ end
194
+ # pure: true
195
+ # raises: never
196
+ def inspect
197
+ end
198
+ # builtin: true
199
+ def instance_variable_get(name)
200
+ end
201
+ # builtin: true
202
+ def instance_variable_defined?(name)
203
+ end
204
+ # builtin: true
205
+ def instance_variable_set(name, val)
206
+ end
207
+ private
208
+ # yield_usage: required
209
+ def proc
210
+ unless block_given?
211
+ raise ArgumentError.new('tried to create Proc object without a block')
212
+ end
213
+ Proc.new
214
+ end
215
+ # special: true
216
+ def require(path)
217
+ end
218
+ # raises: never
219
+ def p(*args)
220
+ args
221
+ end
222
+ def eval(string, bndg = nil, filename = nil, lineno = nil)
223
+ end
224
+ def autoload(sym, path)
225
+ end
226
+ alias fail raise
227
+ # predictable: false
228
+ # returns: String=
229
+ # raises: maybe
230
+ def gets(opt_arg_1 = :__unset__, opt_arg_2 = :__unset__)
231
+ end
232
+ # predictable: false
233
+ def puts(*to_put)
234
+ end
235
+ # returns: Boolean
236
+ # raises: never
237
+ def block_given?
238
+ end
239
+ alias iterator? block_given?
240
+ # builtin: true
241
+ # raises: never
242
+ # pure: false
243
+ # predictable: false
244
+ # overload: () -> Float
245
+ # overload: Fixnum= -> Fixnum= | Bignum=
246
+ # overload: Bignum= -> Fixnum= | Bignum=
247
+ def rand(n=nil)
248
+ end
249
+ end
250
+
251
+ require 'basic_object'
252
+ require 'nil_false_true'
253
+ require 'exceptions'
254
+ require 'comparable'
255
+ require 'enumerable'
256
+ require 'array'
257
+ require 'string'
258
+ require 'symbol'
259
+ require 'numbers'
260
+ require '_thread'
261
+
262
+ class Range
263
+ # this is here because early in testing Class#new wasn't smart about purity.
264
+ # pure: true
265
+ # builtin: true
266
+ def self.new(start, stop, exclusive=false)
267
+ end
268
+
269
+ # pure: true
270
+ # builtin: true
271
+ def initialize(start, stop, exclusive=false)
272
+ end
273
+
274
+ # pure: true
275
+ # builtin: true
276
+ def to_a
277
+ end
278
+ end
279
+ require 'proc'
280
+ require 'hash'
281
+ class Symbol
282
+ end
283
+ class Regexp
284
+ # pure: true
285
+ # builtin: true
286
+ def self.new(body, opts=nil)
287
+ end
288
+ end
289
+
290
+ class Encoding
291
+ end
292
+ class Encoding::UndefinedConversionError < EncodingError
293
+ end
294
+ class Encoding::InvalidByteSequenceError < EncodingError
295
+ end
296
+ class Encoding::ConverterNotFoundError < EncodingError
297
+ end
298
+ class Encoding::CompatibilityError < EncodingError
299
+ end
300
+
301
+ class Struct
302
+ end
303
+
304
+ class IO
305
+ # predictable: false
306
+ def read(len=nil)
307
+ end
308
+ end
309
+
310
+ class File < IO
311
+ end
312
+
313
+ class Time
314
+ def self.at(x)
315
+ end
316
+ def self.gm(first, *rest)
317
+ end
318
+ def self.local(first, *rest)
319
+ end
320
+ class << self
321
+ alias mktime local
322
+ end
323
+ # predictable: false
324
+ def self.now
325
+ new
326
+ end
327
+ end
328
+
329
+
330
+ # ARGV: [String]
331
+ ARGV = []
332
+ # DATA: File | NilClass
333
+ DATA = nil