rhodes 3.1.1 → 3.2.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2987) hide show
  1. data/CHANGELOG +5 -2
  2. data/doc/alert-api.txt +51 -0
  3. data/doc/build.txt +52 -43
  4. data/doc/configuration.txt +9 -5
  5. data/doc/connect-to-web-services.txt +4 -4
  6. data/doc/device-caps.txt +80 -28
  7. data/doc/extensions.txt +1 -1
  8. data/doc/install.txt +1 -1
  9. data/doc/introduction.txt +1 -1
  10. data/doc/rhodes-api.txt +62 -62
  11. data/doc/rhom.txt +36 -23
  12. data/doc/{rhodes-api/ringtonemanager-api.txt → ringtonemanager-api.txt} +0 -0
  13. data/doc/scanner.txt +507 -0
  14. data/doc/simulator.txt +6 -1
  15. data/doc/synchronization.txt +32 -27
  16. data/doc/{rhodes-api/timer-api.txt → timer-api.txt} +1 -1
  17. data/doc/tutorial.txt +8 -8
  18. data/installer/OLD-README.html +81 -0
  19. data/installer/README.html +6 -4
  20. data/installer/RHOSTUDIO-LICENSE.txt +675 -0
  21. data/installer/rhostudio.nsi +147 -20
  22. data/lib/build/compileRB/compileRB.rb +5 -2
  23. data/lib/build/jake.rb +3 -2
  24. data/lib/extensions/barcode/ext/barcode/platform/android/Rakefile +1 -1
  25. data/lib/extensions/barcode/ext/barcode/platform/bb/Rakefile +1 -1
  26. data/lib/extensions/barcode/ext/barcode/shared/ruby/barcode_wrap.c +391 -111
  27. data/lib/extensions/digest-md5/ext/Rakefile +1 -1
  28. data/lib/extensions/digest-sha1/ext/Rakefile +1 -1
  29. data/lib/extensions/digest/ext/Rakefile +1 -1
  30. data/lib/extensions/fcntl/ext/Rakefile +1 -1
  31. data/lib/extensions/mspec/mspec/expectations/expectations.rb +4 -4
  32. data/lib/extensions/mspec/mspec/expectations/should.rb +9 -8
  33. data/lib/extensions/mspec/mspec/guards.rb +3 -0
  34. data/lib/extensions/mspec/mspec/guards/conflict.rb +7 -2
  35. data/lib/extensions/mspec/mspec/guards/endian.rb +7 -10
  36. data/lib/extensions/mspec/mspec/guards/feature.rb +47 -0
  37. data/lib/extensions/mspec/mspec/guards/guard.rb +18 -13
  38. data/lib/extensions/mspec/mspec/guards/platform.rb +4 -0
  39. data/lib/extensions/mspec/mspec/guards/specified.rb +66 -0
  40. data/lib/extensions/mspec/mspec/guards/user.rb +17 -0
  41. data/lib/extensions/mspec/mspec/helpers.rb +6 -4
  42. data/lib/extensions/mspec/mspec/helpers/const_lookup.rb +2 -1
  43. data/lib/extensions/mspec/mspec/helpers/datetime.rb +30 -0
  44. data/lib/extensions/mspec/mspec/helpers/ducktype.rb +4 -4
  45. data/lib/extensions/mspec/mspec/helpers/encode.rb +21 -0
  46. data/lib/extensions/mspec/mspec/helpers/environment.rb +13 -9
  47. data/lib/extensions/mspec/mspec/helpers/fixture.rb +2 -1
  48. data/lib/extensions/mspec/mspec/helpers/flunk.rb +1 -1
  49. data/lib/extensions/mspec/mspec/helpers/fmode.rb +15 -0
  50. data/lib/extensions/mspec/mspec/helpers/io.rb +21 -2
  51. data/lib/extensions/mspec/mspec/helpers/language_version.rb +13 -3
  52. data/lib/extensions/mspec/mspec/helpers/numeric.rb +89 -0
  53. data/lib/extensions/mspec/mspec/helpers/ruby_exe.rb +138 -123
  54. data/lib/extensions/mspec/mspec/helpers/singleton_class.rb +7 -0
  55. data/lib/extensions/mspec/mspec/helpers/stasy.rb +33 -0
  56. data/lib/extensions/mspec/mspec/helpers/tmp.rb +34 -26
  57. data/lib/extensions/mspec/mspec/matchers.rb +9 -0
  58. data/lib/extensions/mspec/mspec/matchers/base.rb +14 -14
  59. data/lib/extensions/mspec/mspec/matchers/be_computed_by.rb +36 -0
  60. data/lib/extensions/mspec/mspec/matchers/be_computed_by_function.rb +35 -0
  61. data/lib/extensions/mspec/mspec/matchers/be_valid_dns_name.rb +24 -0
  62. data/lib/extensions/mspec/mspec/matchers/equal_utf16.rb +5 -7
  63. data/lib/extensions/mspec/mspec/matchers/have_class_variable.rb +12 -0
  64. data/lib/extensions/mspec/mspec/matchers/have_constant.rb +6 -24
  65. data/lib/extensions/mspec/mspec/matchers/have_data.rb +49 -0
  66. data/lib/extensions/mspec/mspec/matchers/have_instance_method.rb +1 -1
  67. data/lib/extensions/mspec/mspec/matchers/have_instance_variable.rb +12 -0
  68. data/lib/extensions/mspec/mspec/matchers/have_method.rb +1 -1
  69. data/lib/extensions/mspec/mspec/matchers/have_private_instance_method.rb +1 -1
  70. data/lib/extensions/mspec/mspec/matchers/have_private_method.rb +24 -0
  71. data/lib/extensions/mspec/mspec/matchers/have_protected_instance_method.rb +24 -0
  72. data/lib/extensions/mspec/mspec/matchers/have_public_instance_method.rb +1 -1
  73. data/lib/extensions/mspec/mspec/matchers/have_singleton_method.rb +24 -0
  74. data/lib/extensions/mspec/mspec/matchers/output_to_fd.rb +71 -71
  75. data/lib/extensions/mspec/mspec/matchers/raise_error.rb +4 -3
  76. data/lib/extensions/mspec/mspec/matchers/stringsymboladapter.rb +1 -1
  77. data/lib/extensions/mspec/mspec/matchers/variable.rb +28 -0
  78. data/lib/extensions/mspec/mspec/mocks/mock.rb +102 -60
  79. data/lib/extensions/mspec/mspec/mocks/object.rb +5 -1
  80. data/lib/extensions/mspec/mspec/mocks/proxy.rb +41 -6
  81. data/lib/extensions/mspec/mspec/runner.rb +1 -0
  82. data/lib/extensions/mspec/mspec/runner/actions/debug.rb +2 -0
  83. data/lib/extensions/mspec/mspec/runner/context.rb +58 -13
  84. data/lib/extensions/mspec/mspec/runner/exception.rb +7 -6
  85. data/lib/extensions/mspec/mspec/runner/formatters.rb +1 -0
  86. data/lib/extensions/mspec/mspec/runner/formatters/dotted.rb +15 -3
  87. data/lib/extensions/mspec/mspec/runner/formatters/profile.rb +70 -0
  88. data/lib/extensions/mspec/mspec/runner/mspec.rb +32 -19
  89. data/lib/extensions/mspec/mspec/runner/object.rb +4 -0
  90. data/lib/extensions/mspec/mspec/runner/shared.rb +1 -1
  91. data/lib/extensions/mspec/mspec/utils/name_map.rb +8 -1
  92. data/lib/extensions/mspec/mspec/utils/options.rb +25 -8
  93. data/lib/extensions/mspec/mspec/utils/ruby_name.rb +1 -1
  94. data/lib/extensions/mspec/mspec/utils/script.rb +4 -4
  95. data/lib/extensions/mspec/mspec/version.rb +1 -1
  96. data/lib/extensions/nfc/ext/nfc/platform/android/Rakefile +1 -1
  97. data/lib/extensions/nfc/ext/nfc/shared/ruby/nfc_wrap.c +427 -149
  98. data/lib/extensions/set/tsort.rb +242 -0
  99. data/lib/extensions/thread/monitor.rb +277 -0
  100. data/lib/extensions/thread/thread.rb +357 -0
  101. data/lib/framework/base64.rb +4 -4
  102. data/lib/framework/date/format.rb +36 -64
  103. data/lib/framework/dateOrig.rb +40 -23
  104. data/lib/framework/ostruct.rb +14 -8
  105. data/lib/framework/rational.rb +2 -2
  106. data/lib/framework/rbconfig.rb +71 -0
  107. data/lib/framework/rho/rho.rb +46 -43
  108. data/lib/framework/rho/rhocontact.rb +60 -36
  109. data/lib/framework/rho/rhofsconnector.rb +2 -2
  110. data/lib/framework/rho/rhoutils.rb +10 -6
  111. data/lib/framework/rhodes.rb +1 -1
  112. data/lib/framework/rhoframework.rb +0 -13
  113. data/lib/framework/rhom/rhom.rb +64 -1
  114. data/lib/framework/rhom/rhom_object_factory.rb +4 -4
  115. data/lib/framework/rhosystem.rb +27 -25
  116. data/lib/framework/time.rb +48 -16
  117. data/lib/framework/version.rb +1 -1
  118. data/lib/rhodes.rb +1 -1
  119. data/lib/test/framework_test.rb +1 -1
  120. data/platform/android/Rhodes/AndroidManifest.xml +35 -9
  121. data/platform/android/Rhodes/default.properties +1 -1
  122. data/platform/android/Rhodes/jni/Android.mk +5 -4
  123. data/platform/android/Rhodes/jni/include/rhodes.h +65 -3
  124. data/platform/android/Rhodes/jni/include/rhodes/JNIRhodes.h +3 -1
  125. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_geolocation_GeoLocationImpl.h +12 -2
  126. data/platform/android/Rhodes/jni/src/callbacks.cpp +6 -2
  127. data/platform/android/Rhodes/jni/src/event.cpp +60 -1
  128. data/platform/android/Rhodes/jni/src/geolocation.cpp +42 -13
  129. data/platform/android/Rhodes/jni/src/mapview.cpp +169 -42
  130. data/platform/android/Rhodes/jni/src/phonebook.cpp +90 -74
  131. data/platform/android/Rhodes/jni/src/rhodes.cpp +91 -3
  132. data/platform/android/Rhodes/jni/src/rhodesapp.cpp +1 -1
  133. data/platform/android/Rhodes/res/drawable/callout_a1.png +0 -0
  134. data/platform/android/Rhodes/res/drawable/callout_a2.png +0 -0
  135. data/platform/android/Rhodes/res/drawable/callout_a3.png +0 -0
  136. data/platform/android/Rhodes/res/drawable/callout_b1.png +0 -0
  137. data/platform/android/Rhodes/res/drawable/callout_b2.png +0 -0
  138. data/platform/android/Rhodes/res/drawable/callout_b3.png +0 -0
  139. data/platform/android/Rhodes/res/drawable/callout_c1.png +0 -0
  140. data/platform/android/Rhodes/res/drawable/callout_c2.png +0 -0
  141. data/platform/android/Rhodes/res/drawable/callout_c3.png +0 -0
  142. data/platform/android/Rhodes/res/drawable/callout_d.png +0 -0
  143. data/platform/android/Rhodes/res/drawable/google.png +0 -0
  144. data/platform/android/Rhodes/res/drawable/location.png +0 -0
  145. data/platform/android/Rhodes/src/com/rhomobile/rhodes/AndroidR.java +12 -0
  146. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesActivity.java +44 -21
  147. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +12 -25
  148. data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/PopupActivity.java +2 -1
  149. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothDeviceListActivity.java +2 -1
  150. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/CameraSettings.java +11 -0
  151. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCapture.java +13 -3
  152. data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/Event.java +7 -0
  153. data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/EventStore.java +127 -37
  154. data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocation.java +69 -23
  155. data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java +287 -124
  156. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/Annotation.java +6 -0
  157. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/AnnotationsOverlay.java +57 -6
  158. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/Callout.java +296 -0
  159. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/CalloutOverlay.java +143 -0
  160. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/GoogleMapView.java +109 -3
  161. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/MapView.java +53 -5
  162. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Contact.java +16 -119
  163. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessor.java +4 -1
  164. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorNew.java +284 -120
  165. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorOld.java +58 -23
  166. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Phonebook.java +42 -77
  167. data/platform/android/Rhodes/src/com/rhomobile/rhodes/util/PerformOnUiThread.java +1 -1
  168. data/platform/android/build/RhodesSRC_build.files +2 -0
  169. data/platform/android/build/android.rake +90 -40
  170. data/platform/android/build/android_tools.rb +16 -0
  171. data/platform/android/build/androidcommon.rb +2 -0
  172. data/platform/android/build/librhocommon_build.files +3 -0
  173. data/platform/android/build/libruby_build.files +2 -1
  174. data/platform/bb/RubyVM/src/com/rho/net/AsyncHttp.java +6 -2
  175. data/platform/bb/RubyVM/src/com/rho/sync/ClientRegister.java +3 -2
  176. data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +17 -24
  177. data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +26 -2
  178. data/platform/bb/RubyVM/src/com/rho/sync/SyncProtocol_3.java +6 -1
  179. data/platform/bb/RubyVM/src/com/rho/sync/SyncSource.java +4 -0
  180. data/platform/bb/RubyVM/src/com/rho/sync/SyncThread.java +50 -54
  181. data/platform/bb/build/bb.rake +4 -4
  182. data/platform/bb/rhodes/src/com/rho/rubyext/RhoPhonebook.java +6 -6
  183. data/platform/bb/rhodes/src/rhomobile/camera/Camera.java +7 -0
  184. data/platform/bb/rhodes/src/rhomobile/mapview/MapView.java +10 -0
  185. data/platform/iphone/Classes/AppManager/AppManager.m +29 -0
  186. data/platform/iphone/Classes/Dispatcher/Dispatcher.c +1 -1
  187. data/platform/iphone/Classes/GeoLocation/LocationController.h +2 -1
  188. data/platform/iphone/Classes/GeoLocation/LocationController.m +23 -0
  189. data/platform/iphone/Classes/MapView/MapAnnotation.h +6 -0
  190. data/platform/iphone/Classes/MapView/MapAnnotation.m +5 -1
  191. data/platform/iphone/Classes/MapView/MapViewController.m +48 -4
  192. data/platform/iphone/Classes/MapView/MapViewManager.m +7 -0
  193. data/platform/iphone/Classes/Phonebook/phonebook.m +44 -0
  194. data/platform/iphone/Classes/Rhodes.m +1 -1
  195. data/platform/iphone/Info.plist +1 -1
  196. data/platform/iphone/RhoLib/RhoLib.xcodeproj/project.pbxproj +3 -3
  197. data/platform/iphone/curl/curl.xcodeproj/project.pbxproj +3 -3
  198. data/platform/iphone/rbuild/iphone.rake +3 -1
  199. data/platform/iphone/rhoextlib/rhoextlib.xcodeproj/project.pbxproj +3 -3
  200. data/platform/iphone/rhorubylib/rhorubylib.xcodeproj/project.pbxproj +18 -7
  201. data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +3 -2
  202. data/platform/iphone/rhosynclib/rhosynclib.xcodeproj/project.pbxproj +3 -3
  203. data/platform/linux/files.txt +2 -2
  204. data/platform/linux/target/compiler/rubylinux +0 -0
  205. data/platform/mac/RubyMac/RubyMac.xcodeproj/project.pbxproj +8 -2
  206. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/MacOS/RhoSimulator +0 -0
  207. data/platform/osx/build/osx.rake +1 -3
  208. data/platform/shared/RhoConnectClient/RhoConnectClient.cpp +65 -26
  209. data/platform/shared/RhoConnectClient/RhoConnectClient.h +5 -1
  210. data/platform/shared/common/Android.mk +3 -0
  211. data/platform/shared/common/AppMenu.cpp +2 -2
  212. data/platform/shared/common/RhoPort.h +2 -2
  213. data/platform/shared/common/RhodesApp.cpp +20 -2
  214. data/platform/shared/common/RhodesApp.h +1 -0
  215. data/platform/shared/common/ThreadQueue.cpp +5 -0
  216. data/platform/shared/common/ThreadQueue.h +1 -0
  217. data/platform/shared/common/map/BaseMapEngine.cpp +1393 -0
  218. data/platform/shared/common/map/BaseMapEngine.h +368 -0
  219. data/platform/shared/common/map/ESRIMapEngine.cpp +23 -896
  220. data/platform/shared/common/map/ESRIMapEngine.h +11 -243
  221. data/platform/shared/common/map/GeocodingMapEngine.cpp +200 -0
  222. data/platform/shared/common/map/GeocodingMapEngine.h +86 -0
  223. data/platform/shared/common/map/GoogleMapEngine.cpp +70 -135
  224. data/platform/shared/common/map/GoogleMapEngine.h +21 -38
  225. data/platform/shared/common/map/MapEngine.cpp +145 -24
  226. data/platform/shared/common/map/MapEngine.h +156 -54
  227. data/platform/shared/common/map/OSMMapEngine.cpp +94 -0
  228. data/platform/shared/common/map/OSMMapEngine.h +65 -0
  229. data/platform/shared/curl/lib/config-symbian.h +3 -1
  230. data/platform/shared/db/DBAdapter.cpp +30 -4
  231. data/platform/shared/db/DBAdapter.h +24 -1
  232. data/platform/shared/logging/RhoLog.h +26 -0
  233. data/platform/shared/net/AsyncHttp.cpp +6 -2
  234. data/platform/shared/net/CompatWince.cpp +1 -0
  235. data/platform/shared/net/HttpServer.cpp +5 -2
  236. data/platform/shared/qt/rhodes/RhoSimulator.h +1 -1
  237. data/platform/shared/qt/rhodes/impl/GeoLocationImpl.cpp +6 -0
  238. data/platform/shared/qt/rhodes/impl/MapViewImpl.cpp +4 -0
  239. data/platform/shared/qt/rhodes/impl/PhonebookImpl.cpp +12 -0
  240. data/platform/shared/qt/rhodes/impl/SystemImpl.cpp +26 -0
  241. data/platform/shared/qt/rholib/rholib.pro +14 -19
  242. data/platform/shared/qt/rubylib/rubylib.pro +7 -4
  243. data/platform/shared/ruby/Android.mk +3 -2
  244. data/platform/shared/ruby/GPL +340 -0
  245. data/platform/shared/ruby/android/ruby/config.h +283 -0
  246. data/platform/shared/ruby/array.c +1318 -595
  247. data/platform/shared/ruby/bignum.c +1092 -278
  248. data/platform/shared/ruby/class.c +689 -201
  249. data/platform/shared/ruby/compar.c +22 -20
  250. data/platform/shared/ruby/compile.c +327 -249
  251. data/platform/shared/ruby/complex.c +593 -138
  252. data/platform/shared/ruby/cont.c +213 -95
  253. data/platform/shared/ruby/debug.c +15 -10
  254. data/platform/shared/ruby/debug.h +1 -1
  255. data/platform/shared/ruby/dir.c +247 -104
  256. data/platform/shared/ruby/dln.c +102 -309
  257. data/platform/shared/ruby/dln.h +3 -3
  258. data/platform/shared/ruby/dln_find.c +305 -0
  259. data/platform/shared/ruby/dmydln.c +7 -2
  260. data/platform/shared/ruby/dmyversion.c +2 -0
  261. data/platform/shared/ruby/enc/Makefile.in +1 -0
  262. data/platform/shared/ruby/enc/big5.c +142 -5
  263. data/platform/shared/ruby/enc/depend +1 -0
  264. data/platform/shared/ruby/enc/emacs_mule.c +1 -1
  265. data/platform/shared/ruby/enc/encdb.c +3 -1
  266. data/platform/shared/ruby/enc/euc_tw.c +1 -10
  267. data/platform/shared/ruby/enc/iso_2022_jp.h +36 -0
  268. data/platform/shared/ruby/enc/iso_8859_5.c +1 -1
  269. data/platform/shared/ruby/enc/koi8_r.c +1 -1
  270. data/platform/shared/ruby/enc/koi8_u.c +1 -1
  271. data/platform/shared/ruby/enc/prelude.rb +1 -1
  272. data/platform/shared/ruby/enc/shift_jis.c +3 -3
  273. data/platform/shared/ruby/enc/trans/big5-hkscs-tbl.rb +18385 -0
  274. data/platform/shared/ruby/enc/trans/big5-uao-tbl.rb +19784 -0
  275. data/platform/shared/ruby/enc/trans/big5.c +53810 -12566
  276. data/platform/shared/ruby/enc/trans/big5.trans +10 -1
  277. data/platform/shared/ruby/enc/trans/chinese.c +113 -71
  278. data/platform/shared/ruby/enc/trans/chinese.trans +6 -4
  279. data/platform/shared/ruby/enc/trans/escape.c +3 -3
  280. data/platform/shared/ruby/enc/trans/escape.trans +3 -3
  281. data/platform/shared/ruby/enc/trans/gb18030-tbl.rb +32 -0
  282. data/platform/shared/ruby/enc/trans/gb18030.c +17431 -91305
  283. data/platform/shared/ruby/enc/trans/gb18030.trans +105 -5
  284. data/platform/shared/ruby/enc/trans/gbk.c +13 -13
  285. data/platform/shared/ruby/enc/trans/iso2022.c +374 -13
  286. data/platform/shared/ruby/enc/trans/iso2022.trans +313 -0
  287. data/platform/shared/ruby/enc/trans/japanese.c +26 -24
  288. data/platform/shared/ruby/enc/trans/japanese_euc.c +30 -30
  289. data/platform/shared/ruby/enc/trans/japanese_sjis.c +282 -276
  290. data/platform/shared/ruby/enc/trans/korean.c +182 -159
  291. data/platform/shared/ruby/enc/trans/newline.c +18 -14
  292. data/platform/shared/ruby/enc/trans/newline.trans +15 -11
  293. data/platform/shared/ruby/enc/trans/single_byte.c +497 -394
  294. data/platform/shared/ruby/enc/trans/single_byte.trans +1 -2
  295. data/platform/shared/ruby/enc/trans/transdb.c +1 -1
  296. data/platform/shared/ruby/enc/trans/utf8_mac-tbl.rb +945 -0
  297. data/platform/shared/ruby/enc/trans/utf8_mac.c +10853 -0
  298. data/platform/shared/ruby/enc/trans/utf8_mac.trans +242 -0
  299. data/platform/shared/ruby/enc/trans/utf_16_32.c +89 -86
  300. data/platform/shared/ruby/enc/unicode.c +30 -8779
  301. data/platform/shared/ruby/enc/unicode/name2ctype.h +17985 -0
  302. data/platform/shared/ruby/enc/unicode/name2ctype.h.blt +17985 -0
  303. data/platform/shared/ruby/enc/unicode/name2ctype.kwd +16711 -0
  304. data/platform/shared/ruby/enc/unicode/name2ctype.src +16711 -0
  305. data/platform/shared/ruby/enc/utf_16be.c +3 -4
  306. data/platform/shared/ruby/enc/utf_16le.c +3 -4
  307. data/platform/shared/ruby/enc/utf_8.c +3 -1
  308. data/platform/shared/ruby/enc/x_emoji.h +26 -0
  309. data/platform/shared/ruby/encdb.h +18 -2
  310. data/platform/shared/ruby/encoding.c +248 -111
  311. data/platform/shared/ruby/enum.c +1006 -200
  312. data/platform/shared/ruby/enumerator.c +555 -254
  313. data/platform/shared/ruby/error.c +478 -79
  314. data/platform/shared/ruby/eval.c +186 -94
  315. data/platform/shared/ruby/eval_error.c +16 -10
  316. data/platform/shared/ruby/eval_intern.h +24 -9
  317. data/platform/shared/ruby/eval_jump.c +2 -1
  318. data/platform/shared/ruby/ext/geolocation/geolocation.i +10 -1
  319. data/platform/shared/ruby/ext/geolocation/geolocation_wrap.c +49 -6
  320. data/platform/shared/ruby/ext/mapview/mapview.i +6 -0
  321. data/platform/shared/ruby/ext/mapview/mapview_wrap.c +279 -0
  322. data/platform/shared/ruby/ext/nativebar/nativebar_wrap.c +402 -124
  323. data/platform/shared/ruby/ext/phonebook/phonebook.i +41 -7
  324. data/platform/shared/ruby/ext/phonebook/phonebook_wrap.c +216 -47
  325. data/platform/shared/ruby/ext/rho/rhoruby.c +9 -5
  326. data/platform/shared/ruby/ext/rho/rhosupport.c +1 -1
  327. data/platform/shared/ruby/ext/socket/getaddrinfo.c +4 -0
  328. data/platform/shared/ruby/ext/sqlite3_api/sqlite3_api_wrap.c +2 -2
  329. data/platform/shared/ruby/ext/syncengine/syncengine.i +14 -5
  330. data/platform/shared/ruby/ext/syncengine/syncengine_wrap.c +55 -7
  331. data/platform/shared/ruby/ext/system/system.i +7 -2
  332. data/platform/shared/ruby/ext/system/system_wrap.c +28 -2
  333. data/platform/shared/ruby/file.c +1243 -683
  334. data/platform/shared/ruby/gc.c +509 -217
  335. data/platform/shared/ruby/gc.h +7 -5
  336. data/platform/shared/ruby/generated/insns.inc +11 -9
  337. data/platform/shared/ruby/generated/insns_info.inc +69 -62
  338. data/platform/shared/ruby/generated/known_errors.inc +360 -245
  339. data/platform/shared/ruby/generated/lex.c +49 -47
  340. data/platform/shared/ruby/generated/node_name.inc +0 -8
  341. data/platform/shared/ruby/generated/optinsn.inc +1 -1
  342. data/platform/shared/ruby/generated/parse.c +4480 -4162
  343. data/platform/shared/ruby/generated/parse.h +13 -14
  344. data/platform/shared/ruby/generated/vm.inc +485 -269
  345. data/platform/shared/ruby/generated/vmtc.inc +2 -1
  346. data/platform/shared/ruby/golf_prelude.c +21 -4
  347. data/platform/shared/ruby/goruby.c +1 -1
  348. data/platform/shared/ruby/hash.c +429 -180
  349. data/platform/shared/ruby/ia64.s +42 -0
  350. data/platform/shared/ruby/id.c +13 -14
  351. data/platform/shared/ruby/id.h +25 -18
  352. data/platform/shared/ruby/include/ruby.h +1 -1
  353. data/platform/shared/ruby/include/ruby/backward/rubysig.h +2 -2
  354. data/platform/shared/ruby/include/ruby/defines.h +50 -29
  355. data/platform/shared/ruby/include/ruby/encoding.h +40 -14
  356. data/platform/shared/ruby/include/ruby/intern.h +81 -24
  357. data/platform/shared/ruby/include/ruby/io.h +4 -4
  358. data/platform/shared/ruby/include/ruby/missing.h +28 -18
  359. data/platform/shared/ruby/include/ruby/oniguruma.h +22 -7
  360. data/platform/shared/ruby/include/ruby/re.h +4 -4
  361. data/platform/shared/ruby/include/ruby/ruby.h +294 -76
  362. data/platform/shared/ruby/include/ruby/st.h +27 -9
  363. data/platform/shared/ruby/include/ruby/util.h +14 -6
  364. data/platform/shared/ruby/include/ruby/version.h +61 -0
  365. data/platform/shared/ruby/include/ruby/vm.h +21 -1
  366. data/platform/shared/ruby/include/ruby/win32.h +223 -63
  367. data/platform/shared/ruby/inits.c +1 -1
  368. data/platform/shared/ruby/insns.def +236 -111
  369. data/platform/shared/ruby/io.c +2188 -774
  370. data/platform/shared/ruby/iphone/ruby/config.h +75 -45
  371. data/platform/shared/ruby/iseq.c +261 -104
  372. data/platform/shared/ruby/iseq.h +13 -11
  373. data/platform/shared/ruby/linux/ruby/config.h +95 -100
  374. data/platform/shared/ruby/load.c +115 -81
  375. data/platform/shared/ruby/main.c +122 -0
  376. data/platform/shared/ruby/marshal.c +418 -230
  377. data/platform/shared/ruby/math.c +219 -152
  378. data/platform/shared/ruby/method.h +103 -0
  379. data/platform/shared/ruby/miniprelude.c +35 -23
  380. data/platform/shared/ruby/missing/acosh.c +4 -4
  381. data/platform/shared/ruby/missing/alloca.c +4 -1
  382. data/platform/shared/ruby/missing/close.c +67 -0
  383. data/platform/shared/ruby/missing/crypt.c +9 -9
  384. data/platform/shared/ruby/missing/dup2.c +0 -1
  385. data/platform/shared/ruby/missing/langinfo.c +4 -3
  386. data/platform/shared/ruby/missing/signbit.c +19 -0
  387. data/platform/shared/ruby/newline.c +18 -14
  388. data/platform/shared/ruby/node.c +921 -0
  389. data/platform/shared/ruby/node.h +14 -47
  390. data/platform/shared/ruby/numeric.c +544 -302
  391. data/platform/shared/ruby/object.c +430 -426
  392. data/platform/shared/ruby/pack.c +677 -628
  393. data/platform/shared/ruby/parse.y +847 -523
  394. data/platform/shared/ruby/proc.c +631 -341
  395. data/platform/shared/ruby/process.c +811 -421
  396. data/platform/shared/ruby/random.c +858 -177
  397. data/platform/shared/ruby/range.c +234 -133
  398. data/platform/shared/ruby/rational.c +936 -173
  399. data/platform/shared/ruby/re.c +351 -192
  400. data/platform/shared/ruby/regcomp.c +125 -138
  401. data/platform/shared/ruby/regenc.c +26 -25
  402. data/platform/shared/ruby/regenc.h +7 -3
  403. data/platform/shared/ruby/regerror.c +44 -34
  404. data/platform/shared/ruby/regexec.c +31 -38
  405. data/platform/shared/ruby/regint.h +16 -17
  406. data/platform/shared/ruby/regparse.c +266 -136
  407. data/platform/shared/ruby/regparse.h +4 -1
  408. data/platform/shared/ruby/regsyntax.c +2 -2
  409. data/platform/shared/ruby/revision.h +0 -1
  410. data/platform/shared/ruby/ruby.c +276 -248
  411. data/platform/shared/ruby/safe.c +14 -8
  412. data/platform/shared/ruby/signal.c +61 -68
  413. data/platform/shared/ruby/sprintf.c +77 -38
  414. data/platform/shared/ruby/st.c +437 -61
  415. data/platform/shared/ruby/strftime.c +252 -110
  416. data/platform/shared/ruby/string.c +1361 -1009
  417. data/platform/shared/ruby/struct.c +200 -133
  418. data/platform/shared/ruby/symbian/ruby/config.h +56 -24
  419. data/platform/shared/ruby/thread.c +732 -247
  420. data/platform/shared/ruby/thread_pthread.c +122 -69
  421. data/platform/shared/ruby/thread_pthread.h +4 -1
  422. data/platform/shared/ruby/thread_win32.c +73 -41
  423. data/platform/shared/ruby/thread_win32.h +1 -1
  424. data/platform/shared/ruby/time.c +3271 -919
  425. data/platform/shared/ruby/timev.h +21 -0
  426. data/platform/shared/ruby/transcode.c +289 -95
  427. data/platform/shared/ruby/transcode_data.h +17 -14
  428. data/platform/shared/ruby/transdb.h +32 -0
  429. data/platform/shared/ruby/util.c +330 -123
  430. data/platform/shared/ruby/variable.c +294 -176
  431. data/platform/shared/ruby/version.c +71 -2
  432. data/platform/shared/ruby/version.h +22 -19
  433. data/platform/shared/ruby/vm.c +368 -203
  434. data/platform/shared/ruby/vm_core.h +110 -66
  435. data/platform/shared/ruby/vm_dump.c +51 -44
  436. data/platform/shared/ruby/vm_eval.c +547 -230
  437. data/platform/shared/ruby/vm_exec.c +3 -3
  438. data/platform/shared/ruby/vm_insnhelper.c +397 -200
  439. data/platform/shared/ruby/vm_insnhelper.h +27 -14
  440. data/platform/shared/ruby/vm_method.c +493 -296
  441. data/platform/shared/ruby/vm_opts.h +1 -1
  442. data/platform/shared/ruby/{missing/vsnprintf.c → vsnprintf.c} +114 -74
  443. data/platform/shared/ruby/win32/dir.h +5 -4
  444. data/platform/shared/ruby/win32/miniprelude.c +34 -21
  445. data/platform/shared/ruby/win32/newline.c +18 -14
  446. data/platform/shared/ruby/win32/ruby/config.h +58 -20
  447. data/platform/shared/ruby/win32/win32.c +1398 -475
  448. data/platform/shared/ruby/wince/direct.c +17 -1
  449. data/platform/shared/ruby/wince/io_wce.c +16 -8
  450. data/platform/shared/ruby/wince/ruby/config.h +54 -24
  451. data/platform/shared/ruby/wince/sys/stat.c +81 -0
  452. data/platform/shared/ruby/wince/time_wce.c +47 -4
  453. data/platform/shared/ruby/wince/wince.h +16 -0
  454. data/platform/shared/rubyext/Android.mk +1 -1
  455. data/platform/shared/rubyext/GeoLocation.cpp +93 -48
  456. data/platform/shared/rubyext/GeoLocation.h +9 -4
  457. data/platform/shared/rubyext/System.cpp +6 -0
  458. data/platform/shared/sync/ClientRegister.cpp +1 -1
  459. data/platform/shared/sync/SyncEngine.cpp +15 -55
  460. data/platform/shared/sync/SyncEngine.h +4 -4
  461. data/platform/shared/sync/SyncProtocol_3.h +6 -1
  462. data/platform/shared/sync/SyncSource.cpp +6 -1
  463. data/platform/shared/sync/SyncSource.h +1 -0
  464. data/platform/shared/sync/SyncThread.cpp +20 -9
  465. data/platform/shared/sync/SyncThread.h +14 -9
  466. data/platform/shared/wtl80/include/atlapp.h +2 -0
  467. data/platform/symbian/build/symbian.rake +56 -5
  468. data/platform/symbian/curl/curl.pro +4 -0
  469. data/platform/symbian/rhodes/rhodes.pro +16 -4
  470. data/platform/symbian/rhodes/src/phonebook/ruby_phonebook.cpp +10 -0
  471. data/platform/symbian/rholib/rholib.pro +4 -0
  472. data/platform/symbian/rubylib/rubylib.pro +6 -2
  473. data/platform/symbian/sqlite3/sqlite3.pro +2 -1
  474. data/platform/symbian/syncengine/syncengine.pro +4 -0
  475. data/platform/win32/RhoSimulator/RhoSimulator.exe +0 -0
  476. data/platform/wm/RhoLib/RhoLib.vcproj +333 -0
  477. data/platform/wm/build/build_inf.js +1 -0
  478. data/platform/wm/build/wm.rake +43 -17
  479. data/platform/wm/rhodes.sln +140 -76
  480. data/platform/wm/rhodes/Alert.cpp +1 -1
  481. data/platform/wm/rhodes/IBrowserEngine.cpp +10 -0
  482. data/platform/wm/rhodes/IBrowserEngine.h +24 -0
  483. data/platform/wm/rhodes/IEBrowserEngine.cpp +179 -0
  484. data/platform/wm/rhodes/IEBrowserEngine.h +36 -0
  485. data/platform/wm/rhodes/MainWindow.cpp +176 -178
  486. data/platform/wm/rhodes/MainWindow.h +78 -20
  487. data/platform/wm/rhodes/MapView/Graphics.h +10 -0
  488. data/platform/wm/rhodes/MapView/MapViewManager.cpp +7 -0
  489. data/platform/wm/rhodes/OutlookApp.cpp +3 -3
  490. data/platform/wm/rhodes/RhoWebKitBrowser.cpp +10 -0
  491. data/platform/wm/rhodes/Rhodes.cpp +499 -443
  492. data/platform/wm/rhodes/bluetooth/Bluetooth.cpp +1 -4
  493. data/platform/wm/rhodes/bluetooth/Bluetooth.h +1 -1
  494. data/platform/wm/rhodes/camera/Camera.cpp +3 -6
  495. data/platform/wm/rhodes/phonebook/phonebook.cpp +20 -11
  496. data/platform/wm/rhodes/phonebook/phonebook.h +4 -2
  497. data/platform/wm/rhodes/rho/net/NetRequestImpl.cpp +3 -3
  498. data/platform/wm/rhodes/rho/rubyext/GeoLocationImpl.cpp +12 -7
  499. data/platform/wm/rhodes/rho/rubyext/GeoLocationImpl.h +1 -1
  500. data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +24 -6
  501. data/platform/wm/rhodes/rho/rubyext/WebView.cpp +0 -32
  502. data/platform/wm/rhodes/rho/rubyext/calendar.cpp +1 -1
  503. data/platform/wm/rhodes/rhodes.vcproj +1792 -129
  504. data/platform/wm/rhodes/rhoelements/RhoWKBrowserEngine.cpp +384 -0
  505. data/platform/wm/rhodes/rhoelements/RhoWKBrowserEngine.h +41 -0
  506. data/platform/wm/rhodes/signature/Signature.cpp +4 -8
  507. data/platform/wm/rhodes/signature/Signature.h +1 -1
  508. data/platform/wm/rhodes/simulator/MainWindowQt.cpp +1 -0
  509. data/platform/wm/rhodes/simulator/MainWindowQt.h +2 -0
  510. data/platform/wm/rhodes/stdafx.h +17 -5
  511. data/platform/wm/rhoelements.sln +447 -0
  512. data/platform/wm/rubylib/rubylib.vcproj +355 -10
  513. data/platform/wm/sqlite3/sqlite3.vcproj +305 -0
  514. data/platform/wm/syncengine/syncengine.vcproj +309 -0
  515. data/platform/wp7/IronRuby/bin/Silverlight3Release/IronRuby.Libraries.dll +0 -0
  516. data/platform/wp7/IronRuby/bin/Silverlight3Release/IronRuby.dll +0 -0
  517. data/platform/wp7/RhoAppRunner/Program.cs +2 -2
  518. data/platform/wp7/RhoRubyExtGen/RhoCamera.cs +59 -0
  519. data/platform/wp7/RhoRubyExtGen/RhoNativeBar.cs +3 -20
  520. data/platform/wp7/RhoRubyExtGen/RhoRubyExtGen.csproj +1 -0
  521. data/platform/wp7/RhoRubyLib/Initializers.Generated.cs +6 -9
  522. data/platform/wp7/RhoRubyLib/RhoRubyLib.csproj +2 -1
  523. data/platform/wp7/RhoRubyLib/rubyext/RhoCamera.cs +130 -0
  524. data/platform/wp7/RhoRubyLib/rubyext/RhoNativeBar.cs +5 -73
  525. data/res/build-tools/RhoRuby.exe +0 -0
  526. data/res/build-tools/RubyMac +0 -0
  527. data/res/build-tools/detool.exe +0 -0
  528. data/res/build-tools/rubylinux +0 -0
  529. data/res/generators/rhogen.rb +5 -0
  530. data/res/generators/templates/application/app/helpers/browser_helper.rb +4 -0
  531. data/res/generators/templates/application/app/index.erb +6 -2
  532. data/res/generators/templates/application/app/layout.erb +8 -5
  533. data/res/generators/templates/application/build.yml +3 -1
  534. data/res/generators/templates/application/gitignore +7 -0
  535. data/res/generators/templates/application/public/css/android.css +366 -5
  536. data/res/generators/templates/application/public/css/blackberry.css +16 -5
  537. data/res/generators/templates/application/public/css/iphone.css +349 -5
  538. data/res/generators/templates/application/public/css/windows_mobile.css +105 -0
  539. data/res/generators/templates/application/public/jqmobile/{jquery.mobile-1.0b2.css → jquery.mobile-1.0b3.css} +64 -5
  540. data/res/generators/templates/application/public/jqmobile/{jquery.mobile-1.0b2.js → jquery.mobile-1.0b3.js} +1125 -727
  541. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.0b3.min.css +8 -0
  542. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.0b3.min.js +169 -0
  543. data/res/generators/templates/application/public/jquery/{jquery-1.6.2.js → jquery-1.6.3.js} +226 -163
  544. data/res/generators/templates/application/public/jquery/jquery-1.6.3.min.js +4 -0
  545. data/res/generators/templates/application/public/js/wp7.js +5 -0
  546. data/res/generators/templates/model/edit.erb +6 -2
  547. data/res/generators/templates/model/index.erb +8 -4
  548. data/res/generators/templates/model/new.erb +3 -1
  549. data/res/generators/templates/model/show.erb +6 -2
  550. data/rhobuild.yml.example +0 -1
  551. data/rhodes.gemspec +1 -1
  552. data/spec/framework_spec/app/spec/core/argf/argf_spec.rb +1 -1
  553. data/spec/framework_spec/app/spec/core/argf/binmode_spec.rb +19 -7
  554. data/spec/framework_spec/app/spec/core/argf/bytes_spec.rb +3 -3
  555. data/spec/framework_spec/app/spec/core/argf/chars_spec.rb +3 -3
  556. data/spec/framework_spec/app/spec/core/argf/close_spec.rb +31 -5
  557. data/spec/framework_spec/app/spec/core/argf/closed_spec.rb +6 -5
  558. data/spec/framework_spec/app/spec/core/argf/each_byte_spec.rb +2 -2
  559. data/spec/framework_spec/app/spec/core/argf/each_char_spec.rb +3 -3
  560. data/spec/framework_spec/app/spec/core/argf/each_line_spec.rb +2 -2
  561. data/spec/framework_spec/app/spec/core/argf/each_spec.rb +2 -2
  562. data/spec/framework_spec/app/spec/core/argf/eof_spec.rb +2 -2
  563. data/spec/framework_spec/app/spec/core/argf/file_spec.rb +4 -4
  564. data/spec/framework_spec/app/spec/core/argf/filename_spec.rb +2 -2
  565. data/spec/framework_spec/app/spec/core/argf/fileno_spec.rb +2 -2
  566. data/spec/framework_spec/app/spec/core/argf/getc_spec.rb +5 -5
  567. data/spec/framework_spec/app/spec/core/argf/gets_spec.rb +5 -5
  568. data/spec/framework_spec/app/spec/core/argf/lineno_spec.rb +24 -18
  569. data/spec/framework_spec/app/spec/core/argf/path_spec.rb +2 -2
  570. data/spec/framework_spec/app/spec/core/argf/pos_spec.rb +5 -5
  571. data/spec/framework_spec/app/spec/core/argf/read_spec.rb +19 -20
  572. data/spec/framework_spec/app/spec/core/argf/readchar_spec.rb +5 -5
  573. data/spec/framework_spec/app/spec/core/argf/readline_spec.rb +5 -5
  574. data/spec/framework_spec/app/spec/core/argf/readlines_spec.rb +2 -2
  575. data/spec/framework_spec/app/spec/core/argf/rewind_spec.rb +18 -4
  576. data/spec/framework_spec/app/spec/core/argf/seek_spec.rb +6 -4
  577. data/spec/framework_spec/app/spec/core/argf/shared/each_byte.rb +3 -3
  578. data/spec/framework_spec/app/spec/core/argf/shared/each_char.rb +4 -4
  579. data/spec/framework_spec/app/spec/core/argf/shared/each_line.rb +9 -3
  580. data/spec/framework_spec/app/spec/core/argf/shared/eof.rb +3 -3
  581. data/spec/framework_spec/app/spec/core/argf/shared/filename.rb +3 -3
  582. data/spec/framework_spec/app/spec/core/argf/shared/fileno.rb +3 -3
  583. data/spec/framework_spec/app/spec/core/argf/shared/getc.rb +3 -3
  584. data/spec/framework_spec/app/spec/core/argf/shared/gets.rb +41 -43
  585. data/spec/framework_spec/app/spec/core/argf/shared/pos.rb +3 -3
  586. data/spec/framework_spec/app/spec/core/argf/shared/readlines.rb +2 -2
  587. data/spec/framework_spec/app/spec/core/argf/skip_spec.rb +12 -4
  588. data/spec/framework_spec/app/spec/core/argf/tell_spec.rb +2 -2
  589. data/spec/framework_spec/app/spec/core/argf/to_a_spec.rb +2 -2
  590. data/spec/framework_spec/app/spec/core/argf/to_i_spec.rb +2 -2
  591. data/spec/framework_spec/app/spec/core/argf/to_io_spec.rb +4 -4
  592. data/spec/framework_spec/app/spec/core/argf/to_s_spec.rb +4 -4
  593. data/spec/framework_spec/app/spec/core/array/allocate_spec.rb +3 -3
  594. data/spec/framework_spec/app/spec/core/array/append_spec.rb +2 -2
  595. data/spec/framework_spec/app/spec/core/array/array_spec.rb +1 -1
  596. data/spec/framework_spec/app/spec/core/array/assoc_spec.rb +5 -5
  597. data/spec/framework_spec/app/spec/core/array/at_spec.rb +5 -5
  598. data/spec/framework_spec/app/spec/core/array/choice_spec.rb +2 -2
  599. data/spec/framework_spec/app/spec/core/array/clear_spec.rb +3 -3
  600. data/spec/framework_spec/app/spec/core/array/clone_spec.rb +3 -3
  601. data/spec/framework_spec/app/spec/core/array/collect_spec.rb +3 -3
  602. data/spec/framework_spec/app/spec/core/array/combination_spec.rb +38 -13
  603. data/spec/framework_spec/app/spec/core/array/compact_spec.rb +33 -11
  604. data/spec/framework_spec/app/spec/core/array/comparison_spec.rb +11 -5
  605. data/spec/framework_spec/app/spec/core/array/concat_spec.rb +13 -13
  606. data/spec/framework_spec/app/spec/core/array/constructor_spec.rb +4 -4
  607. data/spec/framework_spec/app/spec/core/array/count_spec.rb +7 -0
  608. data/spec/framework_spec/app/spec/core/array/cycle_spec.rb +82 -14
  609. data/spec/framework_spec/app/spec/core/array/delete_at_spec.rb +2 -2
  610. data/spec/framework_spec/app/spec/core/array/delete_if_spec.rb +16 -7
  611. data/spec/framework_spec/app/spec/core/array/delete_spec.rb +8 -2
  612. data/spec/framework_spec/app/spec/core/array/drop_spec.rb +7 -0
  613. data/spec/framework_spec/app/spec/core/array/drop_while_spec.rb +7 -0
  614. data/spec/framework_spec/app/spec/core/array/dup_spec.rb +3 -3
  615. data/spec/framework_spec/app/spec/core/array/each_index_spec.rb +29 -30
  616. data/spec/framework_spec/app/spec/core/array/each_spec.rb +8 -33
  617. data/spec/framework_spec/app/spec/core/array/element_reference_spec.rb +30 -6
  618. data/spec/framework_spec/app/spec/core/array/element_set_spec.rb +19 -2
  619. data/spec/framework_spec/app/spec/core/array/empty_spec.rb +2 -2
  620. data/spec/framework_spec/app/spec/core/array/eql_spec.rb +3 -3
  621. data/spec/framework_spec/app/spec/core/array/equal_value_spec.rb +34 -3
  622. data/spec/framework_spec/app/spec/core/array/fetch_spec.rb +4 -4
  623. data/spec/framework_spec/app/spec/core/array/fill_spec.rb +27 -12
  624. data/spec/framework_spec/app/spec/core/array/find_index_spec.rb +7 -0
  625. data/spec/framework_spec/app/spec/core/array/first_spec.rb +13 -13
  626. data/spec/framework_spec/app/spec/core/array/fixtures/classes.rb +447 -6
  627. data/spec/framework_spec/app/spec/core/array/flatten_spec.rb +42 -19
  628. data/spec/framework_spec/app/spec/core/array/frozen_spec.rb +17 -15
  629. data/spec/framework_spec/app/spec/core/array/hash_spec.rb +22 -3
  630. data/spec/framework_spec/app/spec/core/array/include_spec.rb +3 -3
  631. data/spec/framework_spec/app/spec/core/array/index_spec.rb +1 -1
  632. data/spec/framework_spec/app/spec/core/array/indexes_spec.rb +3 -3
  633. data/spec/framework_spec/app/spec/core/array/indices_spec.rb +3 -3
  634. data/spec/framework_spec/app/spec/core/array/initialize_copy_spec.rb +3 -3
  635. data/spec/framework_spec/app/spec/core/array/initialize_spec.rb +2 -2
  636. data/spec/framework_spec/app/spec/core/array/insert_spec.rb +13 -11
  637. data/spec/framework_spec/app/spec/core/array/inspect_spec.rb +33 -3
  638. data/spec/framework_spec/app/spec/core/array/intersection_spec.rb +13 -13
  639. data/spec/framework_spec/app/spec/core/array/join_spec.rb +24 -4
  640. data/spec/framework_spec/app/spec/core/array/keep_if_spec.rb +12 -0
  641. data/spec/framework_spec/app/spec/core/array/last_spec.rb +11 -11
  642. data/spec/framework_spec/app/spec/core/array/length_spec.rb +3 -3
  643. data/spec/framework_spec/app/spec/core/array/map_spec.rb +3 -3
  644. data/spec/framework_spec/app/spec/core/array/minus_spec.rb +9 -9
  645. data/spec/framework_spec/app/spec/core/array/multiply_spec.rb +23 -10
  646. data/spec/framework_spec/app/spec/core/array/new_spec.rb +4 -4
  647. data/spec/framework_spec/app/spec/core/array/nitems_spec.rb +3 -3
  648. data/spec/framework_spec/app/spec/core/array/pack/a_spec.rb +59 -0
  649. data/spec/framework_spec/app/spec/core/array/pack/at_spec.rb +30 -0
  650. data/spec/framework_spec/app/spec/core/array/pack/b_spec.rb +109 -0
  651. data/spec/framework_spec/app/spec/core/array/pack/c_spec.rb +83 -0
  652. data/spec/framework_spec/app/spec/core/array/pack/comment_spec.rb +25 -0
  653. data/spec/framework_spec/app/spec/core/array/pack/d_spec.rb +39 -0
  654. data/spec/framework_spec/app/spec/core/array/pack/e_spec.rb +25 -0
  655. data/spec/framework_spec/app/spec/core/array/pack/f_spec.rb +39 -0
  656. data/spec/framework_spec/app/spec/core/array/pack/g_spec.rb +25 -0
  657. data/spec/framework_spec/app/spec/core/array/pack/h_spec.rb +201 -0
  658. data/spec/framework_spec/app/spec/core/array/pack/i_spec.rb +73 -0
  659. data/spec/framework_spec/app/spec/core/array/pack/l_spec.rb +193 -0
  660. data/spec/framework_spec/app/spec/core/array/pack/m_spec.rb +337 -0
  661. data/spec/framework_spec/app/spec/core/array/pack/n_spec.rb +25 -0
  662. data/spec/framework_spec/app/spec/core/array/pack/percent_spec.rb +7 -0
  663. data/spec/framework_spec/app/spec/core/array/pack/q_spec.rb +43 -0
  664. data/spec/framework_spec/app/spec/core/array/pack/s_spec.rb +73 -0
  665. data/spec/framework_spec/app/spec/core/array/pack/shared/basic.rb +57 -0
  666. data/spec/framework_spec/app/spec/core/array/pack/shared/encodings.rb +16 -0
  667. data/spec/framework_spec/app/spec/core/array/pack/shared/float.rb +277 -0
  668. data/spec/framework_spec/app/spec/core/array/pack/shared/integer.rb +381 -0
  669. data/spec/framework_spec/app/spec/core/array/pack/shared/numeric_basic.rb +54 -0
  670. data/spec/framework_spec/app/spec/core/array/pack/shared/string.rb +83 -0
  671. data/spec/framework_spec/app/spec/core/array/pack/shared/unicode.rb +89 -0
  672. data/spec/framework_spec/app/spec/core/array/pack/u_spec.rb +130 -0
  673. data/spec/framework_spec/app/spec/core/array/pack/v_spec.rb +25 -0
  674. data/spec/framework_spec/app/spec/core/array/pack/w_spec.rb +44 -0
  675. data/spec/framework_spec/app/spec/core/array/pack/x_spec.rb +64 -0
  676. data/spec/framework_spec/app/spec/core/array/pack/z_spec.rb +32 -0
  677. data/spec/framework_spec/app/spec/core/array/pack_spec.rb +409 -369
  678. data/spec/framework_spec/app/spec/core/array/partition_spec.rb +6 -6
  679. data/spec/framework_spec/app/spec/core/array/permutation_spec.rb +34 -15
  680. data/spec/framework_spec/app/spec/core/array/plus_spec.rb +6 -6
  681. data/spec/framework_spec/app/spec/core/array/pop_spec.rb +17 -4
  682. data/spec/framework_spec/app/spec/core/array/product_spec.rb +49 -5
  683. data/spec/framework_spec/app/spec/core/array/push_spec.rb +4 -4
  684. data/spec/framework_spec/app/spec/core/array/rassoc_spec.rb +2 -2
  685. data/spec/framework_spec/app/spec/core/array/reject_spec.rb +42 -29
  686. data/spec/framework_spec/app/spec/core/array/repeated_combination_spec.rb +59 -0
  687. data/spec/framework_spec/app/spec/core/array/repeated_permutation_spec.rb +72 -0
  688. data/spec/framework_spec/app/spec/core/array/replace_spec.rb +3 -3
  689. data/spec/framework_spec/app/spec/core/array/reverse_each_spec.rb +26 -39
  690. data/spec/framework_spec/app/spec/core/array/reverse_spec.rb +15 -7
  691. data/spec/framework_spec/app/spec/core/array/rindex_spec.rb +28 -16
  692. data/spec/framework_spec/app/spec/core/array/rotate_spec.rb +85 -0
  693. data/spec/framework_spec/app/spec/core/array/sample_spec.rb +4 -10
  694. data/spec/framework_spec/app/spec/core/array/select_spec.rb +16 -3
  695. data/spec/framework_spec/app/spec/core/array/shared/clone.rb +2 -2
  696. data/spec/framework_spec/app/spec/core/array/shared/collect.rb +3 -3
  697. data/spec/framework_spec/app/spec/core/array/shared/enumeratorize.rb +12 -0
  698. data/spec/framework_spec/app/spec/core/array/shared/eql.rb +9 -5
  699. data/spec/framework_spec/app/spec/core/array/shared/indexes.rb +1 -1
  700. data/spec/framework_spec/app/spec/core/array/shared/join.rb +122 -90
  701. data/spec/framework_spec/app/spec/core/array/shared/keep_if.rb +11 -0
  702. data/spec/framework_spec/app/spec/core/array/shared/slice.rb +67 -6
  703. data/spec/framework_spec/app/spec/core/array/shift_spec.rb +18 -4
  704. data/spec/framework_spec/app/spec/core/array/shuffle_spec.rb +23 -14
  705. data/spec/framework_spec/app/spec/core/array/size_spec.rb +3 -3
  706. data/spec/framework_spec/app/spec/core/array/slice_spec.rb +19 -3
  707. data/spec/framework_spec/app/spec/core/array/sort_by_spec.rb +48 -0
  708. data/spec/framework_spec/app/spec/core/array/sort_spec.rb +65 -65
  709. data/spec/framework_spec/app/spec/core/array/take_spec.rb +7 -0
  710. data/spec/framework_spec/app/spec/core/array/take_while_spec.rb +7 -0
  711. data/spec/framework_spec/app/spec/core/array/to_a_spec.rb +7 -8
  712. data/spec/framework_spec/app/spec/core/array/to_ary_spec.rb +2 -2
  713. data/spec/framework_spec/app/spec/core/array/to_s_spec.rb +2 -5
  714. data/spec/framework_spec/app/spec/core/array/transpose_spec.rb +6 -6
  715. data/spec/framework_spec/app/spec/core/array/try_convert_spec.rb +15 -17
  716. data/spec/framework_spec/app/spec/core/array/union_spec.rb +13 -13
  717. data/spec/framework_spec/app/spec/core/array/uniq_spec.rb +41 -15
  718. data/spec/framework_spec/app/spec/core/array/unshift_spec.rb +9 -7
  719. data/spec/framework_spec/app/spec/core/array/values_at_spec.rb +5 -5
  720. data/spec/framework_spec/app/spec/core/array/zip_spec.rb +15 -3
  721. data/spec/framework_spec/app/spec/core/basicobject/__send___spec.rb +9 -0
  722. data/spec/framework_spec/app/spec/core/basicobject/ancestors_spec.rb +9 -0
  723. data/spec/framework_spec/app/spec/core/basicobject/basicobject_spec.rb +67 -0
  724. data/spec/framework_spec/app/spec/core/basicobject/class_spec.rb +9 -0
  725. data/spec/framework_spec/app/spec/core/basicobject/equal_spec.rb +20 -0
  726. data/spec/framework_spec/app/spec/core/basicobject/equal_value_spec.rb +26 -0
  727. data/spec/framework_spec/app/spec/core/basicobject/fixtures/common.rb +5 -0
  728. data/spec/framework_spec/app/spec/core/basicobject/fixtures/remove_method_missing.rb +9 -0
  729. data/spec/framework_spec/app/spec/core/basicobject/initialize_spec.rb +9 -0
  730. data/spec/framework_spec/app/spec/core/basicobject/instance_eval_spec.rb +14 -0
  731. data/spec/framework_spec/app/spec/core/basicobject/instance_exec_spec.rb +19 -0
  732. data/spec/framework_spec/app/spec/core/basicobject/method_missing_spec.rb +15 -0
  733. data/spec/framework_spec/app/spec/core/basicobject/new_spec.rb +7 -5
  734. data/spec/framework_spec/app/spec/core/basicobject/not_equal_spec.rb +26 -0
  735. data/spec/framework_spec/app/spec/core/basicobject/not_spec.rb +13 -0
  736. data/spec/framework_spec/app/spec/core/basicobject/singleton_method_added_spec.rb +8 -0
  737. data/spec/framework_spec/app/spec/core/basicobject/singleton_method_removed_spec.rb +8 -0
  738. data/spec/framework_spec/app/spec/core/basicobject/singleton_method_undefined_spec.rb +7 -0
  739. data/spec/framework_spec/app/spec/core/basicobject/superclass_spec.rb +9 -0
  740. data/spec/framework_spec/app/spec/core/bignum/abs_spec.rb +4 -5
  741. data/spec/framework_spec/app/spec/core/bignum/bit_and_spec.rb +4 -4
  742. data/spec/framework_spec/app/spec/core/bignum/bit_or_spec.rb +5 -5
  743. data/spec/framework_spec/app/spec/core/bignum/bit_xor_spec.rb +5 -5
  744. data/spec/framework_spec/app/spec/core/bignum/case_compare_spec.rb +7 -0
  745. data/spec/framework_spec/app/spec/core/bignum/coerce_spec.rb +1 -1
  746. data/spec/framework_spec/app/spec/core/bignum/comparison_spec.rb +143 -20
  747. data/spec/framework_spec/app/spec/core/bignum/complement_spec.rb +1 -1
  748. data/spec/framework_spec/app/spec/core/bignum/div_spec.rb +2 -2
  749. data/spec/framework_spec/app/spec/core/bignum/divide_spec.rb +2 -2
  750. data/spec/framework_spec/app/spec/core/bignum/divmod_spec.rb +11 -6
  751. data/spec/framework_spec/app/spec/core/bignum/element_reference_spec.rb +4 -4
  752. data/spec/framework_spec/app/spec/core/bignum/eql_spec.rb +1 -1
  753. data/spec/framework_spec/app/spec/core/bignum/equal_value_spec.rb +6 -6
  754. data/spec/framework_spec/app/spec/core/bignum/even_spec.rb +21 -0
  755. data/spec/framework_spec/app/spec/core/bignum/exponent_spec.rb +16 -2
  756. data/spec/framework_spec/app/spec/core/bignum/fdiv_spec.rb +7 -0
  757. data/spec/framework_spec/app/spec/core/bignum/gt_spec.rb +3 -3
  758. data/spec/framework_spec/app/spec/core/bignum/gte_spec.rb +2 -2
  759. data/spec/framework_spec/app/spec/core/bignum/hash_spec.rb +1 -1
  760. data/spec/framework_spec/app/spec/core/bignum/left_shift_spec.rb +64 -40
  761. data/spec/framework_spec/app/spec/core/bignum/lt_spec.rb +5 -5
  762. data/spec/framework_spec/app/spec/core/bignum/lte_spec.rb +2 -2
  763. data/spec/framework_spec/app/spec/core/bignum/magnitude_spec.rb +10 -0
  764. data/spec/framework_spec/app/spec/core/bignum/minus_spec.rb +3 -3
  765. data/spec/framework_spec/app/spec/core/bignum/modulo_spec.rb +2 -2
  766. data/spec/framework_spec/app/spec/core/bignum/multiply_spec.rb +2 -2
  767. data/spec/framework_spec/app/spec/core/bignum/odd_spec.rb +21 -0
  768. data/spec/framework_spec/app/spec/core/bignum/plus_spec.rb +3 -3
  769. data/spec/framework_spec/app/spec/core/bignum/quo_spec.rb +1 -1
  770. data/spec/framework_spec/app/spec/core/bignum/remainder_spec.rb +19 -8
  771. data/spec/framework_spec/app/spec/core/bignum/right_shift_spec.rb +93 -34
  772. data/spec/framework_spec/app/spec/core/bignum/shared/abs.rb +6 -0
  773. data/spec/framework_spec/app/spec/core/bignum/shared/divide.rb +2 -2
  774. data/spec/framework_spec/app/spec/core/bignum/shared/modulo.rb +13 -4
  775. data/spec/framework_spec/app/spec/core/bignum/size_spec.rb +15 -1
  776. data/spec/framework_spec/app/spec/core/bignum/to_f_spec.rb +1 -1
  777. data/spec/framework_spec/app/spec/core/bignum/to_s_spec.rb +4 -4
  778. data/spec/framework_spec/app/spec/core/bignum/uminus_spec.rb +2 -2
  779. data/spec/framework_spec/app/spec/core/binding/clone_spec.rb +7 -8
  780. data/spec/framework_spec/app/spec/core/binding/dup_spec.rb +7 -8
  781. data/spec/framework_spec/app/spec/core/binding/eval_spec.rb +19 -25
  782. data/spec/framework_spec/app/spec/core/binding/fixtures/classes.rb +1 -1
  783. data/spec/framework_spec/app/spec/core/builtin_constants/builtin_constants_spec.rb +57 -0
  784. data/spec/framework_spec/app/spec/core/class/allocate_spec.rb +11 -5
  785. data/spec/framework_spec/app/spec/core/class/dup_spec.rb +72 -0
  786. data/spec/framework_spec/app/spec/core/class/fixtures/classes.rb +5 -5
  787. data/spec/framework_spec/app/spec/core/class/inherited_spec.rb +22 -22
  788. data/spec/framework_spec/app/spec/core/class/initialize_copy_spec.rb +22 -1
  789. data/spec/framework_spec/app/spec/core/class/initialize_spec.rb +37 -6
  790. data/spec/framework_spec/app/spec/core/class/new_spec.rb +11 -2
  791. data/spec/framework_spec/app/spec/core/class/superclass_spec.rb +37 -8
  792. data/spec/framework_spec/app/spec/core/comparable/between_spec.rb +3 -3
  793. data/spec/framework_spec/app/spec/core/comparable/equal_value_spec.rb +11 -11
  794. data/spec/framework_spec/app/spec/core/comparable/fixtures/classes.rb +3 -3
  795. data/spec/framework_spec/app/spec/core/comparable/gt_spec.rb +8 -8
  796. data/spec/framework_spec/app/spec/core/comparable/gte_spec.rb +9 -9
  797. data/spec/framework_spec/app/spec/core/comparable/lt_spec.rb +9 -9
  798. data/spec/framework_spec/app/spec/core/comparable/lte_spec.rb +8 -8
  799. data/spec/framework_spec/app/spec/core/complex/Complex_spec.rb +20 -0
  800. data/spec/framework_spec/app/spec/core/complex/abs2_spec.rb +8 -0
  801. data/spec/framework_spec/app/spec/core/complex/abs_spec.rb +8 -0
  802. data/spec/framework_spec/app/spec/core/complex/angle_spec.rb +10 -0
  803. data/spec/framework_spec/app/spec/core/complex/arg_spec.rb +10 -0
  804. data/spec/framework_spec/app/spec/core/complex/coerce_spec.rb +8 -0
  805. data/spec/framework_spec/app/spec/core/complex/conj_spec.rb +10 -0
  806. data/spec/framework_spec/app/spec/core/complex/conjugate_spec.rb +10 -0
  807. data/spec/framework_spec/app/spec/core/complex/denominator_spec.rb +9 -0
  808. data/spec/framework_spec/app/spec/core/complex/divide_spec.rb +24 -0
  809. data/spec/framework_spec/app/spec/core/complex/eql_spec.rb +7 -0
  810. data/spec/framework_spec/app/spec/core/complex/equal_value_spec.rb +16 -0
  811. data/spec/framework_spec/app/spec/core/complex/exponent_spec.rb +24 -0
  812. data/spec/framework_spec/app/spec/core/complex/fdiv_spec.rb +131 -0
  813. data/spec/framework_spec/app/spec/core/complex/hash_spec.rb +8 -0
  814. data/spec/framework_spec/app/spec/core/complex/imag_spec.rb +7 -0
  815. data/spec/framework_spec/app/spec/core/complex/imaginary_spec.rb +7 -0
  816. data/spec/framework_spec/app/spec/core/complex/inspect_spec.rb +7 -0
  817. data/spec/framework_spec/app/spec/core/complex/integer_spec.rb +13 -0
  818. data/spec/framework_spec/app/spec/core/complex/magnitude_spec.rb +8 -0
  819. data/spec/framework_spec/app/spec/core/complex/marshal_dump_spec.rb +7 -0
  820. data/spec/framework_spec/app/spec/core/complex/marshal_load_spec.rb +7 -0
  821. data/spec/framework_spec/app/spec/core/complex/minus_spec.rb +15 -0
  822. data/spec/framework_spec/app/spec/core/complex/multiply_spec.rb +16 -0
  823. data/spec/framework_spec/app/spec/core/complex/numerator_spec.rb +7 -0
  824. data/spec/framework_spec/app/spec/core/complex/phase_spec.rb +7 -0
  825. data/spec/framework_spec/app/spec/core/complex/plus_spec.rb +16 -0
  826. data/spec/framework_spec/app/spec/core/complex/polar_spec.rb +17 -0
  827. data/spec/framework_spec/app/spec/core/complex/quo_spec.rb +7 -0
  828. data/spec/framework_spec/app/spec/core/complex/rationalize_spec.rb +15 -0
  829. data/spec/framework_spec/app/spec/core/complex/real_spec.rb +26 -0
  830. data/spec/framework_spec/app/spec/core/complex/rect_spec.rb +11 -0
  831. data/spec/framework_spec/app/spec/core/complex/rectangular_spec.rb +14 -0
  832. data/spec/framework_spec/app/spec/core/complex/to_f_spec.rb +7 -0
  833. data/spec/framework_spec/app/spec/core/complex/to_i_spec.rb +7 -0
  834. data/spec/framework_spec/app/spec/core/complex/to_r_spec.rb +7 -0
  835. data/spec/framework_spec/app/spec/core/complex/to_s_spec.rb +12 -0
  836. data/spec/framework_spec/app/spec/core/complex/uminus_spec.rb +7 -0
  837. data/spec/framework_spec/app/spec/core/continuation/call_spec.rb +8 -1
  838. data/spec/framework_spec/app/spec/core/continuation/element_reference_spec.rb +8 -1
  839. data/spec/framework_spec/app/spec/core/continuation/new_spec.rb +8 -0
  840. data/spec/framework_spec/app/spec/core/dir/chdir_spec.rb +64 -17
  841. data/spec/framework_spec/app/spec/core/dir/chroot_spec.rb +50 -26
  842. data/spec/framework_spec/app/spec/core/dir/close_spec.rb +32 -16
  843. data/spec/framework_spec/app/spec/core/dir/delete_spec.rb +11 -3
  844. data/spec/framework_spec/app/spec/core/dir/dir_spec.rb +1 -1
  845. data/spec/framework_spec/app/spec/core/dir/each_spec.rb +24 -8
  846. data/spec/framework_spec/app/spec/core/dir/element_reference_spec.rb +19 -3
  847. data/spec/framework_spec/app/spec/core/dir/entries_spec.rb +19 -3
  848. data/spec/framework_spec/app/spec/core/dir/exist_spec.rb +17 -0
  849. data/spec/framework_spec/app/spec/core/dir/exists_spec.rb +17 -0
  850. data/spec/framework_spec/app/spec/core/dir/fixtures/common.rb +96 -73
  851. data/spec/framework_spec/app/spec/core/dir/foreach_spec.rb +20 -4
  852. data/spec/framework_spec/app/spec/core/dir/getwd_spec.rb +12 -4
  853. data/spec/framework_spec/app/spec/core/dir/glob_spec.rb +60 -8
  854. data/spec/framework_spec/app/spec/core/dir/home_spec.rb +15 -6
  855. data/spec/framework_spec/app/spec/core/dir/initialize_spec.rb +29 -2
  856. data/spec/framework_spec/app/spec/core/dir/inspect_spec.rb +26 -0
  857. data/spec/framework_spec/app/spec/core/dir/mkdir_spec.rb +56 -21
  858. data/spec/framework_spec/app/spec/core/dir/open_spec.rb +11 -3
  859. data/spec/framework_spec/app/spec/core/dir/path_spec.rb +8 -24
  860. data/spec/framework_spec/app/spec/core/dir/pos_spec.rb +28 -4
  861. data/spec/framework_spec/app/spec/core/dir/pwd_spec.rb +44 -20
  862. data/spec/framework_spec/app/spec/core/dir/read_spec.rb +11 -5
  863. data/spec/framework_spec/app/spec/core/dir/rewind_spec.rb +13 -7
  864. data/spec/framework_spec/app/spec/core/dir/rmdir_spec.rb +11 -3
  865. data/spec/framework_spec/app/spec/core/dir/seek_spec.rb +11 -3
  866. data/spec/framework_spec/app/spec/core/dir/shared/chroot.rb +43 -0
  867. data/spec/framework_spec/app/spec/core/dir/shared/delete.rb +27 -8
  868. data/spec/framework_spec/app/spec/core/dir/shared/exists.rb +53 -0
  869. data/spec/framework_spec/app/spec/core/dir/shared/glob.rb +61 -8
  870. data/spec/framework_spec/app/spec/core/dir/shared/open.rb +18 -2
  871. data/spec/framework_spec/app/spec/core/dir/shared/path.rb +29 -0
  872. data/spec/framework_spec/app/spec/core/dir/shared/pos.rb +1 -1
  873. data/spec/framework_spec/app/spec/core/dir/shared/pwd.rb +13 -13
  874. data/spec/framework_spec/app/spec/core/dir/tell_spec.rb +12 -6
  875. data/spec/framework_spec/app/spec/core/dir/to_path.rb +17 -0
  876. data/spec/framework_spec/app/spec/core/dir/to_path_spec.rb +7 -0
  877. data/spec/framework_spec/app/spec/core/dir/unlink_spec.rb +11 -3
  878. data/spec/framework_spec/app/spec/core/encoding/_dump_spec.rb +7 -0
  879. data/spec/framework_spec/app/spec/core/encoding/_load_spec.rb +7 -0
  880. data/spec/framework_spec/app/spec/core/encoding/aliases_spec.rb +45 -0
  881. data/spec/framework_spec/app/spec/core/encoding/ascii_compatible_spec.rb +13 -0
  882. data/spec/framework_spec/app/spec/core/encoding/compatible_spec.rb +26 -0
  883. data/spec/framework_spec/app/spec/core/encoding/converter/asciicompat_encoding_spec.rb +48 -0
  884. data/spec/framework_spec/app/spec/core/encoding/converter/constants_spec.rb +133 -0
  885. data/spec/framework_spec/app/spec/core/encoding/converter/convert_spec.rb +46 -0
  886. data/spec/framework_spec/app/spec/core/encoding/converter/convpath_spec.rb +65 -0
  887. data/spec/framework_spec/app/spec/core/encoding/converter/destination_encoding_spec.rb +13 -0
  888. data/spec/framework_spec/app/spec/core/encoding/converter/finish_spec.rb +38 -0
  889. data/spec/framework_spec/app/spec/core/encoding/converter/insert_output_spec.rb +7 -0
  890. data/spec/framework_spec/app/spec/core/encoding/converter/inspect_spec.rb +7 -0
  891. data/spec/framework_spec/app/spec/core/encoding/converter/last_error_spec.rb +84 -0
  892. data/spec/framework_spec/app/spec/core/encoding/converter/primitive_convert_spec.rb +137 -0
  893. data/spec/framework_spec/app/spec/core/encoding/converter/primitive_errinfo_spec.rb +71 -0
  894. data/spec/framework_spec/app/spec/core/encoding/converter/putback_spec.rb +49 -0
  895. data/spec/framework_spec/app/spec/core/encoding/converter/replacement_spec.rb +63 -0
  896. data/spec/framework_spec/app/spec/core/encoding/converter/search_convpath_spec.rb +73 -0
  897. data/spec/framework_spec/app/spec/core/encoding/converter/source_encoding_spec.rb +13 -0
  898. data/spec/framework_spec/app/spec/core/encoding/default_external_spec.rb +57 -0
  899. data/spec/framework_spec/app/spec/core/encoding/default_internal_spec.rb +83 -0
  900. data/spec/framework_spec/app/spec/core/encoding/dummy_spec.rb +16 -0
  901. data/spec/framework_spec/app/spec/core/encoding/find_spec.rb +82 -0
  902. data/spec/framework_spec/app/spec/core/encoding/fixtures/classes.rb +48 -0
  903. data/spec/framework_spec/app/spec/core/encoding/inspect_spec.rb +21 -0
  904. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/destination_encoding_name_spec.rb +20 -0
  905. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/destination_encoding_spec.rb +20 -0
  906. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/error_bytes_spec.rb +31 -0
  907. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/incomplete_input_spec.rb +30 -0
  908. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/readagain_bytes_spec.rb +31 -0
  909. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/source_encoding_name_spec.rb +30 -0
  910. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/source_encoding_spec.rb +35 -0
  911. data/spec/framework_spec/app/spec/core/encoding/list_spec.rb +43 -0
  912. data/spec/framework_spec/app/spec/core/encoding/locale_charmap_spec.rb +38 -0
  913. data/spec/framework_spec/app/spec/core/encoding/name_list_spec.rb +25 -0
  914. data/spec/framework_spec/app/spec/core/encoding/name_spec.rb +7 -0
  915. data/spec/framework_spec/app/spec/core/encoding/names_spec.rb +37 -0
  916. data/spec/framework_spec/app/spec/core/encoding/replicate_spec.rb +34 -0
  917. data/spec/framework_spec/app/spec/core/encoding/shared/name.rb +15 -0
  918. data/spec/framework_spec/app/spec/core/encoding/to_s_spec.rb +7 -0
  919. data/spec/framework_spec/app/spec/core/encoding/undefined_conversion_error/destination_encoding_name_spec.rb +17 -0
  920. data/spec/framework_spec/app/spec/core/encoding/undefined_conversion_error/destination_encoding_spec.rb +17 -0
  921. data/spec/framework_spec/app/spec/core/encoding/undefined_conversion_error/error_char_spec.rb +29 -0
  922. data/spec/framework_spec/app/spec/core/encoding/undefined_conversion_error/source_encoding_name_spec.rb +30 -0
  923. data/spec/framework_spec/app/spec/core/encoding/undefined_conversion_error/source_encoding_spec.rb +31 -0
  924. data/spec/framework_spec/app/spec/core/enumerable/all_spec.rb +2 -15
  925. data/spec/framework_spec/app/spec/core/enumerable/any_spec.rb +2 -7
  926. data/spec/framework_spec/app/spec/core/enumerable/chunk_spec.rb +44 -0
  927. data/spec/framework_spec/app/spec/core/enumerable/collect_concat_spec.rb +9 -0
  928. data/spec/framework_spec/app/spec/core/enumerable/collect_spec.rb +4 -4
  929. data/spec/framework_spec/app/spec/core/enumerable/count_spec.rb +4 -4
  930. data/spec/framework_spec/app/spec/core/enumerable/cycle_spec.rb +20 -6
  931. data/spec/framework_spec/app/spec/core/enumerable/detect_spec.rb +4 -4
  932. data/spec/framework_spec/app/spec/core/enumerable/drop_spec.rb +2 -2
  933. data/spec/framework_spec/app/spec/core/enumerable/drop_while_spec.rb +5 -5
  934. data/spec/framework_spec/app/spec/core/enumerable/each_cons_spec.rb +8 -8
  935. data/spec/framework_spec/app/spec/core/enumerable/each_entry_spec.rb +40 -0
  936. data/spec/framework_spec/app/spec/core/enumerable/each_slice_spec.rb +8 -8
  937. data/spec/framework_spec/app/spec/core/enumerable/each_with_index_spec.rb +15 -15
  938. data/spec/framework_spec/app/spec/core/enumerable/each_with_object_spec.rb +6 -6
  939. data/spec/framework_spec/app/spec/core/enumerable/entries_spec.rb +5 -5
  940. data/spec/framework_spec/app/spec/core/enumerable/find_all_spec.rb +4 -4
  941. data/spec/framework_spec/app/spec/core/enumerable/{find_index.rb → find_index_spec.rb} +5 -5
  942. data/spec/framework_spec/app/spec/core/enumerable/find_spec.rb +4 -4
  943. data/spec/framework_spec/app/spec/core/enumerable/first_spec.rb +6 -6
  944. data/spec/framework_spec/app/spec/core/enumerable/fixtures/classes.rb +67 -16
  945. data/spec/framework_spec/app/spec/core/enumerable/flat_map_spec.rb +9 -0
  946. data/spec/framework_spec/app/spec/core/enumerable/grep_spec.rb +12 -7
  947. data/spec/framework_spec/app/spec/core/enumerable/group_by_spec.rb +5 -5
  948. data/spec/framework_spec/app/spec/core/enumerable/include_spec.rb +4 -4
  949. data/spec/framework_spec/app/spec/core/enumerable/inject_spec.rb +4 -4
  950. data/spec/framework_spec/app/spec/core/enumerable/map_spec.rb +5 -5
  951. data/spec/framework_spec/app/spec/core/enumerable/max_by_spec.rb +4 -4
  952. data/spec/framework_spec/app/spec/core/enumerable/max_spec.rb +27 -12
  953. data/spec/framework_spec/app/spec/core/enumerable/member_spec.rb +4 -4
  954. data/spec/framework_spec/app/spec/core/enumerable/min_by_spec.rb +4 -4
  955. data/spec/framework_spec/app/spec/core/enumerable/min_spec.rb +27 -11
  956. data/spec/framework_spec/app/spec/core/enumerable/minmax_by_spec.rb +4 -4
  957. data/spec/framework_spec/app/spec/core/enumerable/minmax_spec.rb +26 -10
  958. data/spec/framework_spec/app/spec/core/enumerable/none_spec.rb +42 -0
  959. data/spec/framework_spec/app/spec/core/enumerable/one_spec.rb +5 -0
  960. data/spec/framework_spec/app/spec/core/enumerable/partition_spec.rb +4 -4
  961. data/spec/framework_spec/app/spec/core/enumerable/reduce_spec.rb +4 -4
  962. data/spec/framework_spec/app/spec/core/enumerable/reject_spec.rb +5 -5
  963. data/spec/framework_spec/app/spec/core/enumerable/reverse_each_spec.rb +4 -4
  964. data/spec/framework_spec/app/spec/core/enumerable/select_spec.rb +4 -4
  965. data/spec/framework_spec/app/spec/core/enumerable/shared/collect.rb +13 -5
  966. data/spec/framework_spec/app/spec/core/enumerable/shared/collect_concat.rb +27 -0
  967. data/spec/framework_spec/app/spec/core/enumerable/shared/entries.rb +5 -1
  968. data/spec/framework_spec/app/spec/core/enumerable/shared/find.rb +24 -11
  969. data/spec/framework_spec/app/spec/core/enumerable/shared/find_all.rb +9 -3
  970. data/spec/framework_spec/app/spec/core/enumerable/shared/include.rb +14 -3
  971. data/spec/framework_spec/app/spec/core/enumerable/shared/inject.rb +8 -8
  972. data/spec/framework_spec/app/spec/core/enumerable/shared/take.rb +5 -3
  973. data/spec/framework_spec/app/spec/core/enumerable/slice_before_spec.rb +77 -0
  974. data/spec/framework_spec/app/spec/core/enumerable/sort_by_spec.rb +10 -2
  975. data/spec/framework_spec/app/spec/core/enumerable/sort_spec.rb +22 -9
  976. data/spec/framework_spec/app/spec/core/enumerable/take_spec.rb +5 -5
  977. data/spec/framework_spec/app/spec/core/enumerable/take_while_spec.rb +3 -3
  978. data/spec/framework_spec/app/spec/core/enumerable/to_a_spec.rb +5 -5
  979. data/spec/framework_spec/app/spec/core/enumerable/zip_spec.rb +18 -7
  980. data/spec/framework_spec/app/spec/core/enumerator/each_spec.rb +7 -0
  981. data/spec/framework_spec/app/spec/core/enumerator/each_with_index_spec.rb +25 -0
  982. data/spec/framework_spec/app/spec/core/enumerator/each_with_object_spec.rb +8 -0
  983. data/spec/framework_spec/app/spec/core/enumerator/enum_for_spec.rb +9 -0
  984. data/spec/framework_spec/app/spec/core/enumerator/feed_spec.rb +7 -0
  985. data/spec/framework_spec/app/spec/core/enumerator/generator/each_spec.rb +7 -0
  986. data/spec/framework_spec/app/spec/core/enumerator/inspect_spec.rb +7 -0
  987. data/spec/framework_spec/app/spec/core/enumerator/new_spec.rb +28 -0
  988. data/spec/framework_spec/app/spec/core/enumerator/next_spec.rb +9 -0
  989. data/spec/framework_spec/app/spec/core/enumerator/next_values_spec.rb +7 -0
  990. data/spec/framework_spec/app/spec/core/enumerator/peek_spec.rb +38 -0
  991. data/spec/framework_spec/app/spec/core/enumerator/peek_values_spec.rb +7 -0
  992. data/spec/framework_spec/app/spec/core/enumerator/rewind_spec.rb +27 -0
  993. data/spec/framework_spec/app/spec/core/enumerator/to_enum_spec.rb +9 -0
  994. data/spec/framework_spec/app/spec/core/enumerator/with_index_spec.rb +68 -0
  995. data/spec/framework_spec/app/spec/core/enumerator/with_object_spec.rb +8 -0
  996. data/spec/framework_spec/app/spec/core/enumerator/yielder/append_spec.rb +19 -0
  997. data/spec/framework_spec/app/spec/core/enumerator/yielder/yield_spec.rb +18 -0
  998. data/spec/framework_spec/app/spec/core/env/clear_spec.rb +19 -13
  999. data/spec/framework_spec/app/spec/core/env/delete_if_spec.rb +26 -28
  1000. data/spec/framework_spec/app/spec/core/env/delete_spec.rb +1 -1
  1001. data/spec/framework_spec/app/spec/core/env/each_key_spec.rb +39 -33
  1002. data/spec/framework_spec/app/spec/core/env/each_pair_spec.rb +6 -7
  1003. data/spec/framework_spec/app/spec/core/env/each_spec.rb +6 -7
  1004. data/spec/framework_spec/app/spec/core/env/each_value_spec.rb +39 -33
  1005. data/spec/framework_spec/app/spec/core/env/element_reference_spec.rb +25 -2
  1006. data/spec/framework_spec/app/spec/core/env/element_set_spec.rb +2 -2
  1007. data/spec/framework_spec/app/spec/core/env/empty_spec.rb +23 -24
  1008. data/spec/framework_spec/app/spec/core/env/fetch_spec.rb +6 -1
  1009. data/spec/framework_spec/app/spec/core/env/has_key_spec.rb +2 -2
  1010. data/spec/framework_spec/app/spec/core/env/has_value_spec.rb +6 -7
  1011. data/spec/framework_spec/app/spec/core/env/include_spec.rb +2 -2
  1012. data/spec/framework_spec/app/spec/core/env/index_spec.rb +6 -1
  1013. data/spec/framework_spec/app/spec/core/env/indexes_spec.rb +1 -1
  1014. data/spec/framework_spec/app/spec/core/env/indices_spec.rb +1 -1
  1015. data/spec/framework_spec/app/spec/core/env/inspect_spec.rb +11 -12
  1016. data/spec/framework_spec/app/spec/core/env/invert_spec.rb +12 -13
  1017. data/spec/framework_spec/app/spec/core/env/key_spec.rb +9 -2
  1018. data/spec/framework_spec/app/spec/core/env/keys_spec.rb +16 -9
  1019. data/spec/framework_spec/app/spec/core/env/length_spec.rb +6 -7
  1020. data/spec/framework_spec/app/spec/core/env/member_spec.rb +2 -2
  1021. data/spec/framework_spec/app/spec/core/env/rehash_spec.rb +1 -1
  1022. data/spec/framework_spec/app/spec/core/env/reject_spec.rb +88 -89
  1023. data/spec/framework_spec/app/spec/core/env/replace_spec.rb +15 -16
  1024. data/spec/framework_spec/app/spec/core/env/select_spec.rb +32 -23
  1025. data/spec/framework_spec/app/spec/core/env/shared/each.rb +10 -1
  1026. data/spec/framework_spec/app/spec/core/env/shared/key.rb +15 -0
  1027. data/spec/framework_spec/app/spec/core/env/shared/store.rb +18 -12
  1028. data/spec/framework_spec/app/spec/core/env/shared/value.rb +7 -0
  1029. data/spec/framework_spec/app/spec/core/env/shift_spec.rb +27 -28
  1030. data/spec/framework_spec/app/spec/core/env/size_spec.rb +6 -7
  1031. data/spec/framework_spec/app/spec/core/env/store_spec.rb +2 -2
  1032. data/spec/framework_spec/app/spec/core/env/to_a_spec.rb +21 -13
  1033. data/spec/framework_spec/app/spec/core/env/to_hash_spec.rb +12 -13
  1034. data/spec/framework_spec/app/spec/core/env/to_s_spec.rb +1 -1
  1035. data/spec/framework_spec/app/spec/core/env/update_spec.rb +1 -2
  1036. data/spec/framework_spec/app/spec/core/env/value_spec.rb +6 -7
  1037. data/spec/framework_spec/app/spec/core/env/values_at_spec.rb +7 -1
  1038. data/spec/framework_spec/app/spec/core/env/values_spec.rb +23 -16
  1039. data/spec/framework_spec/app/spec/core/exception/args_spec.rb +5 -0
  1040. data/spec/framework_spec/app/spec/core/exception/arguments_spec.rb +1 -1
  1041. data/spec/framework_spec/app/spec/core/exception/backtrace_spec.rb +51 -1
  1042. data/spec/framework_spec/app/spec/core/exception/case_compare_spec.rb +5 -1
  1043. data/spec/framework_spec/app/spec/core/exception/destination_encoding_name_spec.rb +13 -0
  1044. data/spec/framework_spec/app/spec/core/exception/destination_encoding_spec.rb +13 -0
  1045. data/spec/framework_spec/app/spec/core/exception/equal_value_spec.rb +84 -0
  1046. data/spec/framework_spec/app/spec/core/exception/errno_spec.rb +16 -1
  1047. data/spec/framework_spec/app/spec/core/exception/error_bytes_spec.rb +7 -0
  1048. data/spec/framework_spec/app/spec/core/exception/error_char_spec.rb +7 -0
  1049. data/spec/framework_spec/app/spec/core/exception/exception_spec.rb +69 -5
  1050. data/spec/framework_spec/app/spec/core/exception/exit_value_spec.rb +5 -1
  1051. data/spec/framework_spec/app/spec/core/exception/fixtures/common.rb +33 -1
  1052. data/spec/framework_spec/app/spec/core/exception/incomplete_input_spec.rb +7 -0
  1053. data/spec/framework_spec/app/spec/core/exception/initialize_spec.rb +1 -1
  1054. data/spec/framework_spec/app/spec/core/exception/inspect_spec.rb +2 -2
  1055. data/spec/framework_spec/app/spec/core/exception/io_error_spec.rb +1 -1
  1056. data/spec/framework_spec/app/spec/core/exception/message_spec.rb +14 -4
  1057. data/spec/framework_spec/app/spec/core/exception/name_error_spec.rb +2 -2
  1058. data/spec/framework_spec/app/spec/core/exception/name_spec.rb +5 -1
  1059. data/spec/framework_spec/app/spec/core/exception/new_spec.rb +3 -2
  1060. data/spec/framework_spec/app/spec/core/exception/no_method_error_spec.rb +5 -5
  1061. data/spec/framework_spec/app/spec/core/exception/range_error_spec.rb +1 -1
  1062. data/spec/framework_spec/app/spec/core/exception/readagain_bytes_spec.rb +7 -0
  1063. data/spec/framework_spec/app/spec/core/exception/reason_spec.rb +5 -0
  1064. data/spec/framework_spec/app/spec/core/exception/result_spec.rb +7 -0
  1065. data/spec/framework_spec/app/spec/core/exception/script_error_spec.rb +1 -1
  1066. data/spec/framework_spec/app/spec/core/exception/set_backtrace_spec.rb +10 -1
  1067. data/spec/framework_spec/app/spec/core/exception/shared/new.rb +5 -0
  1068. data/spec/framework_spec/app/spec/core/exception/shared/to_s.rb +3 -3
  1069. data/spec/framework_spec/app/spec/core/exception/signm_spec.rb +5 -0
  1070. data/spec/framework_spec/app/spec/core/exception/signo_spec.rb +5 -0
  1071. data/spec/framework_spec/app/spec/core/exception/source_encoding_name_spec.rb +13 -0
  1072. data/spec/framework_spec/app/spec/core/exception/source_encoding_spec.rb +13 -0
  1073. data/spec/framework_spec/app/spec/core/exception/standard_error_spec.rb +56 -55
  1074. data/spec/framework_spec/app/spec/core/exception/status_spec.rb +5 -0
  1075. data/spec/framework_spec/app/spec/core/exception/success_spec.rb +5 -0
  1076. data/spec/framework_spec/app/spec/core/exception/system_call_error_spec.rb +14 -5
  1077. data/spec/framework_spec/app/spec/core/exception/to_s_spec.rb +7 -3
  1078. data/spec/framework_spec/app/spec/core/exception/to_str_spec.rb +5 -5
  1079. data/spec/framework_spec/app/spec/core/false/and_spec.rb +1 -1
  1080. data/spec/framework_spec/app/spec/core/false/inspect_spec.rb +1 -1
  1081. data/spec/framework_spec/app/spec/core/false/or_spec.rb +1 -1
  1082. data/spec/framework_spec/app/spec/core/false/to_s_spec.rb +1 -1
  1083. data/spec/framework_spec/app/spec/core/false/xor_spec.rb +1 -1
  1084. data/spec/framework_spec/app/spec/core/fiber/new_spec.rb +48 -49
  1085. data/spec/framework_spec/app/spec/core/fiber/resume_spec.rb +39 -23
  1086. data/spec/framework_spec/app/spec/core/fiber/yield_spec.rb +34 -36
  1087. data/spec/framework_spec/app/spec/core/file/absolute_path_spec.rb +31 -0
  1088. data/spec/framework_spec/app/spec/core/file/atime_spec.rb +12 -5
  1089. data/spec/framework_spec/app/spec/core/file/basename_spec.rb +25 -26
  1090. data/spec/framework_spec/app/spec/core/file/blockdev_spec.rb +2 -2
  1091. data/spec/framework_spec/app/spec/core/file/chardev_spec.rb +2 -2
  1092. data/spec/framework_spec/app/spec/core/file/chmod_spec.rb +14 -10
  1093. data/spec/framework_spec/app/spec/core/file/chown_spec.rb +22 -4
  1094. data/spec/framework_spec/app/spec/core/file/constants/constants_spec.rb +7 -7
  1095. data/spec/framework_spec/app/spec/core/file/constants_spec.rb +1 -1
  1096. data/spec/framework_spec/app/spec/core/file/ctime_spec.rb +13 -6
  1097. data/spec/framework_spec/app/spec/core/file/delete_spec.rb +2 -2
  1098. data/spec/framework_spec/app/spec/core/file/directory_spec.rb +6 -2
  1099. data/spec/framework_spec/app/spec/core/file/dirname_spec.rb +12 -2
  1100. data/spec/framework_spec/app/spec/core/file/executable_real_spec.rb +2 -2
  1101. data/spec/framework_spec/app/spec/core/file/executable_spec.rb +2 -2
  1102. data/spec/framework_spec/app/spec/core/file/exist_spec.rb +2 -2
  1103. data/spec/framework_spec/app/spec/core/file/exists_spec.rb +2 -2
  1104. data/spec/framework_spec/app/spec/core/file/expand_path_spec.rb +133 -31
  1105. data/spec/framework_spec/app/spec/core/file/extname_spec.rb +7 -1
  1106. data/spec/framework_spec/app/spec/core/file/file_spec.rb +2 -2
  1107. data/spec/framework_spec/app/spec/core/file/fixtures/common.rb +22 -0
  1108. data/spec/framework_spec/app/spec/core/file/fixtures/file_types.rb +3 -9
  1109. data/spec/framework_spec/app/spec/core/file/flock_spec.rb +56 -18
  1110. data/spec/framework_spec/app/spec/core/file/fnmatch_spec.rb +2 -2
  1111. data/spec/framework_spec/app/spec/core/file/ftype_spec.rb +43 -45
  1112. data/spec/framework_spec/app/spec/core/file/grpowned_spec.rb +2 -2
  1113. data/spec/framework_spec/app/spec/core/file/identical_spec.rb +2 -2
  1114. data/spec/framework_spec/app/spec/core/file/initialize_spec.rb +25 -1
  1115. data/spec/framework_spec/app/spec/core/file/inspect_spec.rb +14 -7
  1116. data/spec/framework_spec/app/spec/core/file/join_spec.rb +37 -10
  1117. data/spec/framework_spec/app/spec/core/file/lchmod_spec.rb +13 -13
  1118. data/spec/framework_spec/app/spec/core/file/lchown_spec.rb +12 -6
  1119. data/spec/framework_spec/app/spec/core/file/link_spec.rb +7 -9
  1120. data/spec/framework_spec/app/spec/core/file/lstat_spec.rb +16 -11
  1121. data/spec/framework_spec/app/spec/core/file/mtime_spec.rb +7 -6
  1122. data/spec/framework_spec/app/spec/core/file/new_spec.rb +60 -44
  1123. data/spec/framework_spec/app/spec/core/file/open_spec.rb +104 -120
  1124. data/spec/framework_spec/app/spec/core/file/owned_spec.rb +26 -3
  1125. data/spec/framework_spec/app/spec/core/file/path_spec.rb +11 -10
  1126. data/spec/framework_spec/app/spec/core/file/pipe_spec.rb +25 -3
  1127. data/spec/framework_spec/app/spec/core/file/read_spec.rb +6 -0
  1128. data/spec/framework_spec/app/spec/core/file/readable_real_spec.rb +2 -2
  1129. data/spec/framework_spec/app/spec/core/file/readable_spec.rb +2 -2
  1130. data/spec/framework_spec/app/spec/core/file/readlink_spec.rb +17 -13
  1131. data/spec/framework_spec/app/spec/core/file/realdirpath_spec.rb +7 -0
  1132. data/spec/framework_spec/app/spec/core/file/realpath_spec.rb +7 -0
  1133. data/spec/framework_spec/app/spec/core/file/rename_spec.rb +24 -27
  1134. data/spec/framework_spec/app/spec/core/file/reopen_spec.rb +27 -0
  1135. data/spec/framework_spec/app/spec/core/file/setgid_spec.rb +21 -21
  1136. data/spec/framework_spec/app/spec/core/file/setuid_spec.rb +21 -21
  1137. data/spec/framework_spec/app/spec/core/file/shared/fnmatch.rb +11 -5
  1138. data/spec/framework_spec/app/spec/core/file/shared/open.rb +9 -0
  1139. data/spec/framework_spec/app/spec/core/file/shared/read.rb +21 -0
  1140. data/spec/framework_spec/app/spec/core/file/shared/stat.rb +31 -17
  1141. data/spec/framework_spec/app/spec/core/file/shared/unlink.rb +8 -4
  1142. data/spec/framework_spec/app/spec/core/file/size_spec.rb +111 -22
  1143. data/spec/framework_spec/app/spec/core/file/socket_spec.rb +24 -3
  1144. data/spec/framework_spec/app/spec/core/file/split_spec.rb +12 -7
  1145. data/spec/framework_spec/app/spec/core/file/stat/atime_spec.rb +6 -6
  1146. data/spec/framework_spec/app/spec/core/file/stat/blksize_spec.rb +6 -5
  1147. data/spec/framework_spec/app/spec/core/file/stat/blockdev_spec.rb +3 -3
  1148. data/spec/framework_spec/app/spec/core/file/stat/blocks_spec.rb +6 -5
  1149. data/spec/framework_spec/app/spec/core/file/stat/chardev_spec.rb +4 -4
  1150. data/spec/framework_spec/app/spec/core/file/stat/comparison_spec.rb +14 -9
  1151. data/spec/framework_spec/app/spec/core/file/stat/ctime_spec.rb +6 -6
  1152. data/spec/framework_spec/app/spec/core/file/stat/dev_major_spec.rb +12 -3
  1153. data/spec/framework_spec/app/spec/core/file/stat/dev_minor_spec.rb +13 -3
  1154. data/spec/framework_spec/app/spec/core/file/stat/dev_spec.rb +10 -2
  1155. data/spec/framework_spec/app/spec/core/file/stat/directory_spec.rb +3 -3
  1156. data/spec/framework_spec/app/spec/core/file/stat/executable_real_spec.rb +3 -3
  1157. data/spec/framework_spec/app/spec/core/file/stat/executable_spec.rb +3 -3
  1158. data/spec/framework_spec/app/spec/core/file/stat/file_spec.rb +3 -3
  1159. data/spec/framework_spec/app/spec/core/file/stat/ftype_spec.rb +14 -17
  1160. data/spec/framework_spec/app/spec/core/file/stat/gid_spec.rb +5 -5
  1161. data/spec/framework_spec/app/spec/core/file/stat/grpowned_spec.rb +3 -3
  1162. data/spec/framework_spec/app/spec/core/file/stat/ino_spec.rb +6 -5
  1163. data/spec/framework_spec/app/spec/core/file/stat/inspect_spec.rb +8 -10
  1164. data/spec/framework_spec/app/spec/core/file/stat/mode_spec.rb +6 -5
  1165. data/spec/framework_spec/app/spec/core/file/stat/mtime_spec.rb +6 -6
  1166. data/spec/framework_spec/app/spec/core/file/stat/new_spec.rb +11 -4
  1167. data/spec/framework_spec/app/spec/core/file/stat/nlink_spec.rb +5 -6
  1168. data/spec/framework_spec/app/spec/core/file/stat/owned_spec.rb +24 -4
  1169. data/spec/framework_spec/app/spec/core/file/stat/pipe_spec.rb +25 -4
  1170. data/spec/framework_spec/app/spec/core/file/stat/rdev_major_spec.rb +11 -3
  1171. data/spec/framework_spec/app/spec/core/file/stat/rdev_minor_spec.rb +13 -3
  1172. data/spec/framework_spec/app/spec/core/file/stat/rdev_spec.rb +10 -2
  1173. data/spec/framework_spec/app/spec/core/file/stat/readable_real_spec.rb +3 -3
  1174. data/spec/framework_spec/app/spec/core/file/stat/readable_spec.rb +3 -3
  1175. data/spec/framework_spec/app/spec/core/file/stat/setgid_spec.rb +3 -3
  1176. data/spec/framework_spec/app/spec/core/file/stat/setuid_spec.rb +3 -3
  1177. data/spec/framework_spec/app/spec/core/file/stat/size_spec.rb +18 -4
  1178. data/spec/framework_spec/app/spec/core/file/stat/socket_spec.rb +3 -3
  1179. data/spec/framework_spec/app/spec/core/file/stat/sticky_spec.rb +3 -3
  1180. data/spec/framework_spec/app/spec/core/file/stat/symlink_spec.rb +3 -3
  1181. data/spec/framework_spec/app/spec/core/file/stat/uid_spec.rb +5 -5
  1182. data/spec/framework_spec/app/spec/core/file/stat/world_readable_spec.rb +15 -0
  1183. data/spec/framework_spec/app/spec/core/file/stat/world_writable_spec.rb +17 -0
  1184. data/spec/framework_spec/app/spec/core/file/stat/writable_real_spec.rb +3 -3
  1185. data/spec/framework_spec/app/spec/core/file/stat/writable_spec.rb +3 -3
  1186. data/spec/framework_spec/app/spec/core/file/stat/zero_spec.rb +3 -3
  1187. data/spec/framework_spec/app/spec/core/file/stat_spec.rb +23 -6
  1188. data/spec/framework_spec/app/spec/core/file/sticky_spec.rb +49 -3
  1189. data/spec/framework_spec/app/spec/core/file/symlink_spec.rb +18 -11
  1190. data/spec/framework_spec/app/spec/core/file/to_path_spec.rb +48 -0
  1191. data/spec/framework_spec/app/spec/core/file/truncate_spec.rb +34 -39
  1192. data/spec/framework_spec/app/spec/core/file/umask_spec.rb +20 -21
  1193. data/spec/framework_spec/app/spec/core/file/unlink_spec.rb +2 -2
  1194. data/spec/framework_spec/app/spec/core/file/utime_spec.rb +20 -5
  1195. data/spec/framework_spec/app/spec/core/file/world_readable_spec.rb +14 -0
  1196. data/spec/framework_spec/app/spec/core/file/world_writable_spec.rb +16 -0
  1197. data/spec/framework_spec/app/spec/core/file/writable_real_spec.rb +2 -2
  1198. data/spec/framework_spec/app/spec/core/file/writable_spec.rb +2 -2
  1199. data/spec/framework_spec/app/spec/core/file/zero_spec.rb +2 -2
  1200. data/spec/framework_spec/app/spec/core/filetest/blockdev_spec.rb +2 -2
  1201. data/spec/framework_spec/app/spec/core/filetest/chardev_spec.rb +3 -3
  1202. data/spec/framework_spec/app/spec/core/filetest/directory_spec.rb +6 -2
  1203. data/spec/framework_spec/app/spec/core/filetest/executable_real_spec.rb +2 -2
  1204. data/spec/framework_spec/app/spec/core/filetest/executable_spec.rb +2 -2
  1205. data/spec/framework_spec/app/spec/core/filetest/exist_spec.rb +2 -2
  1206. data/spec/framework_spec/app/spec/core/filetest/exists_spec.rb +2 -2
  1207. data/spec/framework_spec/app/spec/core/filetest/file_spec.rb +6 -2
  1208. data/spec/framework_spec/app/spec/core/filetest/grpowned_spec.rb +6 -2
  1209. data/spec/framework_spec/app/spec/core/filetest/identical_spec.rb +2 -2
  1210. data/spec/framework_spec/app/spec/core/filetest/owned_spec.rb +6 -2
  1211. data/spec/framework_spec/app/spec/core/filetest/pipe_spec.rb +6 -2
  1212. data/spec/framework_spec/app/spec/core/filetest/readable_real_spec.rb +2 -2
  1213. data/spec/framework_spec/app/spec/core/filetest/readable_spec.rb +2 -2
  1214. data/spec/framework_spec/app/spec/core/filetest/setgid_spec.rb +6 -2
  1215. data/spec/framework_spec/app/spec/core/filetest/setuid_spec.rb +6 -2
  1216. data/spec/framework_spec/app/spec/core/filetest/size_spec.rb +31 -4
  1217. data/spec/framework_spec/app/spec/core/filetest/socket_spec.rb +6 -2
  1218. data/spec/framework_spec/app/spec/core/filetest/sticky_spec.rb +3 -2
  1219. data/spec/framework_spec/app/spec/core/filetest/symlink_spec.rb +5 -2
  1220. data/spec/framework_spec/app/spec/core/filetest/world_readable_spec.rb +7 -0
  1221. data/spec/framework_spec/app/spec/core/filetest/world_writable_spec.rb +7 -0
  1222. data/spec/framework_spec/app/spec/core/filetest/writable_real_spec.rb +2 -2
  1223. data/spec/framework_spec/app/spec/core/filetest/writable_spec.rb +2 -2
  1224. data/spec/framework_spec/app/spec/core/filetest/zero_spec.rb +2 -2
  1225. data/spec/framework_spec/app/spec/core/fixnum/abs_spec.rb +4 -8
  1226. data/spec/framework_spec/app/spec/core/fixnum/bit_and_spec.rb +6 -6
  1227. data/spec/framework_spec/app/spec/core/fixnum/bit_or_spec.rb +6 -6
  1228. data/spec/framework_spec/app/spec/core/fixnum/bit_xor_spec.rb +9 -9
  1229. data/spec/framework_spec/app/spec/core/fixnum/case_compare_spec.rb +7 -0
  1230. data/spec/framework_spec/app/spec/core/fixnum/coerce_spec.rb +2 -2
  1231. data/spec/framework_spec/app/spec/core/fixnum/comparison_spec.rb +3 -3
  1232. data/spec/framework_spec/app/spec/core/fixnum/complement_spec.rb +1 -1
  1233. data/spec/framework_spec/app/spec/core/fixnum/div_spec.rb +17 -7
  1234. data/spec/framework_spec/app/spec/core/fixnum/divide_spec.rb +7 -3
  1235. data/spec/framework_spec/app/spec/core/fixnum/divmod_spec.rb +16 -6
  1236. data/spec/framework_spec/app/spec/core/fixnum/element_reference_spec.rb +45 -19
  1237. data/spec/framework_spec/app/spec/core/fixnum/equal_value_spec.rb +5 -5
  1238. data/spec/framework_spec/app/spec/core/fixnum/even_spec.rb +7 -0
  1239. data/spec/framework_spec/app/spec/core/fixnum/exponent_spec.rb +59 -7
  1240. data/spec/framework_spec/app/spec/core/fixnum/fdiv_spec.rb +7 -0
  1241. data/spec/framework_spec/app/spec/core/fixnum/gt_spec.rb +4 -4
  1242. data/spec/framework_spec/app/spec/core/fixnum/gte_spec.rb +3 -3
  1243. data/spec/framework_spec/app/spec/core/fixnum/hash_spec.rb +1 -1
  1244. data/spec/framework_spec/app/spec/core/fixnum/id2name_spec.rb +15 -13
  1245. data/spec/framework_spec/app/spec/core/fixnum/induced_from_spec.rb +36 -35
  1246. data/spec/framework_spec/app/spec/core/fixnum/left_shift_spec.rb +72 -42
  1247. data/spec/framework_spec/app/spec/core/fixnum/lt_spec.rb +4 -4
  1248. data/spec/framework_spec/app/spec/core/fixnum/lte_spec.rb +3 -3
  1249. data/spec/framework_spec/app/spec/core/fixnum/magnitude_spec.rb +8 -0
  1250. data/spec/framework_spec/app/spec/core/fixnum/minus_spec.rb +3 -3
  1251. data/spec/framework_spec/app/spec/core/fixnum/modulo_spec.rb +2 -2
  1252. data/spec/framework_spec/app/spec/core/fixnum/multiply_spec.rb +3 -3
  1253. data/spec/framework_spec/app/spec/core/fixnum/odd_spec.rb +7 -0
  1254. data/spec/framework_spec/app/spec/core/fixnum/plus_spec.rb +1 -1
  1255. data/spec/framework_spec/app/spec/core/fixnum/quo_spec.rb +16 -6
  1256. data/spec/framework_spec/app/spec/core/fixnum/right_shift_spec.rb +84 -40
  1257. data/spec/framework_spec/app/spec/core/fixnum/shared/abs.rb +9 -0
  1258. data/spec/framework_spec/app/spec/core/fixnum/shared/modulo.rb +17 -7
  1259. data/spec/framework_spec/app/spec/core/fixnum/size_spec.rb +1 -1
  1260. data/spec/framework_spec/app/spec/core/fixnum/succ_spec.rb +7 -0
  1261. data/spec/framework_spec/app/spec/core/fixnum/to_f_spec.rb +1 -1
  1262. data/spec/framework_spec/app/spec/core/fixnum/to_s_spec.rb +2 -2
  1263. data/spec/framework_spec/app/spec/core/fixnum/to_sym_spec.rb +16 -14
  1264. data/spec/framework_spec/app/spec/core/fixnum/uminus_spec.rb +1 -1
  1265. data/spec/framework_spec/app/spec/core/fixnum/zero_spec.rb +2 -2
  1266. data/spec/framework_spec/app/spec/core/float/abs_spec.rb +2 -6
  1267. data/spec/framework_spec/app/spec/core/float/angle_spec.rb +7 -0
  1268. data/spec/framework_spec/app/spec/core/float/arg_spec.rb +7 -0
  1269. data/spec/framework_spec/app/spec/core/float/case_compare_spec.rb +7 -0
  1270. data/spec/framework_spec/app/spec/core/float/ceil_spec.rb +1 -1
  1271. data/spec/framework_spec/app/spec/core/float/coerce_spec.rb +1 -1
  1272. data/spec/framework_spec/app/spec/core/float/comparison_spec.rb +52 -1
  1273. data/spec/framework_spec/app/spec/core/float/constants_spec.rb +25 -17
  1274. data/spec/framework_spec/app/spec/core/float/denominator_spec.rb +31 -0
  1275. data/spec/framework_spec/app/spec/core/float/divide_spec.rb +7 -3
  1276. data/spec/framework_spec/app/spec/core/float/divmod_spec.rb +26 -1
  1277. data/spec/framework_spec/app/spec/core/float/eql_spec.rb +1 -1
  1278. data/spec/framework_spec/app/spec/core/float/equal_value_spec.rb +1 -1
  1279. data/spec/framework_spec/app/spec/core/float/exponent_spec.rb +10 -2
  1280. data/spec/framework_spec/app/spec/core/float/fdiv_spec.rb +68 -0
  1281. data/spec/framework_spec/app/spec/core/float/finite_spec.rb +3 -1
  1282. data/spec/framework_spec/app/spec/core/float/fixtures/coerce.rb +15 -0
  1283. data/spec/framework_spec/app/spec/core/float/floor_spec.rb +1 -1
  1284. data/spec/framework_spec/app/spec/core/float/gt_spec.rb +1 -1
  1285. data/spec/framework_spec/app/spec/core/float/gte_spec.rb +1 -1
  1286. data/spec/framework_spec/app/spec/core/float/hash_spec.rb +1 -1
  1287. data/spec/framework_spec/app/spec/core/float/induced_from_spec.rb +38 -37
  1288. data/spec/framework_spec/app/spec/core/float/infinite_spec.rb +1 -1
  1289. data/spec/framework_spec/app/spec/core/float/lt_spec.rb +1 -1
  1290. data/spec/framework_spec/app/spec/core/float/lte_spec.rb +1 -1
  1291. data/spec/framework_spec/app/spec/core/float/magnitude_spec.rb +7 -0
  1292. data/spec/framework_spec/app/spec/core/float/minus_spec.rb +1 -1
  1293. data/spec/framework_spec/app/spec/core/float/modulo_spec.rb +2 -2
  1294. data/spec/framework_spec/app/spec/core/float/multiply_spec.rb +4 -4
  1295. data/spec/framework_spec/app/spec/core/float/nan_spec.rb +1 -1
  1296. data/spec/framework_spec/app/spec/core/float/numerator_spec.rb +47 -0
  1297. data/spec/framework_spec/app/spec/core/float/phase_spec.rb +7 -0
  1298. data/spec/framework_spec/app/spec/core/float/plus_spec.rb +1 -1
  1299. data/spec/framework_spec/app/spec/core/float/quo_spec.rb +7 -0
  1300. data/spec/framework_spec/app/spec/core/float/rationalize_spec.rb +40 -0
  1301. data/spec/framework_spec/app/spec/core/float/round_spec.rb +32 -6
  1302. data/spec/framework_spec/app/spec/core/float/shared/abs.rb +9 -0
  1303. data/spec/framework_spec/app/spec/core/float/shared/modulo.rb +14 -3
  1304. data/spec/framework_spec/app/spec/core/float/to_f_spec.rb +1 -1
  1305. data/spec/framework_spec/app/spec/core/float/to_i_spec.rb +2 -2
  1306. data/spec/framework_spec/app/spec/core/float/to_int_spec.rb +6 -2
  1307. data/spec/framework_spec/app/spec/core/float/to_r_spec.rb +7 -0
  1308. data/spec/framework_spec/app/spec/core/float/to_s_spec.rb +93 -18
  1309. data/spec/framework_spec/app/spec/core/float/truncate_spec.rb +2 -2
  1310. data/spec/framework_spec/app/spec/core/float/uminus_spec.rb +1 -1
  1311. data/spec/framework_spec/app/spec/core/float/uplus_spec.rb +4 -4
  1312. data/spec/framework_spec/app/spec/core/float/zero_spec.rb +1 -1
  1313. data/spec/framework_spec/app/spec/core/gc/count_spec.rb +7 -0
  1314. data/spec/framework_spec/app/spec/core/gc/disable_spec.rb +17 -1
  1315. data/spec/framework_spec/app/spec/core/gc/enable_spec.rb +12 -1
  1316. data/spec/framework_spec/app/spec/core/gc/garbage_collect_spec.rb +15 -1
  1317. data/spec/framework_spec/app/spec/core/gc/profiler/clear_spec.rb +7 -0
  1318. data/spec/framework_spec/app/spec/core/gc/profiler/disable_spec.rb +7 -0
  1319. data/spec/framework_spec/app/spec/core/gc/profiler/enable_spec.rb +7 -0
  1320. data/spec/framework_spec/app/spec/core/gc/profiler/enabled_spec.rb +7 -0
  1321. data/spec/framework_spec/app/spec/core/gc/profiler/report_spec.rb +7 -0
  1322. data/spec/framework_spec/app/spec/core/gc/profiler/result_spec.rb +7 -0
  1323. data/spec/framework_spec/app/spec/core/gc/profiler/total_time_spec.rb +7 -0
  1324. data/spec/framework_spec/app/spec/core/gc/start_spec.rb +8 -1
  1325. data/spec/framework_spec/app/spec/core/gc/stress_spec.rb +30 -0
  1326. data/spec/framework_spec/app/spec/core/hash/allocate_spec.rb +2 -2
  1327. data/spec/framework_spec/app/spec/core/hash/assoc_spec.rb +43 -0
  1328. data/spec/framework_spec/app/spec/core/hash/clear_spec.rb +2 -2
  1329. data/spec/framework_spec/app/spec/core/hash/clone_spec.rb +1 -1
  1330. data/spec/framework_spec/app/spec/core/hash/compare_by_identity_spec.rb +109 -0
  1331. data/spec/framework_spec/app/spec/core/hash/constructor_spec.rb +8 -4
  1332. data/spec/framework_spec/app/spec/core/hash/default_proc_spec.rb +24 -4
  1333. data/spec/framework_spec/app/spec/core/hash/default_spec.rb +4 -4
  1334. data/spec/framework_spec/app/spec/core/hash/delete_if_spec.rb +3 -3
  1335. data/spec/framework_spec/app/spec/core/hash/delete_spec.rb +2 -2
  1336. data/spec/framework_spec/app/spec/core/hash/each_key_spec.rb +3 -3
  1337. data/spec/framework_spec/app/spec/core/hash/each_pair_spec.rb +5 -5
  1338. data/spec/framework_spec/app/spec/core/hash/each_spec.rb +4 -4
  1339. data/spec/framework_spec/app/spec/core/hash/each_value_spec.rb +3 -3
  1340. data/spec/framework_spec/app/spec/core/hash/element_reference_spec.rb +111 -115
  1341. data/spec/framework_spec/app/spec/core/hash/element_set_spec.rb +7 -8
  1342. data/spec/framework_spec/app/spec/core/hash/empty_spec.rb +2 -2
  1343. data/spec/framework_spec/app/spec/core/hash/eql_spec.rb +18 -19
  1344. data/spec/framework_spec/app/spec/core/hash/equal_value_spec.rb +18 -14
  1345. data/spec/framework_spec/app/spec/core/hash/fetch_spec.rb +2 -2
  1346. data/spec/framework_spec/app/spec/core/hash/fixtures/classes.rb +1 -1
  1347. data/spec/framework_spec/app/spec/core/hash/flatten_spec.rb +64 -0
  1348. data/spec/framework_spec/app/spec/core/hash/has_key_spec.rb +8 -9
  1349. data/spec/framework_spec/app/spec/core/hash/has_value_spec.rb +3 -3
  1350. data/spec/framework_spec/app/spec/core/hash/hash_spec.rb +20 -1
  1351. data/spec/framework_spec/app/spec/core/hash/include_spec.rb +7 -8
  1352. data/spec/framework_spec/app/spec/core/hash/index_spec.rb +3 -3
  1353. data/spec/framework_spec/app/spec/core/hash/indexes_spec.rb +3 -3
  1354. data/spec/framework_spec/app/spec/core/hash/indices_spec.rb +3 -3
  1355. data/spec/framework_spec/app/spec/core/hash/initialize_copy_spec.rb +3 -3
  1356. data/spec/framework_spec/app/spec/core/hash/initialize_spec.rb +8 -3
  1357. data/spec/framework_spec/app/spec/core/hash/inspect_spec.rb +3 -41
  1358. data/spec/framework_spec/app/spec/core/hash/invert_spec.rb +2 -2
  1359. data/spec/framework_spec/app/spec/core/hash/keep_if_spec.rb +31 -0
  1360. data/spec/framework_spec/app/spec/core/hash/key_spec.rb +14 -15
  1361. data/spec/framework_spec/app/spec/core/hash/keys_spec.rb +4 -4
  1362. data/spec/framework_spec/app/spec/core/hash/length_spec.rb +3 -3
  1363. data/spec/framework_spec/app/spec/core/hash/member_spec.rb +7 -8
  1364. data/spec/framework_spec/app/spec/core/hash/merge_spec.rb +10 -17
  1365. data/spec/framework_spec/app/spec/core/hash/new_spec.rb +2 -2
  1366. data/spec/framework_spec/app/spec/core/hash/rassoc_spec.rb +39 -0
  1367. data/spec/framework_spec/app/spec/core/hash/rehash_spec.rb +51 -60
  1368. data/spec/framework_spec/app/spec/core/hash/reject_spec.rb +18 -12
  1369. data/spec/framework_spec/app/spec/core/hash/replace_spec.rb +3 -3
  1370. data/spec/framework_spec/app/spec/core/hash/select_spec.rb +38 -5
  1371. data/spec/framework_spec/app/spec/core/hash/shared/each.rb +46 -6
  1372. data/spec/framework_spec/app/spec/core/hash/shared/eql.rb +14 -1
  1373. data/spec/framework_spec/app/spec/core/hash/shared/index.rb +2 -2
  1374. data/spec/framework_spec/app/spec/core/hash/shared/iteration.rb +2 -2
  1375. data/spec/framework_spec/app/spec/core/hash/shared/key.rb +5 -3
  1376. data/spec/framework_spec/app/spec/core/hash/shared/replace.rb +22 -11
  1377. data/spec/framework_spec/app/spec/core/hash/shared/store.rb +14 -1
  1378. data/spec/framework_spec/app/spec/core/hash/shared/to_s.rb +22 -21
  1379. data/spec/framework_spec/app/spec/core/hash/shared/update.rb +27 -8
  1380. data/spec/framework_spec/app/spec/core/hash/shift_spec.rb +3 -3
  1381. data/spec/framework_spec/app/spec/core/hash/size_spec.rb +3 -3
  1382. data/spec/framework_spec/app/spec/core/hash/sort_spec.rb +2 -2
  1383. data/spec/framework_spec/app/spec/core/hash/store_spec.rb +7 -8
  1384. data/spec/framework_spec/app/spec/core/hash/to_a_spec.rb +16 -3
  1385. data/spec/framework_spec/app/spec/core/hash/to_hash_spec.rb +2 -2
  1386. data/spec/framework_spec/app/spec/core/hash/to_s_spec.rb +5 -5
  1387. data/spec/framework_spec/app/spec/core/hash/try_convert_spec.rb +32 -0
  1388. data/spec/framework_spec/app/spec/core/hash/update_spec.rb +3 -3
  1389. data/spec/framework_spec/app/spec/core/hash/value_spec.rb +3 -3
  1390. data/spec/framework_spec/app/spec/core/hash/values_at_spec.rb +4 -4
  1391. data/spec/framework_spec/app/spec/core/hash/values_spec.rb +3 -3
  1392. data/spec/framework_spec/app/spec/core/integer/ceil_spec.rb +2 -2
  1393. data/spec/framework_spec/app/spec/core/integer/chr_spec.rb +141 -18
  1394. data/spec/framework_spec/app/spec/core/integer/denominator_spec.rb +22 -0
  1395. data/spec/framework_spec/app/spec/core/integer/downto_spec.rb +5 -5
  1396. data/spec/framework_spec/app/spec/core/integer/even_spec.rb +2 -2
  1397. data/spec/framework_spec/app/spec/core/integer/floor_spec.rb +2 -2
  1398. data/spec/framework_spec/app/spec/core/integer/gcd_spec.rb +60 -0
  1399. data/spec/framework_spec/app/spec/core/integer/gcdlcm_spec.rb +55 -0
  1400. data/spec/framework_spec/app/spec/core/integer/induced_from_spec.rb +43 -42
  1401. data/spec/framework_spec/app/spec/core/integer/integer_spec.rb +2 -2
  1402. data/spec/framework_spec/app/spec/core/integer/lcm_spec.rb +60 -0
  1403. data/spec/framework_spec/app/spec/core/integer/next_spec.rb +2 -2
  1404. data/spec/framework_spec/app/spec/core/integer/numerator_spec.rb +20 -0
  1405. data/spec/framework_spec/app/spec/core/integer/odd_spec.rb +1 -1
  1406. data/spec/framework_spec/app/spec/core/integer/ord_spec.rb +4 -4
  1407. data/spec/framework_spec/app/spec/core/integer/pred_spec.rb +3 -3
  1408. data/spec/framework_spec/app/spec/core/integer/rationalize_spec.rb +7 -0
  1409. data/spec/framework_spec/app/spec/core/integer/round_spec.rb +35 -2
  1410. data/spec/framework_spec/app/spec/core/integer/shared/next.rb +1 -1
  1411. data/spec/framework_spec/app/spec/core/integer/succ_spec.rb +2 -2
  1412. data/spec/framework_spec/app/spec/core/integer/times_spec.rb +9 -9
  1413. data/spec/framework_spec/app/spec/core/integer/to_i_spec.rb +2 -2
  1414. data/spec/framework_spec/app/spec/core/integer/to_int_spec.rb +2 -2
  1415. data/spec/framework_spec/app/spec/core/integer/to_r_spec.rb +28 -0
  1416. data/spec/framework_spec/app/spec/core/integer/truncate_spec.rb +2 -2
  1417. data/spec/framework_spec/app/spec/core/integer/upto_spec.rb +8 -8
  1418. data/spec/framework_spec/app/spec/core/io/binmode_spec.rb +21 -5
  1419. data/spec/framework_spec/app/spec/core/io/binread_spec.rb +7 -0
  1420. data/spec/framework_spec/app/spec/core/io/bytes_spec.rb +27 -16
  1421. data/spec/framework_spec/app/spec/core/io/chars_spec.rb +35 -19
  1422. data/spec/framework_spec/app/spec/core/io/close_on_exec_spec.rb +13 -0
  1423. data/spec/framework_spec/app/spec/core/io/close_read_spec.rb +29 -29
  1424. data/spec/framework_spec/app/spec/core/io/close_spec.rb +15 -19
  1425. data/spec/framework_spec/app/spec/core/io/close_write_spec.rb +13 -14
  1426. data/spec/framework_spec/app/spec/core/io/closed_spec.rb +15 -7
  1427. data/spec/framework_spec/app/spec/core/io/codepoints_spec.rb +29 -0
  1428. data/spec/framework_spec/app/spec/core/io/constants_spec.rb +1 -1
  1429. data/spec/framework_spec/app/spec/core/io/copy_stream_spec.rb +50 -0
  1430. data/spec/framework_spec/app/spec/core/io/dup_spec.rb +5 -5
  1431. data/spec/framework_spec/app/spec/core/io/each_byte_spec.rb +32 -26
  1432. data/spec/framework_spec/app/spec/core/io/each_char_spec.rb +35 -22
  1433. data/spec/framework_spec/app/spec/core/io/each_codepoint_spec.rb +34 -0
  1434. data/spec/framework_spec/app/spec/core/io/each_line_spec.rb +7 -5
  1435. data/spec/framework_spec/app/spec/core/io/each_spec.rb +8 -6
  1436. data/spec/framework_spec/app/spec/core/io/eof_spec.rb +59 -45
  1437. data/spec/framework_spec/app/spec/core/io/external_encoding_spec.rb +7 -0
  1438. data/spec/framework_spec/app/spec/core/io/fcntl_spec.rb +5 -5
  1439. data/spec/framework_spec/app/spec/core/io/fdatasync_spec.rb +7 -0
  1440. data/spec/framework_spec/app/spec/core/io/fileno_spec.rb +5 -5
  1441. data/spec/framework_spec/app/spec/core/io/fixtures/classes.rb +57 -15
  1442. data/spec/framework_spec/app/spec/core/io/fixtures/empty.txt +0 -0
  1443. data/spec/framework_spec/app/spec/core/io/fixtures/{gets.txt → lines.txt} +0 -0
  1444. data/spec/framework_spec/app/spec/core/io/fixtures/reopen_stdout.rb +3 -0
  1445. data/spec/framework_spec/app/spec/core/io/flush_spec.rb +5 -5
  1446. data/spec/framework_spec/app/spec/core/io/for_fd_spec.rb +6 -2
  1447. data/spec/framework_spec/app/spec/core/io/foreach_spec.rb +132 -90
  1448. data/spec/framework_spec/app/spec/core/io/fsync_spec.rb +15 -15
  1449. data/spec/framework_spec/app/spec/core/io/getbyte_spec.rb +27 -21
  1450. data/spec/framework_spec/app/spec/core/io/getc_spec.rb +30 -24
  1451. data/spec/framework_spec/app/spec/core/io/gets_spec.rb +144 -127
  1452. data/spec/framework_spec/app/spec/core/io/initialize_copy_spec.rb +1 -1
  1453. data/spec/framework_spec/app/spec/core/io/initialize_spec.rb +33 -16
  1454. data/spec/framework_spec/app/spec/core/io/inspect_spec.rb +4 -15
  1455. data/spec/framework_spec/app/spec/core/io/internal_encoding_spec.rb +7 -0
  1456. data/spec/framework_spec/app/spec/core/io/io_spec.rb +1 -5
  1457. data/spec/framework_spec/app/spec/core/io/ioctl_spec.rb +42 -5
  1458. data/spec/framework_spec/app/spec/core/io/isatty_spec.rb +2 -2
  1459. data/spec/framework_spec/app/spec/core/io/lineno_spec.rb +65 -52
  1460. data/spec/framework_spec/app/spec/core/io/lines_spec.rb +28 -22
  1461. data/spec/framework_spec/app/spec/core/io/new_spec.rb +6 -2
  1462. data/spec/framework_spec/app/spec/core/io/open_spec.rb +52 -49
  1463. data/spec/framework_spec/app/spec/core/io/output_spec.rb +22 -14
  1464. data/spec/framework_spec/app/spec/core/io/pid_spec.rb +20 -11
  1465. data/spec/framework_spec/app/spec/core/io/pipe_spec.rb +10 -1
  1466. data/spec/framework_spec/app/spec/core/io/popen_spec.rb +107 -37
  1467. data/spec/framework_spec/app/spec/core/io/pos_spec.rb +5 -44
  1468. data/spec/framework_spec/app/spec/core/io/print_spec.rb +56 -59
  1469. data/spec/framework_spec/app/spec/core/io/printf_spec.rb +25 -19
  1470. data/spec/framework_spec/app/spec/core/io/putc_spec.rb +5 -43
  1471. data/spec/framework_spec/app/spec/core/io/puts_spec.rb +28 -16
  1472. data/spec/framework_spec/app/spec/core/io/read_nonblock_spec.rb +54 -3
  1473. data/spec/framework_spec/app/spec/core/io/read_spec.rb +127 -50
  1474. data/spec/framework_spec/app/spec/core/io/readbyte_spec.rb +29 -0
  1475. data/spec/framework_spec/app/spec/core/io/readchar_spec.rb +31 -31
  1476. data/spec/framework_spec/app/spec/core/io/readline_spec.rb +29 -25
  1477. data/spec/framework_spec/app/spec/core/io/readlines_spec.rb +174 -146
  1478. data/spec/framework_spec/app/spec/core/io/readpartial_spec.rb +16 -4
  1479. data/spec/framework_spec/app/spec/core/io/reopen_spec.rb +226 -82
  1480. data/spec/framework_spec/app/spec/core/io/rewind_spec.rb +8 -9
  1481. data/spec/framework_spec/app/spec/core/io/seek_spec.rb +21 -29
  1482. data/spec/framework_spec/app/spec/core/io/select_spec.rb +34 -7
  1483. data/spec/framework_spec/app/spec/core/io/set_encoding_spec.rb +7 -0
  1484. data/spec/framework_spec/app/spec/core/io/shared/codepoints.rb +46 -0
  1485. data/spec/framework_spec/app/spec/core/io/shared/each.rb +97 -112
  1486. data/spec/framework_spec/app/spec/core/io/shared/gets_ascii.rb +27 -0
  1487. data/spec/framework_spec/app/spec/core/io/shared/new.rb +74 -99
  1488. data/spec/framework_spec/app/spec/core/io/shared/pos.rb +43 -4
  1489. data/spec/framework_spec/app/spec/core/io/shared/tty.rb +10 -7
  1490. data/spec/framework_spec/app/spec/core/io/shared/write.rb +4 -4
  1491. data/spec/framework_spec/app/spec/core/io/stat_spec.rb +20 -7
  1492. data/spec/framework_spec/app/spec/core/io/sync_spec.rb +12 -10
  1493. data/spec/framework_spec/app/spec/core/io/sysopen_spec.rb +32 -14
  1494. data/spec/framework_spec/app/spec/core/io/sysread_spec.rb +12 -10
  1495. data/spec/framework_spec/app/spec/core/io/sysseek_spec.rb +17 -42
  1496. data/spec/framework_spec/app/spec/core/io/syswrite_spec.rb +10 -9
  1497. data/spec/framework_spec/app/spec/core/io/tell_spec.rb +3 -3
  1498. data/spec/framework_spec/app/spec/core/io/to_i_spec.rb +5 -5
  1499. data/spec/framework_spec/app/spec/core/io/to_io_spec.rb +15 -10
  1500. data/spec/framework_spec/app/spec/core/io/try_convert_spec.rb +47 -0
  1501. data/spec/framework_spec/app/spec/core/io/tty_spec.rb +2 -2
  1502. data/spec/framework_spec/app/spec/core/io/ungetbyte_spec.rb +7 -0
  1503. data/spec/framework_spec/app/spec/core/io/ungetc_spec.rb +55 -48
  1504. data/spec/framework_spec/app/spec/core/io/write_nonblock_spec.rb +6 -5
  1505. data/spec/framework_spec/app/spec/core/io/write_spec.rb +17 -12
  1506. data/spec/framework_spec/app/spec/core/kernel/Array_spec.rb +76 -31
  1507. data/spec/framework_spec/app/spec/core/kernel/Complex_spec.rb +7 -0
  1508. data/spec/framework_spec/app/spec/core/kernel/Float_spec.rb +18 -13
  1509. data/spec/framework_spec/app/spec/core/kernel/Integer_spec.rb +243 -7
  1510. data/spec/framework_spec/app/spec/core/kernel/Rational_spec.rb +7 -0
  1511. data/spec/framework_spec/app/spec/core/kernel/String_spec.rb +65 -33
  1512. data/spec/framework_spec/app/spec/core/kernel/__callee___spec.rb +9 -0
  1513. data/spec/framework_spec/app/spec/core/kernel/__id___spec.rb +4 -4
  1514. data/spec/framework_spec/app/spec/core/kernel/__method___spec.rb +41 -0
  1515. data/spec/framework_spec/app/spec/core/kernel/__send___spec.rb +2 -2
  1516. data/spec/framework_spec/app/spec/core/kernel/abort_spec.rb +6 -3
  1517. data/spec/framework_spec/app/spec/core/kernel/at_exit_spec.rb +16 -11
  1518. data/spec/framework_spec/app/spec/core/kernel/autoload_spec.rb +127 -114
  1519. data/spec/framework_spec/app/spec/core/kernel/backtick_spec.rb +24 -24
  1520. data/spec/framework_spec/app/spec/core/kernel/binding_spec.rb +45 -23
  1521. data/spec/framework_spec/app/spec/core/kernel/block_given_spec.rb +3 -3
  1522. data/spec/framework_spec/app/spec/core/kernel/callcc_spec.rb +9 -65
  1523. data/spec/framework_spec/app/spec/core/kernel/caller_spec.rb +162 -91
  1524. data/spec/framework_spec/app/spec/core/kernel/case_compare_spec.rb +2 -2
  1525. data/spec/framework_spec/app/spec/core/kernel/catch_spec.rb +70 -13
  1526. data/spec/framework_spec/app/spec/core/kernel/chomp_spec.rb +19 -15
  1527. data/spec/framework_spec/app/spec/core/kernel/chop_spec.rb +19 -15
  1528. data/spec/framework_spec/app/spec/core/kernel/class_spec.rb +2 -2
  1529. data/spec/framework_spec/app/spec/core/kernel/clone_spec.rb +8 -2
  1530. data/spec/framework_spec/app/spec/core/kernel/comparison_spec.rb +33 -0
  1531. data/spec/framework_spec/app/spec/core/kernel/const_lookup_spec.rb +7 -0
  1532. data/spec/framework_spec/app/spec/core/kernel/{define_singleton_method.rb → define_singleton_method_spec.rb} +31 -9
  1533. data/spec/framework_spec/app/spec/core/kernel/display_spec.rb +2 -2
  1534. data/spec/framework_spec/app/spec/core/kernel/dup_spec.rb +2 -2
  1535. data/spec/framework_spec/app/spec/core/kernel/enum_for_spec.rb +7 -0
  1536. data/spec/framework_spec/app/spec/core/kernel/eql_spec.rb +5 -5
  1537. data/spec/framework_spec/app/spec/core/kernel/equal_spec.rb +32 -3
  1538. data/spec/framework_spec/app/spec/core/kernel/equal_value_spec.rb +4 -4
  1539. data/spec/framework_spec/app/spec/core/kernel/eval_spec.rb +285 -182
  1540. data/spec/framework_spec/app/spec/core/kernel/exec_spec.rb +18 -5
  1541. data/spec/framework_spec/app/spec/core/kernel/exit_spec.rb +70 -4
  1542. data/spec/framework_spec/app/spec/core/kernel/extend_spec.rb +29 -7
  1543. data/spec/framework_spec/app/spec/core/kernel/fail_spec.rb +4 -4
  1544. data/spec/framework_spec/app/spec/core/kernel/fixtures/__method__.rb +25 -0
  1545. data/spec/framework_spec/app/spec/core/kernel/fixtures/autoload_d.rb +5 -0
  1546. data/spec/framework_spec/app/spec/core/kernel/fixtures/caller_fixture1.rb +1 -1
  1547. data/spec/framework_spec/app/spec/core/kernel/fixtures/classes.rb +173 -67
  1548. data/spec/framework_spec/app/spec/core/kernel/fixtures/eval_locals.rb +6 -0
  1549. data/spec/framework_spec/app/spec/core/kernel/fixtures/test.rb +80 -80
  1550. data/spec/framework_spec/app/spec/core/kernel/fork_spec.rb +10 -8
  1551. data/spec/framework_spec/app/spec/core/kernel/format_spec.rb +2 -2
  1552. data/spec/framework_spec/app/spec/core/kernel/freeze_spec.rb +75 -37
  1553. data/spec/framework_spec/app/spec/core/kernel/frozen_spec.rb +2 -2
  1554. data/spec/framework_spec/app/spec/core/kernel/getc_spec.rb +10 -8
  1555. data/spec/framework_spec/app/spec/core/kernel/gets_spec.rb +2 -2
  1556. data/spec/framework_spec/app/spec/core/kernel/global_variables_spec.rb +24 -12
  1557. data/spec/framework_spec/app/spec/core/kernel/gsub_spec.rb +76 -72
  1558. data/spec/framework_spec/app/spec/core/kernel/hash_spec.rb +2 -2
  1559. data/spec/framework_spec/app/spec/core/kernel/id_spec.rb +2 -2
  1560. data/spec/framework_spec/app/spec/core/kernel/initialize_clone_spec.rb +7 -0
  1561. data/spec/framework_spec/app/spec/core/kernel/initialize_copy_spec.rb +2 -2
  1562. data/spec/framework_spec/app/spec/core/kernel/initialize_dup_spec.rb +7 -0
  1563. data/spec/framework_spec/app/spec/core/kernel/inspect_spec.rb +2 -2
  1564. data/spec/framework_spec/app/spec/core/kernel/instance_eval_spec.rb +154 -113
  1565. data/spec/framework_spec/app/spec/core/kernel/instance_of_spec.rb +1 -1
  1566. data/spec/framework_spec/app/spec/core/kernel/instance_variable_defined_spec.rb +1 -1
  1567. data/spec/framework_spec/app/spec/core/kernel/instance_variable_get_spec.rb +16 -2
  1568. data/spec/framework_spec/app/spec/core/kernel/instance_variable_set_spec.rb +25 -12
  1569. data/spec/framework_spec/app/spec/core/kernel/instance_variables_spec.rb +48 -3
  1570. data/spec/framework_spec/app/spec/core/kernel/is_a_spec.rb +1 -1
  1571. data/spec/framework_spec/app/spec/core/kernel/iterator_spec.rb +2 -2
  1572. data/spec/framework_spec/app/spec/core/kernel/kind_of_spec.rb +1 -1
  1573. data/spec/framework_spec/app/spec/core/kernel/lambda_spec.rb +68 -7
  1574. data/spec/framework_spec/app/spec/core/kernel/load_spec.rb +22 -217
  1575. data/spec/framework_spec/app/spec/core/kernel/local_variables_spec.rb +38 -18
  1576. data/spec/framework_spec/app/spec/core/kernel/loop_spec.rb +3 -3
  1577. data/spec/framework_spec/app/spec/core/kernel/match_spec.rb +2 -2
  1578. data/spec/framework_spec/app/spec/core/kernel/method_missing_spec.rb +9 -54
  1579. data/spec/framework_spec/app/spec/core/kernel/method_spec.rb +29 -31
  1580. data/spec/framework_spec/app/spec/core/kernel/methods_spec.rb +93 -78
  1581. data/spec/framework_spec/app/spec/core/kernel/nil_spec.rb +2 -2
  1582. data/spec/framework_spec/app/spec/core/kernel/not_match_spec.rb +7 -0
  1583. data/spec/framework_spec/app/spec/core/kernel/object_id_spec.rb +4 -4
  1584. data/spec/framework_spec/app/spec/core/kernel/open_spec.rb +30 -32
  1585. data/spec/framework_spec/app/spec/core/kernel/p_spec.rb +29 -29
  1586. data/spec/framework_spec/app/spec/core/kernel/print_spec.rb +2 -2
  1587. data/spec/framework_spec/app/spec/core/kernel/printf_spec.rb +2 -2
  1588. data/spec/framework_spec/app/spec/core/kernel/private_methods_spec.rb +82 -14
  1589. data/spec/framework_spec/app/spec/core/kernel/proc_spec.rb +22 -4
  1590. data/spec/framework_spec/app/spec/core/kernel/protected_methods_spec.rb +44 -2
  1591. data/spec/framework_spec/app/spec/core/kernel/public_method_spec.rb +37 -0
  1592. data/spec/framework_spec/app/spec/core/kernel/public_methods_spec.rb +70 -12
  1593. data/spec/framework_spec/app/spec/core/kernel/public_send_spec.rb +76 -0
  1594. data/spec/framework_spec/app/spec/core/kernel/putc_spec.rb +31 -4
  1595. data/spec/framework_spec/app/spec/core/kernel/puts_spec.rb +100 -87
  1596. data/spec/framework_spec/app/spec/core/kernel/raise_spec.rb +3 -3
  1597. data/spec/framework_spec/app/spec/core/kernel/rand_spec.rb +39 -13
  1598. data/spec/framework_spec/app/spec/core/kernel/readline_spec.rb +2 -2
  1599. data/spec/framework_spec/app/spec/core/kernel/readlines_spec.rb +2 -2
  1600. data/spec/framework_spec/app/spec/core/kernel/remove_instance_variable_spec.rb +32 -2
  1601. data/spec/framework_spec/app/spec/core/kernel/require_relative_spec.rb +154 -0
  1602. data/spec/framework_spec/app/spec/core/kernel/require_spec.rb +20 -289
  1603. data/spec/framework_spec/app/spec/core/kernel/respond_to_missing_spec.rb +88 -0
  1604. data/spec/framework_spec/app/spec/core/kernel/respond_to_spec.rb +41 -33
  1605. data/spec/framework_spec/app/spec/core/kernel/scan_spec.rb +10 -8
  1606. data/spec/framework_spec/app/spec/core/kernel/select_spec.rb +2 -2
  1607. data/spec/framework_spec/app/spec/core/kernel/send_spec.rb +31 -65
  1608. data/spec/framework_spec/app/spec/core/kernel/set_trace_func_spec.rb +2 -2
  1609. data/spec/framework_spec/app/spec/core/kernel/shared/__method__.rb +6 -7
  1610. data/spec/framework_spec/app/spec/core/kernel/shared/abort.rb +26 -0
  1611. data/spec/framework_spec/app/spec/core/kernel/shared/lambda.rb +12 -25
  1612. data/spec/framework_spec/app/spec/core/kernel/shared/load.rb +93 -0
  1613. data/spec/framework_spec/app/spec/core/kernel/shared/method.rb +59 -0
  1614. data/spec/framework_spec/app/spec/core/kernel/shared/object_id.rb +22 -6
  1615. data/spec/framework_spec/app/spec/core/kernel/shared/require.rb +529 -0
  1616. data/spec/framework_spec/app/spec/core/kernel/shared/send.rb +110 -0
  1617. data/spec/framework_spec/app/spec/core/kernel/singleton_class_spec.rb +30 -0
  1618. data/spec/framework_spec/app/spec/core/kernel/singleton_method_added_spec.rb +6 -5
  1619. data/spec/framework_spec/app/spec/core/kernel/singleton_method_removed_spec.rb +5 -5
  1620. data/spec/framework_spec/app/spec/core/kernel/singleton_method_undefined_spec.rb +4 -5
  1621. data/spec/framework_spec/app/spec/core/kernel/singleton_methods_spec.rb +179 -58
  1622. data/spec/framework_spec/app/spec/core/kernel/sleep_spec.rb +18 -19
  1623. data/spec/framework_spec/app/spec/core/kernel/spawn_spec.rb +152 -0
  1624. data/spec/framework_spec/app/spec/core/kernel/split_spec.rb +10 -8
  1625. data/spec/framework_spec/app/spec/core/kernel/sprintf_spec.rb +351 -5
  1626. data/spec/framework_spec/app/spec/core/kernel/srand_spec.rb +33 -6
  1627. data/spec/framework_spec/app/spec/core/kernel/sub_spec.rb +19 -15
  1628. data/spec/framework_spec/app/spec/core/kernel/syscall_spec.rb +2 -2
  1629. data/spec/framework_spec/app/spec/core/kernel/system_spec.rb +90 -61
  1630. data/spec/framework_spec/app/spec/core/kernel/taint_spec.rb +9 -4
  1631. data/spec/framework_spec/app/spec/core/kernel/tainted_spec.rb +3 -3
  1632. data/spec/framework_spec/app/spec/core/kernel/tap_spec.rb +5 -5
  1633. data/spec/framework_spec/app/spec/core/kernel/test_spec.rb +36 -16
  1634. data/spec/framework_spec/app/spec/core/kernel/throw_spec.rb +29 -24
  1635. data/spec/framework_spec/app/spec/core/kernel/to_a_spec.rb +17 -15
  1636. data/spec/framework_spec/app/spec/core/kernel/to_enum_spec.rb +7 -0
  1637. data/spec/framework_spec/app/spec/core/kernel/to_s_spec.rb +2 -2
  1638. data/spec/framework_spec/app/spec/core/kernel/trace_var_spec.rb +2 -2
  1639. data/spec/framework_spec/app/spec/core/kernel/trap_spec.rb +2 -2
  1640. data/spec/framework_spec/app/spec/core/kernel/trust_spec.rb +2 -2
  1641. data/spec/framework_spec/app/spec/core/kernel/type_spec.rb +2 -2
  1642. data/spec/framework_spec/app/spec/core/kernel/untaint_spec.rb +2 -2
  1643. data/spec/framework_spec/app/spec/core/kernel/untrace_var_spec.rb +2 -2
  1644. data/spec/framework_spec/app/spec/core/kernel/untrust_spec.rb +2 -2
  1645. data/spec/framework_spec/app/spec/core/kernel/untrusted_spec.rb +2 -2
  1646. data/spec/framework_spec/app/spec/core/kernel/warn_spec.rb +59 -60
  1647. data/spec/framework_spec/app/spec/core/marshal/dump_spec.rb +314 -70
  1648. data/spec/framework_spec/app/spec/core/marshal/fixtures/marshal_data.rb +165 -0
  1649. data/spec/framework_spec/app/spec/core/marshal/fixtures/random.dump +0 -0
  1650. data/spec/framework_spec/app/spec/core/marshal/load_spec.rb +483 -170
  1651. data/spec/framework_spec/app/spec/core/marshal/restore_spec.rb +5 -1
  1652. data/spec/framework_spec/app/spec/core/matchdata/begin_spec.rb +1 -1
  1653. data/spec/framework_spec/app/spec/core/matchdata/captures_spec.rb +1 -1
  1654. data/spec/framework_spec/app/spec/core/matchdata/element_reference_spec.rb +3 -1
  1655. data/spec/framework_spec/app/spec/core/matchdata/end_spec.rb +2 -2
  1656. data/spec/framework_spec/app/spec/core/matchdata/eql_spec.rb +8 -0
  1657. data/spec/framework_spec/app/spec/core/matchdata/equal_value_spec.rb +8 -0
  1658. data/spec/framework_spec/app/spec/core/matchdata/hash_spec.rb +7 -0
  1659. data/spec/framework_spec/app/spec/core/matchdata/initialize_copy_spec.rb +1 -1
  1660. data/spec/framework_spec/app/spec/core/matchdata/inspect_spec.rb +19 -1
  1661. data/spec/framework_spec/app/spec/core/matchdata/length_spec.rb +2 -2
  1662. data/spec/framework_spec/app/spec/core/matchdata/names_spec.rb +3 -0
  1663. data/spec/framework_spec/app/spec/core/matchdata/offset_spec.rb +1 -1
  1664. data/spec/framework_spec/app/spec/core/matchdata/post_match_spec.rb +2 -2
  1665. data/spec/framework_spec/app/spec/core/matchdata/pre_match_spec.rb +1 -1
  1666. data/spec/framework_spec/app/spec/core/matchdata/regexp_spec.rb +15 -0
  1667. data/spec/framework_spec/app/spec/core/matchdata/select_spec.rb +1 -1
  1668. data/spec/framework_spec/app/spec/core/matchdata/shared/eql.rb +26 -0
  1669. data/spec/framework_spec/app/spec/core/matchdata/size_spec.rb +2 -2
  1670. data/spec/framework_spec/app/spec/core/matchdata/string_spec.rb +1 -1
  1671. data/spec/framework_spec/app/spec/core/matchdata/to_a_spec.rb +2 -2
  1672. data/spec/framework_spec/app/spec/core/matchdata/to_s_spec.rb +1 -1
  1673. data/spec/framework_spec/app/spec/core/matchdata/values_at_spec.rb +1 -1
  1674. data/spec/framework_spec/app/spec/core/matchdata/versions/element_reference_1.9.rb +35 -0
  1675. data/spec/framework_spec/app/spec/core/matchdata/versions/names_1.9.rb +33 -0
  1676. data/spec/framework_spec/app/spec/core/math/acos_spec.rb +31 -31
  1677. data/spec/framework_spec/app/spec/core/math/acosh_spec.rb +6 -6
  1678. data/spec/framework_spec/app/spec/core/math/asin_spec.rb +15 -15
  1679. data/spec/framework_spec/app/spec/core/math/asinh_spec.rb +7 -7
  1680. data/spec/framework_spec/app/spec/core/math/atan2_spec.rb +6 -6
  1681. data/spec/framework_spec/app/spec/core/math/atan_spec.rb +13 -13
  1682. data/spec/framework_spec/app/spec/core/math/atanh_spec.rb +8 -64
  1683. data/spec/framework_spec/app/spec/core/math/cbrt_spec.rb +7 -0
  1684. data/spec/framework_spec/app/spec/core/math/constants_spec.rb +3 -3
  1685. data/spec/framework_spec/app/spec/core/math/cos_spec.rb +13 -13
  1686. data/spec/framework_spec/app/spec/core/math/cosh_spec.rb +7 -7
  1687. data/spec/framework_spec/app/spec/core/math/erf_spec.rb +14 -14
  1688. data/spec/framework_spec/app/spec/core/math/erfc_spec.rb +12 -12
  1689. data/spec/framework_spec/app/spec/core/math/exp_spec.rb +7 -7
  1690. data/spec/framework_spec/app/spec/core/math/fixtures/classes.rb +2 -2
  1691. data/spec/framework_spec/app/spec/core/math/frexp_spec.rb +6 -6
  1692. data/spec/framework_spec/app/spec/core/math/gamma_spec.rb +71 -0
  1693. data/spec/framework_spec/app/spec/core/math/hypot_spec.rb +11 -11
  1694. data/spec/framework_spec/app/spec/core/math/ldexp_spec.rb +10 -10
  1695. data/spec/framework_spec/app/spec/core/math/lgamma_spec.rb +87 -0
  1696. data/spec/framework_spec/app/spec/core/math/log10_spec.rb +7 -7
  1697. data/spec/framework_spec/app/spec/core/math/log2_spec.rb +30 -3
  1698. data/spec/framework_spec/app/spec/core/math/log_spec.rb +30 -11
  1699. data/spec/framework_spec/app/spec/core/math/sin_spec.rb +15 -15
  1700. data/spec/framework_spec/app/spec/core/math/sinh_spec.rb +8 -8
  1701. data/spec/framework_spec/app/spec/core/math/sqrt_spec.rb +5 -5
  1702. data/spec/framework_spec/app/spec/core/math/tan_spec.rb +6 -6
  1703. data/spec/framework_spec/app/spec/core/math/tanh_spec.rb +6 -6
  1704. data/spec/framework_spec/app/spec/core/method/arity_spec.rb +9 -2
  1705. data/spec/framework_spec/app/spec/core/method/call_spec.rb +3 -3
  1706. data/spec/framework_spec/app/spec/core/method/clone_spec.rb +2 -2
  1707. data/spec/framework_spec/app/spec/core/method/element_reference_spec.rb +3 -3
  1708. data/spec/framework_spec/app/spec/core/method/eql_spec.rb +8 -0
  1709. data/spec/framework_spec/app/spec/core/method/equal_value_spec.rb +3 -40
  1710. data/spec/framework_spec/app/spec/core/method/fixtures/classes.rb +104 -13
  1711. data/spec/framework_spec/app/spec/core/method/fixtures/classes_1.9.rb +12 -0
  1712. data/spec/framework_spec/app/spec/core/method/hash_spec.rb +7 -0
  1713. data/spec/framework_spec/app/spec/core/method/inspect_spec.rb +2 -2
  1714. data/spec/framework_spec/app/spec/core/method/name_spec.rb +19 -5
  1715. data/spec/framework_spec/app/spec/core/method/owner_spec.rb +4 -4
  1716. data/spec/framework_spec/app/spec/core/method/parameters_spec.rb +3 -0
  1717. data/spec/framework_spec/app/spec/core/method/receiver_spec.rb +4 -4
  1718. data/spec/framework_spec/app/spec/core/method/shared/call.rb +2 -2
  1719. data/spec/framework_spec/app/spec/core/method/shared/eql.rb +102 -0
  1720. data/spec/framework_spec/app/spec/core/method/shared/to_s.rb +5 -5
  1721. data/spec/framework_spec/app/spec/core/method/source_location_spec.rb +50 -0
  1722. data/spec/framework_spec/app/spec/core/method/to_proc_spec.rb +20 -2
  1723. data/spec/framework_spec/app/spec/core/method/to_s_spec.rb +2 -2
  1724. data/spec/framework_spec/app/spec/core/method/unbind_spec.rb +3 -3
  1725. data/spec/framework_spec/app/spec/core/method/versions/parameters_1.9.rb +189 -0
  1726. data/spec/framework_spec/app/spec/core/module/alias_method_spec.rb +20 -8
  1727. data/spec/framework_spec/app/spec/core/module/allocate_spec.rb +2 -2
  1728. data/spec/framework_spec/app/spec/core/module/ancestors_spec.rb +3 -3
  1729. data/spec/framework_spec/app/spec/core/module/append_features_spec.rb +15 -4
  1730. data/spec/framework_spec/app/spec/core/module/attr_accessor_spec.rb +16 -7
  1731. data/spec/framework_spec/app/spec/core/module/attr_reader_spec.rb +14 -5
  1732. data/spec/framework_spec/app/spec/core/module/attr_spec.rb +61 -63
  1733. data/spec/framework_spec/app/spec/core/module/attr_writer_spec.rb +23 -12
  1734. data/spec/framework_spec/app/spec/core/module/autoload_spec.rb +177 -84
  1735. data/spec/framework_spec/app/spec/core/module/case_compare_spec.rb +4 -4
  1736. data/spec/framework_spec/app/spec/core/module/class_eval_spec.rb +7 -8
  1737. data/spec/framework_spec/app/spec/core/module/class_exec_spec.rb +7 -0
  1738. data/spec/framework_spec/app/spec/core/module/class_variable_defined_spec.rb +22 -7
  1739. data/spec/framework_spec/app/spec/core/module/class_variable_get_spec.rb +27 -12
  1740. data/spec/framework_spec/app/spec/core/module/class_variable_set_spec.rb +37 -15
  1741. data/spec/framework_spec/app/spec/core/module/class_variables_spec.rb +50 -17
  1742. data/spec/framework_spec/app/spec/core/module/comparison_spec.rb +6 -6
  1743. data/spec/framework_spec/app/spec/core/module/const_defined_spec.rb +41 -5
  1744. data/spec/framework_spec/app/spec/core/module/const_get_spec.rb +14 -2
  1745. data/spec/framework_spec/app/spec/core/module/const_missing_spec.rb +8 -2
  1746. data/spec/framework_spec/app/spec/core/module/const_set_spec.rb +2 -2
  1747. data/spec/framework_spec/app/spec/core/module/constants_spec.rb +26 -2
  1748. data/spec/framework_spec/app/spec/core/module/define_method_spec.rb +283 -15
  1749. data/spec/framework_spec/app/spec/core/module/eql_spec.rb +3 -3
  1750. data/spec/framework_spec/app/spec/core/module/equal_spec.rb +3 -3
  1751. data/spec/framework_spec/app/spec/core/module/equal_value_spec.rb +3 -3
  1752. data/spec/framework_spec/app/spec/core/module/extend_object_spec.rb +23 -28
  1753. data/spec/framework_spec/app/spec/core/module/extended_spec.rb +18 -10
  1754. data/spec/framework_spec/app/spec/core/module/fixtures/autoload.rb +1 -1
  1755. data/spec/framework_spec/app/spec/core/module/fixtures/autoload_ex1.rb +16 -0
  1756. data/spec/framework_spec/app/spec/core/module/fixtures/autoload_k.rb +3 -1
  1757. data/spec/framework_spec/app/spec/core/module/fixtures/autoload_s.rb +5 -0
  1758. data/spec/framework_spec/app/spec/core/module/fixtures/autoload_w2.rb +1 -0
  1759. data/spec/framework_spec/app/spec/core/module/fixtures/classes.rb +97 -0
  1760. data/spec/framework_spec/app/spec/core/module/fixtures/name.rb +10 -0
  1761. data/spec/framework_spec/app/spec/core/module/freeze_spec.rb +33 -13
  1762. data/spec/framework_spec/app/spec/core/module/gt_spec.rb +5 -5
  1763. data/spec/framework_spec/app/spec/core/module/gte_spec.rb +4 -4
  1764. data/spec/framework_spec/app/spec/core/module/include_spec.rb +159 -33
  1765. data/spec/framework_spec/app/spec/core/module/included_modules_spec.rb +2 -2
  1766. data/spec/framework_spec/app/spec/core/module/included_spec.rb +12 -4
  1767. data/spec/framework_spec/app/spec/core/module/initialize_copy_spec.rb +2 -2
  1768. data/spec/framework_spec/app/spec/core/module/initialize_spec.rb +3 -3
  1769. data/spec/framework_spec/app/spec/core/module/instance_method_spec.rb +16 -7
  1770. data/spec/framework_spec/app/spec/core/module/instance_methods_spec.rb +51 -17
  1771. data/spec/framework_spec/app/spec/core/module/lt_spec.rb +5 -5
  1772. data/spec/framework_spec/app/spec/core/module/lte_spec.rb +4 -4
  1773. data/spec/framework_spec/app/spec/core/module/method_added_spec.rb +8 -8
  1774. data/spec/framework_spec/app/spec/core/module/method_defined_spec.rb +13 -6
  1775. data/spec/framework_spec/app/spec/core/module/method_removed_spec.rb +4 -4
  1776. data/spec/framework_spec/app/spec/core/module/method_undefined_spec.rb +4 -4
  1777. data/spec/framework_spec/app/spec/core/module/module_eval_spec.rb +7 -8
  1778. data/spec/framework_spec/app/spec/core/module/module_exec_spec.rb +7 -0
  1779. data/spec/framework_spec/app/spec/core/module/module_function_spec.rb +82 -76
  1780. data/spec/framework_spec/app/spec/core/module/name_spec.rb +24 -6
  1781. data/spec/framework_spec/app/spec/core/module/nesting_spec.rb +13 -9
  1782. data/spec/framework_spec/app/spec/core/module/new_spec.rb +3 -3
  1783. data/spec/framework_spec/app/spec/core/module/private_class_method_spec.rb +4 -4
  1784. data/spec/framework_spec/app/spec/core/module/private_instance_methods_spec.rb +26 -2
  1785. data/spec/framework_spec/app/spec/core/module/private_method_defined_spec.rb +16 -6
  1786. data/spec/framework_spec/app/spec/core/module/private_spec.rb +21 -3
  1787. data/spec/framework_spec/app/spec/core/module/protected_instance_methods_spec.rb +66 -18
  1788. data/spec/framework_spec/app/spec/core/module/protected_method_defined_spec.rb +40 -18
  1789. data/spec/framework_spec/app/spec/core/module/protected_spec.rb +24 -7
  1790. data/spec/framework_spec/app/spec/core/module/public_class_method_spec.rb +3 -3
  1791. data/spec/framework_spec/app/spec/core/module/public_instance_method_spec.rb +7 -0
  1792. data/spec/framework_spec/app/spec/core/module/public_instance_methods_spec.rb +38 -14
  1793. data/spec/framework_spec/app/spec/core/module/public_method_defined_spec.rb +28 -6
  1794. data/spec/framework_spec/app/spec/core/module/public_spec.rb +26 -2
  1795. data/spec/framework_spec/app/spec/core/module/remove_class_variable_spec.rb +46 -2
  1796. data/spec/framework_spec/app/spec/core/module/remove_const_spec.rb +10 -3
  1797. data/spec/framework_spec/app/spec/core/module/remove_method_spec.rb +10 -10
  1798. data/spec/framework_spec/app/spec/core/module/shared/class_eval.rb +36 -14
  1799. data/spec/framework_spec/app/spec/core/module/shared/class_exec.rb +24 -0
  1800. data/spec/framework_spec/app/spec/core/module/shared/equal_value.rb +1 -1
  1801. data/spec/framework_spec/app/spec/core/module/to_s_spec.rb +6 -2
  1802. data/spec/framework_spec/app/spec/core/module/undef_method_spec.rb +2 -2
  1803. data/spec/framework_spec/app/spec/core/mutex/lock_spec.rb +7 -0
  1804. data/spec/framework_spec/app/spec/core/mutex/locked_spec.rb +7 -0
  1805. data/spec/framework_spec/app/spec/core/mutex/sleep_spec.rb +7 -0
  1806. data/spec/framework_spec/app/spec/core/mutex/synchronize_spec.rb +7 -0
  1807. data/spec/framework_spec/app/spec/core/mutex/try_lock_spec.rb +7 -0
  1808. data/spec/framework_spec/app/spec/core/mutex/unlock_spec.rb +7 -0
  1809. data/spec/framework_spec/app/spec/core/nil/and_spec.rb +1 -1
  1810. data/spec/framework_spec/app/spec/core/nil/inspect_spec.rb +1 -1
  1811. data/spec/framework_spec/app/spec/core/nil/nil_spec.rb +1 -1
  1812. data/spec/framework_spec/app/spec/core/nil/or_spec.rb +1 -1
  1813. data/spec/framework_spec/app/spec/core/nil/rationalize_spec.rb +13 -0
  1814. data/spec/framework_spec/app/spec/core/nil/to_a_spec.rb +1 -1
  1815. data/spec/framework_spec/app/spec/core/nil/to_c_spec.rb +7 -0
  1816. data/spec/framework_spec/app/spec/core/nil/to_f_spec.rb +2 -2
  1817. data/spec/framework_spec/app/spec/core/nil/to_i_spec.rb +2 -2
  1818. data/spec/framework_spec/app/spec/core/nil/to_r_spec.rb +9 -0
  1819. data/spec/framework_spec/app/spec/core/nil/to_s_spec.rb +1 -1
  1820. data/spec/framework_spec/app/spec/core/nil/xor_spec.rb +1 -1
  1821. data/spec/framework_spec/app/spec/core/numeric/abs2_spec.rb +36 -0
  1822. data/spec/framework_spec/app/spec/core/numeric/abs_spec.rb +3 -17
  1823. data/spec/framework_spec/app/spec/core/numeric/angle_spec.rb +8 -0
  1824. data/spec/framework_spec/app/spec/core/numeric/arg_spec.rb +8 -0
  1825. data/spec/framework_spec/app/spec/core/numeric/ceil_spec.rb +10 -9
  1826. data/spec/framework_spec/app/spec/core/numeric/coerce_spec.rb +23 -6
  1827. data/spec/framework_spec/app/spec/core/numeric/comparison_spec.rb +35 -6
  1828. data/spec/framework_spec/app/spec/core/numeric/conj_spec.rb +8 -0
  1829. data/spec/framework_spec/app/spec/core/numeric/conjugate_spec.rb +8 -0
  1830. data/spec/framework_spec/app/spec/core/numeric/denominator_spec.rb +26 -0
  1831. data/spec/framework_spec/app/spec/core/numeric/div_spec.rb +22 -10
  1832. data/spec/framework_spec/app/spec/core/numeric/divmod_spec.rb +19 -8
  1833. data/spec/framework_spec/app/spec/core/numeric/eql_spec.rb +5 -5
  1834. data/spec/framework_spec/app/spec/core/numeric/fdiv_spec.rb +37 -0
  1835. data/spec/framework_spec/app/spec/core/numeric/fixtures/classes.rb +16 -4
  1836. data/spec/framework_spec/app/spec/core/numeric/floor_spec.rb +5 -5
  1837. data/spec/framework_spec/app/spec/core/numeric/i_spec.rb +17 -0
  1838. data/spec/framework_spec/app/spec/core/numeric/imag_spec.rb +8 -0
  1839. data/spec/framework_spec/app/spec/core/numeric/imaginary_spec.rb +8 -0
  1840. data/spec/framework_spec/app/spec/core/numeric/initialize_copy_spec.rb +5 -5
  1841. data/spec/framework_spec/app/spec/core/numeric/integer_spec.rb +5 -5
  1842. data/spec/framework_spec/app/spec/core/numeric/magnitude_spec.rb +7 -0
  1843. data/spec/framework_spec/app/spec/core/numeric/modulo_spec.rb +33 -9
  1844. data/spec/framework_spec/app/spec/core/numeric/nonzero_spec.rb +6 -6
  1845. data/spec/framework_spec/app/spec/core/numeric/numerator_spec.rb +35 -0
  1846. data/spec/framework_spec/app/spec/core/numeric/phase_spec.rb +8 -0
  1847. data/spec/framework_spec/app/spec/core/numeric/polar_spec.rb +8 -0
  1848. data/spec/framework_spec/app/spec/core/numeric/quo_spec.rb +5 -5
  1849. data/spec/framework_spec/app/spec/core/numeric/rationalize_spec.rb +32 -0
  1850. data/spec/framework_spec/app/spec/core/numeric/real_spec.rb +14 -0
  1851. data/spec/framework_spec/app/spec/core/numeric/rect_spec.rb +8 -0
  1852. data/spec/framework_spec/app/spec/core/numeric/rectangular_spec.rb +8 -0
  1853. data/spec/framework_spec/app/spec/core/numeric/remainder_spec.rb +11 -11
  1854. data/spec/framework_spec/app/spec/core/numeric/round_spec.rb +5 -5
  1855. data/spec/framework_spec/app/spec/core/numeric/shared/abs.rb +19 -0
  1856. data/spec/framework_spec/app/spec/core/numeric/shared/rect.rb +48 -0
  1857. data/spec/framework_spec/app/spec/core/numeric/singleton_method_added_spec.rb +9 -9
  1858. data/spec/framework_spec/app/spec/core/numeric/step_spec.rb +215 -162
  1859. data/spec/framework_spec/app/spec/core/numeric/to_c_spec.rb +47 -0
  1860. data/spec/framework_spec/app/spec/core/numeric/to_int_spec.rb +5 -5
  1861. data/spec/framework_spec/app/spec/core/numeric/truncate_spec.rb +4 -4
  1862. data/spec/framework_spec/app/spec/core/numeric/uminus_spec.rb +9 -9
  1863. data/spec/framework_spec/app/spec/core/numeric/uplus_spec.rb +4 -4
  1864. data/spec/framework_spec/app/spec/core/numeric/zero_spec.rb +5 -5
  1865. data/spec/framework_spec/app/spec/core/object/clone_spec.rb +2 -2
  1866. data/spec/framework_spec/app/spec/core/object/dup_spec.rb +2 -2
  1867. data/spec/framework_spec/app/spec/core/object/fixtures/classes.rb +17 -0
  1868. data/spec/framework_spec/app/spec/core/object/initialize_spec.rb +1 -1
  1869. data/spec/framework_spec/app/spec/core/object/instance_exec_spec.rb +101 -0
  1870. data/spec/framework_spec/app/spec/core/object/instance_of_spec.rb +6 -6
  1871. data/spec/framework_spec/app/spec/core/object/is_a_spec.rb +2 -2
  1872. data/spec/framework_spec/app/spec/core/object/kind_of_spec.rb +2 -2
  1873. data/spec/framework_spec/app/spec/core/object/match_spec.rb +25 -10
  1874. data/spec/framework_spec/app/spec/core/object/metaclass_spec.rb +9 -9
  1875. data/spec/framework_spec/app/spec/core/object/new_spec.rb +18 -2
  1876. data/spec/framework_spec/app/spec/core/object/shared/kind_of.rb +3 -3
  1877. data/spec/framework_spec/app/spec/core/objectspace/_id2ref_spec.rb +1 -1
  1878. data/spec/framework_spec/app/spec/core/objectspace/add_finalizer_spec.rb +5 -1
  1879. data/spec/framework_spec/app/spec/core/objectspace/call_finalizer_spec.rb +5 -1
  1880. data/spec/framework_spec/app/spec/core/objectspace/count_objects_spec.rb +7 -0
  1881. data/spec/framework_spec/app/spec/core/objectspace/define_finalizer_spec.rb +44 -3
  1882. data/spec/framework_spec/app/spec/core/objectspace/each_object_spec.rb +27 -5
  1883. data/spec/framework_spec/app/spec/core/objectspace/finalizers_spec.rb +5 -1
  1884. data/spec/framework_spec/app/spec/core/objectspace/fixtures.rb +5 -0
  1885. data/spec/framework_spec/app/spec/core/objectspace/garbage_collect_spec.rb +22 -1
  1886. data/spec/framework_spec/app/spec/core/objectspace/remove_finalizer_spec.rb +5 -1
  1887. data/spec/framework_spec/app/spec/core/objectspace/undefine_finalizer_spec.rb +5 -1
  1888. data/spec/framework_spec/app/spec/core/precision/included_spec.rb +14 -12
  1889. data/spec/framework_spec/app/spec/core/precision/prec_f_spec.rb +9 -8
  1890. data/spec/framework_spec/app/spec/core/precision/prec_i_spec.rb +10 -8
  1891. data/spec/framework_spec/app/spec/core/precision/prec_spec.rb +19 -14
  1892. data/spec/framework_spec/app/spec/core/proc/arity_spec.rb +104 -53
  1893. data/spec/framework_spec/app/spec/core/proc/binding_spec.rb +14 -14
  1894. data/spec/framework_spec/app/spec/core/proc/block_pass_spec.rb +21 -1
  1895. data/spec/framework_spec/app/spec/core/proc/call_spec.rb +9 -2
  1896. data/spec/framework_spec/app/spec/core/proc/case_compare_spec.rb +19 -0
  1897. data/spec/framework_spec/app/spec/core/proc/clone_spec.rb +3 -3
  1898. data/spec/framework_spec/app/spec/core/proc/curry_spec.rb +142 -0
  1899. data/spec/framework_spec/app/spec/core/proc/dup_spec.rb +3 -3
  1900. data/spec/framework_spec/app/spec/core/proc/element_reference_spec.rb +8 -2
  1901. data/spec/framework_spec/app/spec/core/proc/eql_spec.rb +8 -0
  1902. data/spec/framework_spec/app/spec/core/proc/equal_value_spec.rb +4 -12
  1903. data/spec/framework_spec/app/spec/core/proc/fixtures/common.rb +42 -0
  1904. data/spec/framework_spec/app/spec/core/proc/fixtures/source_location.rb +51 -0
  1905. data/spec/framework_spec/app/spec/core/proc/hash_spec.rb +24 -0
  1906. data/spec/framework_spec/app/spec/core/proc/lambda_spec.rb +62 -0
  1907. data/spec/framework_spec/app/spec/core/proc/new_spec.rb +135 -46
  1908. data/spec/framework_spec/app/spec/core/proc/parameters_spec.rb +2 -0
  1909. data/spec/framework_spec/app/spec/core/proc/shared/call.rb +86 -34
  1910. data/spec/framework_spec/app/spec/core/proc/shared/call_arguments.rb +7 -0
  1911. data/spec/framework_spec/app/spec/core/proc/shared/equal.rb +93 -0
  1912. data/spec/framework_spec/app/spec/core/proc/source_location_spec.rb +64 -0
  1913. data/spec/framework_spec/app/spec/core/proc/to_proc_spec.rb +1 -1
  1914. data/spec/framework_spec/app/spec/core/proc/to_s_spec.rb +16 -5
  1915. data/spec/framework_spec/app/spec/core/proc/versions/call_1.8.7.rb +1 -0
  1916. data/spec/framework_spec/app/spec/core/proc/versions/call_1.9.rb +1 -0
  1917. data/spec/framework_spec/app/spec/core/proc/versions/parameters_1.9.rb +73 -0
  1918. data/spec/framework_spec/app/spec/core/proc/yield_spec.rb +19 -0
  1919. data/spec/framework_spec/app/spec/core/process/abort_spec.rb +16 -9
  1920. data/spec/framework_spec/app/spec/core/process/constants_spec.rb +6 -6
  1921. data/spec/framework_spec/app/spec/core/process/daemon_spec.rb +7 -0
  1922. data/spec/framework_spec/app/spec/core/process/detach_spec.rb +5 -9
  1923. data/spec/framework_spec/app/spec/core/process/egid_spec.rb +5 -1
  1924. data/spec/framework_spec/app/spec/core/process/euid_spec.rb +6 -2
  1925. data/spec/framework_spec/app/spec/core/process/exec_spec.rb +7 -0
  1926. data/spec/framework_spec/app/spec/core/process/exit_spec.rb +9 -1
  1927. data/spec/framework_spec/app/spec/core/process/fork_spec.rb +38 -26
  1928. data/spec/framework_spec/app/spec/core/process/getpgid_spec.rb +5 -5
  1929. data/spec/framework_spec/app/spec/core/process/getpgrp_spec.rb +5 -1
  1930. data/spec/framework_spec/app/spec/core/process/getpriority_spec.rb +8 -9
  1931. data/spec/framework_spec/app/spec/core/process/getrlimit_spec.rb +5 -1
  1932. data/spec/framework_spec/app/spec/core/process/gid/change_privilege_spec.rb +5 -0
  1933. data/spec/framework_spec/app/spec/core/process/gid/eid_spec.rb +9 -0
  1934. data/spec/framework_spec/app/spec/core/process/gid/grant_privilege_spec.rb +5 -0
  1935. data/spec/framework_spec/app/spec/core/process/gid/re_exchange_spec.rb +5 -0
  1936. data/spec/framework_spec/app/spec/core/process/gid/re_exchangeable_spec.rb +5 -0
  1937. data/spec/framework_spec/app/spec/core/process/gid/rid_spec.rb +5 -0
  1938. data/spec/framework_spec/app/spec/core/process/gid/sid_available_spec.rb +5 -0
  1939. data/spec/framework_spec/app/spec/core/process/gid/switch_spec.rb +5 -0
  1940. data/spec/framework_spec/app/spec/core/process/gid_spec.rb +11 -7
  1941. data/spec/framework_spec/app/spec/core/process/groups_spec.rb +15 -17
  1942. data/spec/framework_spec/app/spec/core/process/initgroups_spec.rb +3 -6
  1943. data/spec/framework_spec/app/spec/core/process/kill_spec.rb +21 -17
  1944. data/spec/framework_spec/app/spec/core/process/maxgroups_spec.rb +12 -5
  1945. data/spec/framework_spec/app/spec/core/process/pid_spec.rb +3 -3
  1946. data/spec/framework_spec/app/spec/core/process/ppid_spec.rb +16 -15
  1947. data/spec/framework_spec/app/spec/core/process/setpgid_spec.rb +16 -21
  1948. data/spec/framework_spec/app/spec/core/process/setpgrp_spec.rb +3 -8
  1949. data/spec/framework_spec/app/spec/core/process/setpriority_spec.rb +42 -60
  1950. data/spec/framework_spec/app/spec/core/process/setrlimit_spec.rb +38 -46
  1951. data/spec/framework_spec/app/spec/core/process/setsid_spec.rb +20 -22
  1952. data/spec/framework_spec/app/spec/core/process/spawn_spec.rb +32 -0
  1953. data/spec/framework_spec/app/spec/core/process/status/_spec.rb +5 -0
  1954. data/spec/framework_spec/app/spec/core/process/status/coredump_spec.rb +5 -0
  1955. data/spec/framework_spec/app/spec/core/process/status/equal_value_spec.rb +5 -0
  1956. data/spec/framework_spec/app/spec/core/process/status/exited_spec.rb +38 -0
  1957. data/spec/framework_spec/app/spec/core/process/status/exitstatus_spec.rb +13 -0
  1958. data/spec/framework_spec/app/spec/core/process/status/inspect_spec.rb +5 -0
  1959. data/spec/framework_spec/app/spec/core/process/status/pid_spec.rb +13 -0
  1960. data/spec/framework_spec/app/spec/core/process/status/right_shift_spec.rb +5 -0
  1961. data/spec/framework_spec/app/spec/core/process/status/signaled_spec.rb +36 -0
  1962. data/spec/framework_spec/app/spec/core/process/status/stopped_spec.rb +5 -0
  1963. data/spec/framework_spec/app/spec/core/process/status/stopsig_spec.rb +5 -0
  1964. data/spec/framework_spec/app/spec/core/process/status/success_spec.rb +53 -0
  1965. data/spec/framework_spec/app/spec/core/process/status/termsig_spec.rb +41 -0
  1966. data/spec/framework_spec/app/spec/core/process/status/to_i_spec.rb +5 -0
  1967. data/spec/framework_spec/app/spec/core/process/status/to_int_spec.rb +5 -0
  1968. data/spec/framework_spec/app/spec/core/process/status/to_s_spec.rb +5 -0
  1969. data/spec/framework_spec/app/spec/core/process/sys/getegid_spec.rb +5 -0
  1970. data/spec/framework_spec/app/spec/core/process/sys/geteuid_spec.rb +5 -0
  1971. data/spec/framework_spec/app/spec/core/process/sys/getgid_spec.rb +5 -0
  1972. data/spec/framework_spec/app/spec/core/process/sys/getuid_spec.rb +5 -0
  1973. data/spec/framework_spec/app/spec/core/process/sys/issetugid_spec.rb +5 -0
  1974. data/spec/framework_spec/app/spec/core/process/sys/setegid_spec.rb +5 -0
  1975. data/spec/framework_spec/app/spec/core/process/sys/seteuid_spec.rb +5 -0
  1976. data/spec/framework_spec/app/spec/core/process/sys/setgid_spec.rb +5 -0
  1977. data/spec/framework_spec/app/spec/core/process/sys/setregid_spec.rb +5 -0
  1978. data/spec/framework_spec/app/spec/core/process/sys/setresgid_spec.rb +5 -0
  1979. data/spec/framework_spec/app/spec/core/process/sys/setresuid_spec.rb +5 -0
  1980. data/spec/framework_spec/app/spec/core/process/sys/setreuid_spec.rb +5 -0
  1981. data/spec/framework_spec/app/spec/core/process/sys/setrgid_spec.rb +5 -0
  1982. data/spec/framework_spec/app/spec/core/process/sys/setruid_spec.rb +5 -0
  1983. data/spec/framework_spec/app/spec/core/process/sys/setuid_spec.rb +5 -0
  1984. data/spec/framework_spec/app/spec/core/process/times_spec.rb +2 -2
  1985. data/spec/framework_spec/app/spec/core/process/uid/change_privilege_spec.rb +5 -0
  1986. data/spec/framework_spec/app/spec/core/process/uid/eid_spec.rb +9 -0
  1987. data/spec/framework_spec/app/spec/core/process/uid/grant_privilege_spec.rb +5 -0
  1988. data/spec/framework_spec/app/spec/core/process/uid/re_exchange_spec.rb +5 -0
  1989. data/spec/framework_spec/app/spec/core/process/uid/re_exchangeable_spec.rb +5 -0
  1990. data/spec/framework_spec/app/spec/core/process/uid/rid_spec.rb +5 -0
  1991. data/spec/framework_spec/app/spec/core/process/uid/sid_available_spec.rb +5 -0
  1992. data/spec/framework_spec/app/spec/core/process/uid/switch_spec.rb +5 -0
  1993. data/spec/framework_spec/app/spec/core/process/uid_spec.rb +11 -7
  1994. data/spec/framework_spec/app/spec/core/process/wait2_spec.rb +7 -6
  1995. data/spec/framework_spec/app/spec/core/process/wait_spec.rb +25 -7
  1996. data/spec/framework_spec/app/spec/core/process/waitall_spec.rb +10 -8
  1997. data/spec/framework_spec/app/spec/core/process/waitpid2_spec.rb +5 -1
  1998. data/spec/framework_spec/app/spec/core/process/waitpid_spec.rb +5 -1
  1999. data/spec/framework_spec/app/spec/core/random/bytes_spec.rb +40 -0
  2000. data/spec/framework_spec/app/spec/core/random/equal_value_spec.rb +39 -0
  2001. data/spec/framework_spec/app/spec/core/random/new_seed_spec.rb +27 -0
  2002. data/spec/framework_spec/app/spec/core/random/new_spec.rb +33 -0
  2003. data/spec/framework_spec/app/spec/core/random/rand_spec.rb +218 -0
  2004. data/spec/framework_spec/app/spec/core/random/seed_spec.rb +32 -0
  2005. data/spec/framework_spec/app/spec/core/random/srand_spec.rb +43 -0
  2006. data/spec/framework_spec/app/spec/core/range/begin_spec.rb +2 -2
  2007. data/spec/framework_spec/app/spec/core/range/case_compare_spec.rb +2 -2
  2008. data/spec/framework_spec/app/spec/core/range/cover_spec.rb +57 -0
  2009. data/spec/framework_spec/app/spec/core/range/each_spec.rb +5 -4
  2010. data/spec/framework_spec/app/spec/core/range/end_spec.rb +2 -2
  2011. data/spec/framework_spec/app/spec/core/range/eql_spec.rb +2 -2
  2012. data/spec/framework_spec/app/spec/core/range/equal_value_spec.rb +2 -2
  2013. data/spec/framework_spec/app/spec/core/range/exclude_end_spec.rb +1 -1
  2014. data/spec/framework_spec/app/spec/core/range/first_spec.rb +2 -2
  2015. data/spec/framework_spec/app/spec/core/range/hash_spec.rb +2 -2
  2016. data/spec/framework_spec/app/spec/core/range/include_spec.rb +2 -2
  2017. data/spec/framework_spec/app/spec/core/range/initialize_spec.rb +1 -1
  2018. data/spec/framework_spec/app/spec/core/range/inspect_spec.rb +2 -2
  2019. data/spec/framework_spec/app/spec/core/range/last_spec.rb +2 -2
  2020. data/spec/framework_spec/app/spec/core/range/max_spec.rb +55 -0
  2021. data/spec/framework_spec/app/spec/core/range/member_spec.rb +2 -2
  2022. data/spec/framework_spec/app/spec/core/range/min_spec.rb +55 -0
  2023. data/spec/framework_spec/app/spec/core/range/new_spec.rb +9 -9
  2024. data/spec/framework_spec/app/spec/core/range/shared/equal_value.rb +2 -2
  2025. data/spec/framework_spec/app/spec/core/range/shared/include.rb +9 -0
  2026. data/spec/framework_spec/app/spec/core/range/step_spec.rb +4 -3
  2027. data/spec/framework_spec/app/spec/core/range/to_a_spec.rb +10 -3
  2028. data/spec/framework_spec/app/spec/core/range/to_s_spec.rb +1 -1
  2029. data/spec/framework_spec/app/spec/core/rational/Rational_spec.rb +35 -0
  2030. data/spec/framework_spec/app/spec/core/rational/abs_spec.rb +7 -0
  2031. data/spec/framework_spec/app/spec/core/rational/ceil_spec.rb +7 -0
  2032. data/spec/framework_spec/app/spec/core/rational/coerce_spec.rb +7 -0
  2033. data/spec/framework_spec/app/spec/core/rational/comparison_spec.rb +23 -0
  2034. data/spec/framework_spec/app/spec/core/rational/denominator_spec.rb +7 -0
  2035. data/spec/framework_spec/app/spec/core/rational/div_spec.rb +19 -0
  2036. data/spec/framework_spec/app/spec/core/rational/divide_spec.rb +19 -0
  2037. data/spec/framework_spec/app/spec/core/rational/divmod_spec.rb +15 -0
  2038. data/spec/framework_spec/app/spec/core/rational/equal_value_spec.rb +19 -0
  2039. data/spec/framework_spec/app/spec/core/rational/exponent_spec.rb +19 -0
  2040. data/spec/framework_spec/app/spec/core/rational/fdiv_spec.rb +7 -0
  2041. data/spec/framework_spec/app/spec/core/rational/floor_spec.rb +7 -0
  2042. data/spec/framework_spec/app/spec/core/rational/hash_spec.rb +7 -0
  2043. data/spec/framework_spec/app/spec/core/rational/initialize_spec.rb +7 -0
  2044. data/spec/framework_spec/app/spec/core/rational/inspect_spec.rb +7 -0
  2045. data/spec/framework_spec/app/spec/core/rational/integer_spec.rb +13 -0
  2046. data/spec/framework_spec/app/spec/core/rational/magnitude_spec.rb +7 -0
  2047. data/spec/framework_spec/app/spec/core/rational/marshal_dump_spec.rb +7 -0
  2048. data/spec/framework_spec/app/spec/core/rational/marshal_load_spec.rb +7 -0
  2049. data/spec/framework_spec/app/spec/core/rational/minus_spec.rb +7 -0
  2050. data/spec/framework_spec/app/spec/core/rational/modulo_spec.rb +7 -0
  2051. data/spec/framework_spec/app/spec/core/rational/multiply_spec.rb +19 -0
  2052. data/spec/framework_spec/app/spec/core/rational/numerator_spec.rb +7 -0
  2053. data/spec/framework_spec/app/spec/core/rational/plus_spec.rb +18 -0
  2054. data/spec/framework_spec/app/spec/core/rational/quo_spec.rb +7 -0
  2055. data/spec/framework_spec/app/spec/core/rational/rationalize_spec.rb +33 -0
  2056. data/spec/framework_spec/app/spec/core/rational/remainder_spec.rb +7 -0
  2057. data/spec/framework_spec/app/spec/core/rational/round_spec.rb +7 -0
  2058. data/spec/framework_spec/app/spec/core/rational/to_f_spec.rb +7 -0
  2059. data/spec/framework_spec/app/spec/core/rational/to_i_spec.rb +7 -0
  2060. data/spec/framework_spec/app/spec/core/rational/to_r_spec.rb +7 -0
  2061. data/spec/framework_spec/app/spec/core/rational/to_s_spec.rb +7 -0
  2062. data/spec/framework_spec/app/spec/core/rational/truncate_spec.rb +7 -0
  2063. data/spec/framework_spec/app/spec/core/rational/zero_spec.rb +15 -0
  2064. data/spec/framework_spec/app/spec/core/regexp/case_compare_spec.rb +2 -2
  2065. data/spec/framework_spec/app/spec/core/regexp/casefold_spec.rb +1 -1
  2066. data/spec/framework_spec/app/spec/core/regexp/compile_spec.rb +2 -2
  2067. data/spec/framework_spec/app/spec/core/regexp/encoding_spec.rb +56 -0
  2068. data/spec/framework_spec/app/spec/core/regexp/eql_spec.rb +2 -2
  2069. data/spec/framework_spec/app/spec/core/regexp/equal_value_spec.rb +2 -2
  2070. data/spec/framework_spec/app/spec/core/regexp/escape_spec.rb +6 -2
  2071. data/spec/framework_spec/app/spec/core/regexp/fixed_encoding_spec.rb +36 -0
  2072. data/spec/framework_spec/app/spec/core/regexp/hash_spec.rb +1 -1
  2073. data/spec/framework_spec/app/spec/core/regexp/initialize_copy_spec.rb +1 -1
  2074. data/spec/framework_spec/app/spec/core/regexp/initialize_spec.rb +1 -1
  2075. data/spec/framework_spec/app/spec/core/regexp/inspect_spec.rb +9 -1
  2076. data/spec/framework_spec/app/spec/core/regexp/kcode_spec.rb +17 -16
  2077. data/spec/framework_spec/app/spec/core/regexp/last_match_spec.rb +4 -4
  2078. data/spec/framework_spec/app/spec/core/regexp/match_spec.rb +31 -3
  2079. data/spec/framework_spec/app/spec/core/regexp/named_captures_spec.rb +1 -0
  2080. data/spec/framework_spec/app/spec/core/regexp/names_spec.rb +1 -0
  2081. data/spec/framework_spec/app/spec/core/regexp/new_spec.rb +2 -2
  2082. data/spec/framework_spec/app/spec/core/regexp/options_spec.rb +3 -3
  2083. data/spec/framework_spec/app/spec/core/regexp/quote_spec.rb +3 -3
  2084. data/spec/framework_spec/app/spec/core/regexp/shared/match.rb +2 -2
  2085. data/spec/framework_spec/app/spec/core/regexp/shared/new.rb +65 -53
  2086. data/spec/framework_spec/app/spec/core/regexp/source_spec.rb +1 -1
  2087. data/spec/framework_spec/app/spec/core/regexp/to_s_spec.rb +1 -1
  2088. data/spec/framework_spec/app/spec/core/regexp/try_convert_spec.rb +21 -0
  2089. data/spec/framework_spec/app/spec/core/regexp/union_spec.rb +18 -2
  2090. data/spec/framework_spec/app/spec/core/regexp/versions/named_captures_1.9.rb +35 -0
  2091. data/spec/framework_spec/app/spec/core/regexp/versions/names_1.9.rb +29 -0
  2092. data/spec/framework_spec/app/spec/core/signal/list_spec.rb +1 -1
  2093. data/spec/framework_spec/app/spec/core/signal/trap_spec.rb +106 -1
  2094. data/spec/framework_spec/app/spec/core/string/allocate_spec.rb +2 -2
  2095. data/spec/framework_spec/app/spec/core/string/append_spec.rb +3 -3
  2096. data/spec/framework_spec/app/spec/core/string/ascii_only_spec.rb +44 -29
  2097. data/spec/framework_spec/app/spec/core/string/bytes_spec.rb +25 -18
  2098. data/spec/framework_spec/app/spec/core/string/bytesize_spec.rb +12 -12
  2099. data/spec/framework_spec/app/spec/core/string/capitalize_spec.rb +6 -6
  2100. data/spec/framework_spec/app/spec/core/string/case_compare_spec.rb +7 -0
  2101. data/spec/framework_spec/app/spec/core/string/casecmp_spec.rb +117 -64
  2102. data/spec/framework_spec/app/spec/core/string/center_spec.rb +24 -18
  2103. data/spec/framework_spec/app/spec/core/string/chars_spec.rb +7 -0
  2104. data/spec/framework_spec/app/spec/core/string/chomp_spec.rb +68 -39
  2105. data/spec/framework_spec/app/spec/core/string/chop_spec.rb +34 -56
  2106. data/spec/framework_spec/app/spec/core/string/chr_spec.rb +44 -0
  2107. data/spec/framework_spec/app/spec/core/string/clear_spec.rb +39 -0
  2108. data/spec/framework_spec/app/spec/core/string/codepoints_spec.rb +8 -0
  2109. data/spec/framework_spec/app/spec/core/string/comparison_spec.rb +6 -6
  2110. data/spec/framework_spec/app/spec/core/string/concat_spec.rb +3 -3
  2111. data/spec/framework_spec/app/spec/core/string/count_spec.rb +26 -11
  2112. data/spec/framework_spec/app/spec/core/string/crypt_spec.rb +35 -35
  2113. data/spec/framework_spec/app/spec/core/string/delete_spec.rb +25 -8
  2114. data/spec/framework_spec/app/spec/core/string/downcase_spec.rb +6 -6
  2115. data/spec/framework_spec/app/spec/core/string/dump_spec.rb +13 -4
  2116. data/spec/framework_spec/app/spec/core/string/each_byte_spec.rb +3 -3
  2117. data/spec/framework_spec/app/spec/core/string/each_char_spec.rb +3 -29
  2118. data/spec/framework_spec/app/spec/core/string/each_codepoint_spec.rb +8 -0
  2119. data/spec/framework_spec/app/spec/core/string/each_line_spec.rb +3 -3
  2120. data/spec/framework_spec/app/spec/core/string/each_spec.rb +3 -3
  2121. data/spec/framework_spec/app/spec/core/string/element_reference_spec.rb +9 -3
  2122. data/spec/framework_spec/app/spec/core/string/element_set_spec.rb +54 -10
  2123. data/spec/framework_spec/app/spec/core/string/empty_spec.rb +2 -2
  2124. data/spec/framework_spec/app/spec/core/string/encode_spec.rb +114 -0
  2125. data/spec/framework_spec/app/spec/core/string/encoding_spec.rb +181 -0
  2126. data/spec/framework_spec/app/spec/core/string/end_with_spec.rb +3 -3
  2127. data/spec/framework_spec/app/spec/core/string/entries_spec.rb +2 -2
  2128. data/spec/framework_spec/app/spec/core/string/eql_spec.rb +5 -5
  2129. data/spec/framework_spec/app/spec/core/string/equal_value_spec.rb +7 -3
  2130. data/spec/framework_spec/app/spec/core/string/fixtures/classes.rb +12 -9
  2131. data/spec/framework_spec/app/spec/core/string/fixtures/iso-8859-9-encoding.rb +9 -0
  2132. data/spec/framework_spec/app/spec/core/string/fixtures/utf-8-encoding.rb +7 -0
  2133. data/spec/framework_spec/app/spec/core/string/force_encoding_spec.rb +61 -0
  2134. data/spec/framework_spec/app/spec/core/string/getbyte_spec.rb +63 -0
  2135. data/spec/framework_spec/app/spec/core/string/gsub_spec.rb +228 -75
  2136. data/spec/framework_spec/app/spec/core/string/hash_spec.rb +2 -2
  2137. data/spec/framework_spec/app/spec/core/string/hex_spec.rb +23 -9
  2138. data/spec/framework_spec/app/spec/core/string/include_spec.rb +7 -7
  2139. data/spec/framework_spec/app/spec/core/string/index_spec.rb +46 -52
  2140. data/spec/framework_spec/app/spec/core/string/initialize_spec.rb +19 -21
  2141. data/spec/framework_spec/app/spec/core/string/insert_spec.rb +4 -4
  2142. data/spec/framework_spec/app/spec/core/string/inspect_spec.rb +661 -41
  2143. data/spec/framework_spec/app/spec/core/string/intern_spec.rb +4 -4
  2144. data/spec/framework_spec/app/spec/core/string/length_spec.rb +4 -4
  2145. data/spec/framework_spec/app/spec/core/string/lines_spec.rb +9 -0
  2146. data/spec/framework_spec/app/spec/core/string/ljust_spec.rb +18 -12
  2147. data/spec/framework_spec/app/spec/core/string/lstrip_spec.rb +23 -14
  2148. data/spec/framework_spec/app/spec/core/string/match_spec.rb +11 -11
  2149. data/spec/framework_spec/app/spec/core/string/modulo_spec.rb +103 -45
  2150. data/spec/framework_spec/app/spec/core/string/multiply_spec.rb +10 -10
  2151. data/spec/framework_spec/app/spec/core/string/new_spec.rb +3 -3
  2152. data/spec/framework_spec/app/spec/core/string/next_spec.rb +4 -4
  2153. data/spec/framework_spec/app/spec/core/string/oct_spec.rb +59 -16
  2154. data/spec/framework_spec/app/spec/core/string/ord_spec.rb +32 -0
  2155. data/spec/framework_spec/app/spec/core/string/partition_spec.rb +7 -3
  2156. data/spec/framework_spec/app/spec/core/string/plus_spec.rb +9 -9
  2157. data/spec/framework_spec/app/spec/core/string/replace_spec.rb +18 -13
  2158. data/spec/framework_spec/app/spec/core/string/reverse_spec.rb +16 -11
  2159. data/spec/framework_spec/app/spec/core/string/rindex_spec.rb +75 -69
  2160. data/spec/framework_spec/app/spec/core/string/rjust_spec.rb +18 -12
  2161. data/spec/framework_spec/app/spec/core/string/rpartition_spec.rb +8 -3
  2162. data/spec/framework_spec/app/spec/core/string/rstrip_spec.rb +52 -20
  2163. data/spec/framework_spec/app/spec/core/string/scan_spec.rb +48 -23
  2164. data/spec/framework_spec/app/spec/core/string/setbyte_spec.rb +55 -0
  2165. data/spec/framework_spec/app/spec/core/string/shared/chars.rb +70 -0
  2166. data/spec/framework_spec/app/spec/core/string/shared/codepoints.rb +66 -0
  2167. data/spec/framework_spec/app/spec/core/string/shared/concat.rb +9 -6
  2168. data/spec/framework_spec/app/spec/core/string/shared/each_line.rb +27 -6
  2169. data/spec/framework_spec/app/spec/core/string/shared/encode.rb +112 -0
  2170. data/spec/framework_spec/app/spec/core/string/shared/slice.rb +13 -11
  2171. data/spec/framework_spec/app/spec/core/string/shared/succ.rb +3 -3
  2172. data/spec/framework_spec/app/spec/core/string/shared/to_s.rb +1 -1
  2173. data/spec/framework_spec/app/spec/core/string/shared/to_sym.rb +32 -0
  2174. data/spec/framework_spec/app/spec/core/string/shared/versions/slice_1.9.rb +78 -0
  2175. data/spec/framework_spec/app/spec/core/string/size_spec.rb +4 -4
  2176. data/spec/framework_spec/app/spec/core/string/slice_spec.rb +54 -42
  2177. data/spec/framework_spec/app/spec/core/string/split_spec.rb +109 -60
  2178. data/spec/framework_spec/app/spec/core/string/squeeze_spec.rb +21 -7
  2179. data/spec/framework_spec/app/spec/core/string/start_with_spec.rb +4 -4
  2180. data/spec/framework_spec/app/spec/core/string/strip_spec.rb +49 -12
  2181. data/spec/framework_spec/app/spec/core/string/sub_spec.rb +91 -43
  2182. data/spec/framework_spec/app/spec/core/string/succ_spec.rb +4 -4
  2183. data/spec/framework_spec/app/spec/core/string/sum_spec.rb +7 -2
  2184. data/spec/framework_spec/app/spec/core/string/swapcase_spec.rb +5 -5
  2185. data/spec/framework_spec/app/spec/core/string/to_a_spec.rb +2 -2
  2186. data/spec/framework_spec/app/spec/core/string/to_c_spec.rb +101 -0
  2187. data/spec/framework_spec/app/spec/core/string/to_f_spec.rb +8 -16
  2188. data/spec/framework_spec/app/spec/core/string/to_i_spec.rb +38 -16
  2189. data/spec/framework_spec/app/spec/core/string/to_r_spec.rb +60 -0
  2190. data/spec/framework_spec/app/spec/core/string/to_s_spec.rb +4 -4
  2191. data/spec/framework_spec/app/spec/core/string/to_str_spec.rb +4 -4
  2192. data/spec/framework_spec/app/spec/core/string/to_sym_spec.rb +4 -4
  2193. data/spec/framework_spec/app/spec/core/string/tr_s_spec.rb +8 -8
  2194. data/spec/framework_spec/app/spec/core/string/tr_spec.rb +37 -5
  2195. data/spec/framework_spec/app/spec/core/string/try_convert_spec.rb +15 -17
  2196. data/spec/framework_spec/app/spec/core/string/unpack/a_spec.rb +51 -0
  2197. data/spec/framework_spec/app/spec/core/string/unpack/at_spec.rb +29 -0
  2198. data/spec/framework_spec/app/spec/core/string/unpack/b_spec.rb +184 -0
  2199. data/spec/framework_spec/app/spec/core/string/unpack/c_spec.rb +63 -0
  2200. data/spec/framework_spec/app/spec/core/string/unpack/comment_spec.rb +25 -0
  2201. data/spec/framework_spec/app/spec/core/string/unpack/d_spec.rb +28 -0
  2202. data/spec/framework_spec/app/spec/core/string/unpack/e_spec.rb +14 -0
  2203. data/spec/framework_spec/app/spec/core/string/unpack/f_spec.rb +28 -0
  2204. data/spec/framework_spec/app/spec/core/string/unpack/g_spec.rb +14 -0
  2205. data/spec/framework_spec/app/spec/core/string/unpack/h_spec.rb +124 -0
  2206. data/spec/framework_spec/app/spec/core/string/unpack/i_spec.rb +72 -0
  2207. data/spec/framework_spec/app/spec/core/string/unpack/l_spec.rb +216 -0
  2208. data/spec/framework_spec/app/spec/core/string/unpack/m_spec.rb +165 -0
  2209. data/spec/framework_spec/app/spec/core/string/unpack/n_spec.rb +18 -0
  2210. data/spec/framework_spec/app/spec/core/string/unpack/percent_spec.rb +7 -0
  2211. data/spec/framework_spec/app/spec/core/string/unpack/q_spec.rb +42 -0
  2212. data/spec/framework_spec/app/spec/core/string/unpack/s_spec.rb +72 -0
  2213. data/spec/framework_spec/app/spec/core/string/unpack/shared/basic.rb +25 -0
  2214. data/spec/framework_spec/app/spec/core/string/unpack/shared/float.rb +267 -0
  2215. data/spec/framework_spec/app/spec/core/string/unpack/shared/integer.rb +343 -0
  2216. data/spec/framework_spec/app/spec/core/string/unpack/shared/string.rb +51 -0
  2217. data/spec/framework_spec/app/spec/core/string/unpack/shared/unicode.rb +60 -0
  2218. data/spec/framework_spec/app/spec/core/string/unpack/u_spec.rb +78 -0
  2219. data/spec/framework_spec/app/spec/core/string/unpack/v_spec.rb +18 -0
  2220. data/spec/framework_spec/app/spec/core/string/unpack/w_spec.rb +25 -0
  2221. data/spec/framework_spec/app/spec/core/string/unpack/x_spec.rb +62 -0
  2222. data/spec/framework_spec/app/spec/core/string/unpack/z_spec.rb +21 -0
  2223. data/spec/framework_spec/app/spec/core/string/unpack_spec.rb +121 -32
  2224. data/spec/framework_spec/app/spec/core/string/upcase_spec.rb +5 -5
  2225. data/spec/framework_spec/app/spec/core/string/upto_spec.rb +21 -11
  2226. data/spec/framework_spec/app/spec/core/string/valid_encoding_spec.rb +122 -0
  2227. data/spec/framework_spec/app/spec/core/struct/each_pair_spec.rb +6 -6
  2228. data/spec/framework_spec/app/spec/core/struct/each_spec.rb +6 -6
  2229. data/spec/framework_spec/app/spec/core/struct/element_reference_spec.rb +7 -7
  2230. data/spec/framework_spec/app/spec/core/struct/element_set_spec.rb +4 -4
  2231. data/spec/framework_spec/app/spec/core/struct/eql_spec.rb +10 -4
  2232. data/spec/framework_spec/app/spec/core/struct/equal_value_spec.rb +3 -3
  2233. data/spec/framework_spec/app/spec/core/struct/fixtures/classes.rb +24 -8
  2234. data/spec/framework_spec/app/spec/core/struct/hash_spec.rb +24 -10
  2235. data/spec/framework_spec/app/spec/core/struct/initialize_copy_spec.rb +2 -2
  2236. data/spec/framework_spec/app/spec/core/struct/initialize_spec.rb +9 -5
  2237. data/spec/framework_spec/app/spec/core/struct/inspect_spec.rb +13 -6
  2238. data/spec/framework_spec/app/spec/core/struct/length_spec.rb +4 -4
  2239. data/spec/framework_spec/app/spec/core/struct/members_spec.rb +17 -7
  2240. data/spec/framework_spec/app/spec/core/struct/new_spec.rb +61 -32
  2241. data/spec/framework_spec/app/spec/core/struct/select_spec.rb +9 -9
  2242. data/spec/framework_spec/app/spec/core/struct/shared/equal_value.rb +20 -5
  2243. data/spec/framework_spec/app/spec/core/struct/shared/inspect.rb +13 -0
  2244. data/spec/framework_spec/app/spec/core/struct/size_spec.rb +3 -3
  2245. data/spec/framework_spec/app/spec/core/struct/struct_spec.rb +6 -6
  2246. data/spec/framework_spec/app/spec/core/struct/tms/cstime_spec.rb +9 -0
  2247. data/spec/framework_spec/app/spec/core/struct/tms/cutime_spec.rb +9 -0
  2248. data/spec/framework_spec/app/spec/core/struct/tms/element_reference_spec.rb +5 -0
  2249. data/spec/framework_spec/app/spec/core/struct/tms/members_spec.rb +5 -0
  2250. data/spec/framework_spec/app/spec/core/struct/tms/new_spec.rb +5 -0
  2251. data/spec/framework_spec/app/spec/core/struct/tms/stime_spec.rb +9 -0
  2252. data/spec/framework_spec/app/spec/core/struct/tms/utime_spec.rb +9 -0
  2253. data/spec/framework_spec/app/spec/core/struct/to_a_spec.rb +4 -4
  2254. data/spec/framework_spec/app/spec/core/struct/to_s_spec.rb +6 -3
  2255. data/spec/framework_spec/app/spec/core/struct/values_at_spec.rb +3 -3
  2256. data/spec/framework_spec/app/spec/core/struct/values_spec.rb +4 -4
  2257. data/spec/framework_spec/app/spec/core/symbol/all_symbols_spec.rb +7 -7
  2258. data/spec/framework_spec/app/spec/core/symbol/capitalize_spec.rb +44 -0
  2259. data/spec/framework_spec/app/spec/core/symbol/case_compare_spec.rb +2 -2
  2260. data/spec/framework_spec/app/spec/core/symbol/casecmp_spec.rb +65 -0
  2261. data/spec/framework_spec/app/spec/core/symbol/comparison_spec.rb +52 -0
  2262. data/spec/framework_spec/app/spec/core/symbol/downcase_spec.rb +26 -0
  2263. data/spec/framework_spec/app/spec/core/symbol/element_reference_spec.rb +7 -0
  2264. data/spec/framework_spec/app/spec/core/symbol/empty_spec.rb +14 -0
  2265. data/spec/framework_spec/app/spec/core/symbol/encoding_spec.rb +7 -0
  2266. data/spec/framework_spec/app/spec/core/symbol/equal_value_spec.rb +2 -2
  2267. data/spec/framework_spec/app/spec/core/symbol/id2name_spec.rb +2 -2
  2268. data/spec/framework_spec/app/spec/core/symbol/inspect_spec.rb +19 -7
  2269. data/spec/framework_spec/app/spec/core/symbol/intern_spec.rb +11 -0
  2270. data/spec/framework_spec/app/spec/core/symbol/length_spec.rb +7 -0
  2271. data/spec/framework_spec/app/spec/core/symbol/match_spec.rb +13 -0
  2272. data/spec/framework_spec/app/spec/core/symbol/next_spec.rb +7 -0
  2273. data/spec/framework_spec/app/spec/core/symbol/size_spec.rb +7 -0
  2274. data/spec/framework_spec/app/spec/core/symbol/slice_spec.rb +7 -0
  2275. data/spec/framework_spec/app/spec/core/symbol/succ_spec.rb +7 -0
  2276. data/spec/framework_spec/app/spec/core/symbol/swapcase_spec.rb +34 -0
  2277. data/spec/framework_spec/app/spec/core/symbol/to_i_spec.rb +2 -2
  2278. data/spec/framework_spec/app/spec/core/symbol/to_int_spec.rb +2 -2
  2279. data/spec/framework_spec/app/spec/core/symbol/to_proc_spec.rb +3 -3
  2280. data/spec/framework_spec/app/spec/core/symbol/to_s_spec.rb +2 -2
  2281. data/spec/framework_spec/app/spec/core/symbol/to_sym_spec.rb +1 -1
  2282. data/spec/framework_spec/app/spec/core/symbol/upcase_spec.rb +22 -0
  2283. data/spec/framework_spec/app/spec/core/systemexit/initialize_spec.rb +1 -1
  2284. data/spec/framework_spec/app/spec/core/thread/abort_on_exception_spec.rb +14 -2
  2285. data/spec/framework_spec/app/spec/core/thread/add_trace_func_spec.rb +7 -0
  2286. data/spec/framework_spec/app/spec/core/thread/alive_spec.rb +18 -4
  2287. data/spec/framework_spec/app/spec/core/thread/allocate_spec.rb +9 -0
  2288. data/spec/framework_spec/app/spec/core/thread/backtrace_spec.rb +7 -0
  2289. data/spec/framework_spec/app/spec/core/thread/critical_spec.rb +77 -75
  2290. data/spec/framework_spec/app/spec/core/thread/current_spec.rb +3 -3
  2291. data/spec/framework_spec/app/spec/core/thread/element_reference_spec.rb +14 -5
  2292. data/spec/framework_spec/app/spec/core/thread/element_set_spec.rb +14 -5
  2293. data/spec/framework_spec/app/spec/core/thread/exclusive_spec.rb +7 -0
  2294. data/spec/framework_spec/app/spec/core/thread/exit_spec.rb +15 -5
  2295. data/spec/framework_spec/app/spec/core/thread/fixtures/classes.rb +53 -40
  2296. data/spec/framework_spec/app/spec/core/thread/fork_spec.rb +9 -2
  2297. data/spec/framework_spec/app/spec/core/thread/group_spec.rb +5 -2
  2298. data/spec/framework_spec/app/spec/core/thread/initialize_spec.rb +2 -2
  2299. data/spec/framework_spec/app/spec/core/thread/inspect_spec.rb +8 -4
  2300. data/spec/framework_spec/app/spec/core/thread/join_spec.rb +17 -6
  2301. data/spec/framework_spec/app/spec/core/thread/key_spec.rb +16 -5
  2302. data/spec/framework_spec/app/spec/core/thread/keys_spec.rb +2 -2
  2303. data/spec/framework_spec/app/spec/core/thread/kill_spec.rb +11 -3
  2304. data/spec/framework_spec/app/spec/core/thread/list_spec.rb +7 -2
  2305. data/spec/framework_spec/app/spec/core/thread/main_spec.rb +2 -2
  2306. data/spec/framework_spec/app/spec/core/thread/new_spec.rb +40 -3
  2307. data/spec/framework_spec/app/spec/core/thread/pass_spec.rb +2 -2
  2308. data/spec/framework_spec/app/spec/core/thread/priority_spec.rb +9 -2
  2309. data/spec/framework_spec/app/spec/core/thread/raise_spec.rb +41 -27
  2310. data/spec/framework_spec/app/spec/core/thread/run_spec.rb +3 -3
  2311. data/spec/framework_spec/app/spec/core/thread/safe_level_spec.rb +6 -2
  2312. data/spec/framework_spec/app/spec/core/thread/set_trace_func_spec.rb +7 -0
  2313. data/spec/framework_spec/app/spec/core/thread/shared/exit.rb +38 -30
  2314. data/spec/framework_spec/app/spec/core/thread/shared/start.rb +51 -0
  2315. data/spec/framework_spec/app/spec/core/thread/shared/wakeup.rb +25 -13
  2316. data/spec/framework_spec/app/spec/core/thread/start_spec.rb +9 -2
  2317. data/spec/framework_spec/app/spec/core/thread/status_spec.rb +8 -4
  2318. data/spec/framework_spec/app/spec/core/thread/stop_spec.rb +12 -8
  2319. data/spec/framework_spec/app/spec/core/thread/terminate_spec.rb +7 -3
  2320. data/spec/framework_spec/app/spec/core/thread/value_spec.rb +21 -8
  2321. data/spec/framework_spec/app/spec/core/thread/wakeup_spec.rb +3 -3
  2322. data/spec/framework_spec/app/spec/core/threadgroup/add_spec.rb +36 -37
  2323. data/spec/framework_spec/app/spec/core/threadgroup/enclose_spec.rb +5 -1
  2324. data/spec/framework_spec/app/spec/core/threadgroup/enclosed_spec.rb +5 -1
  2325. data/spec/framework_spec/app/spec/core/threadgroup/list_spec.rb +24 -25
  2326. data/spec/framework_spec/app/spec/core/time/_dump_spec.rb +13 -2
  2327. data/spec/framework_spec/app/spec/core/time/_load_spec.rb +24 -2
  2328. data/spec/framework_spec/app/spec/core/time/asctime_spec.rb +3 -3
  2329. data/spec/framework_spec/app/spec/core/time/at_spec.rb +34 -14
  2330. data/spec/framework_spec/app/spec/core/time/comparison_spec.rb +4 -4
  2331. data/spec/framework_spec/app/spec/core/time/ctime_spec.rb +3 -3
  2332. data/spec/framework_spec/app/spec/core/time/day_spec.rb +3 -3
  2333. data/spec/framework_spec/app/spec/core/time/dst_spec.rb +3 -3
  2334. data/spec/framework_spec/app/spec/core/time/dup_spec.rb +10 -2
  2335. data/spec/framework_spec/app/spec/core/time/eql_spec.rb +9 -3
  2336. data/spec/framework_spec/app/spec/core/time/fixtures/classes.rb +5 -0
  2337. data/spec/framework_spec/app/spec/core/time/fixtures/methods.rb +1 -29
  2338. data/spec/framework_spec/app/spec/core/time/friday_spec.rb +7 -0
  2339. data/spec/framework_spec/app/spec/core/time/getgm_spec.rb +3 -3
  2340. data/spec/framework_spec/app/spec/core/time/getlocal_spec.rb +2 -2
  2341. data/spec/framework_spec/app/spec/core/time/getutc_spec.rb +3 -3
  2342. data/spec/framework_spec/app/spec/core/time/gm_spec.rb +4 -4
  2343. data/spec/framework_spec/app/spec/core/time/gmt_offset_spec.rb +3 -3
  2344. data/spec/framework_spec/app/spec/core/time/gmt_spec.rb +2 -2
  2345. data/spec/framework_spec/app/spec/core/time/gmtime_spec.rb +3 -3
  2346. data/spec/framework_spec/app/spec/core/time/gmtoff_spec.rb +3 -3
  2347. data/spec/framework_spec/app/spec/core/time/hash_spec.rb +5 -5
  2348. data/spec/framework_spec/app/spec/core/time/hour_spec.rb +2 -2
  2349. data/spec/framework_spec/app/spec/core/time/initialize_copy_spec.rb +2 -2
  2350. data/spec/framework_spec/app/spec/core/time/initialize_spec.rb +3 -3
  2351. data/spec/framework_spec/app/spec/core/time/inspect_spec.rb +11 -2
  2352. data/spec/framework_spec/app/spec/core/time/isdst_spec.rb +4 -4
  2353. data/spec/framework_spec/app/spec/core/time/local_spec.rb +4 -4
  2354. data/spec/framework_spec/app/spec/core/time/localtime_spec.rb +2 -2
  2355. data/spec/framework_spec/app/spec/core/time/mday_spec.rb +3 -3
  2356. data/spec/framework_spec/app/spec/core/time/min_spec.rb +2 -2
  2357. data/spec/framework_spec/app/spec/core/time/minus_spec.rb +53 -33
  2358. data/spec/framework_spec/app/spec/core/time/mktime_spec.rb +4 -4
  2359. data/spec/framework_spec/app/spec/core/time/mon_spec.rb +3 -3
  2360. data/spec/framework_spec/app/spec/core/time/monday_spec.rb +7 -0
  2361. data/spec/framework_spec/app/spec/core/time/month_spec.rb +3 -3
  2362. data/spec/framework_spec/app/spec/core/time/now_spec.rb +3 -3
  2363. data/spec/framework_spec/app/spec/core/time/nsec_spec.rb +7 -0
  2364. data/spec/framework_spec/app/spec/core/time/plus_spec.rb +64 -19
  2365. data/spec/framework_spec/app/spec/core/time/round_spec.rb +7 -0
  2366. data/spec/framework_spec/app/spec/core/time/saturday_spec.rb +7 -0
  2367. data/spec/framework_spec/app/spec/core/time/sec_spec.rb +2 -2
  2368. data/spec/framework_spec/app/spec/core/time/shared/gmt_offset.rb +23 -0
  2369. data/spec/framework_spec/app/spec/core/time/shared/inspect.rb +25 -0
  2370. data/spec/framework_spec/app/spec/core/time/shared/isdst.rb +1 -1
  2371. data/spec/framework_spec/app/spec/core/time/shared/local.rb +8 -0
  2372. data/spec/framework_spec/app/spec/core/time/shared/now.rb +12 -4
  2373. data/spec/framework_spec/app/spec/core/time/shared/time_params.rb +134 -35
  2374. data/spec/framework_spec/app/spec/core/time/strftime_spec.rb +141 -2
  2375. data/spec/framework_spec/app/spec/core/time/subsec_spec.rb +7 -0
  2376. data/spec/framework_spec/app/spec/core/time/succ_spec.rb +3 -3
  2377. data/spec/framework_spec/app/spec/core/time/sunday_spec.rb +7 -0
  2378. data/spec/framework_spec/app/spec/core/time/thursday_spec.rb +7 -0
  2379. data/spec/framework_spec/app/spec/core/time/times_spec.rb +2 -2
  2380. data/spec/framework_spec/app/spec/core/time/to_a_spec.rb +4 -3
  2381. data/spec/framework_spec/app/spec/core/time/to_f_spec.rb +2 -2
  2382. data/spec/framework_spec/app/spec/core/time/to_i_spec.rb +3 -3
  2383. data/spec/framework_spec/app/spec/core/time/to_r_spec.rb +13 -0
  2384. data/spec/framework_spec/app/spec/core/time/to_s_spec.rb +11 -2
  2385. data/spec/framework_spec/app/spec/core/time/tuesday_spec.rb +7 -0
  2386. data/spec/framework_spec/app/spec/core/time/tv_nsec_spec.rb +7 -0
  2387. data/spec/framework_spec/app/spec/core/time/tv_sec_spec.rb +3 -3
  2388. data/spec/framework_spec/app/spec/core/time/tv_usec_spec.rb +6 -2
  2389. data/spec/framework_spec/app/spec/core/time/usec_spec.rb +8 -2
  2390. data/spec/framework_spec/app/spec/core/time/utc_offset_spec.rb +3 -3
  2391. data/spec/framework_spec/app/spec/core/time/utc_spec.rb +7 -7
  2392. data/spec/framework_spec/app/spec/core/time/wday_spec.rb +2 -2
  2393. data/spec/framework_spec/app/spec/core/time/wednesday_spec.rb +7 -0
  2394. data/spec/framework_spec/app/spec/core/time/yday_spec.rb +2 -2
  2395. data/spec/framework_spec/app/spec/core/time/year_spec.rb +3 -3
  2396. data/spec/framework_spec/app/spec/core/time/zone_spec.rb +4 -3
  2397. data/spec/framework_spec/app/spec/core/true/and_spec.rb +1 -1
  2398. data/spec/framework_spec/app/spec/core/true/inspect_spec.rb +1 -1
  2399. data/spec/framework_spec/app/spec/core/true/or_spec.rb +1 -1
  2400. data/spec/framework_spec/app/spec/core/true/to_s_spec.rb +1 -1
  2401. data/spec/framework_spec/app/spec/core/true/xor_spec.rb +1 -1
  2402. data/spec/framework_spec/app/spec/core/unboundmethod/arity_spec.rb +2 -2
  2403. data/spec/framework_spec/app/spec/core/unboundmethod/bind_spec.rb +26 -6
  2404. data/spec/framework_spec/app/spec/core/unboundmethod/clone_spec.rb +2 -2
  2405. data/spec/framework_spec/app/spec/core/unboundmethod/eql_spec.rb +7 -0
  2406. data/spec/framework_spec/app/spec/core/unboundmethod/equal_value_spec.rb +4 -4
  2407. data/spec/framework_spec/app/spec/core/unboundmethod/fixtures/classes.rb +4 -1
  2408. data/spec/framework_spec/app/spec/core/unboundmethod/hash_spec.rb +7 -0
  2409. data/spec/framework_spec/app/spec/core/unboundmethod/inspect_spec.rb +3 -3
  2410. data/spec/framework_spec/app/spec/core/unboundmethod/name_spec.rb +19 -5
  2411. data/spec/framework_spec/app/spec/core/unboundmethod/owner_spec.rb +4 -4
  2412. data/spec/framework_spec/app/spec/core/unboundmethod/parameters_spec.rb +7 -0
  2413. data/spec/framework_spec/app/spec/core/unboundmethod/shared/to_s.rb +4 -4
  2414. data/spec/framework_spec/app/spec/core/unboundmethod/source_location_spec.rb +31 -0
  2415. data/spec/framework_spec/app/spec/core/unboundmethod/to_s_spec.rb +3 -3
  2416. data/spec/framework_spec/app/spec/fixtures/class.rb +39 -16
  2417. data/spec/framework_spec/app/spec/fixtures/class_variables.rb +7 -7
  2418. data/spec/framework_spec/app/spec/fixtures/code/file_fixture.rb +1 -0
  2419. data/spec/framework_spec/app/spec/fixtures/code/line_fixture.rb +5 -0
  2420. data/spec/framework_spec/app/spec/fixtures/code/load_ext_fixture.rb +1 -0
  2421. data/spec/framework_spec/app/spec/fixtures/code/load_fixture +1 -0
  2422. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.bundle +1 -0
  2423. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.dll +1 -0
  2424. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.dylib +1 -0
  2425. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext +1 -0
  2426. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext.bundle +1 -0
  2427. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext.dll +1 -0
  2428. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext.dylib +1 -0
  2429. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext.rb +1 -0
  2430. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext.so +1 -0
  2431. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.rb +1 -0
  2432. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.so +1 -0
  2433. data/spec/framework_spec/app/spec/fixtures/code/methods_fixture.rb +364 -0
  2434. data/spec/framework_spec/app/spec/fixtures/code/raise_fixture.rb +1 -0
  2435. data/spec/framework_spec/app/spec/fixtures/code/recursive_load_fixture.rb +5 -0
  2436. data/spec/framework_spec/app/spec/fixtures/code/recursive_require_fixture.rb +3 -0
  2437. data/spec/framework_spec/app/spec/fixtures/code/wrap_fixture.rb +3 -0
  2438. data/spec/framework_spec/app/spec/fixtures/code_loading.rb +30 -0
  2439. data/spec/framework_spec/app/spec/fixtures/enumerator/classes.rb +15 -0
  2440. data/spec/framework_spec/app/spec/fixtures/kernel/callcc.rb +17 -0
  2441. data/spec/framework_spec/app/spec/fixtures/kernel/classes.rb +56 -0
  2442. data/spec/framework_spec/app/spec/fixtures/math/common.rb +3 -0
  2443. data/spec/framework_spec/app/spec/fixtures/reflection.rb +352 -0
  2444. data/spec/framework_spec/app/spec/language/BEGIN_spec.rb +57 -0
  2445. data/spec/framework_spec/app/spec/language/README +1 -1
  2446. data/spec/framework_spec/app/spec/language/alias_spec.rb +33 -20
  2447. data/spec/framework_spec/app/spec/language/and_spec.rb +8 -8
  2448. data/spec/framework_spec/app/spec/language/array_spec.rb +5 -5
  2449. data/spec/framework_spec/app/spec/language/block_spec.rb +408 -27
  2450. data/spec/framework_spec/app/spec/language/break_spec.rb +210 -280
  2451. data/spec/framework_spec/app/spec/language/case_spec.rb +37 -38
  2452. data/spec/framework_spec/app/spec/language/class_spec.rb +52 -70
  2453. data/spec/framework_spec/app/spec/language/class_variable_spec.rb +6 -6
  2454. data/spec/framework_spec/app/spec/language/{constants_spec_dontrun.rb → constants_spec.rb} +14 -0
  2455. data/spec/framework_spec/app/spec/language/def_spec.rb +83 -68
  2456. data/spec/framework_spec/app/spec/language/defined_spec.rb +1181 -142
  2457. data/spec/framework_spec/app/spec/language/encoding_spec.rb +19 -20
  2458. data/spec/framework_spec/app/spec/language/ensure_spec.rb +32 -37
  2459. data/spec/framework_spec/app/spec/language/execution_spec.rb +9 -11
  2460. data/spec/framework_spec/app/spec/language/file_spec.rb +21 -39
  2461. data/spec/framework_spec/app/spec/language/fixtures/block.rb +26 -15
  2462. data/spec/framework_spec/app/spec/language/fixtures/break.rb +240 -0
  2463. data/spec/framework_spec/app/spec/language/fixtures/break_lambda_toplevel.rb +9 -0
  2464. data/spec/framework_spec/app/spec/language/fixtures/break_lambda_toplevel_block.rb +23 -0
  2465. data/spec/framework_spec/app/spec/language/fixtures/break_lambda_toplevel_method.rb +17 -0
  2466. data/spec/framework_spec/app/spec/language/fixtures/classes.rb +8 -8
  2467. data/spec/framework_spec/app/spec/language/fixtures/defined.rb +270 -0
  2468. data/spec/framework_spec/app/spec/language/fixtures/ensure.rb +6 -6
  2469. data/spec/framework_spec/app/spec/language/fixtures/file.rb +1 -1
  2470. data/spec/framework_spec/app/spec/language/fixtures/literal_lambda.rb +7 -0
  2471. data/spec/framework_spec/app/spec/language/fixtures/next.rb +128 -0
  2472. data/spec/framework_spec/app/spec/language/fixtures/private.rb +3 -3
  2473. data/spec/framework_spec/app/spec/language/fixtures/return.rb +44 -0
  2474. data/spec/framework_spec/app/spec/language/fixtures/rubyopt.rb +1 -0
  2475. data/spec/framework_spec/app/spec/language/fixtures/send.rb +110 -0
  2476. data/spec/framework_spec/app/spec/language/fixtures/send_1.9.rb +20 -0
  2477. data/spec/framework_spec/app/spec/language/fixtures/super.rb +38 -7
  2478. data/spec/framework_spec/app/spec/language/fixtures/variables.rb +1 -1
  2479. data/spec/framework_spec/app/spec/language/fixtures/yield.rb +20 -2
  2480. data/spec/framework_spec/app/spec/language/for_spec.rb +63 -39
  2481. data/spec/framework_spec/app/spec/language/hash_spec.rb +26 -1
  2482. data/spec/framework_spec/app/spec/language/if_spec.rb +32 -2
  2483. data/spec/framework_spec/app/spec/language/line_spec.rb +42 -17
  2484. data/spec/framework_spec/app/spec/language/literal_lambda_spec.rb +1 -0
  2485. data/spec/framework_spec/app/spec/language/loop_spec.rb +7 -8
  2486. data/spec/framework_spec/app/spec/language/magic_comment_spec.rb +60 -61
  2487. data/spec/framework_spec/app/spec/language/metaclass_spec.rb +21 -24
  2488. data/spec/framework_spec/app/spec/language/module_spec.rb +46 -1
  2489. data/spec/framework_spec/app/spec/language/next_spec.rb +241 -7
  2490. data/spec/framework_spec/app/spec/language/not_spec.rb +22 -2
  2491. data/spec/framework_spec/app/spec/language/numbers_spec.rb +5 -6
  2492. data/spec/framework_spec/app/spec/language/or_spec.rb +33 -7
  2493. data/spec/framework_spec/app/spec/language/order_spec.rb +3 -3
  2494. data/spec/framework_spec/app/spec/language/precedence_spec.rb +31 -33
  2495. data/spec/framework_spec/app/spec/language/predefined/data_spec.rb +45 -0
  2496. data/spec/framework_spec/app/spec/language/{fixtures/predefined.rb → predefined/fixtures/data1.rb} +2 -0
  2497. data/spec/framework_spec/app/spec/language/predefined/fixtures/data2.rb +4 -0
  2498. data/spec/framework_spec/app/spec/language/predefined/fixtures/data3.rb +7 -0
  2499. data/spec/framework_spec/app/spec/language/predefined/fixtures/data4.rb +4 -0
  2500. data/spec/framework_spec/app/spec/{core/io/data/fixtures/data2.rb → language/predefined/fixtures/data_flock.rb} +1 -1
  2501. data/spec/framework_spec/app/spec/language/predefined/fixtures/data_only.rb +2 -0
  2502. data/spec/framework_spec/app/spec/language/predefined/fixtures/print_data.rb +3 -0
  2503. data/spec/framework_spec/app/spec/language/predefined_spec.rb +599 -283
  2504. data/spec/framework_spec/app/spec/language/private_spec.rb +4 -4
  2505. data/spec/framework_spec/app/spec/language/proc_spec.rb +238 -0
  2506. data/spec/framework_spec/app/spec/language/redo_spec.rb +2 -2
  2507. data/spec/framework_spec/app/spec/language/regexp/anchors_spec.rb +163 -0
  2508. data/spec/framework_spec/app/spec/language/regexp/back-references_spec.rb +50 -0
  2509. data/spec/framework_spec/app/spec/language/regexp/character_classes_spec.rb +96 -0
  2510. data/spec/framework_spec/app/spec/language/regexp/encoding_spec.rb +129 -0
  2511. data/spec/framework_spec/app/spec/language/regexp/escapes_spec.rb +80 -0
  2512. data/spec/framework_spec/app/spec/language/regexp/grouping_spec.rb +23 -0
  2513. data/spec/framework_spec/app/spec/language/regexp/interpolation_spec.rb +55 -0
  2514. data/spec/framework_spec/app/spec/language/regexp/modifiers_spec.rb +132 -0
  2515. data/spec/framework_spec/app/spec/language/regexp/repetition_spec.rb +47 -0
  2516. data/spec/framework_spec/app/spec/language/regexp/versions/character_classes_1.9.rb +499 -0
  2517. data/spec/framework_spec/app/spec/language/regexp_spec.rb +42 -677
  2518. data/spec/framework_spec/app/spec/language/rescue_spec.rb +57 -8
  2519. data/spec/framework_spec/app/spec/language/retry_spec.rb +4 -4
  2520. data/spec/framework_spec/app/spec/language/return_spec.rb +11 -2
  2521. data/spec/framework_spec/app/spec/language/send_spec.rb +227 -0
  2522. data/spec/framework_spec/app/spec/language/shared/__FILE__.rb +37 -0
  2523. data/spec/framework_spec/app/spec/language/shared/__LINE__.rb +17 -0
  2524. data/spec/framework_spec/app/spec/language/singleton_class_spec.rb +299 -0
  2525. data/spec/framework_spec/app/spec/language/splat_spec.rb +188 -0
  2526. data/spec/framework_spec/app/spec/language/string_spec.rb +42 -7
  2527. data/spec/framework_spec/app/spec/language/super_spec.rb +11 -5
  2528. data/spec/framework_spec/app/spec/language/symbol_spec.rb +18 -11
  2529. data/spec/framework_spec/app/spec/language/throw_spec.rb +3 -3
  2530. data/spec/framework_spec/app/spec/language/undef_spec.rb +1 -1
  2531. data/spec/framework_spec/app/spec/language/unless_spec.rb +8 -8
  2532. data/spec/framework_spec/app/spec/language/until_spec.rb +27 -27
  2533. data/spec/framework_spec/app/spec/language/variables_spec.rb +57 -61
  2534. data/spec/framework_spec/app/spec/language/versions/array_1.9.rb +8 -0
  2535. data/spec/framework_spec/app/spec/language/versions/block_1.9.rb +80 -17
  2536. data/spec/framework_spec/app/spec/language/versions/case_1.9.rb +5 -5
  2537. data/spec/framework_spec/app/spec/language/versions/hash_1.9.rb +19 -0
  2538. data/spec/framework_spec/app/spec/language/versions/literal_lambda_1.9.rb +143 -0
  2539. data/spec/framework_spec/app/spec/language/versions/not_1.9.rb +22 -0
  2540. data/spec/framework_spec/app/spec/language/versions/regexp_1.9.rb +3 -3
  2541. data/spec/framework_spec/app/spec/language/versions/send_1.9.rb +196 -0
  2542. data/spec/framework_spec/app/spec/language/versions/symbol_1.9.rb +10 -2
  2543. data/spec/framework_spec/app/spec/language/versions/variables_1.9.rb +8 -0
  2544. data/spec/framework_spec/app/spec/language/while_spec.rb +24 -24
  2545. data/spec/framework_spec/app/spec/language/yield_spec.rb +105 -84
  2546. data/spec/framework_spec/app/spec/library/base64/b64encode_spec.rb +36 -0
  2547. data/spec/framework_spec/app/spec/library/base64/decode64_spec.rb +9 -0
  2548. data/spec/framework_spec/app/spec/library/base64/decode_b_spec.rb +19 -0
  2549. data/spec/framework_spec/app/spec/library/base64/encode64_spec.rb +14 -0
  2550. data/spec/framework_spec/app/spec/library/digest/hexencode_spec.rb +31 -0
  2551. data/spec/framework_spec/app/spec/library/digest/md5/append_spec.rb +3 -3
  2552. data/spec/framework_spec/app/spec/library/digest/md5/block_length_spec.rb +2 -2
  2553. data/spec/framework_spec/app/spec/library/digest/md5/digest_bang_spec.rb +2 -2
  2554. data/spec/framework_spec/app/spec/library/digest/md5/digest_length_spec.rb +2 -2
  2555. data/spec/framework_spec/app/spec/library/digest/md5/digest_spec.rb +2 -2
  2556. data/spec/framework_spec/app/spec/library/digest/md5/equal_spec.rb +2 -2
  2557. data/spec/framework_spec/app/spec/library/digest/md5/file_spec.rb +48 -0
  2558. data/spec/framework_spec/app/spec/library/digest/md5/hexdigest_bang_spec.rb +2 -2
  2559. data/spec/framework_spec/app/spec/library/digest/md5/hexdigest_spec.rb +2 -2
  2560. data/spec/framework_spec/app/spec/library/digest/md5/inspect_spec.rb +2 -2
  2561. data/spec/framework_spec/app/spec/library/digest/md5/length_spec.rb +3 -3
  2562. data/spec/framework_spec/app/spec/library/digest/md5/reset_spec.rb +2 -2
  2563. data/spec/framework_spec/app/spec/library/digest/md5/shared/constants.rb +1 -1
  2564. data/spec/framework_spec/app/spec/library/digest/md5/shared/sample.rb +1 -1
  2565. data/spec/framework_spec/app/spec/library/digest/md5/size_spec.rb +3 -3
  2566. data/spec/framework_spec/app/spec/library/digest/md5/to_s_spec.rb +2 -2
  2567. data/spec/framework_spec/app/spec/library/digest/md5/update_spec.rb +3 -3
  2568. data/spec/framework_spec/app/spec/library/digest/sha1/digest_spec.rb +2 -2
  2569. data/spec/framework_spec/app/spec/library/digest/sha1/file_spec.rb +43 -0
  2570. data/spec/framework_spec/app/spec/library/digest/sha1/shared/constants.rb +1 -1
  2571. data/spec/framework_spec/app/spec/library/set/add_spec.rb +27 -0
  2572. data/spec/framework_spec/app/spec/library/set/append_spec.rb +7 -0
  2573. data/spec/framework_spec/app/spec/library/set/classify_spec.rb +35 -0
  2574. data/spec/framework_spec/app/spec/library/set/clear_spec.rb +17 -0
  2575. data/spec/framework_spec/app/spec/library/set/collect_spec.rb +7 -0
  2576. data/spec/framework_spec/app/spec/library/set/constructor_spec.rb +15 -0
  2577. data/spec/framework_spec/app/spec/library/set/delete_if_spec.rb +46 -0
  2578. data/spec/framework_spec/app/spec/library/set/delete_spec.rb +37 -0
  2579. data/spec/framework_spec/app/spec/library/set/difference_spec.rb +7 -0
  2580. data/spec/framework_spec/app/spec/library/set/divide_spec.rb +34 -0
  2581. data/spec/framework_spec/app/spec/library/set/each_spec.rb +34 -0
  2582. data/spec/framework_spec/app/spec/library/set/empty_spec.rb +10 -0
  2583. data/spec/framework_spec/app/spec/library/set/enumerable/to_set_spec.rb +19 -0
  2584. data/spec/framework_spec/app/spec/library/set/eql_spec.rb +17 -0
  2585. data/spec/framework_spec/app/spec/library/set/equal_value_spec.rb +38 -0
  2586. data/spec/framework_spec/app/spec/library/set/exclusion_spec.rb +18 -0
  2587. data/spec/framework_spec/app/spec/library/set/flatten_merge_spec.rb +23 -0
  2588. data/spec/framework_spec/app/spec/library/set/flatten_spec.rb +40 -0
  2589. data/spec/framework_spec/app/spec/library/set/hash_spec.rb +15 -0
  2590. data/spec/framework_spec/app/spec/library/set/include_spec.rb +7 -0
  2591. data/spec/framework_spec/app/spec/library/set/initialize_copy_spec.rb +18 -0
  2592. data/spec/framework_spec/app/spec/library/set/initialize_spec.rb +24 -0
  2593. data/spec/framework_spec/app/spec/library/set/inspect_spec.rb +18 -0
  2594. data/spec/framework_spec/app/spec/library/set/intersection_spec.rb +11 -0
  2595. data/spec/framework_spec/app/spec/library/set/keep_if_spec.rb +41 -0
  2596. data/spec/framework_spec/app/spec/library/set/length_spec.rb +7 -0
  2597. data/spec/framework_spec/app/spec/library/set/map_spec.rb +7 -0
  2598. data/spec/framework_spec/app/spec/library/set/member_spec.rb +7 -0
  2599. data/spec/framework_spec/app/spec/library/set/merge_spec.rb +19 -0
  2600. data/spec/framework_spec/app/spec/library/set/minus_spec.rb +7 -0
  2601. data/spec/framework_spec/app/spec/library/set/plus_spec.rb +7 -0
  2602. data/spec/framework_spec/app/spec/library/set/pretty_print_cycle_spec.rb +10 -0
  2603. data/spec/framework_spec/app/spec/library/set/pretty_print_spec.rb +17 -0
  2604. data/spec/framework_spec/app/spec/library/set/proper_subset_spec.rb +34 -0
  2605. data/spec/framework_spec/app/spec/library/set/proper_superset_spec.rb +34 -0
  2606. data/spec/framework_spec/app/spec/library/set/reject_spec.rb +50 -0
  2607. data/spec/framework_spec/app/spec/library/set/replace_spec.rb +17 -0
  2608. data/spec/framework_spec/app/spec/library/set/select_spec.rb +45 -0
  2609. data/spec/framework_spec/app/spec/library/set/shared/add.rb +14 -0
  2610. data/spec/framework_spec/app/spec/library/set/shared/collect.rb +20 -0
  2611. data/spec/framework_spec/app/spec/library/set/shared/difference.rb +15 -0
  2612. data/spec/framework_spec/app/spec/library/set/shared/include.rb +7 -0
  2613. data/spec/framework_spec/app/spec/library/set/shared/intersection.rb +15 -0
  2614. data/spec/framework_spec/app/spec/library/set/shared/length.rb +6 -0
  2615. data/spec/framework_spec/app/spec/library/set/shared/union.rb +15 -0
  2616. data/spec/framework_spec/app/spec/library/set/size_spec.rb +7 -0
  2617. data/spec/framework_spec/app/spec/library/set/sortedset/add_spec.rb +36 -0
  2618. data/spec/framework_spec/app/spec/library/set/sortedset/append_spec.rb +7 -0
  2619. data/spec/framework_spec/app/spec/library/set/sortedset/classify_spec.rb +35 -0
  2620. data/spec/framework_spec/app/spec/library/set/sortedset/clear_spec.rb +17 -0
  2621. data/spec/framework_spec/app/spec/library/set/sortedset/collect_spec.rb +7 -0
  2622. data/spec/framework_spec/app/spec/library/set/sortedset/constructor_spec.rb +15 -0
  2623. data/spec/framework_spec/app/spec/library/set/sortedset/delete_if_spec.rb +48 -0
  2624. data/spec/framework_spec/app/spec/library/set/sortedset/delete_spec.rb +37 -0
  2625. data/spec/framework_spec/app/spec/library/set/sortedset/difference_spec.rb +7 -0
  2626. data/spec/framework_spec/app/spec/library/set/sortedset/divide_spec.rb +34 -0
  2627. data/spec/framework_spec/app/spec/library/set/sortedset/each_spec.rb +36 -0
  2628. data/spec/framework_spec/app/spec/library/set/sortedset/empty_spec.rb +10 -0
  2629. data/spec/framework_spec/app/spec/library/set/sortedset/eql_spec.rb +18 -0
  2630. data/spec/framework_spec/app/spec/library/set/sortedset/equal_value_spec.rb +13 -0
  2631. data/spec/framework_spec/app/spec/library/set/sortedset/exclusion_spec.rb +18 -0
  2632. data/spec/framework_spec/app/spec/library/set/sortedset/flatten_merge_spec.rb +8 -0
  2633. data/spec/framework_spec/app/spec/library/set/sortedset/flatten_spec.rb +48 -0
  2634. data/spec/framework_spec/app/spec/library/set/sortedset/hash_spec.rb +15 -0
  2635. data/spec/framework_spec/app/spec/library/set/sortedset/include_spec.rb +7 -0
  2636. data/spec/framework_spec/app/spec/library/set/sortedset/initialize_copy_spec.rb +18 -0
  2637. data/spec/framework_spec/app/spec/library/set/sortedset/initialize_spec.rb +32 -0
  2638. data/spec/framework_spec/app/spec/library/set/sortedset/inspect_spec.rb +10 -0
  2639. data/spec/framework_spec/app/spec/library/set/sortedset/intersection_spec.rb +11 -0
  2640. data/spec/framework_spec/app/spec/library/set/sortedset/keep_if_spec.rb +34 -0
  2641. data/spec/framework_spec/app/spec/library/set/sortedset/length_spec.rb +7 -0
  2642. data/spec/framework_spec/app/spec/library/set/sortedset/map_spec.rb +7 -0
  2643. data/spec/framework_spec/app/spec/library/set/sortedset/member_spec.rb +7 -0
  2644. data/spec/framework_spec/app/spec/library/set/sortedset/merge_spec.rb +19 -0
  2645. data/spec/framework_spec/app/spec/library/set/sortedset/minus_spec.rb +7 -0
  2646. data/spec/framework_spec/app/spec/library/set/sortedset/plus_spec.rb +7 -0
  2647. data/spec/framework_spec/app/spec/library/set/sortedset/pretty_print_cycle_spec.rb +10 -0
  2648. data/spec/framework_spec/app/spec/library/set/sortedset/pretty_print_spec.rb +17 -0
  2649. data/spec/framework_spec/app/spec/library/set/sortedset/proper_subset_spec.rb +33 -0
  2650. data/spec/framework_spec/app/spec/library/set/sortedset/proper_superset_spec.rb +33 -0
  2651. data/spec/framework_spec/app/spec/library/set/sortedset/reject_spec.rb +52 -0
  2652. data/spec/framework_spec/app/spec/library/set/sortedset/replace_spec.rb +17 -0
  2653. data/spec/framework_spec/app/spec/library/set/sortedset/select_spec.rb +38 -0
  2654. data/spec/framework_spec/app/spec/library/set/sortedset/shared/add.rb +14 -0
  2655. data/spec/framework_spec/app/spec/library/set/sortedset/shared/collect.rb +20 -0
  2656. data/spec/framework_spec/app/spec/library/set/sortedset/shared/difference.rb +15 -0
  2657. data/spec/framework_spec/app/spec/library/set/sortedset/shared/include.rb +7 -0
  2658. data/spec/framework_spec/app/spec/library/set/sortedset/shared/intersection.rb +15 -0
  2659. data/spec/framework_spec/app/spec/library/set/sortedset/shared/length.rb +6 -0
  2660. data/spec/framework_spec/app/spec/library/set/sortedset/shared/union.rb +15 -0
  2661. data/spec/framework_spec/app/spec/library/set/sortedset/size_spec.rb +7 -0
  2662. data/spec/framework_spec/app/spec/library/set/sortedset/subset_spec.rb +33 -0
  2663. data/spec/framework_spec/app/spec/library/set/sortedset/subtract_spec.rb +17 -0
  2664. data/spec/framework_spec/app/spec/library/set/sortedset/superset_spec.rb +33 -0
  2665. data/spec/framework_spec/app/spec/library/set/sortedset/to_a_spec.rb +8 -0
  2666. data/spec/framework_spec/app/spec/library/set/sortedset/union_spec.rb +11 -0
  2667. data/spec/framework_spec/app/spec/library/set/subset_spec.rb +34 -0
  2668. data/spec/framework_spec/app/spec/library/set/subtract_spec.rb +17 -0
  2669. data/spec/framework_spec/app/spec/library/set/superset_spec.rb +34 -0
  2670. data/spec/framework_spec/app/spec/library/set/to_a_spec.rb +8 -0
  2671. data/spec/framework_spec/app/spec/library/set/union_spec.rb +11 -0
  2672. data/spec/framework_spec/app/spec/library/stringio/append_spec.rb +84 -0
  2673. data/spec/framework_spec/app/spec/library/stringio/binmode_spec.rb +9 -0
  2674. data/spec/framework_spec/app/spec/library/stringio/bytes_spec.rb +13 -0
  2675. data/spec/framework_spec/app/spec/library/stringio/chars_spec.rb +13 -0
  2676. data/spec/framework_spec/app/spec/library/stringio/close_read_spec.rb +31 -0
  2677. data/spec/framework_spec/app/spec/library/stringio/close_spec.rb +23 -0
  2678. data/spec/framework_spec/app/spec/library/stringio/close_write_spec.rb +31 -0
  2679. data/spec/framework_spec/app/spec/library/stringio/closed_read_spec.rb +12 -0
  2680. data/spec/framework_spec/app/spec/library/stringio/closed_spec.rb +16 -0
  2681. data/spec/framework_spec/app/spec/library/stringio/closed_write_spec.rb +12 -0
  2682. data/spec/framework_spec/app/spec/library/stringio/codepoints.rb +11 -0
  2683. data/spec/framework_spec/app/spec/library/stringio/each_byte_spec.rb +11 -0
  2684. data/spec/framework_spec/app/spec/library/stringio/each_char_spec.rb +13 -0
  2685. data/spec/framework_spec/app/spec/library/stringio/each_codepoint.rb +12 -0
  2686. data/spec/framework_spec/app/spec/library/stringio/each_line_spec.rb +15 -0
  2687. data/spec/framework_spec/app/spec/library/stringio/each_spec.rb +15 -0
  2688. data/spec/framework_spec/app/spec/library/stringio/eof_spec.rb +11 -0
  2689. data/spec/framework_spec/app/spec/library/stringio/external_encoding.rb +12 -0
  2690. data/spec/framework_spec/app/spec/library/stringio/fcntl_spec.rb +8 -0
  2691. data/spec/framework_spec/app/spec/library/stringio/fileno_spec.rb +9 -0
  2692. data/spec/framework_spec/app/spec/library/stringio/fixtures/classes.rb +15 -0
  2693. data/spec/framework_spec/app/spec/library/stringio/flush_spec.rb +9 -0
  2694. data/spec/framework_spec/app/spec/library/stringio/fsync_spec.rb +9 -0
  2695. data/spec/framework_spec/app/spec/library/stringio/getbyte_spec.rb +21 -0
  2696. data/spec/framework_spec/app/spec/library/stringio/getc_spec.rb +19 -0
  2697. data/spec/framework_spec/app/spec/library/stringio/gets_spec.rb +139 -0
  2698. data/spec/framework_spec/app/spec/library/stringio/initialize_copy_spec.rb +96 -0
  2699. data/spec/framework_spec/app/spec/library/stringio/initialize_spec.rb +194 -0
  2700. data/spec/framework_spec/app/spec/library/stringio/internal_encoding.rb +12 -0
  2701. data/spec/framework_spec/app/spec/library/stringio/isatty_spec.rb +7 -0
  2702. data/spec/framework_spec/app/spec/library/stringio/length_spec.rb +7 -0
  2703. data/spec/framework_spec/app/spec/library/stringio/lineno_spec.rb +30 -0
  2704. data/spec/framework_spec/app/spec/library/stringio/lines_spec.rb +17 -0
  2705. data/spec/framework_spec/app/spec/library/stringio/open_spec.rb +216 -0
  2706. data/spec/framework_spec/app/spec/library/stringio/path_spec.rb +16 -0
  2707. data/spec/framework_spec/app/spec/library/stringio/pid_spec.rb +8 -0
  2708. data/spec/framework_spec/app/spec/library/stringio/pos_spec.rb +28 -0
  2709. data/spec/framework_spec/app/spec/library/stringio/print_spec.rb +114 -0
  2710. data/spec/framework_spec/app/spec/library/stringio/printf_spec.rb +61 -0
  2711. data/spec/framework_spec/app/spec/library/stringio/putc_spec.rb +88 -0
  2712. data/spec/framework_spec/app/spec/library/stringio/puts_spec.rb +159 -0
  2713. data/spec/framework_spec/app/spec/library/stringio/read_spec.rb +62 -0
  2714. data/spec/framework_spec/app/spec/library/stringio/readbyte_spec.rb +22 -0
  2715. data/spec/framework_spec/app/spec/library/stringio/readchar_spec.rb +20 -0
  2716. data/spec/framework_spec/app/spec/library/stringio/readline_spec.rb +128 -0
  2717. data/spec/framework_spec/app/spec/library/stringio/readlines_spec.rb +94 -0
  2718. data/spec/framework_spec/app/spec/library/stringio/readpartial_spec.rb +83 -0
  2719. data/spec/framework_spec/app/spec/library/stringio/reopen_spec.rb +304 -0
  2720. data/spec/framework_spec/app/spec/library/stringio/rewind_spec.rb +24 -0
  2721. data/spec/framework_spec/app/spec/library/stringio/seek_spec.rb +76 -0
  2722. data/spec/framework_spec/app/spec/library/stringio/set_encoding.rb +12 -0
  2723. data/spec/framework_spec/app/spec/library/stringio/shared/codepoints.rb +45 -0
  2724. data/spec/framework_spec/app/spec/library/stringio/shared/each.rb +115 -0
  2725. data/spec/framework_spec/app/spec/library/stringio/shared/each_byte.rb +60 -0
  2726. data/spec/framework_spec/app/spec/library/stringio/shared/each_char.rb +50 -0
  2727. data/spec/framework_spec/app/spec/library/stringio/shared/eof.rb +24 -0
  2728. data/spec/framework_spec/app/spec/library/stringio/shared/getc.rb +43 -0
  2729. data/spec/framework_spec/app/spec/library/stringio/shared/isatty.rb +5 -0
  2730. data/spec/framework_spec/app/spec/library/stringio/shared/length.rb +5 -0
  2731. data/spec/framework_spec/app/spec/library/stringio/shared/read.rb +125 -0
  2732. data/spec/framework_spec/app/spec/library/stringio/shared/readchar.rb +29 -0
  2733. data/spec/framework_spec/app/spec/library/stringio/shared/tell.rb +12 -0
  2734. data/spec/framework_spec/app/spec/library/stringio/shared/write.rb +87 -0
  2735. data/spec/framework_spec/app/spec/library/stringio/size_spec.rb +7 -0
  2736. data/spec/framework_spec/app/spec/library/stringio/string_spec.rb +50 -0
  2737. data/spec/framework_spec/app/spec/library/stringio/stringio_spec.rb +9 -0
  2738. data/spec/framework_spec/app/spec/library/stringio/sync_spec.rb +19 -0
  2739. data/spec/framework_spec/app/spec/library/stringio/sysread_spec.rb +54 -0
  2740. data/spec/framework_spec/app/spec/library/stringio/syswrite_spec.rb +19 -0
  2741. data/spec/framework_spec/app/spec/library/stringio/tell_spec.rb +7 -0
  2742. data/spec/framework_spec/app/spec/library/stringio/truncate_spec.rb +70 -0
  2743. data/spec/framework_spec/app/spec/library/stringio/tty_spec.rb +7 -0
  2744. data/spec/framework_spec/app/spec/library/stringio/ungetc_spec.rb +99 -0
  2745. data/spec/framework_spec/app/spec/library/stringio/write_spec.rb +19 -0
  2746. data/spec/framework_spec/app/spec/library/stringscanner/append_spec.rb +11 -0
  2747. data/spec/framework_spec/app/spec/library/stringscanner/beginning_of_line_spec.rb +7 -0
  2748. data/spec/framework_spec/app/spec/library/stringscanner/bol_spec.rb +7 -0
  2749. data/spec/framework_spec/app/spec/library/stringscanner/check_spec.rb +16 -0
  2750. data/spec/framework_spec/app/spec/library/stringscanner/check_until_spec.rb +15 -0
  2751. data/spec/framework_spec/app/spec/library/stringscanner/clear_spec.rb +26 -0
  2752. data/spec/framework_spec/app/spec/library/stringscanner/concat_spec.rb +11 -0
  2753. data/spec/framework_spec/app/spec/library/stringscanner/dup_spec.rb +39 -0
  2754. data/spec/framework_spec/app/spec/library/stringscanner/element_reference_spec.rb +49 -0
  2755. data/spec/framework_spec/app/spec/library/stringscanner/empty_spec.rb +26 -0
  2756. data/spec/framework_spec/app/spec/library/stringscanner/eos_spec.rb +7 -0
  2757. data/spec/framework_spec/app/spec/library/stringscanner/exist_spec.rb +24 -0
  2758. data/spec/framework_spec/app/spec/library/stringscanner/get_byte_spec.rb +7 -0
  2759. data/spec/framework_spec/app/spec/library/stringscanner/getbyte_spec.rb +29 -0
  2760. data/spec/framework_spec/app/spec/library/stringscanner/getch_spec.rb +44 -0
  2761. data/spec/framework_spec/app/spec/library/stringscanner/initialize_spec.rb +28 -0
  2762. data/spec/framework_spec/app/spec/library/stringscanner/inspect_spec.rb +20 -0
  2763. data/spec/framework_spec/app/spec/library/stringscanner/match_spec.rb +28 -0
  2764. data/spec/framework_spec/app/spec/library/stringscanner/matched_size_spec.rb +7 -0
  2765. data/spec/framework_spec/app/spec/library/stringscanner/matched_spec.rb +41 -0
  2766. data/spec/framework_spec/app/spec/library/stringscanner/matchedsize_spec.rb +27 -0
  2767. data/spec/framework_spec/app/spec/library/stringscanner/must_C_version_spec.rb +8 -0
  2768. data/spec/framework_spec/app/spec/library/stringscanner/peek_spec.rb +8 -0
  2769. data/spec/framework_spec/app/spec/library/stringscanner/peep_spec.rb +26 -0
  2770. data/spec/framework_spec/app/spec/library/stringscanner/pointer_spec.rb +11 -0
  2771. data/spec/framework_spec/app/spec/library/stringscanner/pos_spec.rb +11 -0
  2772. data/spec/framework_spec/app/spec/library/stringscanner/post_match_spec.rb +28 -0
  2773. data/spec/framework_spec/app/spec/library/stringscanner/pre_match_spec.rb +41 -0
  2774. data/spec/framework_spec/app/spec/library/stringscanner/reset_spec.rb +15 -0
  2775. data/spec/framework_spec/app/spec/library/stringscanner/rest_size_spec.rb +7 -0
  2776. data/spec/framework_spec/app/spec/library/stringscanner/rest_spec.rb +48 -0
  2777. data/spec/framework_spec/app/spec/library/stringscanner/restsize_spec.rb +26 -0
  2778. data/spec/framework_spec/app/spec/library/stringscanner/scan_full_spec.rb +30 -0
  2779. data/spec/framework_spec/app/spec/library/stringscanner/scan_spec.rb +43 -0
  2780. data/spec/framework_spec/app/spec/library/stringscanner/scan_until_spec.rb +23 -0
  2781. data/spec/framework_spec/app/spec/library/stringscanner/search_full_spec.rb +30 -0
  2782. data/spec/framework_spec/app/spec/library/stringscanner/shared/bol.rb +25 -0
  2783. data/spec/framework_spec/app/spec/library/stringscanner/shared/concat.rb +30 -0
  2784. data/spec/framework_spec/app/spec/library/stringscanner/shared/eos.rb +17 -0
  2785. data/spec/framework_spec/app/spec/library/stringscanner/shared/extract_range.rb +22 -0
  2786. data/spec/framework_spec/app/spec/library/stringscanner/shared/extract_range_matched.rb +22 -0
  2787. data/spec/framework_spec/app/spec/library/stringscanner/shared/get_byte.rb +28 -0
  2788. data/spec/framework_spec/app/spec/library/stringscanner/shared/matched_size.rb +21 -0
  2789. data/spec/framework_spec/app/spec/library/stringscanner/shared/peek.rb +44 -0
  2790. data/spec/framework_spec/app/spec/library/stringscanner/shared/pos.rb +52 -0
  2791. data/spec/framework_spec/app/spec/library/stringscanner/shared/rest_size.rb +18 -0
  2792. data/spec/framework_spec/app/spec/library/stringscanner/shared/terminate.rb +8 -0
  2793. data/spec/framework_spec/app/spec/library/stringscanner/skip_spec.rb +18 -0
  2794. data/spec/framework_spec/app/spec/library/stringscanner/skip_until_spec.rb +18 -0
  2795. data/spec/framework_spec/app/spec/library/stringscanner/string_spec.rb +40 -0
  2796. data/spec/framework_spec/app/spec/library/stringscanner/terminate_spec.rb +7 -0
  2797. data/spec/framework_spec/app/spec/library/stringscanner/unscan_spec.rb +29 -0
  2798. data/spec/framework_spec/app/spec/shared/complex/Complex.rb +76 -0
  2799. data/spec/framework_spec/app/spec/shared/complex/abs.rb +12 -0
  2800. data/spec/framework_spec/app/spec/shared/complex/abs2.rb +12 -0
  2801. data/spec/framework_spec/app/spec/shared/complex/arg.rb +9 -0
  2802. data/spec/framework_spec/app/spec/shared/complex/coerce.rb +41 -0
  2803. data/spec/framework_spec/app/spec/shared/complex/conjugate.rb +8 -0
  2804. data/spec/framework_spec/app/spec/shared/complex/denominator.rb +13 -0
  2805. data/spec/framework_spec/app/spec/shared/complex/divide.rb +57 -0
  2806. data/spec/framework_spec/app/spec/shared/complex/equal_value.rb +64 -0
  2807. data/spec/framework_spec/app/spec/shared/complex/exponent.rb +54 -0
  2808. data/spec/framework_spec/app/spec/shared/complex/hash.rb +16 -0
  2809. data/spec/framework_spec/app/spec/shared/complex/image.rb +10 -0
  2810. data/spec/framework_spec/app/spec/shared/complex/inspect.rb +29 -0
  2811. data/spec/framework_spec/app/spec/shared/complex/minus.rb +25 -0
  2812. data/spec/framework_spec/app/spec/shared/complex/modulo.rb +25 -0
  2813. data/spec/framework_spec/app/spec/shared/complex/multiply.rb +24 -0
  2814. data/spec/framework_spec/app/spec/shared/complex/numerator.rb +19 -0
  2815. data/spec/framework_spec/app/spec/shared/complex/numeric/arg.rb +43 -0
  2816. data/spec/framework_spec/app/spec/shared/complex/numeric/conj.rb +26 -0
  2817. data/spec/framework_spec/app/spec/shared/complex/numeric/imag.rb +26 -0
  2818. data/spec/framework_spec/app/spec/shared/complex/numeric/polar.rb +52 -0
  2819. data/spec/framework_spec/app/spec/shared/complex/numeric/real.rb +30 -0
  2820. data/spec/framework_spec/app/spec/shared/complex/plus.rb +25 -0
  2821. data/spec/framework_spec/app/spec/shared/complex/polar.rb +22 -0
  2822. data/spec/framework_spec/app/spec/shared/complex/real.rb +8 -0
  2823. data/spec/framework_spec/app/spec/shared/complex/rect.rb +45 -0
  2824. data/spec/framework_spec/app/spec/shared/complex/to_s.rb +39 -0
  2825. data/spec/framework_spec/app/spec/shared/continuation/call.rb +76 -0
  2826. data/spec/framework_spec/app/spec/shared/continuation/new.rb +5 -0
  2827. data/spec/framework_spec/app/spec/shared/enumerator/each.rb +45 -0
  2828. data/spec/framework_spec/app/spec/shared/enumerator/enum_cons.rb +12 -0
  2829. data/spec/framework_spec/app/spec/shared/enumerator/enum_for.rb +15 -0
  2830. data/spec/framework_spec/app/spec/shared/enumerator/new.rb +42 -0
  2831. data/spec/framework_spec/app/spec/shared/enumerator/next.rb +30 -0
  2832. data/spec/framework_spec/app/spec/shared/enumerator/rewind.rb +32 -0
  2833. data/spec/framework_spec/app/spec/shared/enumerator/with_index.rb +35 -0
  2834. data/spec/framework_spec/app/spec/shared/enumerator/with_object.rb +19 -0
  2835. data/spec/framework_spec/app/spec/shared/fiber/resume.rb +65 -0
  2836. data/spec/framework_spec/app/spec/shared/file/blockdev.rb +7 -1
  2837. data/spec/framework_spec/app/spec/shared/file/chardev.rb +7 -1
  2838. data/spec/framework_spec/app/spec/shared/file/directory.rb +59 -21
  2839. data/spec/framework_spec/app/spec/shared/file/executable.rb +10 -14
  2840. data/spec/framework_spec/app/spec/shared/file/executable_real.rb +15 -9
  2841. data/spec/framework_spec/app/spec/shared/file/exist.rb +9 -3
  2842. data/spec/framework_spec/app/spec/shared/file/file.rb +12 -10
  2843. data/spec/framework_spec/app/spec/shared/file/grpowned.rb +12 -6
  2844. data/spec/framework_spec/app/spec/shared/file/identical.rb +21 -16
  2845. data/spec/framework_spec/app/spec/shared/file/owned.rb +4 -0
  2846. data/spec/framework_spec/app/spec/shared/file/pipe.rb +4 -0
  2847. data/spec/framework_spec/app/spec/shared/file/readable.rb +16 -13
  2848. data/spec/framework_spec/app/spec/shared/file/readable_real.rb +7 -1
  2849. data/spec/framework_spec/app/spec/shared/file/size.rb +107 -15
  2850. data/spec/framework_spec/app/spec/shared/file/socket.rb +4 -0
  2851. data/spec/framework_spec/app/spec/shared/file/sticky.rb +30 -0
  2852. data/spec/framework_spec/app/spec/shared/file/symlink.rb +20 -14
  2853. data/spec/framework_spec/app/spec/shared/file/world_readable.rb +48 -0
  2854. data/spec/framework_spec/app/spec/shared/file/world_writable.rb +48 -0
  2855. data/spec/framework_spec/app/spec/shared/file/writable.rb +10 -7
  2856. data/spec/framework_spec/app/spec/shared/file/writable_real.rb +7 -1
  2857. data/spec/framework_spec/app/spec/shared/file/zero.rb +16 -17
  2858. data/spec/framework_spec/app/spec/shared/io/putc.rb +57 -0
  2859. data/spec/framework_spec/app/spec/shared/kernel/callcc.rb +68 -0
  2860. data/spec/framework_spec/app/spec/shared/kernel/method_missing.rb +60 -0
  2861. data/spec/framework_spec/app/spec/shared/kernel/singleton_method_added.rb +7 -0
  2862. data/spec/framework_spec/app/spec/shared/kernel/singleton_method_removed.rb +7 -0
  2863. data/spec/framework_spec/app/spec/shared/kernel/singleton_method_undefined.rb +7 -0
  2864. data/spec/framework_spec/app/spec/shared/math/atanh.rb +142 -0
  2865. data/spec/framework_spec/app/spec/shared/process/times.rb +8 -8
  2866. data/spec/framework_spec/app/spec/shared/rational/Rational.rb +113 -0
  2867. data/spec/framework_spec/app/spec/shared/rational/abs.rb +12 -0
  2868. data/spec/framework_spec/app/spec/shared/rational/ceil.rb +41 -0
  2869. data/spec/framework_spec/app/spec/shared/rational/coerce.rb +41 -0
  2870. data/spec/framework_spec/app/spec/shared/rational/comparison.rb +86 -0
  2871. data/spec/framework_spec/app/spec/shared/rational/denominator.rb +15 -0
  2872. data/spec/framework_spec/app/spec/shared/rational/div.rb +81 -0
  2873. data/spec/framework_spec/app/spec/shared/rational/divide.rb +72 -0
  2874. data/spec/framework_spec/app/spec/shared/rational/divmod.rb +53 -0
  2875. data/spec/framework_spec/app/spec/shared/rational/equal_value.rb +62 -0
  2876. data/spec/framework_spec/app/spec/shared/rational/exponent.rb +144 -0
  2877. data/spec/framework_spec/app/spec/shared/rational/fdiv.rb +5 -0
  2878. data/spec/framework_spec/app/spec/shared/rational/floor.rb +5 -0
  2879. data/spec/framework_spec/app/spec/shared/rational/hash.rb +10 -0
  2880. data/spec/framework_spec/app/spec/shared/rational/initialize.rb +25 -0
  2881. data/spec/framework_spec/app/spec/shared/rational/inspect.rb +24 -0
  2882. data/spec/framework_spec/app/spec/shared/rational/marshal_dump.rb +5 -0
  2883. data/spec/framework_spec/app/spec/shared/rational/marshal_load.rb +5 -0
  2884. data/spec/framework_spec/app/spec/shared/rational/minus.rb +49 -0
  2885. data/spec/framework_spec/app/spec/shared/rational/modulo.rb +52 -0
  2886. data/spec/framework_spec/app/spec/shared/rational/multiply.rb +63 -0
  2887. data/spec/framework_spec/app/spec/shared/rational/new.rb +21 -0
  2888. data/spec/framework_spec/app/spec/shared/rational/numerator.rb +11 -0
  2889. data/spec/framework_spec/app/spec/shared/rational/plus.rb +49 -0
  2890. data/spec/framework_spec/app/spec/shared/rational/quo.rb +5 -0
  2891. data/spec/framework_spec/app/spec/shared/rational/reduce.rb +31 -0
  2892. data/spec/framework_spec/app/spec/shared/rational/remainder.rb +5 -0
  2893. data/spec/framework_spec/app/spec/shared/rational/round.rb +5 -0
  2894. data/spec/framework_spec/app/spec/shared/rational/to_f.rb +11 -0
  2895. data/spec/framework_spec/app/spec/shared/rational/to_i.rb +15 -0
  2896. data/spec/framework_spec/app/spec/shared/rational/to_r.rb +14 -0
  2897. data/spec/framework_spec/app/spec/shared/rational/to_s.rb +24 -0
  2898. data/spec/framework_spec/app/spec/shared/rational/truncate.rb +5 -0
  2899. data/spec/framework_spec/app/spec/spec_helper.rb +1 -37
  2900. data/spec/framework_spec/app/spec/version.rb +3 -0
  2901. data/spec/framework_spec/app/spec_runner.rb +50 -80
  2902. data/spec/framework_spec/build.yml +3 -4
  2903. data/spec/framework_spec/rhoconfig.txt +4 -1
  2904. data/spec/phone_spec/app/spec/contacts_spec.rb +8 -4
  2905. data/spec/phone_spec/app/spec/date_spec.rb +17 -0
  2906. data/spec/phone_spec/app/spec/rhom_object_spec.rb +11 -0
  2907. data/spec/phone_spec/app/spec/syncengine_spec.rb +63 -1
  2908. data/spec/phone_spec/app/spec/uri_spec.rb +2 -0
  2909. data/spec/phone_spec/app/spec/xml_spec.rb +10 -3
  2910. data/spec/phone_spec/app/spec_runner.rb +1 -1
  2911. data/spec/phone_spec/build.yml +2 -2
  2912. data/spec/phone_spec/rhoconfig.txt +1 -0
  2913. metadata +1059 -91
  2914. data/Manifest.txt +0 -6338
  2915. data/doc/rhodes-api/alert-api.txt +0 -102
  2916. data/lib/extensions/mspec/mspec/fileutils.rb +0 -1589
  2917. data/lib/extensions/mspec/mspec/helpers/bignum.rb +0 -5
  2918. data/lib/extensions/mspec/mspec/helpers/infinity.rb +0 -5
  2919. data/lib/extensions/mspec/mspec/helpers/metaclass.rb +0 -7
  2920. data/lib/extensions/mspec/mspec/helpers/nan.rb +0 -5
  2921. data/platform/shared/ruby/blockinlining.c +0 -464
  2922. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.0b2.min.css +0 -8
  2923. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.0b2.min.js +0 -155
  2924. data/res/generators/templates/application/public/jquery/jquery-1.6.2.min.js +0 -18
  2925. data/spec/framework_spec/app/spec/core/basicobject/basic_object_class_spec.rb +0 -18
  2926. data/spec/framework_spec/app/spec/core/basicobject/basic_object_spec.rb +0 -23
  2927. data/spec/framework_spec/app/spec/core/basicobject/basic_object_subclass_spec.rb +0 -25
  2928. data/spec/framework_spec/app/spec/core/basicobject/metaclass_spec.rb +0 -27
  2929. data/spec/framework_spec/app/spec/core/basicobject/remove_method_missing.rb +0 -14
  2930. data/spec/framework_spec/app/spec/core/basicobject/shared/behavior.rb +0 -16
  2931. data/spec/framework_spec/app/spec/core/builtin_constants/builtin_constants.rb +0 -13
  2932. data/spec/framework_spec/app/spec/core/continuation/continuation_spec.rb +0 -109
  2933. data/spec/framework_spec/app/spec/core/dir/new_spec.rb +0 -2
  2934. data/spec/framework_spec/app/spec/core/enumerable/each_spec.rb +0 -14
  2935. data/spec/framework_spec/app/spec/core/fiber/alive_spec.rb +0 -54
  2936. data/spec/framework_spec/app/spec/core/fiber/current_spec.rb +0 -63
  2937. data/spec/framework_spec/app/spec/core/fiber/shared/resume.rb +0 -71
  2938. data/spec/framework_spec/app/spec/core/fiber/transfer_spec.rb +0 -45
  2939. data/spec/framework_spec/app/spec/core/io/data/data_spec.rb +0 -13
  2940. data/spec/framework_spec/app/spec/core/io/data/fixtures/data1.rb +0 -3
  2941. data/spec/framework_spec/app/spec/core/io/data/flock_spec.rb +0 -22
  2942. data/spec/framework_spec/app/spec/core/io/fixtures/paragraphs.txt +0 -7
  2943. data/spec/framework_spec/app/spec/core/io/fixtures/readlines.txt +0 -6
  2944. data/spec/framework_spec/app/spec/core/kernel/__callee__spec.rb +0 -9
  2945. data/spec/framework_spec/app/spec/core/kernel/__method__spec.rb +0 -9
  2946. data/spec/framework_spec/app/spec/core/proc/fixtures/procs.rb +0 -5
  2947. data/spec/framework_spec/app/spec/find_spec.rb +0 -56
  2948. data/spec/framework_spec/app/spec/fixtures/load/load_spec +0 -1
  2949. data/spec/framework_spec/app/spec/fixtures/load/load_spec.rooby +0 -1
  2950. data/spec/framework_spec/app/spec/fixtures/load/load_spec_1.rb +0 -1
  2951. data/spec/framework_spec/app/spec/fixtures/load/load_spec_10.rb +0 -1
  2952. data/spec/framework_spec/app/spec/fixtures/load/load_spec_2.rb +0 -1
  2953. data/spec/framework_spec/app/spec/fixtures/load/load_spec_3.rb +0 -1
  2954. data/spec/framework_spec/app/spec/fixtures/load/load_spec_4.rb +0 -12
  2955. data/spec/framework_spec/app/spec/fixtures/load/load_spec_5.rb +0 -2
  2956. data/spec/framework_spec/app/spec/fixtures/load/load_spec_6.rb +0 -2
  2957. data/spec/framework_spec/app/spec/fixtures/load/load_spec_7.rb +0 -2
  2958. data/spec/framework_spec/app/spec/fixtures/load/load_spec_8.rb +0 -1
  2959. data/spec/framework_spec/app/spec/fixtures/load/load_spec_9.rb +0 -1
  2960. data/spec/framework_spec/app/spec/fixtures/load/load_spec_wrap.rb +0 -7
  2961. data/spec/framework_spec/app/spec/fixtures/load/load_spec_wrap2.rb +0 -7
  2962. data/spec/framework_spec/app/spec/fixtures/load/load_spec_wrap_2.rb +0 -7
  2963. data/spec/framework_spec/app/spec/fixtures/matrix.rb +0 -5
  2964. data/spec/framework_spec/app/spec/fixtures/require/masked_require_spec_2.rb +0 -1
  2965. data/spec/framework_spec/app/spec/fixtures/require/masked_require_spec_3.rb +0 -1
  2966. data/spec/framework_spec/app/spec/fixtures/require/require_spec +0 -1
  2967. data/spec/framework_spec/app/spec/fixtures/require/require_spec.rb +0 -1
  2968. data/spec/framework_spec/app/spec/fixtures/require/require_spec.rooby +0 -1
  2969. data/spec/framework_spec/app/spec/fixtures/require/require_spec.rooby.rb +0 -1
  2970. data/spec/framework_spec/app/spec/fixtures/require/require_spec_1.rb +0 -1
  2971. data/spec/framework_spec/app/spec/fixtures/require/require_spec_10.rb +0 -1
  2972. data/spec/framework_spec/app/spec/fixtures/require/require_spec_2.rb +0 -1
  2973. data/spec/framework_spec/app/spec/fixtures/require/require_spec_3.rb +0 -1
  2974. data/spec/framework_spec/app/spec/fixtures/require/require_spec_4.rb +0 -12
  2975. data/spec/framework_spec/app/spec/fixtures/require/require_spec_6.rb +0 -1
  2976. data/spec/framework_spec/app/spec/fixtures/require/require_spec_7.rb +0 -1
  2977. data/spec/framework_spec/app/spec/fixtures/require/require_spec_8.rb +0 -1
  2978. data/spec/framework_spec/app/spec/fixtures/require/require_spec_9.rb +0 -1
  2979. data/spec/framework_spec/app/spec/fixtures/require/require_spec_raises.rb +0 -3
  2980. data/spec/framework_spec/app/spec/fixtures/require/require_spec_recursive.rb +0 -2
  2981. data/spec/framework_spec/app/spec/language/catch_spec.rb +0 -84
  2982. data/spec/framework_spec/app/spec/language/eigenclass_spec.rb +0 -317
  2983. data/spec/framework_spec/app/spec/language/else_spec.rb +0 -1
  2984. data/spec/framework_spec/app/spec/language/method_spec.rb +0 -273
  2985. data/spec/framework_spec/app/spec/language/versions/array_1.8.rb +0 -13
  2986. data/spec/framework_spec/app/spec/language/versions/method_1.9.rb +0 -137
  2987. data/spec/framework_spec/app/spec/language/versions/symbol_1.8.rb +0 -5
@@ -17,8 +17,8 @@ struct direct
17
17
  char d_isrep; /* reparse point */
18
18
  };
19
19
  typedef struct {
20
- char *start;
21
- char *curr;
20
+ WCHAR *start;
21
+ WCHAR *curr;
22
22
  long size;
23
23
  long nfiles;
24
24
  long loc; /* [0, nfiles) */
@@ -29,8 +29,9 @@ typedef struct {
29
29
 
30
30
  DIR* rb_w32_opendir(const char*);
31
31
  struct direct* rb_w32_readdir(DIR *);
32
- off_t rb_w32_telldir(DIR *);
33
- void rb_w32_seekdir(DIR *, off_t);
32
+ struct direct* rb_w32_readdir_with_enc(DIR *, rb_encoding *);
33
+ long rb_w32_telldir(DIR *);
34
+ void rb_w32_seekdir(DIR *, long);
34
35
  void rb_w32_rewinddir(DIR *);
35
36
  void rb_w32_closedir(DIR *);
36
37
 
@@ -1,12 +1,20 @@
1
+ /* -*-c-*-
2
+ THIS FILE WAS AUTOGENERATED BY tool/compile_prelude.rb. DO NOT EDIT.
3
+
4
+ sources: prelude
5
+ */
1
6
  #include "ruby/ruby.h"
2
7
  #include "vm_core.h"
3
8
 
9
+
4
10
  static const char prelude_name0[] = "<internal:prelude>";
5
11
  static const char prelude_code0[] =
6
- "\n"
7
- "# Mutex\n"
8
- "\n"
9
12
  "class Mutex\n"
13
+ " # call-seq:\n"
14
+ " # mutex.synchronize { ... }\n"
15
+ " #\n"
16
+ " # Obtains a lock, runs the block, and releases the lock when the\n"
17
+ " # block completes. See the example under Mutex.\n"
10
18
  " def synchronize\n"
11
19
  " self.lock\n"
12
20
  " begin\n"
@@ -17,36 +25,41 @@ static const char prelude_code0[] =
17
25
  " end\n"
18
26
  "end\n"
19
27
  "\n"
20
- "# Thread\n"
21
- "\n"
22
28
  "class Thread\n"
23
- " MUTEX_FOR_THREAD_EXCLUSIVE = Mutex.new\n"
29
+ " MUTEX_FOR_THREAD_EXCLUSIVE = Mutex.new # :nodoc:\n"
30
+ "\n"
31
+ " # call-seq:\n"
32
+ " # Thread.exclusive { block } => obj\n"
33
+ " # \n"
34
+ " # Wraps a block in Thread.critical, restoring the original value\n"
35
+ " # upon exit from the critical section, and returns the value of the\n"
36
+ " # block.\n"
24
37
  " def self.exclusive\n"
25
38
  " MUTEX_FOR_THREAD_EXCLUSIVE.synchronize{\n"
26
39
  " yield\n"
27
40
  " }\n"
28
41
  " end\n"
29
42
  "end\n"
30
- "\n"
31
- "def require_relative(relative_feature)\n"
32
- " c = caller.first\n"
33
- " e = c.rindex(/:\\d+:in /)\n"
34
- " file = $`\n"
35
- " if /\\A\\((.*)\\)/ =~ file # eval, etc.\n"
36
- " raise LoadError, \"require_relative is called in #{$1}\"\n"
37
- " end\n"
38
- " absolute_feature = File.expand_path(File.join(File.dirname(file), relative_feature))\n"
39
- " require absolute_feature\n"
40
- "end\n"
41
43
  ;
42
44
 
45
+ #define PRELUDE_COUNT 0
46
+
47
+
48
+ VALUE rb_iseq_compile_with_option(VALUE src, VALUE file, VALUE filepath, VALUE line, VALUE opt);
49
+
50
+ static void
51
+ prelude_eval(VALUE code, VALUE name, VALUE line)
52
+ {
53
+ rb_iseq_eval(rb_iseq_compile_with_option(code, name, Qnil, line, Qtrue));
54
+ }
55
+
43
56
  void
44
57
  Init_prelude(void)
45
58
  {
46
- rb_iseq_eval(rb_iseq_compile(
47
- rb_str_new(prelude_code0, sizeof(prelude_code0) - 1),
48
- rb_str_new(prelude_name0, sizeof(prelude_name0) - 1),
49
- INT2FIX(1)));
59
+ prelude_eval(
60
+ rb_usascii_str_new(prelude_code0, sizeof(prelude_code0) - 1),
61
+ rb_usascii_str_new(prelude_name0, sizeof(prelude_name0) - 1),
62
+ INT2FIX(1));
50
63
 
51
64
  #if 0
52
65
  puts(prelude_code0);
@@ -1,6 +1,6 @@
1
1
  /* autogenerated. */
2
- /* src="transcode-tblgen.rb", len=21189, checksum=1144 */
3
- /* src="newline.trans", len=3114, checksum=39279 */
2
+ /* src="transcode-tblgen.rb", len=27499, checksum=52340 */
3
+ /* src="newline.trans", len=3162, checksum=42485 */
4
4
 
5
5
  #include "transcode_data.h"
6
6
 
@@ -71,7 +71,7 @@ newline_word_array[11] = {
71
71
  cr_newline_infos,
72
72
 
73
73
  };
74
- #define TRANSCODE_TABLE_INFO newline_byte_array, 516, newline_word_array, 11, sizeof(unsigned int)
74
+ #define TRANSCODE_TABLE_INFO newline_byte_array, 516, newline_word_array, 11, ((int)sizeof(unsigned int))
75
75
 
76
76
 
77
77
  #define STATE (sp[0])
@@ -101,26 +101,26 @@ fun_so_universal_newline(void *statep, const unsigned char *s, size_t l, unsigne
101
101
  if (s[0] == '\n') {
102
102
  if (STATE == NORMAL) {
103
103
  NEWLINES_MET |= MET_LF;
104
- o[0] = '\n';
105
- len = 1;
106
104
  }
107
105
  else { /* JUST_AFTER_CR */
108
106
  NEWLINES_MET |= MET_CRLF;
109
- len = 0;
110
107
  }
108
+ o[0] = '\n';
109
+ len = 1;
111
110
  STATE = NORMAL;
112
111
  }
113
112
  else {
114
- if (STATE == JUST_AFTER_CR)
115
- NEWLINES_MET |= MET_CR;
116
- if (s[0] == '\r') {
113
+ len = 0;
114
+ if (STATE == JUST_AFTER_CR) {
117
115
  o[0] = '\n';
118
116
  len = 1;
117
+ NEWLINES_MET |= MET_CR;
118
+ }
119
+ if (s[0] == '\r') {
119
120
  STATE = JUST_AFTER_CR;
120
121
  }
121
122
  else {
122
- o[0] = s[0];
123
- len = 1;
123
+ o[len++] = s[0];
124
124
  STATE = NORMAL;
125
125
  }
126
126
  }
@@ -132,10 +132,14 @@ static ssize_t
132
132
  universal_newline_finish(void *statep, unsigned char *o, size_t osize)
133
133
  {
134
134
  unsigned char *sp = statep;
135
- if (STATE == JUST_AFTER_CR)
135
+ int len = 0;
136
+ if (STATE == JUST_AFTER_CR) {
137
+ o[0] = '\n';
138
+ len = 1;
136
139
  NEWLINES_MET |= MET_CR;
140
+ }
137
141
  STATE = NORMAL;
138
- return 0;
142
+ return len;
139
143
  }
140
144
 
141
145
  static const rb_transcoder
@@ -144,7 +148,7 @@ rb_universal_newline = {
144
148
  TRANSCODE_TABLE_INFO,
145
149
  1, /* input_unit_length */
146
150
  1, /* max_input */
147
- 1, /* max_output */
151
+ 2, /* max_output */
148
152
  asciicompat_converter, /* asciicompat_type */
149
153
  2, universal_newline_init, universal_newline_init, /* state_size, state_init, state_fini */
150
154
  NULL, NULL, NULL, fun_so_universal_newline,
@@ -1,6 +1,16 @@
1
+ #ifdef _WIN32_WCE
2
+ #ifndef CONFIG_RUBY_H
3
+ #include "../../wince/ruby/config.h"
4
+ #endif
5
+ #else
6
+ #ifndef CONFIG_RUBY_H
7
+ #define CONFIG_RUBY_H 1
8
+
1
9
  #if !((_MSC_VER == 1400)||(_MSC_VER == 1500))
2
10
  #error MSC version unmatch: _MSC_VER: 1400 or 1500 is expected.
3
11
  #endif
12
+ //#define WIN95 0
13
+ #define RT_VER 80
4
14
  #define STDC_HEADERS 1
5
15
  #define HAVE_SYS_TYPES_H 1
6
16
  #define HAVE_SYS_STAT_H 1
@@ -20,9 +30,13 @@
20
30
  #define SIZEOF_FLOAT 4
21
31
  #define SIZEOF_DOUBLE 8
22
32
  #define SIZEOF_TIME_T 8
33
+ #define TIMET2NUM(v) LL2NUM(v)
34
+ #define NUM2TIMET(v) NUM2LL(v)
23
35
  #define SIZEOF_RLIM_T 0
24
36
  #define SIZEOF_SIZE_T 4
25
37
  #define SIZEOF_PTRDIFF_T 4
38
+ #define SIZEOF_INTPTR_T 4
39
+ #define SIZEOF_UINTPTR_T 4
26
40
  #define HAVE_PROTOTYPES 1
27
41
  #define TOKEN_PASTE(x,y) x##y
28
42
  #define HAVE_STDARG_PROTOTYPES 1
@@ -32,7 +46,9 @@
32
46
  #define FUNC_STDCALL(x) __stdcall x
33
47
  #define FUNC_CDECL(x) __cdecl x
34
48
  #define FUNC_FASTCALL(x) __fastcall x
49
+ //RHO
35
50
  #define RUBY_EXTERN //extern __declspec(dllimport)
51
+ //RHO
36
52
  #define HAVE_DECL_SYS_NERR 1
37
53
  #define HAVE_LIMITS_H 1
38
54
  #define HAVE_FCNTL_H 1
@@ -43,27 +59,49 @@
43
59
  #define rb_uid_t int
44
60
  #define HAVE_STRUCT_STAT_ST_RDEV 1
45
61
  #define HAVE_ST_RDEV 1
62
+ #define HAVE_INT8_T 1
46
63
  #define int8_t signed char
47
64
  #define HAVE_UINT8_T 1
48
65
  #define uint8_t unsigned char
66
+ #define SIZEOF_INT8_T 1
67
+ #define SIZEOF_UINT8_T 1
68
+ #define INT8_MIN _I8_MIN
69
+ #define INT8_MAX _I8_MAX
70
+ #define UINT8_MAX _UI8_MAX
49
71
  #define HAVE_INT16_T 1
50
72
  #define int16_t short
51
73
  #define HAVE_UINT16_T 1
52
74
  #define uint16_t unsigned short
75
+ #define SIZEOF_INT16_T 2
76
+ #define SIZEOF_UINT16_T 2
77
+ #define INT16_MIN _I16_MIN
78
+ #define INT16_MAX _I16_MAX
79
+ #define UINT16_MAX _UI16_MAX
53
80
  #define HAVE_INT32_T 1
54
81
  #define int32_t int
55
82
  #define HAVE_UINT32_T 1
56
83
  #define uint32_t unsigned int
57
- #define HAVE_INT64_T HAVE_LONG_LONG
84
+ #define SIZEOF_INT32_T 4
85
+ #define SIZEOF_UINT32_T 4
86
+ #define INT32_MIN _I32_MIN
87
+ #define INT32_MAX _I32_MAX
88
+ #define UINT32_MAX _UI32_MAX
89
+ #define HAVE_INT64_T 1
58
90
  #define int64_t __int64
59
- #define HAVE_UINT64_T HAVE_LONG_LONG
91
+ #define HAVE_UINT64_T 1
60
92
  #define uint64_t unsigned __int64
93
+ #define SIZEOF_INT64_T 8
94
+ #define SIZEOF_UINT64_T 8
95
+ #define INT64_MIN _I64_MIN
96
+ #define INT64_MAX _I64_MAX
97
+ #define UINT64_MAX _UI64_MAX
61
98
  #define HAVE_INTPTR_T 1
62
99
  #define HAVE_UINTPTR_T 1
63
100
  #define HAVE_SSIZE_T 1
64
101
  #define ssize_t int
65
102
  #define GETGROUPS_T int
66
103
  #define RETSIGTYPE void
104
+ #define TYPEOF_TIMEVAL_TV_SEC long
67
105
  #define HAVE_ALLOCA 1
68
106
  #define HAVE_DUP2 1
69
107
  #define HAVE_MEMCMP 1
@@ -102,6 +140,7 @@
102
140
  #define HAVE_COSH 1
103
141
  #define HAVE_SINH 1
104
142
  #define HAVE_TANH 1
143
+ #define HAVE_SIGNBIT 1
105
144
  #define HAVE_TZNAME 1
106
145
  #define HAVE_DAYLIGHT 1
107
146
  #define SETPGRP_VOID 1
@@ -117,28 +156,27 @@
117
156
  #define STACK_GROW_DIRECTION -1
118
157
  #define CANONICALIZATION_FOR_MATHN 1
119
158
  #define DEFAULT_KCODE KCODE_NONE
159
+ #define LOAD_RELATIVE 1
120
160
  #define DLEXT ".so"
121
- #define RUBY_LIB "/lib"
122
- #define RUBY_SITE_LIB "/apps"
123
- #define RUBY_SITE_LIB2 "/apps/app"
124
- #define RUBY_VENDOR_LIB "/lib"
125
- #define RUBY_VENDOR_LIB2 "/lib"
161
+ #define EXECUTABLE_EXTS ".exe",".com",".cmd",".bat"
162
+ #define RUBY_LIB_VERSION_STYLE 3 /* full */
163
+ //RHO
164
+ #define RUBY_LIB_PREFIX "" //"/lib/ruby"
165
+ //RHO
126
166
  #define RUBY_PLATFORM "i386-mswin32_80"
127
- #define RUBY_ARCHLIB "/lib"
128
- #define RUBY_SITE_ARCHLIB "/lib"
129
- #define RUBY_VENDOR_ARCHLIB "/lib"
130
- #define LIBRUBY_SO "msvcr80-ruby190.dll"
131
-
132
- #define HAVE_GETADDRINFO 1
133
- #define RUBY_EXPORT 1
134
- //#define CPDEBUG 2
135
- #define HAVE_SOCKADDR_STORAGE 1
136
- #define HAVE_GAI_STRERROR 1
137
-
138
- #include "tcmalloc/rhomem.h"
139
-
167
+ #define RUBY_SITEARCH "i386-msvcr80"
168
+ #define RUBY_COREDLL "msvcr80"
169
+ #define LIBRUBY_SO "msvcr80-ruby191.dll"
140
170
  #if 0
141
171
  !if "msvcr80-ruby191"!="$(RUBY_SO_NAME)" || "i386-mswin32_80"!="$(ARCH)-$(PLATFORM)"
142
172
  config.h: nul
143
173
  !endif
144
174
  #endif
175
+
176
+ //RHO
177
+ #define RUBY_EXPORT 1
178
+ #define HAVE_SOCKADDR_STORAGE 1
179
+ #define HAVE_GETADDRINFO 1
180
+ //RHO
181
+ #endif
182
+ #endif
@@ -11,6 +11,7 @@
11
11
  */
12
12
 
13
13
  #include "ruby/ruby.h"
14
+ #include "ruby/encoding.h"
14
15
  #include "dln.h"
15
16
  #include <fcntl.h>
16
17
  #include <process.h>
@@ -29,15 +30,16 @@
29
30
  #include <shlobj.h>
30
31
  #ifndef _WIN32_WCE
31
32
  #include <mbstring.h>
33
+ #if _MSC_VER >= 1400
34
+ #include <crtdbg.h>
35
+ #include <rtcapi.h>
36
+ #endif
32
37
  #endif //_WIN32_WCE
33
38
  #ifdef __MINGW32__
34
39
  #include <mswsock.h>
35
40
  #endif
36
41
  #include "ruby/win32.h"
37
42
  #include "win32/dir.h"
38
- #ifndef index
39
- #define index(x, y) strchr((x), (y))
40
- #endif
41
43
  #define isdirsep(x) ((x) == '/' || (x) == '\\')
42
44
 
43
45
  #undef stat
@@ -71,6 +73,8 @@ static int rb_w32_open_osfhandle(intptr_t osfhandle, int flags);
71
73
  #else
72
74
  #define rb_w32_open_osfhandle(osfhandle, flags) _open_osfhandle(osfhandle, flags)
73
75
  #endif//_WIN32_WCE
76
+ static int wstati64(const WCHAR *path, struct stati64 *st);
77
+ VALUE rb_w32_conv_from_wchar(const WCHAR *wstr, rb_encoding *enc);
74
78
 
75
79
  #define RUBY_CRITICAL(expr) do { expr; } while (0)
76
80
 
@@ -165,14 +169,50 @@ static struct {
165
169
  { ERROR_PIPE_NOT_CONNECTED, EPIPE },
166
170
  { ERROR_OPERATION_ABORTED, EINTR },
167
171
  { ERROR_NOT_ENOUGH_QUOTA, ENOMEM },
168
- { WSAENAMETOOLONG, ENAMETOOLONG },
169
- { WSAENOTEMPTY, ENOTEMPTY },
172
+ { ERROR_MOD_NOT_FOUND, ENOENT },
170
173
  { WSAEINTR, EINTR },
171
174
  { WSAEBADF, EBADF },
172
175
  { WSAEACCES, EACCES },
173
176
  { WSAEFAULT, EFAULT },
174
177
  { WSAEINVAL, EINVAL },
175
178
  { WSAEMFILE, EMFILE },
179
+ { WSAEWOULDBLOCK, EWOULDBLOCK },
180
+ { WSAEINPROGRESS, EINPROGRESS },
181
+ { WSAEALREADY, EALREADY },
182
+ { WSAENOTSOCK, ENOTSOCK },
183
+ { WSAEDESTADDRREQ, EDESTADDRREQ },
184
+ { WSAEMSGSIZE, EMSGSIZE },
185
+ { WSAEPROTOTYPE, EPROTOTYPE },
186
+ { WSAENOPROTOOPT, ENOPROTOOPT },
187
+ { WSAEPROTONOSUPPORT, EPROTONOSUPPORT },
188
+ { WSAESOCKTNOSUPPORT, ESOCKTNOSUPPORT },
189
+ { WSAEOPNOTSUPP, EOPNOTSUPP },
190
+ { WSAEPFNOSUPPORT, EPFNOSUPPORT },
191
+ { WSAEAFNOSUPPORT, EAFNOSUPPORT },
192
+ { WSAEADDRINUSE, EADDRINUSE },
193
+ { WSAEADDRNOTAVAIL, EADDRNOTAVAIL },
194
+ { WSAENETDOWN, ENETDOWN },
195
+ { WSAENETUNREACH, ENETUNREACH },
196
+ { WSAENETRESET, ENETRESET },
197
+ { WSAECONNABORTED, ECONNABORTED },
198
+ { WSAECONNRESET, ECONNRESET },
199
+ { WSAENOBUFS, ENOBUFS },
200
+ { WSAEISCONN, EISCONN },
201
+ { WSAENOTCONN, ENOTCONN },
202
+ { WSAESHUTDOWN, ESHUTDOWN },
203
+ { WSAETOOMANYREFS, ETOOMANYREFS },
204
+ { WSAETIMEDOUT, ETIMEDOUT },
205
+ { WSAECONNREFUSED, ECONNREFUSED },
206
+ { WSAELOOP, ELOOP },
207
+ { WSAENAMETOOLONG, ENAMETOOLONG },
208
+ { WSAEHOSTDOWN, EHOSTDOWN },
209
+ { WSAEHOSTUNREACH, EHOSTUNREACH },
210
+ { WSAEPROCLIM, EPROCLIM },
211
+ { WSAENOTEMPTY, ENOTEMPTY },
212
+ { WSAEUSERS, EUSERS },
213
+ { WSAEDQUOT, EDQUOT },
214
+ { WSAESTALE, ESTALE },
215
+ { WSAEREMOTE, EREMOTE },
176
216
  };
177
217
 
178
218
  int
@@ -184,7 +224,7 @@ rb_w32_map_errno(DWORD winerr)
184
224
  return 0;
185
225
  }
186
226
 
187
- for (i = 0; i < sizeof(errmap) / sizeof(*errmap); i++) {
227
+ for (i = 0; i < (int)(sizeof(errmap) / sizeof(*errmap)); i++) {
188
228
  if (errmap[i].winerr == winerr) {
189
229
  return errmap[i].err;
190
230
  }
@@ -201,37 +241,36 @@ rb_w32_map_errno(DWORD winerr)
201
241
  static const char *NTLoginName;
202
242
 
203
243
  static OSVERSIONINFO osver;
204
- #ifdef WIN95
205
- static DWORD Win32System = (DWORD)-1;
206
244
 
245
+ static void
246
+ get_version(void)
247
+ {
248
+ memset(&osver, 0, sizeof(OSVERSIONINFO));
249
+ osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
250
+ GetVersionEx(&osver);
251
+ }
252
+
253
+ #ifdef WIN95
207
254
  DWORD
208
255
  rb_w32_osid(void)
209
256
  {
210
- if (osver.dwPlatformId != Win32System) {
211
- memset(&osver, 0, sizeof(OSVERSIONINFO));
212
- osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
213
- GetVersionEx(&osver);
214
- Win32System = osver.dwPlatformId;
215
- }
216
- return (Win32System);
257
+ return osver.dwPlatformId;
217
258
  }
218
259
  #endif
219
- static DWORD Win32Version = (DWORD)-1;
220
260
 
221
261
  static DWORD
222
262
  rb_w32_osver(void)
223
263
  {
224
- if (osver.dwMajorVersion != Win32Version) {
225
- memset(&osver, 0, sizeof(OSVERSIONINFO));
226
- osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
227
- GetVersionEx(&osver);
228
- Win32Version = osver.dwMajorVersion;
229
- }
230
- return (Win32Version);
264
+ return osver.dwMajorVersion;
231
265
  }
232
266
 
233
267
  #define IsWinNT() rb_w32_iswinnt()
234
268
  #define IsWin95() rb_w32_iswin95()
269
+ #ifdef WIN95
270
+ #define IfWin95(win95, winnt) (IsWin95() ? (win95) : (winnt))
271
+ #else
272
+ #define IfWin95(win95, winnt) (winnt)
273
+ #endif
235
274
 
236
275
  HANDLE
237
276
  GetCurrentThreadHandle(void)
@@ -257,7 +296,7 @@ GetCurrentThreadHandle(void)
257
296
  i = 0; \
258
297
  else { \
259
298
  DWORD err = GetLastError(); \
260
- if (err == ERROR_LOCK_VIOLATION) \
299
+ if (err == ERROR_LOCK_VIOLATION || err == ERROR_IO_PENDING) \
261
300
  errno = EWOULDBLOCK; \
262
301
  else if (err == ERROR_NOT_LOCKED) \
263
302
  i = 0; \
@@ -355,6 +394,16 @@ flock(int fd, int oper)
355
394
  (DWORD)-1);
356
395
  }
357
396
 
397
+ static inline WCHAR *
398
+ translate_wchar(WCHAR *p, int from, int to)
399
+ {
400
+ for (; *p; p++) {
401
+ if (*p == from)
402
+ *p = to;
403
+ }
404
+ return p;
405
+ }
406
+
358
407
  static inline char *
359
408
  translate_char(char *p, int from, int to)
360
409
  {
@@ -366,42 +415,117 @@ translate_char(char *p, int from, int to)
366
415
  return p;
367
416
  }
368
417
 
418
+ #ifndef CSIDL_LOCAL_APPDATA
419
+ #define CSIDL_LOCAL_APPDATA 28
420
+ #endif
421
+ #ifndef CSIDL_COMMON_APPDATA
422
+ #define CSIDL_COMMON_APPDATA 35
423
+ #endif
424
+ #ifndef CSIDL_WINDOWS
425
+ #define CSIDL_WINDOWS 36
426
+ #endif
427
+ #ifndef CSIDL_SYSTEM
428
+ #define CSIDL_SYSTEM 37
429
+ #endif
369
430
  #ifndef CSIDL_PROFILE
370
431
  #define CSIDL_PROFILE 40
371
432
  #endif
372
-
433
+ /*
373
434
  static BOOL
374
- get_special_folder(int n, char *env)
435
+ get_special_folder(int n, WCHAR *env)
375
436
  {
376
437
  LPITEMIDLIST pidl;
377
438
  LPMALLOC alloc;
378
439
  BOOL f = FALSE;
379
440
  if (SHGetSpecialFolderLocation(NULL, n, &pidl) == 0) {
380
- f = SHGetPathFromIDList(pidl, env);
441
+ f = SHGetPathFromIDListW(pidl, env);
381
442
  SHGetMalloc(&alloc);
382
443
  alloc->lpVtbl->Free(alloc, pidl);
383
444
  alloc->lpVtbl->Release(alloc);
384
445
  }
385
446
  return f;
447
+ } */
448
+
449
+ static void
450
+ regulate_path(WCHAR *path)
451
+ {
452
+ WCHAR *p = translate_wchar(path, L'\\', L'/');
453
+ if (p - path == 2 && path[1] == L':') {
454
+ *p++ = L'/';
455
+ *p = L'\0';
456
+ }
457
+ }
458
+
459
+ static UINT
460
+ get_system_directory(WCHAR *path, UINT len)
461
+ {
462
+ HANDLE hKernel = GetModuleHandle("kernel32.dll");
463
+
464
+ if (hKernel) {
465
+ typedef UINT WINAPI wgetdir_func(WCHAR*, UINT);
466
+ FARPROC ptr = GetProcAddress(hKernel, "GetSystemWindowsDirectoryW");
467
+ if (ptr) {
468
+ return (*(wgetdir_func *)ptr)(path, len);
469
+ }
470
+ }
471
+ return GetWindowsDirectoryW(path, len);
472
+ }
473
+
474
+ #define numberof(array) (sizeof(array) / sizeof(*array))
475
+ /*
476
+ VALUE
477
+ rb_w32_special_folder(int type)
478
+ {
479
+ WCHAR path[_MAX_PATH];
480
+
481
+ if (!get_special_folder(type, path)) return Qnil;
482
+ regulate_path(path);
483
+ return rb_w32_conv_from_wchar(path, rb_filesystem_encoding());
484
+ }
485
+
486
+ UINT
487
+ rb_w32_system_tmpdir(WCHAR *path, UINT len)
488
+ {
489
+ static const WCHAR temp[] = L"temp";
490
+ WCHAR *p;
491
+
492
+ if (!get_special_folder(CSIDL_LOCAL_APPDATA, path)) {
493
+ if (get_system_directory(path, len)) return 0;
494
+ }
495
+ p = translate_wchar(path, L'\\', L'/');
496
+ if (*(p - 1) != L'/') *p++ = L'/';
497
+ if (p - path + numberof(temp) >= len) return 0;
498
+ memcpy(p, temp, sizeof(temp));
499
+ return p - path + numberof(temp) - 1;
386
500
  }
387
501
 
388
502
  static void
389
503
  init_env(void)
390
504
  {
391
- char env[_MAX_PATH];
505
+ static const WCHAR TMPDIR[] = L"TMPDIR";
506
+ struct {WCHAR name[6], eq, val[_MAX_PATH];} wk;
392
507
  DWORD len;
393
508
  BOOL f;
509
+ #define env wk.val
510
+ #define set_env_val(vname) do { \
511
+ typedef char namesizecheck[numberof(wk.name) < numberof(vname) - 1 ? -1 : 1]; \
512
+ WCHAR *const buf = wk.name + numberof(wk.name) - numberof(vname) + 1; \
513
+ MEMCPY(buf, vname, WCHAR, numberof(vname) - 1); \
514
+ _wputenv(buf); \
515
+ } while (0)
516
+
517
+ wk.eq = L'=';
394
518
 
395
- if (!GetEnvironmentVariable("HOME", env, sizeof(env))) {
519
+ if (!GetEnvironmentVariableW(L"HOME", env, numberof(env))) {
396
520
  f = FALSE;
397
- if (GetEnvironmentVariable("HOMEDRIVE", env, sizeof(env)))
398
- len = strlen(env);
521
+ if (GetEnvironmentVariableW(L"HOMEDRIVE", env, numberof(env)))
522
+ len = lstrlenW(env);
399
523
  else
400
524
  len = 0;
401
- if (GetEnvironmentVariable("HOMEPATH", env + len, sizeof(env) - len) || len) {
525
+ if (GetEnvironmentVariableW(L"HOMEPATH", env + len, numberof(env) - len) || len) {
402
526
  f = TRUE;
403
527
  }
404
- else if (GetEnvironmentVariable("USERPROFILE", env, sizeof(env))) {
528
+ else if (GetEnvironmentVariableW(L"USERPROFILE", env, numberof(env))) {
405
529
  f = TRUE;
406
530
  }
407
531
  else if (get_special_folder(CSIDL_PROFILE, env)) {
@@ -411,31 +535,41 @@ init_env(void)
411
535
  f = TRUE;
412
536
  }
413
537
  if (f) {
414
- char *p = translate_char(env, '\\', '/');
415
- if (p - env == 2 && env[1] == ':') {
416
- *p++ = '/';
417
- *p = 0;
418
- }
419
- SetEnvironmentVariable("HOME", env);
538
+ regulate_path(env);
539
+ set_env_val(L"HOME");
420
540
  }
421
541
  }
422
542
 
423
- if (!GetEnvironmentVariable("USER", env, sizeof env)) {
424
- if (GetEnvironmentVariable("USERNAME", env, sizeof env)) {
425
- SetEnvironmentVariable("USER", env);
426
- }
427
- else if (!GetUserName(env, (len = sizeof env, &len))) {
543
+ if (!GetEnvironmentVariableW(L"USER", env, numberof(env))) {
544
+ if (!GetEnvironmentVariableW(L"USERNAME", env, numberof(env)) &&
545
+ !GetUserNameW(env, (len = numberof(env), &len))) {
428
546
  NTLoginName = "<Unknown>";
429
547
  return;
430
548
  }
549
+ set_env_val(L"USER");
431
550
  }
432
- NTLoginName = strdup(env);
433
- }
551
+ NTLoginName = strdup(rb_w32_getenv("USER"));
552
+
553
+ if (!GetEnvironmentVariableW(TMPDIR, env, numberof(env)) &&
554
+ !GetEnvironmentVariableW(L"TMP", env, numberof(env)) &&
555
+ !GetEnvironmentVariableW(L"TEMP", env, numberof(env)) &&
556
+ rb_w32_system_tmpdir(env, numberof(env))) {
557
+ set_env_val(TMPDIR);
558
+ }
559
+
560
+ #undef env
561
+ #undef set_env_val
562
+ }*/
434
563
 
435
564
 
436
565
  typedef BOOL (WINAPI *cancel_io_t)(HANDLE);
437
566
  static cancel_io_t cancel_io = NULL;
438
- static cancel_io_t cancel_socket_io = NULL;
567
+
568
+ int
569
+ rb_w32_has_cancel_io(void)
570
+ {
571
+ return cancel_io != NULL;
572
+ }
439
573
 
440
574
  static void
441
575
  init_func(void)
@@ -443,18 +577,34 @@ init_func(void)
443
577
  if (!cancel_io)
444
578
  cancel_io = (cancel_io_t)GetProcAddress(GetModuleHandle("kernel32"),
445
579
  "CancelIo");
446
-
447
- //if (!cancel_socket_io)
448
- // cancel_socket_io = cancel_io ? cancel_io : NULL;
449
580
  }
450
581
 
451
582
  static void init_stdhandle(void);
452
583
 
453
- #if _MSC_VER >= 1400
454
- static void invalid_parameter(const wchar_t *expr, const wchar_t *func, const wchar_t *file, unsigned int line, uintptr_t dummy)
584
+ #if RT_VER >= 80
585
+ static void
586
+ invalid_parameter(const wchar_t *expr, const wchar_t *func, const wchar_t *file, unsigned int line, uintptr_t dummy)
455
587
  {
456
588
  // nothing to do
457
589
  }
590
+
591
+ int ruby_w32_rtc_error;
592
+
593
+ static int __cdecl
594
+ rtc_error_handler(int e, const char *src, int line, const char *exe, const char *fmt, ...)
595
+ {
596
+ va_list ap;
597
+ VALUE str;
598
+
599
+ if (!ruby_w32_rtc_error) return 0;
600
+ str = rb_sprintf("%s:%d: ", src, line);
601
+ va_start(ap, fmt);
602
+ rb_str_vcatf(str, fmt, ap);
603
+ va_end(ap);
604
+ rb_str_cat(str, "\n", 1);
605
+ rb_write_error2(RSTRING_PTR(str), RSTRING_LEN(str));
606
+ return 0;
607
+ }
458
608
  #endif
459
609
 
460
610
  static CRITICAL_SECTION select_mutex;
@@ -488,11 +638,11 @@ StartSockets(void)
488
638
  // initalize the winsock interface and insure that it's
489
639
  // cleaned up at exit.
490
640
  //
491
- /* version = MAKEWORD(2, 0);
641
+ version = MAKEWORD(2, 0);
492
642
  if (WSAStartup(version, &retdata))
493
643
  rb_fatal ("Unable to locate winsock library!\n");
494
644
  if (LOBYTE(retdata.wVersion) != 2)
495
- rb_fatal("could not find version 2 of winsock dll\n");*/
645
+ rb_fatal("could not find version 2 of winsock dll\n");
496
646
 
497
647
  socklist = st_init_numtable();
498
648
 
@@ -505,41 +655,41 @@ StartSockets(void)
505
655
  void
506
656
  rb_w32_sysinit(int *argc, char ***argv)
507
657
  {
508
- #if _MSC_VER >= 1400 && !defined(_WIN32_WCE)
658
+ #if RT_VER >= 80
509
659
  static void set_pioinfo_extra(void);
510
660
 
661
+ _CrtSetReportMode(_CRT_ASSERT, 0);
511
662
  _set_invalid_parameter_handler(invalid_parameter);
663
+ _RTC_SetErrorFunc(rtc_error_handler);
512
664
  set_pioinfo_extra();
513
665
  #endif
514
666
 
667
+ get_version();
668
+
515
669
  //
516
670
  // subvert cmd.exe's feeble attempt at command line parsing
517
671
  //
518
672
  //RHO
519
673
  #if !defined(_LIB)
520
- //RHO
521
674
  *argc = rb_w32_cmdvector(GetCommandLine(), argv);
522
- //RHO
523
675
  #endif
524
676
  //RHO
525
-
526
677
  //
527
678
  // Now set up the correct time stuff
528
679
  //
529
680
 
530
681
  tzset();
531
-
532
- init_env();
533
-
682
+ //RHO
683
+ //init_env();
684
+ //RHO
534
685
  init_func();
535
686
 
536
687
  //RHO
537
688
  #if !defined(_LIB)
538
- //RHO
539
689
  init_stdhandle();
540
- //RHO
541
690
  #endif
542
691
  //RHO
692
+
543
693
  InitializeCriticalSection(&select_mutex);
544
694
 
545
695
  atexit(exit_handler);
@@ -738,53 +888,19 @@ rb_w32_get_osfhandle(int fh)
738
888
  }
739
889
 
740
890
  static int
741
- argv_size(char *const *argv, BOOL escape)
742
- {
743
- const char *p;
744
- char *const *t;
745
- int len, n, bs, quote;
746
-
747
- for (t = argv, len = 0; *t; t++) {
748
- for (p = *t, n = quote = bs = 0; *p; ++p) {
749
- switch (*p) {
750
- case '\\':
751
- ++bs;
752
- break;
753
- case '<': case '>': case '|': case '^':
754
- bs = 0;
755
- if (escape && !quote) n++;
756
- break;
757
- case '"':
758
- n += bs + 1; bs = 0;
759
- quote = 1;
760
- break;
761
- case ' ': case '\t':
762
- quote = 1;
763
- default:
764
- bs = 0;
765
- p = CharNext(p) - 1;
766
- break;
767
- }
768
- }
769
- len += p - *t + n + 1;
770
- if (p - *t == 0 || quote) len += 2;
771
- }
772
- return len;
773
- }
774
-
775
- static char *
776
891
  join_argv(char *cmd, char *const *argv, BOOL escape)
777
892
  {
778
893
  const char *p, *s;
779
894
  char *q, *const *t;
780
- int n, bs, quote;
895
+ int len, n, bs, quote;
781
896
 
782
- for (t = argv, q = cmd; p = *t; t++) {
897
+ for (t = argv, q = cmd, len = 0; p = *t; t++) {
783
898
  quote = 0;
784
899
  s = p;
785
- if (!*p || strpbrk(p, " \t\"")) {
900
+ if (!*p || strpbrk(p, " \t\"'")) {
786
901
  quote = 1;
787
- *q++ = '"';
902
+ len++;
903
+ if (q) *q++ = '"';
788
904
  }
789
905
  for (bs = 0; *p; ++p) {
790
906
  switch (*p) {
@@ -792,13 +908,28 @@ join_argv(char *cmd, char *const *argv, BOOL escape)
792
908
  ++bs;
793
909
  break;
794
910
  case '"':
795
- memcpy(q, s, n = p - s); q += n; s = p;
796
- memset(q, '\\', ++bs); q += bs; bs = 0;
911
+ len += n = p - s;
912
+ if (q) {
913
+ memcpy(q, s, n);
914
+ q += n;
915
+ }
916
+ s = p;
917
+ len += ++bs;
918
+ if (q) {
919
+ memset(q, '\\', bs);
920
+ q += bs;
921
+ }
922
+ bs = 0;
797
923
  break;
798
924
  case '<': case '>': case '|': case '^':
799
925
  if (escape && !quote) {
800
- memcpy(q, s, n = p - s); q += n; s = p;
801
- *q++ = '^';
926
+ len += (n = p - s) + 1;
927
+ if (q) {
928
+ memcpy(q, s, n);
929
+ q += n;
930
+ *q++ = '^';
931
+ }
932
+ s = p;
802
933
  break;
803
934
  }
804
935
  default:
@@ -807,14 +938,21 @@ join_argv(char *cmd, char *const *argv, BOOL escape)
807
938
  break;
808
939
  }
809
940
  }
810
- memcpy(q, s, n = p - s);
811
- q += n;
812
- if (quote) *q++ = '"';
813
- *q++ = ' ';
941
+ len += (n = p - s) + 1;
942
+ if (quote) len++;
943
+ if (q) {
944
+ memcpy(q, s, n);
945
+ q += n;
946
+ if (quote) *q++ = '"';
947
+ *q++ = ' ';
948
+ }
949
+ }
950
+ if (q > cmd) --len;
951
+ if (q) {
952
+ if (q > cmd) --q;
953
+ *q = '\0';
814
954
  }
815
- if (q > cmd) --q;
816
- *q = '\0';
817
- return cmd;
955
+ return len;
818
956
  }
819
957
 
820
958
  #ifdef HAVE_SYS_PARAM_H
@@ -893,30 +1031,34 @@ CreateChild(const char *cmd, const char *prog, SECURITY_ATTRIBUTES *psa,
893
1031
  memset(&aStartupInfo, 0, sizeof (STARTUPINFO));
894
1032
  memset(&aProcessInformation, 0, sizeof (PROCESS_INFORMATION));
895
1033
  aStartupInfo.cb = sizeof (STARTUPINFO);
896
- if (hInput || hOutput || hError) {
897
- aStartupInfo.dwFlags = STARTF_USESTDHANDLES;
898
- if (hInput) {
899
- aStartupInfo.hStdInput = hInput;
900
- }
901
- else {
902
- aStartupInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
903
- }
904
- if (hOutput) {
905
- aStartupInfo.hStdOutput = hOutput;
906
- }
907
- else {
908
- aStartupInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
909
- }
910
- if (hError) {
911
- aStartupInfo.hStdError = hError;
912
- }
913
- else {
914
- aStartupInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
915
- }
1034
+ aStartupInfo.dwFlags = STARTF_USESTDHANDLES;
1035
+ if (hInput) {
1036
+ aStartupInfo.hStdInput = hInput;
1037
+ }
1038
+ else {
1039
+ aStartupInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
1040
+ }
1041
+ if (hOutput) {
1042
+ aStartupInfo.hStdOutput = hOutput;
1043
+ }
1044
+ else {
1045
+ aStartupInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
1046
+ }
1047
+ if (hError) {
1048
+ aStartupInfo.hStdError = hError;
1049
+ }
1050
+ else {
1051
+ aStartupInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
916
1052
  }
917
1053
 
918
1054
  dwCreationFlags = (NORMAL_PRIORITY_CLASS);
919
1055
 
1056
+ if (lstrlenW(cmd) > 32767) {
1057
+ child->pid = 0; /* release the slot */
1058
+ errno = E2BIG;
1059
+ return NULL;
1060
+ }
1061
+
920
1062
  RUBY_CRITICAL({
921
1063
  fRet = CreateProcess(prog, (char *)cmd, psa, psa,
922
1064
  psa->bInheritHandle, dwCreationFlags, NULL, NULL,
@@ -942,6 +1084,18 @@ CreateChild(const char *cmd, const char *prog, SECURITY_ATTRIBUTES *psa,
942
1084
  return child;
943
1085
  }
944
1086
 
1087
+ static int
1088
+ is_batch(const char *cmd)
1089
+ {
1090
+ int len = strlen(cmd);
1091
+ if (len <= 4) return 0;
1092
+ cmd += len - 4;
1093
+ if (*cmd++ != '.') return 0;
1094
+ if (strcasecmp(cmd, "bat") == 0) return 1;
1095
+ if (strcasecmp(cmd, "cmd") == 0) return 1;
1096
+ return 0;
1097
+ }
1098
+
945
1099
  rb_pid_t
946
1100
  rb_w32_spawn(int mode, const char *cmd, const char *prog)
947
1101
  {
@@ -955,6 +1109,10 @@ rb_w32_spawn(int mode, const char *cmd, const char *prog)
955
1109
  if (!(p = dln_find_exe_r(prog, NULL, fbuf, sizeof(fbuf)))) {
956
1110
  shell = prog;
957
1111
  }
1112
+ else {
1113
+ shell = p;
1114
+ translate_char(p, '/', '\\');
1115
+ }
958
1116
  }
959
1117
  else {
960
1118
  int redir = -1;
@@ -975,55 +1133,55 @@ rb_w32_spawn(int mode, const char *cmd, const char *prog)
975
1133
  cmd = tmp;
976
1134
  }
977
1135
  else {
978
- int len = 0;
979
- if (*cmd == '"') {
980
- for (prog = cmd + 1; *prog && *prog != '"'; prog = CharNext(prog));
981
- len = prog - cmd - 1;
982
- STRNDUPA(p, cmd + 1, len);
983
- p = dln_find_exe_r(p, NULL, fbuf, sizeof(fbuf));
984
- if (p) goto command_found;
985
- }
986
- for (prog = cmd; *prog; prog = CharNext(prog)) {
987
- if (ISSPACE(*prog)) {
988
- len = prog - cmd;
989
- do ++prog; while (ISSPACE(*prog));
990
- break;
991
- }
992
- else {
993
- len = 0;
994
- }
995
- }
996
- if (!len) len = strlen(cmd);
997
-
998
- shell = NULL;
999
- prog = cmd;
1000
- for (;;) {
1136
+ int len = 0, quote = (*cmd == '"') ? '"' : (*cmd == '\'') ? '\'' : 0;
1137
+ for (prog = cmd + !!quote;; prog = CharNext(prog)) {
1001
1138
  if (!*prog) {
1002
- p = dln_find_exe_r(cmd, NULL, fbuf, sizeof(fbuf));
1139
+ len = prog - cmd;
1140
+ shell = cmd;
1003
1141
  break;
1004
1142
  }
1005
- if (strchr(":*?\"/\\", *prog)) {
1006
- if (cmd[len]) {
1007
- STRNDUPA(p, cmd, len);
1008
- }
1009
- p = dln_find_exe_r(p ? p : cmd, NULL, fbuf, sizeof(fbuf));
1143
+ if ((unsigned char)*prog == quote) {
1144
+ len = prog++ - cmd - 1;
1145
+ STRNDUPA(p, cmd + 1, len);
1146
+ shell = p;
1010
1147
  break;
1011
1148
  }
1012
- if (ISSPACE(*prog) || strchr("<>|", *prog)) {
1149
+ if (quote) continue;
1150
+ if (ISSPACE(*prog) || strchr("<>|*?\"", *prog)) {
1013
1151
  len = prog - cmd;
1014
1152
  STRNDUPA(p, cmd, len);
1015
- p = dln_find_exe_r(p, NULL, fbuf, sizeof(fbuf));
1153
+ shell = p;
1016
1154
  break;
1017
1155
  }
1018
- prog++;
1156
+ }
1157
+ shell = dln_find_exe_r(shell, NULL, fbuf, sizeof(fbuf));
1158
+ if (!shell) {
1159
+ shell = p ? p : cmd;
1160
+ }
1161
+ else {
1162
+ len = strlen(shell);
1163
+ if (strchr(shell, ' ')) quote = -1;
1164
+ if (shell == fbuf) {
1165
+ p = fbuf;
1166
+ }
1167
+ else if (shell != p && strchr(shell, '/')) {
1168
+ STRNDUPA(p, shell, len);
1169
+ shell = p;
1170
+ }
1171
+ if (p) translate_char(p, '/', '\\');
1172
+ if (is_batch(shell)) {
1173
+ int alen = strlen(prog);
1174
+ cmd = p = ALLOCA_N(char, len + alen + (quote ? 2 : 0) + 1);
1175
+ if (quote) *p++ = '"';
1176
+ memcpy(p, shell, len);
1177
+ p += len;
1178
+ if (quote) *p++ = '"';
1179
+ memcpy(p, prog, alen + 1);
1180
+ shell = 0;
1181
+ }
1019
1182
  }
1020
1183
  }
1021
1184
  }
1022
- if (p) {
1023
- command_found:
1024
- shell = p;
1025
- translate_char(p, '/', '\\');
1026
- }
1027
1185
 
1028
1186
  return child_result(CreateChild(cmd, shell, NULL, NULL, NULL, NULL), mode);
1029
1187
  }
@@ -1031,7 +1189,8 @@ rb_w32_spawn(int mode, const char *cmd, const char *prog)
1031
1189
  rb_pid_t
1032
1190
  rb_w32_aspawn(int mode, const char *prog, char *const *argv)
1033
1191
  {
1034
- int len, differ = 0, c_switch = 0;
1192
+ int c_switch = 0;
1193
+ size_t len;
1035
1194
  BOOL ntcmd = FALSE, tmpnt;
1036
1195
  const char *shell;
1037
1196
  char *cmd, fbuf[MAXPATHLEN];
@@ -1044,39 +1203,41 @@ rb_w32_aspawn(int mode, const char *prog, char *const *argv)
1044
1203
  ntcmd = tmpnt;
1045
1204
  prog = shell;
1046
1205
  c_switch = 1;
1047
- differ = 1;
1048
1206
  }
1049
1207
  else if ((cmd = dln_find_exe_r(prog, NULL, fbuf, sizeof(fbuf)))) {
1050
1208
  if (cmd == prog) strlcpy(cmd = fbuf, prog, sizeof(fbuf));
1051
1209
  translate_char(cmd, '/', '\\');
1052
1210
  prog = cmd;
1053
- argv++;
1054
- differ = 1;
1055
1211
  }
1056
1212
  else if (strchr(prog, '/')) {
1057
- strlcpy(fbuf, prog, sizeof(fbuf));
1058
- translate_char(fbuf, '/', '\\');
1059
- prog = fbuf;
1060
- argv++;
1061
- differ = 1;
1213
+ len = strlen(prog);
1214
+ if (len < sizeof(fbuf))
1215
+ strlcpy(cmd = fbuf, prog, sizeof(fbuf));
1216
+ else
1217
+ STRNDUPA(cmd, prog, len);
1218
+ translate_char(cmd, '/', '\\');
1219
+ prog = cmd;
1062
1220
  }
1063
- if (differ) {
1221
+ if (c_switch || is_batch(prog)) {
1064
1222
  char *progs[2];
1065
1223
  progs[0] = (char *)prog;
1066
1224
  progs[1] = NULL;
1067
- len = argv_size(progs, ntcmd);
1225
+ len = join_argv(NULL, progs, ntcmd);
1068
1226
  if (c_switch) len += 3;
1069
- if (argv[0]) len += argv_size(argv, ntcmd);
1227
+ else ++argv;
1228
+ if (argv[0]) len += join_argv(NULL, argv, ntcmd);
1070
1229
  cmd = ALLOCA_N(char, len);
1071
1230
  join_argv(cmd, progs, ntcmd);
1072
1231
  if (c_switch) strlcat(cmd, " /c", len);
1073
1232
  if (argv[0]) join_argv(cmd + strlcat(cmd, " ", len), argv, ntcmd);
1233
+ prog = c_switch ? shell : 0;
1074
1234
  }
1075
1235
  else {
1076
- len = argv_size(argv, FALSE);
1236
+ len = join_argv(NULL, argv, FALSE);
1077
1237
  cmd = ALLOCA_N(char, len);
1078
1238
  join_argv(cmd, argv, FALSE);
1079
1239
  }
1240
+
1080
1241
  return child_result(CreateChild(cmd, prog, NULL, NULL, NULL, NULL), mode);
1081
1242
  }
1082
1243
 
@@ -1154,8 +1315,8 @@ has_redirection(const char *cmd)
1154
1315
  const char *ptr;
1155
1316
 
1156
1317
  //
1157
- // Scan the string, looking for redirection (< or >) or pipe
1158
- // characters (|) that are not in a quoted string
1318
+ // Scan the string, looking for redirection characters (< or >), pipe
1319
+ // character (|) or newline (\n) that are not in a quoted string
1159
1320
  //
1160
1321
 
1161
1322
  for (ptr = cmd; *ptr;) {
@@ -1172,6 +1333,7 @@ has_redirection(const char *cmd)
1172
1333
  case '>':
1173
1334
  case '<':
1174
1335
  case '|':
1336
+ case '\n':
1175
1337
  if (!quote)
1176
1338
  return TRUE;
1177
1339
  ptr++;
@@ -1455,61 +1617,56 @@ rb_w32_cmdvector(const char *cmd, char ***vec)
1455
1617
  #define DIRENT_PER_CHAR (CHAR_BIT / 2)
1456
1618
 
1457
1619
  static HANDLE
1458
- open_dir_handle(const char *filename, WIN32_FIND_DATA *fd)
1620
+ open_dir_handle(const WCHAR *filename, WIN32_FIND_DATAW *fd)
1459
1621
  {
1460
1622
  HANDLE fh;
1461
- static const char wildcard[] = "/*";
1462
- long len = strlen(filename);
1463
- char *scanname = malloc(len + sizeof(wildcard));
1623
+ static const WCHAR wildcard[] = L"\\*";
1624
+ WCHAR *scanname;
1625
+ WCHAR *p;
1626
+ int len, i;
1464
1627
 
1465
1628
  //
1466
1629
  // Create the search pattern
1467
1630
  //
1468
- if (!scanname) {
1469
- return INVALID_HANDLE_VALUE;
1470
- }
1471
- memcpy(scanname, filename, len + 1);
1472
-
1473
- if (index("/\\:", *CharPrev(scanname, scanname + len)) == NULL)
1474
- memcpy(scanname + len, wildcard, sizeof(wildcard));
1631
+ len = lstrlenW(filename);
1632
+ scanname = ALLOCA_N(WCHAR, len + sizeof(wildcard) / sizeof(WCHAR));
1633
+ lstrcpyW(scanname, filename);
1634
+ p = CharPrevW(scanname, scanname + len);
1635
+ if (*p == L'/' || *p == L'\\' || *p == L':')
1636
+ lstrcatW(scanname, wildcard + 1);
1475
1637
  else
1476
- memcpy(scanname + len, wildcard + 1, sizeof(wildcard) - 1);
1638
+ lstrcatW(scanname, wildcard);
1639
+
1640
+ for( i = 0; scanname[i]; i++)
1641
+ {
1642
+ if ( scanname[i] == L'/' )
1643
+ scanname[i] = L'\\';
1644
+ }
1477
1645
 
1478
1646
  //
1479
1647
  // do the FindFirstFile call
1480
1648
  //
1481
- fh = FindFirstFile(scanname, fd);
1482
- free(scanname);
1483
- if (fh == INVALID_HANDLE_VALUE) {
1484
- errno = map_errno(GetLastError());
1649
+ fh = FindFirstFileW(scanname, fd);
1650
+ if (fh == INVALID_HANDLE_VALUE)
1651
+ {
1652
+ DWORD dwErr = GetLastError();
1653
+ if ( dwErr == 18)
1654
+ fh = 0;
1655
+ else
1656
+ errno = map_errno(GetLastError());
1485
1657
  }
1486
1658
  return fh;
1487
1659
  }
1488
1660
 
1489
- DIR *
1490
- rb_w32_opendir(const char *filename)
1661
+ static DIR *
1662
+ opendir_internal(HANDLE fh, WIN32_FIND_DATAW *fd)
1491
1663
  {
1492
- DIR *p;
1493
- long len;
1494
- long idx;
1495
- char *tmp;
1496
- struct stati64 sbuf;
1497
- WIN32_FIND_DATA fd;
1498
- HANDLE fh;
1499
-
1500
- //
1501
- // check to see if we've got a directory
1502
- //
1503
- if (rb_w32_stati64(filename, &sbuf) < 0)
1504
- return NULL;
1505
- if (!(sbuf.st_mode & S_IFDIR) &&
1506
- (!ISALPHA(filename[0]) || filename[1] != ':' || filename[2] != '\0' ||
1507
- ((1 << (filename[0] & 0x5f) - 'A') & GetLogicalDrives()) == 0)) {
1508
- errno = ENOTDIR;
1509
- return NULL;
1510
- }
1664
+ DIR *p;
1665
+ long len;
1666
+ long idx;
1667
+ WCHAR *tmpW;
1668
+ char *tmp;
1511
1669
 
1512
- fh = open_dir_handle(filename, &fd);
1513
1670
  if (fh == INVALID_HANDLE_VALUE) {
1514
1671
  return NULL;
1515
1672
  }
@@ -1530,14 +1687,14 @@ rb_w32_opendir(const char *filename)
1530
1687
  // of the previous string found.
1531
1688
  //
1532
1689
  do {
1533
- len = strlen(fd.cFileName) + 1;
1690
+ len = lstrlenW(fd->cFileName) + 1;
1534
1691
 
1535
1692
  //
1536
1693
  // bump the string table size by enough for the
1537
1694
  // new name and it's null terminator
1538
1695
  //
1539
- tmp = realloc(p->start, idx + len);
1540
- if (!tmp) {
1696
+ tmpW = realloc(p->start, (idx + len) * sizeof(WCHAR));
1697
+ if (!tmpW) {
1541
1698
  error:
1542
1699
  rb_w32_closedir(p);
1543
1700
  FindClose(fh);
@@ -1545,8 +1702,8 @@ rb_w32_opendir(const char *filename)
1545
1702
  return NULL;
1546
1703
  }
1547
1704
 
1548
- p->start = tmp;
1549
- strlcpy(&p->start[idx], fd.cFileName, len);
1705
+ p->start = tmpW;
1706
+ memcpy(&p->start[idx], fd->cFileName, len * sizeof(WCHAR));
1550
1707
 
1551
1708
  if (p->nfiles % DIRENT_PER_CHAR == 0) {
1552
1709
  tmp = realloc(p->bits, p->nfiles / DIRENT_PER_CHAR + 1);
@@ -1555,21 +1712,97 @@ rb_w32_opendir(const char *filename)
1555
1712
  p->bits = tmp;
1556
1713
  p->bits[p->nfiles / DIRENT_PER_CHAR] = 0;
1557
1714
  }
1558
- if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
1715
+ if (fd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
1559
1716
  SetBit(p->bits, BitOfIsDir(p->nfiles));
1560
- if (fd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
1717
+ if (fd->dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
1561
1718
  SetBit(p->bits, BitOfIsRep(p->nfiles));
1562
1719
 
1563
1720
  p->nfiles++;
1564
1721
  idx += len;
1565
- } while (FindNextFile(fh, &fd));
1566
- if ( fh )
1567
- FindClose(fh);
1722
+ } while (FindNextFileW(fh, fd));
1723
+ FindClose(fh);
1568
1724
  p->size = idx;
1569
1725
  p->curr = p->start;
1570
1726
  return p;
1571
1727
  }
1572
1728
 
1729
+ static char *
1730
+ wstr_to_filecp(const WCHAR *wstr, long *plen)
1731
+ {
1732
+ UINT cp = AreFileApisANSI() ? CP_ACP : CP_OEMCP;
1733
+ char *ptr;
1734
+ int len = WideCharToMultiByte(cp, 0, wstr, -1, NULL, 0, NULL, NULL) - 1;
1735
+ if (!(ptr = malloc(len + 1))) return 0;
1736
+ WideCharToMultiByte(cp, 0, wstr, -1, ptr, len + 1, NULL, NULL);
1737
+ if (plen) *plen = len;
1738
+ return ptr;
1739
+ }
1740
+
1741
+ static WCHAR *
1742
+ filecp_to_wstr(const char *str, long *plen)
1743
+ {
1744
+ UINT cp = AreFileApisANSI() ? CP_ACP : CP_OEMCP;
1745
+ WCHAR *ptr;
1746
+ int len = MultiByteToWideChar(cp, 0, str, -1, NULL, 0) - 1;
1747
+ if (!(ptr = malloc(sizeof(WCHAR) * (len + 1)))) return 0;
1748
+ MultiByteToWideChar(cp, 0, str, -1, ptr, len + 1);
1749
+ if (plen) *plen = len;
1750
+ return ptr;
1751
+ }
1752
+
1753
+ static char *
1754
+ wstr_to_utf8(const WCHAR *wstr, long *plen)
1755
+ {
1756
+ char *ptr;
1757
+ int len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL) - 1;
1758
+ if (!(ptr = malloc(len + 1))) return 0;
1759
+ WideCharToMultiByte(CP_UTF8, 0, wstr, -1, ptr, len + 1, NULL, NULL);
1760
+ if (plen) *plen = len;
1761
+ return ptr;
1762
+ }
1763
+
1764
+ static WCHAR *
1765
+ utf8_to_wstr(const char *str, long *plen)
1766
+ {
1767
+ WCHAR *ptr;
1768
+ int len = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0) - 1;
1769
+ if (!(ptr = malloc(sizeof(WCHAR) * (len + 1)))) return 0;
1770
+ MultiByteToWideChar(CP_UTF8, 0, str, -1, ptr, len + 1);
1771
+ if (plen) *plen = len;
1772
+ return ptr;
1773
+ }
1774
+
1775
+ DIR *
1776
+ rb_w32_opendir(const char *filename)
1777
+ {
1778
+ struct stati64 sbuf;
1779
+ WIN32_FIND_DATAW fd;
1780
+ HANDLE fh;
1781
+ WCHAR *wpath;
1782
+
1783
+ if (!(wpath = filecp_to_wstr(filename, NULL)))
1784
+ return NULL;
1785
+
1786
+ //
1787
+ // check to see if we've got a directory
1788
+ //
1789
+ if (wstati64(wpath, &sbuf) < 0) {
1790
+ free(wpath);
1791
+ return NULL;
1792
+ }
1793
+ if (!(sbuf.st_mode & S_IFDIR) &&
1794
+ (!ISALPHA(filename[0]) || filename[1] != ':' || filename[2] != '\0' ||
1795
+ ((1 << ((filename[0] & 0x5f) - 'A')) & GetLogicalDrives()) == 0)) {
1796
+ free(wpath);
1797
+ errno = ENOTDIR;
1798
+ return NULL;
1799
+ }
1800
+
1801
+ fh = open_dir_handle(wpath, &fd);
1802
+ free(wpath);
1803
+ return opendir_internal(fh, &fd);
1804
+ }
1805
+
1573
1806
  //
1574
1807
  // Move to next entry
1575
1808
  //
@@ -1579,7 +1812,7 @@ move_to_next_entry(DIR *dirp)
1579
1812
  {
1580
1813
  if (dirp->curr) {
1581
1814
  dirp->loc++;
1582
- dirp->curr += strlen(dirp->curr) + 1;
1815
+ dirp->curr += lstrlenW(dirp->curr) + 1;
1583
1816
  if (dirp->curr >= (dirp->start + dirp->size)) {
1584
1817
  dirp->curr = NULL;
1585
1818
  }
@@ -1590,21 +1823,75 @@ move_to_next_entry(DIR *dirp)
1590
1823
  // Readdir just returns the current string pointer and bumps the
1591
1824
  // string pointer to the next entry.
1592
1825
  //
1826
+ static BOOL
1827
+ win32_direct_conv(const WCHAR *file, struct direct *entry, rb_encoding *dummy)
1828
+ {
1829
+ if (!(entry->d_name = wstr_to_filecp(file, &entry->d_namlen)))
1830
+ return FALSE;
1831
+ return TRUE;
1832
+ }
1593
1833
 
1594
- struct direct *
1595
- rb_w32_readdir(DIR *dirp)
1834
+ VALUE
1835
+ rb_w32_conv_from_wchar(const WCHAR *wstr, rb_encoding *enc)
1836
+ {
1837
+ static rb_encoding *utf16 = (rb_encoding *)-1;
1838
+ VALUE src;
1839
+ VALUE opthash;
1840
+ int ecflags;
1841
+ VALUE ecopts;
1842
+
1843
+ if (utf16 == (rb_encoding *)-1) {
1844
+ utf16 = rb_enc_find("UTF-16LE");
1845
+ if (utf16 == rb_ascii8bit_encoding())
1846
+ utf16 = NULL;
1847
+ }
1848
+ if (!utf16)
1849
+ /* maybe miniruby */
1850
+ return Qnil;
1851
+
1852
+ src = rb_enc_str_new((char *)wstr, lstrlenW(wstr) * sizeof(WCHAR), utf16);
1853
+ opthash = rb_hash_new();
1854
+ rb_hash_aset(opthash, ID2SYM(rb_intern("undef")),
1855
+ ID2SYM(rb_intern("replace")));
1856
+ ecflags = rb_econv_prepare_opts(opthash, &ecopts);
1857
+ return rb_str_encode(src, rb_enc_from_encoding(enc), ecflags, ecopts);
1858
+ }
1859
+
1860
+ char *
1861
+ rb_w32_conv_from_wstr(const WCHAR *wstr, long *lenp, rb_encoding *enc)
1862
+ {
1863
+ VALUE str = rb_w32_conv_from_wchar(wstr, enc);
1864
+ long len;
1865
+ char *ptr;
1866
+
1867
+ if (NIL_P(str)) return wstr_to_filecp(wstr, lenp);
1868
+ *lenp = len = RSTRING_LEN(str);
1869
+ memcpy(ptr = malloc(len + 1), RSTRING_PTR(str), len);
1870
+ ptr[len] = '\0';
1871
+ return ptr;
1872
+ }
1873
+
1874
+ static BOOL
1875
+ ruby_direct_conv(const WCHAR *file, struct direct *entry, rb_encoding *enc)
1876
+ {
1877
+ if (!(entry->d_name = rb_w32_conv_from_wstr(file, &entry->d_namlen, enc)))
1878
+ return FALSE;
1879
+ return TRUE;
1880
+ }
1881
+
1882
+ static struct direct *
1883
+ readdir_internal(DIR *dirp, BOOL (*conv)(const WCHAR *, struct direct *, rb_encoding *), rb_encoding *enc)
1596
1884
  {
1597
- static int dummy = 0;
1885
+ static int dummy = 0;
1598
1886
 
1599
1887
  if (dirp->curr) {
1600
1888
 
1601
1889
  //
1602
1890
  // first set up the structure to return
1603
1891
  //
1604
- dirp->dirstr.d_namlen = strlen(dirp->curr);
1605
- if (!(dirp->dirstr.d_name = malloc(dirp->dirstr.d_namlen + 1)))
1606
- return NULL;
1607
- strlcpy(dirp->dirstr.d_name, dirp->curr, dirp->dirstr.d_namlen + 1);
1892
+ if (dirp->dirstr.d_name)
1893
+ free(dirp->dirstr.d_name);
1894
+ conv(dirp->curr, &dirp->dirstr, enc);
1608
1895
 
1609
1896
  //
1610
1897
  // Fake inode
@@ -1629,11 +1916,26 @@ rb_w32_readdir(DIR *dirp)
1629
1916
  return NULL;
1630
1917
  }
1631
1918
 
1919
+ struct direct *
1920
+ rb_w32_readdir(DIR *dirp)
1921
+ {
1922
+ return readdir_internal(dirp, win32_direct_conv, NULL);
1923
+ }
1924
+
1925
+ struct direct *
1926
+ rb_w32_readdir_with_enc(DIR *dirp, rb_encoding *enc)
1927
+ {
1928
+ if (enc == rb_ascii8bit_encoding())
1929
+ return readdir_internal(dirp, win32_direct_conv, NULL);
1930
+ else
1931
+ return readdir_internal(dirp, ruby_direct_conv, enc);
1932
+ }
1933
+
1632
1934
  //
1633
1935
  // Telldir returns the current string pointer position
1634
1936
  //
1635
1937
 
1636
- off_t
1938
+ long
1637
1939
  rb_w32_telldir(DIR *dirp)
1638
1940
  {
1639
1941
  return dirp->loc;
@@ -1644,7 +1946,7 @@ rb_w32_telldir(DIR *dirp)
1644
1946
  // (Saved by telldir).
1645
1947
 
1646
1948
  void
1647
- rb_w32_seekdir(DIR *dirp, off_t loc)
1949
+ rb_w32_seekdir(DIR *dirp, long loc)
1648
1950
  {
1649
1951
  if (dirp->loc > loc) rb_w32_rewinddir(dirp);
1650
1952
 
@@ -1704,7 +2006,7 @@ typedef struct {
1704
2006
  int lockinitflag;
1705
2007
  CRITICAL_SECTION lock;
1706
2008
  #endif
1707
- #if _MSC_VER >= 1400
2009
+ #if RT_VER >= 80
1708
2010
  char textmode;
1709
2011
  char pipech2[2];
1710
2012
  #endif
@@ -1725,7 +2027,7 @@ EXTERN_C _CRTIMP ioinfo * __pioinfo[];
1725
2027
  #define _osfile(i) (_pioinfo(i)->osfile)
1726
2028
  #define _pipech(i) (_pioinfo(i)->pipech)
1727
2029
 
1728
- #if _MSC_VER >= 1400
2030
+ #if RT_VER >= 80
1729
2031
  static size_t pioinfo_extra = 0; /* workaround for VC++8 SP1 */
1730
2032
 
1731
2033
  static void
@@ -1782,7 +2084,7 @@ rb_w32_open_osfhandle(intptr_t osfhandle, int flags)
1782
2084
 
1783
2085
  /* attempt to allocate a C Runtime file handle */
1784
2086
  hF = CreateFile("NUL", 0, 0, NULL, OPEN_ALWAYS, 0, NULL);
1785
- fh = _open_osfhandle((long)hF, 0);
2087
+ fh = _open_osfhandle((intptr_t)hF, 0);
1786
2088
  CloseHandle(hF);
1787
2089
  if (fh == -1) {
1788
2090
  errno = EMFILE; /* too many open files */
@@ -1887,9 +2189,6 @@ char *
1887
2189
  rb_w32_strerror(int e)
1888
2190
  {
1889
2191
  static char buffer[512];
1890
- #if !defined __MINGW32__
1891
- extern int sys_nerr;
1892
- #endif
1893
2192
  DWORD source = 0;
1894
2193
  char *p;
1895
2194
 
@@ -1905,6 +2204,21 @@ rb_w32_strerror(int e)
1905
2204
  if (e < 0 || e > sys_nerr) {
1906
2205
  if (e < 0)
1907
2206
  e = GetLastError();
2207
+ #if WSAEWOULDBLOCK != EWOULDBLOCK
2208
+ else if (e >= EADDRINUSE && e <= EWOULDBLOCK) {
2209
+ static int s = -1;
2210
+ int i;
2211
+ if (s < 0)
2212
+ for (s = 0; s < (int)(sizeof(errmap)/sizeof(*errmap)); s++)
2213
+ if (errmap[s].winerr == WSAEWOULDBLOCK)
2214
+ break;
2215
+ for (i = s; i < (int)(sizeof(errmap)/sizeof(*errmap)); i++)
2216
+ if (errmap[i].err == e) {
2217
+ e = errmap[i].winerr;
2218
+ break;
2219
+ }
2220
+ }
2221
+ #endif
1908
2222
  if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |
1909
2223
  FORMAT_MESSAGE_IGNORE_INSERTS, &source, e, 0,
1910
2224
  buffer, sizeof(buffer), NULL) == 0)
@@ -2043,21 +2357,21 @@ rb_w32_fdisset(int fd, fd_set *set)
2043
2357
  static int
2044
2358
  extract_fd(rb_fdset_t *dst, fd_set *src, int (*func)(SOCKET))
2045
2359
  {
2046
- int s = 0;
2360
+ unsigned int s = 0;
2047
2361
  if (!src || !dst) return 0;
2048
2362
 
2049
2363
  while (s < src->fd_count) {
2050
2364
  SOCKET fd = src->fd_array[s];
2051
2365
 
2052
2366
  if (!func || (*func)(fd)) { /* move it to dst */
2053
- int d;
2367
+ unsigned int d;
2054
2368
 
2055
2369
  for (d = 0; d < dst->fdset->fd_count; d++) {
2056
2370
  if (dst->fdset->fd_array[d] == fd)
2057
2371
  break;
2058
2372
  }
2059
2373
  if (d == dst->fdset->fd_count) {
2060
- if (dst->fdset->fd_count >= dst->capa) {
2374
+ if ((int)dst->fdset->fd_count >= dst->capa) {
2061
2375
  dst->capa = (dst->fdset->fd_count / FD_SETSIZE + 1) * FD_SETSIZE;
2062
2376
  dst->fdset = xrealloc(dst->fdset, sizeof(unsigned int) + sizeof(SOCKET) * dst->capa);
2063
2377
  }
@@ -2077,12 +2391,12 @@ extract_fd(rb_fdset_t *dst, fd_set *src, int (*func)(SOCKET))
2077
2391
  static int
2078
2392
  copy_fd(fd_set *dst, fd_set *src)
2079
2393
  {
2080
- int s;
2394
+ unsigned int s;
2081
2395
  if (!src || !dst) return 0;
2082
2396
 
2083
2397
  for (s = 0; s < src->fd_count; ++s) {
2084
2398
  SOCKET fd = src->fd_array[s];
2085
- int d;
2399
+ unsigned int d;
2086
2400
  for (d = 0; d < dst->fd_count; ++d) {
2087
2401
  if (dst->fd_array[d] == fd)
2088
2402
  break;
@@ -2133,7 +2447,7 @@ is_readable_pipe(SOCKET sock) /* call this for pipe only */
2133
2447
  );
2134
2448
 
2135
2449
  return ret;
2136
- #endif// _WIN32_WCE
2450
+ #endif
2137
2451
  }
2138
2452
 
2139
2453
  static int
@@ -2142,7 +2456,6 @@ is_console(SOCKET sock) /* DONT call this for SOCKET! */
2142
2456
  #ifdef _WIN32_WCE
2143
2457
  return 0;
2144
2458
  #else
2145
-
2146
2459
  int ret;
2147
2460
  DWORD n = 0;
2148
2461
  INPUT_RECORD ir;
@@ -2161,6 +2474,7 @@ is_readable_console(SOCKET sock) /* call this for console only */
2161
2474
  #ifdef _WIN32_WCE
2162
2475
  return 0;
2163
2476
  #else
2477
+
2164
2478
  int ret = 0;
2165
2479
  DWORD n = 0;
2166
2480
  INPUT_RECORD ir;
@@ -2223,7 +2537,7 @@ subtract(struct timeval *rest, const struct timeval *wait)
2223
2537
  }
2224
2538
  rest->tv_sec -= wait->tv_sec;
2225
2539
  rest->tv_usec -= wait->tv_usec;
2226
- return 1;
2540
+ return rest->tv_sec != 0 || rest->tv_usec != 0;
2227
2541
  }
2228
2542
 
2229
2543
  static inline int
@@ -2252,7 +2566,7 @@ rb_w32_select(int nfds, fd_set *rd, fd_set *wr, fd_set *ex,
2252
2566
  rb_fdset_t else_wr;
2253
2567
  rb_fdset_t except;
2254
2568
  int nonsock = 0;
2255
- struct timeval limit;
2569
+ struct timeval limit = {0, 0};
2256
2570
 
2257
2571
  if (nfds < 0 || (timeout && (timeout->tv_sec < 0 || timeout->tv_usec < 0))) {
2258
2572
  errno = EINVAL;
@@ -2301,9 +2615,9 @@ rb_w32_select(int nfds, fd_set *rd, fd_set *wr, fd_set *ex,
2301
2615
  extract_fd(&except, ex, is_not_socket); // drop only
2302
2616
 
2303
2617
  r = 0;
2304
- if (rd && rd->fd_count > r) r = rd->fd_count;
2305
- if (wr && wr->fd_count > r) r = wr->fd_count;
2306
- if (ex && ex->fd_count > r) r = ex->fd_count;
2618
+ if (rd && (int)rd->fd_count > r) r = (int)rd->fd_count;
2619
+ if (wr && (int)wr->fd_count > r) r = (int)wr->fd_count;
2620
+ if (ex && (int)ex->fd_count > r) r = (int)ex->fd_count;
2307
2621
  if (nfds > r) nfds = r;
2308
2622
 
2309
2623
  {
@@ -2434,15 +2748,11 @@ rb_w32_connect(int s, const struct sockaddr *addr, int addrlen)
2434
2748
  RUBY_CRITICAL({
2435
2749
  r = connect(TO_SOCKET(s), addr, addrlen);
2436
2750
  if (r == SOCKET_ERROR) {
2437
- r = WSAGetLastError();
2438
- if (r != WSAEWOULDBLOCK) {
2439
- errno = map_errno(r);
2440
- r=-1;
2441
- }
2442
- else {
2751
+ int err = WSAGetLastError();
2752
+ if (err != WSAEWOULDBLOCK)
2753
+ errno = map_errno(err);
2754
+ else
2443
2755
  errno = EINPROGRESS;
2444
- r = -1;
2445
- }
2446
2756
  }
2447
2757
  });
2448
2758
  return r;
@@ -2557,7 +2867,7 @@ overlapped_socket_io(BOOL input, int fd, char *buf, int len, int flags,
2557
2867
  s = TO_SOCKET(fd);
2558
2868
  st_lookup(socklist, (st_data_t)s, &data);
2559
2869
  mode = (int)data;
2560
- if (!cancel_socket_io || (mode & O_NONBLOCK)) {
2870
+ if (!cancel_io || (mode & O_NONBLOCK)) {
2561
2871
  RUBY_CRITICAL({
2562
2872
  if (input) {
2563
2873
  if (addr && addrlen)
@@ -2614,12 +2924,12 @@ overlapped_socket_io(BOOL input, int fd, char *buf, int len, int flags,
2614
2924
  }
2615
2925
  /* thru */
2616
2926
  default:
2617
- errno = map_errno(err);
2927
+ errno = map_errno(WSAGetLastError());
2618
2928
  /* thru */
2619
2929
  case WAIT_OBJECT_0 + 1:
2620
2930
  /* interrupted */
2621
2931
  r = -1;
2622
- cancel_socket_io((HANDLE)s);
2932
+ cancel_io((HANDLE)s);
2623
2933
  break;
2624
2934
  }
2625
2935
  }
@@ -2627,9 +2937,7 @@ overlapped_socket_io(BOOL input, int fd, char *buf, int len, int flags,
2627
2937
  errno = map_errno(err);
2628
2938
  r = -1;
2629
2939
  }
2630
- //RHO
2631
2940
  CloseHandle(wol.hEvent);
2632
- //
2633
2941
  }
2634
2942
 
2635
2943
  return r;
@@ -2662,6 +2970,217 @@ rb_w32_sendto(int fd, const char *buf, int len, int flags,
2662
2970
  (struct sockaddr *)to, &tolen);
2663
2971
  }
2664
2972
 
2973
+ #if !defined(MSG_TRUNC) && !defined(__MINGW32__)
2974
+ typedef struct {
2975
+ SOCKADDR *name;
2976
+ int namelen;
2977
+ WSABUF *lpBuffers;
2978
+ DWORD dwBufferCount;
2979
+ WSABUF Control;
2980
+ DWORD dwFlags;
2981
+ } WSAMSG;
2982
+ #endif
2983
+ #ifndef WSAID_WSARECVMSG
2984
+ #define WSAID_WSARECVMSG {0xf689d7c8,0x6f1f,0x436b,{0x8a,0x53,0xe5,0x4f,0xe3,0x51,0xc3,0x22}}
2985
+ #endif
2986
+ #ifndef WSAID_WSASENDMSG
2987
+ #define WSAID_WSASENDMSG {0xa441e712,0x754f,0x43ca,{0x84,0xa7,0x0d,0xee,0x44,0xcf,0x60,0x6d}}
2988
+ #endif
2989
+
2990
+ #define msghdr_to_wsamsg(msg, wsamsg) \
2991
+ do { \
2992
+ int i; \
2993
+ (wsamsg)->name = (msg)->msg_name; \
2994
+ (wsamsg)->namelen = (msg)->msg_namelen; \
2995
+ (wsamsg)->lpBuffers = ALLOCA_N(WSABUF, (msg)->msg_iovlen); \
2996
+ (wsamsg)->dwBufferCount = (msg)->msg_iovlen; \
2997
+ for (i = 0; i < (msg)->msg_iovlen; ++i) { \
2998
+ (wsamsg)->lpBuffers[i].buf = (msg)->msg_iov[i].iov_base; \
2999
+ (wsamsg)->lpBuffers[i].len = (msg)->msg_iov[i].iov_len; \
3000
+ } \
3001
+ (wsamsg)->Control.buf = (msg)->msg_control; \
3002
+ (wsamsg)->Control.len = (msg)->msg_controllen; \
3003
+ (wsamsg)->dwFlags = (msg)->msg_flags; \
3004
+ } while (0)
3005
+
3006
+ int
3007
+ recvmsg(int fd, struct msghdr *msg, int flags)
3008
+ {
3009
+ typedef int (WSAAPI *WSARecvMsg_t)(SOCKET, WSAMSG *, DWORD *, WSAOVERLAPPED *, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
3010
+ static WSARecvMsg_t pWSARecvMsg = NULL;
3011
+ WSAMSG wsamsg;
3012
+ SOCKET s;
3013
+ st_data_t data;
3014
+ int mode;
3015
+ DWORD len;
3016
+ int ret;
3017
+
3018
+ if (!NtSocketsInitialized)
3019
+ StartSockets();
3020
+
3021
+ s = TO_SOCKET(fd);
3022
+
3023
+ if (!pWSARecvMsg) {
3024
+ static GUID guid = WSAID_WSARECVMSG;
3025
+ DWORD dmy;
3026
+ WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &guid, sizeof(guid),
3027
+ &pWSARecvMsg, sizeof(pWSARecvMsg), &dmy, NULL, NULL);
3028
+ if (!pWSARecvMsg) {
3029
+ errno = ENOSYS;
3030
+ return -1;
3031
+ }
3032
+ }
3033
+
3034
+ msghdr_to_wsamsg(msg, &wsamsg);
3035
+ wsamsg.dwFlags |= flags;
3036
+
3037
+ st_lookup(socklist, (st_data_t)s, &data);
3038
+ mode = (int)data;
3039
+ if (!cancel_io || (mode & O_NONBLOCK)) {
3040
+ RUBY_CRITICAL({
3041
+ if ((ret = pWSARecvMsg(s, &wsamsg, &len, NULL, NULL)) == SOCKET_ERROR) {
3042
+ errno = map_errno(WSAGetLastError());
3043
+ len = -1;
3044
+ }
3045
+ });
3046
+ }
3047
+ else {
3048
+ DWORD size;
3049
+ int err;
3050
+ WSAOVERLAPPED wol;
3051
+ memset(&wol, 0, sizeof(wol));
3052
+ RUBY_CRITICAL({
3053
+ wol.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
3054
+ ret = pWSARecvMsg(s, &wsamsg, &len, &wol, NULL);
3055
+ });
3056
+
3057
+ if (ret != SOCKET_ERROR) {
3058
+ /* nothing to do */
3059
+ }
3060
+ else if ((err = WSAGetLastError()) == WSA_IO_PENDING) {
3061
+ DWORD flg;
3062
+ switch (rb_w32_wait_events_blocking(&wol.hEvent, 1, INFINITE)) {
3063
+ case WAIT_OBJECT_0:
3064
+ RUBY_CRITICAL(
3065
+ ret = WSAGetOverlappedResult(s, &wol, &size, TRUE, &flg)
3066
+ );
3067
+ if (ret) {
3068
+ len = size;
3069
+ break;
3070
+ }
3071
+ /* thru */
3072
+ default:
3073
+ errno = map_errno(WSAGetLastError());
3074
+ /* thru */
3075
+ case WAIT_OBJECT_0 + 1:
3076
+ /* interrupted */
3077
+ len = -1;
3078
+ cancel_io((HANDLE)s);
3079
+ break;
3080
+ }
3081
+ }
3082
+ else {
3083
+ errno = map_errno(err);
3084
+ len = -1;
3085
+ }
3086
+ CloseHandle(wol.hEvent);
3087
+ }
3088
+ if (ret == SOCKET_ERROR)
3089
+ return -1;
3090
+
3091
+ /* WSAMSG to msghdr */
3092
+ msg->msg_name = wsamsg.name;
3093
+ msg->msg_namelen = wsamsg.namelen;
3094
+ msg->msg_flags = wsamsg.dwFlags;
3095
+
3096
+ return len;
3097
+ }
3098
+
3099
+ int
3100
+ sendmsg(int fd, const struct msghdr *msg, int flags)
3101
+ {
3102
+ typedef int (WSAAPI *WSASendMsg_t)(SOCKET, const WSAMSG *, DWORD, DWORD *, WSAOVERLAPPED *, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
3103
+ static WSASendMsg_t pWSASendMsg = NULL;
3104
+ WSAMSG wsamsg;
3105
+ SOCKET s;
3106
+ st_data_t data;
3107
+ int mode;
3108
+ DWORD len;
3109
+ int ret;
3110
+
3111
+ if (!NtSocketsInitialized)
3112
+ StartSockets();
3113
+
3114
+ s = TO_SOCKET(fd);
3115
+
3116
+ if (!pWSASendMsg) {
3117
+ static GUID guid = WSAID_WSASENDMSG;
3118
+ DWORD dmy;
3119
+ WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &guid, sizeof(guid),
3120
+ &pWSASendMsg, sizeof(pWSASendMsg), &dmy, NULL, NULL);
3121
+ if (!pWSASendMsg) {
3122
+ errno = ENOSYS;
3123
+ return -1;
3124
+ }
3125
+ }
3126
+
3127
+ msghdr_to_wsamsg(msg, &wsamsg);
3128
+
3129
+ st_lookup(socklist, (st_data_t)s, &data);
3130
+ mode = (int)data;
3131
+ if (!cancel_io || (mode & O_NONBLOCK)) {
3132
+ RUBY_CRITICAL({
3133
+ if ((ret = pWSASendMsg(s, &wsamsg, flags, &len, NULL, NULL)) == SOCKET_ERROR) {
3134
+ errno = map_errno(WSAGetLastError());
3135
+ len = -1;
3136
+ }
3137
+ });
3138
+ }
3139
+ else {
3140
+ DWORD size;
3141
+ int err;
3142
+ WSAOVERLAPPED wol;
3143
+ memset(&wol, 0, sizeof(wol));
3144
+ RUBY_CRITICAL({
3145
+ wol.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
3146
+ ret = pWSASendMsg(s, &wsamsg, flags, &len, &wol, NULL);
3147
+ });
3148
+
3149
+ if (ret != SOCKET_ERROR) {
3150
+ /* nothing to do */
3151
+ }
3152
+ else if ((err = WSAGetLastError()) == WSA_IO_PENDING) {
3153
+ DWORD flg;
3154
+ switch (rb_w32_wait_events_blocking(&wol.hEvent, 1, INFINITE)) {
3155
+ case WAIT_OBJECT_0:
3156
+ RUBY_CRITICAL(
3157
+ ret = WSAGetOverlappedResult(s, &wol, &size, TRUE, &flg)
3158
+ );
3159
+ if (ret) {
3160
+ len = size;
3161
+ break;
3162
+ }
3163
+ /* thru */
3164
+ default:
3165
+ errno = map_errno(WSAGetLastError());
3166
+ /* thru */
3167
+ case WAIT_OBJECT_0 + 1:
3168
+ /* interrupted */
3169
+ len = -1;
3170
+ cancel_io((HANDLE)s);
3171
+ break;
3172
+ }
3173
+ }
3174
+ else {
3175
+ errno = map_errno(err);
3176
+ len = -1;
3177
+ }
3178
+ CloseHandle(wol.hEvent);
3179
+ }
3180
+
3181
+ return len;
3182
+ }
3183
+
2665
3184
  #undef setsockopt
2666
3185
 
2667
3186
  int WSAAPI
@@ -2696,7 +3215,6 @@ rb_w32_shutdown(int s, int how)
2696
3215
  return r;
2697
3216
  }
2698
3217
 
2699
- #undef socket
2700
3218
  static SOCKET
2701
3219
  open_ifs_socket(int af, int type, int protocol)
2702
3220
  {
@@ -2704,47 +3222,48 @@ open_ifs_socket(int af, int type, int protocol)
2704
3222
  int error_code;
2705
3223
  SOCKET out = INVALID_SOCKET;
2706
3224
 
2707
- /*if (WSAEnumProtocols(NULL, NULL, &proto_buffers_len) == SOCKET_ERROR) {
2708
- error_code = WSAGetLastError();
2709
- if (error_code == WSAENOBUFS) {
2710
- WSAPROTOCOL_INFO *proto_buffers;
2711
- int protocols_available = 0;
2712
-
2713
- proto_buffers = (WSAPROTOCOL_INFO *)malloc(proto_buffers_len);
2714
- if (!proto_buffers) {
2715
- WSASetLastError(WSA_NOT_ENOUGH_MEMORY);
2716
- return INVALID_SOCKET;
2717
- }
2718
-
2719
- protocols_available =
2720
- WSAEnumProtocols(NULL, proto_buffers, &proto_buffers_len);
2721
- if (protocols_available != SOCKET_ERROR) {
2722
- int i;
2723
- for (i = 0; i < protocols_available; i++) {
2724
- if ((af != AF_UNSPEC && af != proto_buffers[i].iAddressFamily) ||
2725
- (type != proto_buffers[i].iSocketType) ||
2726
- (protocol != 0 && protocol != proto_buffers[i].iProtocol))
2727
- continue;
2728
-
2729
- if ((proto_buffers[i].dwServiceFlags1 & XP1_IFS_HANDLES) == 0)
2730
- continue;
2731
-
2732
- out = WSASocket(af, type, protocol, &(proto_buffers[i]), 0,
2733
- WSA_FLAG_OVERLAPPED);
2734
- break;
2735
- }
2736
- if (out == INVALID_SOCKET)
2737
- out = WSASocket(af, type, protocol, NULL, 0, 0);
2738
- }
3225
+ if (WSAEnumProtocols(NULL, NULL, &proto_buffers_len) == SOCKET_ERROR) {
3226
+ error_code = WSAGetLastError();
3227
+ if (error_code == WSAENOBUFS) {
3228
+ WSAPROTOCOL_INFO *proto_buffers;
3229
+ int protocols_available = 0;
3230
+
3231
+ proto_buffers = (WSAPROTOCOL_INFO *)malloc(proto_buffers_len);
3232
+ if (!proto_buffers) {
3233
+ WSASetLastError(WSA_NOT_ENOUGH_MEMORY);
3234
+ return INVALID_SOCKET;
3235
+ }
2739
3236
 
2740
- free(proto_buffers);
3237
+ protocols_available =
3238
+ WSAEnumProtocols(NULL, proto_buffers, &proto_buffers_len);
3239
+ if (protocols_available != SOCKET_ERROR) {
3240
+ int i;
3241
+ for (i = 0; i < protocols_available; i++) {
3242
+ if ((af != AF_UNSPEC && af != proto_buffers[i].iAddressFamily) ||
3243
+ (type != proto_buffers[i].iSocketType) ||
3244
+ (protocol != 0 && protocol != proto_buffers[i].iProtocol))
3245
+ continue;
3246
+
3247
+ if ((proto_buffers[i].dwServiceFlags1 & XP1_IFS_HANDLES) == 0)
3248
+ continue;
3249
+
3250
+ out = WSASocket(af, type, protocol, &(proto_buffers[i]), 0,
3251
+ WSA_FLAG_OVERLAPPED);
3252
+ break;
3253
+ }
3254
+ if (out == INVALID_SOCKET)
3255
+ out = WSASocket(af, type, protocol, NULL, 0, 0);
2741
3256
  }
2742
- }else */
2743
- out = socket(af, type, protocol);
3257
+
3258
+ free(proto_buffers);
3259
+ }
3260
+ }
2744
3261
 
2745
3262
  return out;
2746
3263
  }
2747
3264
 
3265
+ #undef socket
3266
+
2748
3267
  int WSAAPI
2749
3268
  rb_w32_socket(int af, int type, int protocol)
2750
3269
  {
@@ -2935,6 +3454,8 @@ socketpair_internal(int af, int type, int protocol, SOCKET *sv)
2935
3454
  return -1;
2936
3455
  }
2937
3456
 
3457
+ sv[0] = (SOCKET)INVALID_HANDLE_VALUE;
3458
+ sv[1] = (SOCKET)INVALID_HANDLE_VALUE;
2938
3459
  RUBY_CRITICAL({
2939
3460
  do {
2940
3461
  svr = open_ifs_socket(af, type, protocol);
@@ -3086,6 +3607,7 @@ poll_child_status(struct ChildRecord *child, int *stat_loc)
3086
3607
 
3087
3608
  if (!GetExitCodeProcess(child->hProcess, &exitcode)) {
3088
3609
  /* If an error occured, return immediatly. */
3610
+ error_exit:
3089
3611
  err = GetLastError();
3090
3612
  if (err == ERROR_INVALID_PARAMETER)
3091
3613
  errno = ECHILD;
@@ -3099,8 +3621,12 @@ poll_child_status(struct ChildRecord *child, int *stat_loc)
3099
3621
  return -1;
3100
3622
  }
3101
3623
  if (exitcode != STILL_ACTIVE) {
3102
- /* If already died, return immediatly. */
3103
- rb_pid_t pid = child->pid;
3624
+ rb_pid_t pid;
3625
+ /* If already died, wait process's real termination. */
3626
+ if (rb_w32_wait_events_blocking(&child->hProcess, 1, INFINITE) != WAIT_OBJECT_0) {
3627
+ goto error_exit;
3628
+ }
3629
+ pid = child->pid;
3104
3630
  CloseChildHandle(child);
3105
3631
  if (stat_loc) *stat_loc = exitcode << 8;
3106
3632
  return pid;
@@ -3121,7 +3647,7 @@ waitpid(rb_pid_t pid, int *stat_loc, int options)
3121
3647
 
3122
3648
  if (pid == -1) {
3123
3649
  int count = 0;
3124
- DWORD ret;
3650
+ int ret;
3125
3651
  HANDLE events[MAXCHILDNUM];
3126
3652
 
3127
3653
  FOREACH_CHILD(child) {
@@ -3185,8 +3711,8 @@ filetime_to_timeval(const FILETIME* ft, struct timeval *tv)
3185
3711
  lt /= 10; /* to usec */
3186
3712
  lt -= (LONG_LONG)((1970-1601)*365.2425) * 24 * 60 * 60 * 1000 * 1000;
3187
3713
 
3188
- tv->tv_sec = lt / (1000 * 1000);
3189
- tv->tv_usec = lt % (1000 * 1000);
3714
+ tv->tv_sec = (long)(lt / (1000 * 1000));
3715
+ tv->tv_usec = (long)(lt % (1000 * 1000));
3190
3716
 
3191
3717
  return tv->tv_sec > 0 ? 0 : -1;
3192
3718
  }
@@ -3201,12 +3727,11 @@ gettimeofday(struct timeval *tv, struct timezone *tz)
3201
3727
 
3202
3728
  return 0;
3203
3729
  }
3204
-
3730
+ /*
3205
3731
  char *
3206
3732
  rb_w32_getcwd(char *buffer, int size)
3207
3733
  {
3208
3734
  char *p = buffer;
3209
- char *bp;
3210
3735
  int len;
3211
3736
  //RHO
3212
3737
  len = GetCurrentDirectoryA(0, NULL);
@@ -3227,9 +3752,10 @@ rb_w32_getcwd(char *buffer, int size)
3227
3752
  size = len;
3228
3753
  if (!p) {
3229
3754
  errno = ENOMEM;
3230
- return NULL;
3231
- }
3755
+ return NULL;
3756
+ }
3232
3757
  }
3758
+
3233
3759
  //RHO
3234
3760
  if (!GetCurrentDirectoryA(size, p)) {
3235
3761
  //RHO
@@ -3239,14 +3765,11 @@ rb_w32_getcwd(char *buffer, int size)
3239
3765
  return NULL;
3240
3766
  }
3241
3767
 
3242
- for (bp = p; *bp != '\0'; bp = CharNext(bp)) {
3243
- if (*bp == '\\') {
3244
- *bp = '/';
3245
- }
3246
- }
3768
+ translate_char(p, '\\', '/');
3247
3769
 
3248
3770
  return p;
3249
3771
  }
3772
+ */
3250
3773
 
3251
3774
  int
3252
3775
  chown(const char *path, int owner, int group)
@@ -3254,18 +3777,24 @@ chown(const char *path, int owner, int group)
3254
3777
  return 0;
3255
3778
  }
3256
3779
 
3780
+ int
3781
+ rb_w32_uchown(const char *path, int owner, int group)
3782
+ {
3783
+ return 0;
3784
+ }
3785
+
3257
3786
  int
3258
3787
  kill(int pid, int sig)
3259
3788
  {
3260
3789
  int ret = 0;
3261
3790
  DWORD err;
3262
3791
 
3263
- if (pid <= 0) {
3792
+ if (pid < 0 || pid == 0 && sig != SIGINT) {
3264
3793
  errno = EINVAL;
3265
3794
  return -1;
3266
3795
  }
3267
3796
 
3268
- if (IsWin95()) pid = -pid;
3797
+ (void)IfWin95(pid = -pid, 0);
3269
3798
  if ((unsigned int)pid == GetCurrentProcessId() &&
3270
3799
  (sig != 0 && sig != SIGKILL)) {
3271
3800
  if ((ret = raise(sig)) != 0) {
@@ -3338,32 +3867,32 @@ kill(int pid, int sig)
3338
3867
  return ret;
3339
3868
  }
3340
3869
 
3341
- int
3342
- link(const char *from, const char *to)
3870
+ static int
3871
+ wlink(const WCHAR *from, const WCHAR *to)
3343
3872
  {
3344
- static BOOL (WINAPI *pCreateHardLink)(LPCTSTR, LPCTSTR, LPSECURITY_ATTRIBUTES) = NULL;
3873
+ static BOOL (WINAPI *pCreateHardLinkW)(LPCWSTR, LPCWSTR, LPSECURITY_ATTRIBUTES) = NULL;
3345
3874
  static int myerrno = 0;
3346
3875
 
3347
- if (!pCreateHardLink && !myerrno) {
3876
+ if (!pCreateHardLinkW && !myerrno) {
3348
3877
  HANDLE hKernel;
3349
3878
 
3350
3879
  hKernel = GetModuleHandle("kernel32.dll");
3351
3880
  if (hKernel) {
3352
- pCreateHardLink = (BOOL (WINAPI *)(LPCTSTR, LPCTSTR, LPSECURITY_ATTRIBUTES))GetProcAddress(hKernel, "CreateHardLinkA");
3353
- if (!pCreateHardLink) {
3354
- rb_notimplement();
3881
+ pCreateHardLinkW = (BOOL (WINAPI *)(LPCWSTR, LPCWSTR, LPSECURITY_ATTRIBUTES))GetProcAddress(hKernel, "CreateHardLinkW");
3882
+ if (!pCreateHardLinkW) {
3883
+ myerrno = ENOSYS;
3355
3884
  }
3356
3885
  }
3357
3886
  else {
3358
3887
  myerrno = map_errno(GetLastError());
3359
3888
  }
3360
3889
  }
3361
- if (!pCreateHardLink) {
3890
+ if (!pCreateHardLinkW) {
3362
3891
  errno = myerrno;
3363
3892
  return -1;
3364
3893
  }
3365
3894
 
3366
- if (!pCreateHardLink(to, from, NULL)) {
3895
+ if (!pCreateHardLinkW(to, from, NULL)) {
3367
3896
  errno = map_errno(GetLastError());
3368
3897
  return -1;
3369
3898
  }
@@ -3371,6 +3900,44 @@ link(const char *from, const char *to)
3371
3900
  return 0;
3372
3901
  }
3373
3902
 
3903
+ int
3904
+ rb_w32_ulink(const char *from, const char *to)
3905
+ {
3906
+ WCHAR *wfrom;
3907
+ WCHAR *wto;
3908
+ int ret;
3909
+
3910
+ if (!(wfrom = utf8_to_wstr(from, NULL)))
3911
+ return -1;
3912
+ if (!(wto = utf8_to_wstr(to, NULL))) {
3913
+ free(wfrom);
3914
+ return -1;
3915
+ }
3916
+ ret = wlink(wfrom, wto);
3917
+ free(wto);
3918
+ free(wfrom);
3919
+ return ret;
3920
+ }
3921
+
3922
+ int
3923
+ link(const char *from, const char *to)
3924
+ {
3925
+ WCHAR *wfrom;
3926
+ WCHAR *wto;
3927
+ int ret;
3928
+
3929
+ if (!(wfrom = filecp_to_wstr(from, NULL)))
3930
+ return -1;
3931
+ if (!(wto = filecp_to_wstr(to, NULL))) {
3932
+ free(wfrom);
3933
+ return -1;
3934
+ }
3935
+ ret = wlink(wfrom, wto);
3936
+ free(wto);
3937
+ free(wfrom);
3938
+ return ret;
3939
+ }
3940
+
3374
3941
  int
3375
3942
  wait(int *status)
3376
3943
  {
@@ -3383,8 +3950,8 @@ rb_w32_getenv(const char *name)
3383
3950
  int len = strlen(name);
3384
3951
  char *env;
3385
3952
 
3386
- if (envarea)
3387
- FreeEnvironmentStrings(envarea);
3953
+ if (len == 0) return NULL;
3954
+ if (envarea) FreeEnvironmentStrings(envarea);
3388
3955
  envarea = GetEnvironmentStrings();
3389
3956
  if (!envarea) {
3390
3957
  map_errno(GetLastError());
@@ -3398,27 +3965,27 @@ rb_w32_getenv(const char *name)
3398
3965
  return NULL;
3399
3966
  }
3400
3967
 
3401
- #ifndef _WIN32_WCE
3402
- int
3403
- rb_w32_rename(const char *oldpath, const char *newpath)
3968
+ static int
3969
+ wrename(const WCHAR *oldpath, const WCHAR *newpath)
3404
3970
  {
3405
3971
  int res = 0;
3406
3972
  int oldatts;
3407
3973
  int newatts;
3408
3974
 
3409
- oldatts = GetFileAttributes(oldpath);
3410
- newatts = GetFileAttributes(newpath);
3975
+ oldatts = GetFileAttributesW(oldpath);
3976
+ newatts = GetFileAttributesW(newpath);
3411
3977
 
3412
3978
  if (oldatts == -1) {
3413
3979
  errno = map_errno(GetLastError());
3414
3980
  return -1;
3415
3981
  }
3416
3982
 
3983
+ #ifndef _WIN32_WCE
3417
3984
  RUBY_CRITICAL({
3418
3985
  if (newatts != -1 && newatts & FILE_ATTRIBUTE_READONLY)
3419
- SetFileAttributesA(newpath, newatts & ~ FILE_ATTRIBUTE_READONLY);
3986
+ SetFileAttributesW(newpath, newatts & ~ FILE_ATTRIBUTE_READONLY);
3420
3987
 
3421
- if (!MoveFile(oldpath, newpath))
3988
+ if (!MoveFileW(oldpath, newpath))
3422
3989
  res = -1;
3423
3990
 
3424
3991
  if (res) {
@@ -3426,13 +3993,14 @@ rb_w32_rename(const char *oldpath, const char *newpath)
3426
3993
  case ERROR_ALREADY_EXISTS:
3427
3994
  case ERROR_FILE_EXISTS:
3428
3995
  if (IsWinNT()) {
3429
- if (MoveFileEx(oldpath, newpath, MOVEFILE_REPLACE_EXISTING))
3996
+ if (MoveFileExW(oldpath, newpath, MOVEFILE_REPLACE_EXISTING))
3430
3997
  res = 0;
3431
- } else {
3998
+ } else
3999
+ {
3432
4000
  for (;;) {
3433
- if (!DeleteFile(newpath) && GetLastError() != ERROR_FILE_NOT_FOUND)
4001
+ if (!DeleteFileW(newpath) && GetLastError() != ERROR_FILE_NOT_FOUND)
3434
4002
  break;
3435
- else if (MoveFile(oldpath, newpath)) {
4003
+ else if (MoveFileW(oldpath, newpath)) {
3436
4004
  res = 0;
3437
4005
  break;
3438
4006
  }
@@ -3444,35 +4012,101 @@ rb_w32_rename(const char *oldpath, const char *newpath)
3444
4012
  if (res)
3445
4013
  errno = map_errno(GetLastError());
3446
4014
  else
3447
- SetFileAttributes(newpath, oldatts);
4015
+ SetFileAttributesW(newpath, oldatts);
3448
4016
  });
4017
+ #else
4018
+ RUBY_CRITICAL({
4019
+ if (newatts != -1 && newatts & FILE_ATTRIBUTE_READONLY)
4020
+ SetFileAttributesW(newpath, newatts & ~ FILE_ATTRIBUTE_READONLY);
3449
4021
 
4022
+ if (!MoveFileW(oldpath, newpath))
4023
+ res = -1;
4024
+
4025
+ if (res) {
4026
+ switch (GetLastError()) {
4027
+ case ERROR_ALREADY_EXISTS:
4028
+ case ERROR_FILE_EXISTS:
4029
+ {
4030
+ for (;;) {
4031
+ if (!DeleteFileW(newpath) && GetLastError() != ERROR_FILE_NOT_FOUND)
4032
+ break;
4033
+ else if (MoveFileW(oldpath, newpath)) {
4034
+ res = 0;
4035
+ break;
4036
+ }
4037
+ }
4038
+ }
4039
+ }
4040
+ }
4041
+
4042
+ if (res)
4043
+ errno = map_errno(GetLastError());
4044
+ else
4045
+ SetFileAttributesW(newpath, oldatts);
4046
+ });
4047
+
4048
+ #endif
3450
4049
  return res;
3451
4050
  }
3452
- #endif //!_WIN32_WCE
4051
+
4052
+ int rb_w32_urename(const char *from, const char *to)
4053
+ {
4054
+ WCHAR *wfrom;
4055
+ WCHAR *wto;
4056
+ int ret = -1;
4057
+
4058
+ if (!(wfrom = utf8_to_wstr(from, NULL)))
4059
+ return -1;
4060
+ if (!(wto = utf8_to_wstr(to, NULL))) {
4061
+ free(wfrom);
4062
+ return -1;
4063
+ }
4064
+ ret = wrename(wfrom, wto);
4065
+ free(wto);
4066
+ free(wfrom);
4067
+ return ret;
4068
+ }
4069
+
4070
+ int rb_w32_rename(const char *from, const char *to)
4071
+ {
4072
+ WCHAR *wfrom;
4073
+ WCHAR *wto;
4074
+ int ret = -1;
4075
+
4076
+ if (!(wfrom = filecp_to_wstr(from, NULL)))
4077
+ return -1;
4078
+ if (!(wto = filecp_to_wstr(to, NULL))) {
4079
+ free(wfrom);
4080
+ return -1;
4081
+ }
4082
+ ret = wrename(wfrom, wto);
4083
+ free(wto);
4084
+ free(wfrom);
4085
+ return ret;
4086
+ }
3453
4087
 
3454
4088
  static int
3455
- isUNCRoot(const char *path)
4089
+ isUNCRoot(const WCHAR *path)
3456
4090
  {
3457
- if (path[0] == '\\' && path[1] == '\\') {
3458
- const char *p;
3459
- for (p = path + 2; *p; p = CharNext(p)) {
3460
- if (*p == '\\')
4091
+ if (path[0] == L'\\' && path[1] == L'\\') {
4092
+ const WCHAR *p;
4093
+ for (p = path + 2; *p; p++) {
4094
+ if (*p == L'\\')
3461
4095
  break;
3462
4096
  }
3463
4097
  if (p[0] && p[1]) {
3464
- for (p++; *p; p = CharNext(p)) {
3465
- if (*p == '\\')
4098
+ for (p++; *p; p++) {
4099
+ if (*p == L'\\')
3466
4100
  break;
3467
4101
  }
3468
- if (!p[0] || !p[1] || (p[1] == '.' && !p[2]))
4102
+ if (!p[0] || !p[1] || (p[1] == L'.' && !p[2]))
3469
4103
  return 1;
3470
4104
  }
3471
4105
  }
3472
4106
  return 0;
3473
4107
  }
3474
4108
 
3475
- #define COPY_STAT(src, dest) do { \
4109
+ #define COPY_STAT(src, dest, size_cast) do { \
3476
4110
  (dest).st_dev = (src).st_dev; \
3477
4111
  (dest).st_ino = (src).st_ino; \
3478
4112
  (dest).st_mode = (src).st_mode; \
@@ -3480,7 +4114,7 @@ isUNCRoot(const char *path)
3480
4114
  (dest).st_uid = (src).st_uid; \
3481
4115
  (dest).st_gid = (src).st_gid; \
3482
4116
  (dest).st_rdev = (src).st_rdev; \
3483
- (dest).st_size = (src).st_size; \
4117
+ (dest).st_size = size_cast(src).st_size; \
3484
4118
  (dest).st_atime = (src).st_atime; \
3485
4119
  (dest).st_mtime = (src).st_mtime; \
3486
4120
  (dest).st_ctime = (src).st_ctime; \
@@ -3512,7 +4146,7 @@ rb_w32_fstati64(int fd, struct stati64 *st)
3512
4146
 
3513
4147
  if (ret) return ret;
3514
4148
  tmp.st_mode &= ~(S_IWGRP | S_IWOTH);
3515
- COPY_STAT(tmp, *st);
4149
+ COPY_STAT(tmp, *st, +);
3516
4150
  if (GetFileInformationByHandle((HANDLE)_get_osfhandle(fd), &info)) {
3517
4151
  if (!(info.dwFileAttributes & FILE_ATTRIBUTE_READONLY)) {
3518
4152
  st->st_mode |= S_IWUSR;
@@ -3535,7 +4169,7 @@ filetime_to_unixtime(const FILETIME *ft)
3535
4169
  }
3536
4170
 
3537
4171
  static unsigned
3538
- fileattr_to_unixmode(DWORD attr, const char *path)
4172
+ fileattr_to_unixmode(DWORD attr, const WCHAR *path)
3539
4173
  {
3540
4174
  unsigned mode = 0;
3541
4175
 
@@ -3554,14 +4188,14 @@ fileattr_to_unixmode(DWORD attr, const char *path)
3554
4188
  }
3555
4189
 
3556
4190
  if (path && (mode & S_IFREG)) {
3557
- const char *end = path + strlen(path);
4191
+ const WCHAR *end = path + lstrlenW(path);
3558
4192
  while (path < end) {
3559
- end = CharPrev(path, end);
3560
- if (*end == '.') {
3561
- if ((strcmpi(end, ".bat") == 0) ||
3562
- (strcmpi(end, ".cmd") == 0) ||
3563
- (strcmpi(end, ".com") == 0) ||
3564
- (strcmpi(end, ".exe") == 0)) {
4193
+ end = CharPrevW(path, end);
4194
+ if (*end == L'.') {
4195
+ if ((_wcsicmp(end, L".bat") == 0) ||
4196
+ (_wcsicmp(end, L".cmd") == 0) ||
4197
+ (_wcsicmp(end, L".com") == 0) ||
4198
+ (_wcsicmp(end, L".exe") == 0)) {
3565
4199
  mode |= S_IEXEC;
3566
4200
  }
3567
4201
  break;
@@ -3576,31 +4210,30 @@ fileattr_to_unixmode(DWORD attr, const char *path)
3576
4210
  }
3577
4211
 
3578
4212
  static int
3579
- check_valid_dir(const char *path)
4213
+ check_valid_dir(const WCHAR *path)
3580
4214
  {
3581
- WIN32_FIND_DATA fd;
4215
+ WIN32_FIND_DATAW fd;
3582
4216
  HANDLE fh = open_dir_handle(path, &fd);
3583
4217
  if (fh == INVALID_HANDLE_VALUE)
3584
4218
  return -1;
3585
- if (fh)
3586
- FindClose(fh);
4219
+ FindClose(fh);
3587
4220
  return 0;
3588
4221
  }
3589
4222
 
3590
4223
  static int
3591
- winnt_stat(const char *path, struct stati64 *st)
4224
+ winnt_stat(const WCHAR *path, struct stati64 *st)
3592
4225
  {
3593
4226
  HANDLE h;
3594
- WIN32_FIND_DATA wfd;
4227
+ WIN32_FIND_DATAW wfd;
3595
4228
 
3596
4229
  memset(st, 0, sizeof(*st));
3597
4230
  st->st_nlink = 1;
3598
4231
 
3599
- if (_mbspbrk(path, "?*")) {
4232
+ if (wcspbrk(path, L"?*")) {
3600
4233
  errno = ENOENT;
3601
4234
  return -1;
3602
4235
  }
3603
- h = FindFirstFile(path, &wfd);
4236
+ h = FindFirstFileW(path, &wfd);
3604
4237
  if (h != INVALID_HANDLE_VALUE) {
3605
4238
  FindClose(h);
3606
4239
  st->st_mode = fileattr_to_unixmode(wfd.dwFileAttributes, path);
@@ -3612,8 +4245,8 @@ winnt_stat(const char *path, struct stati64 *st)
3612
4245
  else {
3613
4246
  // If runtime stat(2) is called for network shares, it fails on WinNT.
3614
4247
  // Because GetDriveType returns 1 for network shares. (Win98 returns 4)
3615
- DWORD attr = GetFileAttributes(path);
3616
- if (attr == -1) {
4248
+ DWORD attr = GetFileAttributesW(path);
4249
+ if (attr == (DWORD)-1L) {
3617
4250
  errno = map_errno(GetLastError());
3618
4251
  return -1;
3619
4252
  }
@@ -3623,17 +4256,17 @@ winnt_stat(const char *path, struct stati64 *st)
3623
4256
  st->st_mode = fileattr_to_unixmode(attr, path);
3624
4257
  }
3625
4258
 
3626
- st->st_dev = st->st_rdev = (isalpha(path[0]) && path[1] == ':') ?
3627
- toupper(path[0]) - 'A' : _getdrive() - 1;
4259
+ st->st_dev = st->st_rdev = (iswalpha(path[0]) && path[1] == L':') ?
4260
+ towupper(path[0]) - L'A' : _getdrive() - 1;
3628
4261
 
3629
4262
  return 0;
3630
4263
  }
3631
4264
 
3632
4265
  #ifdef WIN95
3633
4266
  static int
3634
- win95_stat(const char *path, struct stati64 *st)
4267
+ win95_stat(const WCHAR *path, struct stati64 *st)
3635
4268
  {
3636
- int ret = stati64(path, st);
4269
+ int ret = _wstati64(path, st);
3637
4270
  if (ret) return ret;
3638
4271
  if (st->st_mode & S_IFDIR) {
3639
4272
  return check_valid_dir(path);
@@ -3650,15 +4283,15 @@ rb_w32_stat(const char *path, struct stat *st)
3650
4283
  struct stati64 tmp;
3651
4284
 
3652
4285
  if (rb_w32_stati64(path, &tmp)) return -1;
3653
- COPY_STAT(tmp, *st);
4286
+ COPY_STAT(tmp, *st, (_off_t));
3654
4287
  return 0;
3655
4288
  }
3656
4289
 
3657
- int
3658
- rb_w32_stati64(const char *path, struct stati64 *st)
4290
+ static int
4291
+ wstati64(const WCHAR *path, struct stati64 *st)
3659
4292
  {
3660
- const char *p;
3661
- char *buf1, *s, *end;
4293
+ const WCHAR *p;
4294
+ WCHAR *buf1, *s, *end;
3662
4295
  int len, size;
3663
4296
  int ret;
3664
4297
 
@@ -3666,30 +4299,30 @@ rb_w32_stati64(const char *path, struct stati64 *st)
3666
4299
  errno = EFAULT;
3667
4300
  return -1;
3668
4301
  }
3669
- size = strlen(path) + 2;
3670
- buf1 = ALLOCA_N(char, size);
4302
+ size = lstrlenW(path) + 2;
4303
+ buf1 = ALLOCA_N(WCHAR, size);
3671
4304
  for (p = path, s = buf1; *p; p++, s++) {
3672
- if (*p == '/')
3673
- *s = '\\';
4305
+ if (*p == L'/')
4306
+ *s = L'\\';
3674
4307
  else
3675
4308
  *s = *p;
3676
4309
  }
3677
4310
  *s = '\0';
3678
4311
  len = s - buf1;
3679
- if (!len || '\"' == *(--s)) {
4312
+ if (!len || L'\"' == *(--s)) {
3680
4313
  errno = ENOENT;
3681
4314
  return -1;
3682
4315
  }
3683
- end = CharPrev(buf1, buf1 + len);
4316
+ end = buf1 + len - 1;
3684
4317
 
3685
4318
  if (isUNCRoot(buf1)) {
3686
- if (*end == '.')
3687
- *end = '\0';
3688
- else if (*end != '\\')
3689
- strlcat(buf1, "\\", size);
4319
+ if (*end == L'.')
4320
+ *end = L'\0';
4321
+ else if (*end != L'\\')
4322
+ lstrcatW(buf1, L"\\");
3690
4323
  }
3691
- else if (*end == '\\' || (buf1 + 1 == end && *end == ':'))
3692
- strlcat(buf1, ".", size);
4324
+ else if (*end == L'\\' || (buf1 + 1 == end && *end == L':'))
4325
+ lstrcatW(buf1, L".");
3693
4326
 
3694
4327
  ret = IsWinNT() ? winnt_stat(buf1, st) : win95_stat(buf1, st);
3695
4328
  if (ret == 0) {
@@ -3698,6 +4331,60 @@ rb_w32_stati64(const char *path, struct stati64 *st)
3698
4331
  return ret;
3699
4332
  }
3700
4333
 
4334
+ int
4335
+ rb_w32_ustati64(const char *path, struct stati64 *st)
4336
+ {
4337
+ WCHAR *wpath;
4338
+ int ret;
4339
+
4340
+ if (!(wpath = utf8_to_wstr(path, NULL)))
4341
+ return -1;
4342
+ ret = wstati64(wpath, st);
4343
+ free(wpath);
4344
+ return ret;
4345
+ }
4346
+
4347
+ int
4348
+ rb_w32_stati64(const char *path, struct stati64 *st)
4349
+ {
4350
+ WCHAR *wpath;
4351
+ int ret;
4352
+
4353
+ if (!(wpath = filecp_to_wstr(path, NULL)))
4354
+ return -1;
4355
+ ret = wstati64(wpath, st);
4356
+ free(wpath);
4357
+ return ret;
4358
+ }
4359
+
4360
+ int
4361
+ rb_w32_access(const char *path, int mode)
4362
+ {
4363
+ struct stati64 stat;
4364
+ if (rb_w32_stati64(path, &stat) != 0)
4365
+ return -1;
4366
+ mode <<= 6;
4367
+ if ((stat.st_mode & mode) != mode) {
4368
+ errno = EACCES;
4369
+ return -1;
4370
+ }
4371
+ return 0;
4372
+ }
4373
+
4374
+ int
4375
+ rb_w32_uaccess(const char *path, int mode)
4376
+ {
4377
+ struct stati64 stat;
4378
+ if (rb_w32_ustati64(path, &stat) != 0)
4379
+ return -1;
4380
+ mode <<= 6;
4381
+ if ((stat.st_mode & mode) != mode) {
4382
+ errno = EACCES;
4383
+ return -1;
4384
+ }
4385
+ return 0;
4386
+ }
4387
+
3701
4388
  static int
3702
4389
  rb_chsize(HANDLE h, off_t size)
3703
4390
  {
@@ -3715,7 +4402,7 @@ rb_chsize(HANDLE h, off_t size)
3715
4402
  end = ((off_t)uend << 32) | (unsigned long)lend;
3716
4403
  usize = (long)(size >> 32);
3717
4404
  lsize = (long)size;
3718
- if (SetFilePointer(h, lsize, &usize, SEEK_SET) == -1L &&
4405
+ if (SetFilePointer(h, lsize, &usize, SEEK_SET) == (DWORD)-1L &&
3719
4406
  (e = GetLastError())) {
3720
4407
  errno = map_errno(e);
3721
4408
  }
@@ -3730,10 +4417,11 @@ rb_chsize(HANDLE h, off_t size)
3730
4417
  }
3731
4418
 
3732
4419
  int
3733
- truncate(const char *path, off_t length)
4420
+ rb_w32_truncate(const char *path, off_t length)
3734
4421
  {
3735
4422
  HANDLE h;
3736
4423
  int ret;
4424
+ #ifdef WIN95
3737
4425
  if (IsWin95()) {
3738
4426
  int fd = open(path, O_WRONLY), e = 0;
3739
4427
  if (fd == -1) return -1;
@@ -3743,6 +4431,7 @@ truncate(const char *path, off_t length)
3743
4431
  if (ret == -1) errno = e;
3744
4432
  return ret;
3745
4433
  }
4434
+ #endif
3746
4435
  h = CreateFile(path, GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
3747
4436
  if (h == INVALID_HANDLE_VALUE) {
3748
4437
  errno = map_errno(GetLastError());
@@ -3754,19 +4443,21 @@ truncate(const char *path, off_t length)
3754
4443
  }
3755
4444
 
3756
4445
  int
3757
- ftruncate(int fd, off_t length)
4446
+ rb_w32_ftruncate(int fd, off_t length)
3758
4447
  {
3759
- long h;
4448
+ HANDLE h;
3760
4449
 
4450
+ #ifdef WIN95
3761
4451
  if (IsWin95()) {
3762
4452
  return chsize(fd, (unsigned long)length);
3763
4453
  }
3764
- h = _get_osfhandle(fd);
3765
- if (h == -1) return -1;
3766
- return rb_chsize((HANDLE)h, length);
4454
+ #endif
4455
+ h = (HANDLE)_get_osfhandle(fd);
4456
+ if (h == (HANDLE)-1) return -1;
4457
+ return rb_chsize(h, length);
3767
4458
  }
3768
4459
 
3769
- #if defined( __BORLANDC__) || defined(_WIN32_WCE)
4460
+ #if defined __BORLANDC__ || defined(_WIN32_WCE)
3770
4461
  off_t
3771
4462
  _filelengthi64(int fd)
3772
4463
  {
@@ -3825,7 +4516,7 @@ fseeko(FILE *stream, off_t offset, int whence)
3825
4516
  }
3826
4517
 
3827
4518
  off_t
3828
- ftello(FILE *stream)
4519
+ rb_w32_ftello(FILE *stream)
3829
4520
  {
3830
4521
  off_t pos;
3831
4522
  if (fgetpos(stream, (fpos_t *)&pos)) return (off_t)-1;
@@ -3842,11 +4533,8 @@ filetime_to_clock(FILETIME *ft)
3842
4533
  return (long) qw;
3843
4534
  }
3844
4535
 
3845
- #ifdef RUBY_EXPORT
3846
- int rb_w32_times(struct tms *tmbuf)
3847
- #else
3848
- int times(struct tms *tmbuf)
3849
- #endif
4536
+ int
4537
+ rb_w32_times(struct tms *tmbuf)
3850
4538
  {
3851
4539
  FILETIME create, exit, kernel, user;
3852
4540
 
@@ -4060,25 +4748,21 @@ rb_w32_free_environ(char **env)
4060
4748
  }
4061
4749
 
4062
4750
  #ifndef _WIN32_WCE
4063
- #undef getpid
4064
4751
  rb_pid_t
4065
4752
  rb_w32_getpid(void)
4066
4753
  {
4067
4754
  rb_pid_t pid;
4068
4755
 
4069
- pid = getpid();
4756
+ pid = GetCurrentProcessId();
4070
4757
 
4071
- if (IsWin95()) pid = -pid;
4758
+ (void)IfWin95(pid = -pid, 0);
4072
4759
 
4073
4760
  return pid;
4074
4761
  }
4075
4762
 
4076
- #ifdef RUBY_EXPORT
4077
- rb_pid_t rb_w32_getppid(void)
4078
- #else
4079
- rb_pid_t getppid(void)
4080
- #endif
4081
4763
 
4764
+ rb_pid_t
4765
+ rb_w32_getppid(void)
4082
4766
  {
4083
4767
  static long (WINAPI *pNtQueryInformationProcess)(HANDLE, int, void *, ULONG, ULONG *) = NULL;
4084
4768
  rb_pid_t ppid = 0;
@@ -4109,9 +4793,50 @@ rb_pid_t getppid(void)
4109
4793
 
4110
4794
  return ppid;
4111
4795
  }
4796
+ #endif
4797
+ int
4798
+ rb_w32_uopen(const char *file, int oflag, ...)
4799
+ {
4800
+ WCHAR *wfile;
4801
+ int ret;
4802
+ int pmode;
4112
4803
 
4804
+ va_list arg;
4805
+ va_start(arg, oflag);
4806
+ pmode = va_arg(arg, int);
4807
+ va_end(arg);
4808
+
4809
+ if (!(wfile = utf8_to_wstr(file, NULL)))
4810
+ return -1;
4811
+ ret = rb_w32_wopen(wfile, oflag, pmode);
4812
+ free(wfile);
4813
+ return ret;
4814
+ }
4815
+ #ifndef _WIN32_WCE
4113
4816
  int
4114
4817
  rb_w32_open(const char *file, int oflag, ...)
4818
+ {
4819
+ WCHAR *wfile;
4820
+ int ret;
4821
+ int pmode;
4822
+
4823
+ va_list arg;
4824
+ va_start(arg, oflag);
4825
+ pmode = va_arg(arg, int);
4826
+ va_end(arg);
4827
+
4828
+ if ((oflag & O_TEXT) || !(oflag & O_BINARY))
4829
+ return _open(file, oflag, pmode);
4830
+
4831
+ if (!(wfile = filecp_to_wstr(file, NULL)))
4832
+ return -1;
4833
+ ret = rb_w32_wopen(wfile, oflag, pmode);
4834
+ free(wfile);
4835
+ return ret;
4836
+ }
4837
+
4838
+ int
4839
+ rb_w32_wopen(const WCHAR *file, int oflag, ...)
4115
4840
  {
4116
4841
  char flags = 0;
4117
4842
  int fd;
@@ -4121,13 +4846,13 @@ rb_w32_open(const char *file, int oflag, ...)
4121
4846
  SECURITY_ATTRIBUTES sec;
4122
4847
  HANDLE h;
4123
4848
 
4124
- if ((oflag & O_TEXT) || !(oflag & ~O_BINARY)) {
4849
+ if ((oflag & O_TEXT) || !(oflag & O_BINARY)) {
4125
4850
  va_list arg;
4126
4851
  int pmode;
4127
4852
  va_start(arg, oflag);
4128
4853
  pmode = va_arg(arg, int);
4129
4854
  va_end(arg);
4130
- return _open(file, oflag, pmode);
4855
+ return _wopen(file, oflag, pmode);
4131
4856
  }
4132
4857
 
4133
4858
  sec.nLength = sizeof(sec);
@@ -4228,7 +4953,7 @@ rb_w32_open(const char *file, int oflag, ...)
4228
4953
  /* allocate a C Runtime file handle */
4229
4954
  RUBY_CRITICAL({
4230
4955
  h = CreateFile("NUL", 0, 0, NULL, OPEN_ALWAYS, 0, NULL);
4231
- fd = _open_osfhandle((long)h, 0);
4956
+ fd = _open_osfhandle((intptr_t)h, 0);
4232
4957
  CloseHandle(h);
4233
4958
  });
4234
4959
  if (fd == -1) {
@@ -4237,14 +4962,11 @@ rb_w32_open(const char *file, int oflag, ...)
4237
4962
  }
4238
4963
  RUBY_CRITICAL({
4239
4964
  MTHREAD_ONLY(EnterCriticalSection(&(_pioinfo(fd)->lock)));
4240
- _set_osfhnd(fd, (long)INVALID_HANDLE_VALUE);
4965
+ _set_osfhnd(fd, (intptr_t)INVALID_HANDLE_VALUE);
4241
4966
  _set_osflags(fd, 0);
4242
4967
 
4243
- /* open with FILE_FLAG_OVERLAPPED if have CancelIo */
4244
- if (cancel_io)
4245
- attr |= FILE_FLAG_OVERLAPPED;
4246
- h = CreateFile(file, access, FILE_SHARE_READ | FILE_SHARE_WRITE, &sec,
4247
- create, attr, NULL);
4968
+ h = CreateFileW(file, access, FILE_SHARE_READ | FILE_SHARE_WRITE, &sec,
4969
+ create, attr, NULL);
4248
4970
  if (h == INVALID_HANDLE_VALUE) {
4249
4971
  errno = map_errno(GetLastError());
4250
4972
  MTHREAD_ONLY(LeaveCriticalSection(&_pioinfo(fd)->lock));
@@ -4269,7 +4991,7 @@ rb_w32_open(const char *file, int oflag, ...)
4269
4991
  if (!(flags & (FDEV | FPIPE)) && (oflag & O_APPEND))
4270
4992
  flags |= FAPPEND;
4271
4993
 
4272
- _set_osfhnd(fd, (long)h);
4994
+ _set_osfhnd(fd, (intptr_t)h);
4273
4995
  _osfile(fd) = flags | FOPEN;
4274
4996
 
4275
4997
  MTHREAD_ONLY(LeaveCriticalSection(&_pioinfo(fd)->lock));
@@ -4302,11 +5024,8 @@ rb_w32_fclose(FILE *fp)
4302
5024
  return 0;
4303
5025
  }
4304
5026
 
4305
- #ifdef RUBY_EXPORT
4306
- int rb_w32_pipe(int fds[2])
4307
- #else
4308
- int pipe(int fds[2])
4309
- #endif
5027
+ int
5028
+ rb_w32_pipe(int fds[2])
4310
5029
  {
4311
5030
  static DWORD serial = 0;
4312
5031
  char name[] = "\\\\.\\pipe\\ruby0000000000000000-0000000000000000";
@@ -4353,7 +5072,7 @@ int pipe(int fds[2])
4353
5072
  RUBY_CRITICAL(do {
4354
5073
  ret = 0;
4355
5074
  h = CreateFile("NUL", 0, 0, NULL, OPEN_ALWAYS, 0, NULL);
4356
- fdRead = _open_osfhandle((long)h, 0);
5075
+ fdRead = _open_osfhandle((intptr_t)h, 0);
4357
5076
  CloseHandle(h);
4358
5077
  if (fdRead == -1) {
4359
5078
  errno = EMFILE;
@@ -4364,7 +5083,7 @@ int pipe(int fds[2])
4364
5083
  }
4365
5084
 
4366
5085
  MTHREAD_ONLY(EnterCriticalSection(&(_pioinfo(fdRead)->lock)));
4367
- _set_osfhnd(fdRead, (long)hRead);
5086
+ _set_osfhnd(fdRead, (intptr_t)hRead);
4368
5087
  _set_osflags(fdRead, FOPEN | FPIPE | FNOINHERIT);
4369
5088
  MTHREAD_ONLY(LeaveCriticalSection(&(_pioinfo(fdRead)->lock)));
4370
5089
  } while (0));
@@ -4373,7 +5092,7 @@ int pipe(int fds[2])
4373
5092
 
4374
5093
  RUBY_CRITICAL(do {
4375
5094
  h = CreateFile("NUL", 0, 0, NULL, OPEN_ALWAYS, 0, NULL);
4376
- fdWrite = _open_osfhandle((long)h, 0);
5095
+ fdWrite = _open_osfhandle((intptr_t)h, 0);
4377
5096
  CloseHandle(h);
4378
5097
  if (fdWrite == -1) {
4379
5098
  errno = EMFILE;
@@ -4382,7 +5101,7 @@ int pipe(int fds[2])
4382
5101
  break;
4383
5102
  }
4384
5103
  MTHREAD_ONLY(EnterCriticalSection(&(_pioinfo(fdWrite)->lock)));
4385
- _set_osfhnd(fdWrite, (long)hWrite);
5104
+ _set_osfhnd(fdWrite, (intptr_t)hWrite);
4386
5105
  _set_osflags(fdWrite, FOPEN | FPIPE | FNOINHERIT);
4387
5106
  MTHREAD_ONLY(LeaveCriticalSection(&(_pioinfo(fdWrite)->lock)));
4388
5107
  } while (0));
@@ -4431,7 +5150,12 @@ rb_w32_read(int fd, void *buf, size_t size)
4431
5150
  DWORD read;
4432
5151
  DWORD wait;
4433
5152
  DWORD err;
5153
+ size_t len;
5154
+ size_t ret;
4434
5155
  OVERLAPPED ol, *pol = NULL;
5156
+ BOOL isconsole;
5157
+ BOOL islineinput;
5158
+ int start = 0;
4435
5159
 
4436
5160
  if (is_socket(sock))
4437
5161
  return rb_w32_recv(fd, buf, size, 0);
@@ -4448,10 +5172,32 @@ rb_w32_read(int fd, void *buf, size_t size)
4448
5172
  MTHREAD_ONLY(EnterCriticalSection(&(_pioinfo(fd)->lock)));
4449
5173
 
4450
5174
  if (!size || _osfile(fd) & FEOFLAG) {
5175
+ _set_osflags(fd, _osfile(fd) & ~FEOFLAG);
4451
5176
  MTHREAD_ONLY(LeaveCriticalSection(&_pioinfo(fd)->lock));
4452
5177
  return 0;
4453
5178
  }
4454
5179
 
5180
+ ret = 0;
5181
+ isconsole = is_console(_osfhnd(fd));
5182
+ if(isconsole){
5183
+ DWORD mode;
5184
+ GetConsoleMode((HANDLE)_osfhnd(fd),&mode);
5185
+ islineinput = (mode & ENABLE_LINE_INPUT) != 0;
5186
+ }
5187
+ retry:
5188
+ /* get rid of console reading bug */
5189
+ if (isconsole) {
5190
+ if (start)
5191
+ len = 1;
5192
+ else {
5193
+ len = 0;
5194
+ start = 1;
5195
+ }
5196
+ }
5197
+ else
5198
+ len = size;
5199
+ size -= len;
5200
+
4455
5201
  /* if have cancel_io, use Overlapped I/O */
4456
5202
  if (cancel_io) {
4457
5203
  memset(&ol, 0, sizeof(ol));
@@ -4480,9 +5226,10 @@ rb_w32_read(int fd, void *buf, size_t size)
4480
5226
  pol = &ol;
4481
5227
  }
4482
5228
 
4483
- if (!ReadFile((HANDLE)_osfhnd(fd), buf, size, &read, pol)) {
5229
+ if (!ReadFile((HANDLE)_osfhnd(fd), buf, len, &read, pol)) {
4484
5230
  err = GetLastError();
4485
5231
  if (err != ERROR_IO_PENDING) {
5232
+ if (pol) CloseHandle(ol.hEvent);
4486
5233
  if (err == ERROR_ACCESS_DENIED)
4487
5234
  errno = EBADF;
4488
5235
  else if (err == ERROR_BROKEN_PIPE || err == ERROR_HANDLE_EOF) {
@@ -4529,16 +5276,26 @@ rb_w32_read(int fd, void *buf, size_t size)
4529
5276
 
4530
5277
  if (!(_osfile(fd) & (FDEV | FPIPE))) {
4531
5278
  LONG high = ol.OffsetHigh;
4532
- LONG low = ol.Offset + read;
5279
+ DWORD low = ol.Offset + read;
4533
5280
  if (low < ol.Offset)
4534
5281
  ++high;
4535
5282
  SetFilePointer((HANDLE)_osfhnd(fd), low, &high, FILE_BEGIN);
4536
5283
  }
4537
5284
  }
4538
5285
 
5286
+ ret += read;
5287
+ if (read >= len) {
5288
+ buf = (char *)buf + read;
5289
+ if (!(isconsole && len == 1 && (!islineinput || *((char *)buf - 1) == '\n')) && size > 0)
5290
+ goto retry;
5291
+ }
5292
+ if (read == 0)
5293
+ _set_osflags(fd, _osfile(fd) | FEOFLAG);
5294
+
5295
+
4539
5296
  MTHREAD_ONLY(LeaveCriticalSection(&_pioinfo(fd)->lock));
4540
5297
 
4541
- return read;
5298
+ return ret;
4542
5299
  }
4543
5300
 
4544
5301
  #undef write
@@ -4549,6 +5306,8 @@ rb_w32_write(int fd, const void *buf, size_t size)
4549
5306
  DWORD written;
4550
5307
  DWORD wait;
4551
5308
  DWORD err;
5309
+ size_t len;
5310
+ size_t ret;
4552
5311
  OVERLAPPED ol, *pol = NULL;
4553
5312
 
4554
5313
  if (is_socket(sock))
@@ -4570,6 +5329,12 @@ rb_w32_write(int fd, const void *buf, size_t size)
4570
5329
  return 0;
4571
5330
  }
4572
5331
 
5332
+ ret = 0;
5333
+ retry:
5334
+ /* get rid of console writing bug */
5335
+ len = (_osfile(fd) & FDEV) ? min(32 * 1024, size) : size;
5336
+ size -= len;
5337
+
4573
5338
  /* if have cancel_io, use Overlapped I/O */
4574
5339
  if (cancel_io) {
4575
5340
  memset(&ol, 0, sizeof(ol));
@@ -4598,9 +5363,10 @@ rb_w32_write(int fd, const void *buf, size_t size)
4598
5363
  pol = &ol;
4599
5364
  }
4600
5365
 
4601
- if (!WriteFile((HANDLE)_osfhnd(fd), buf, size, &written, pol)) {
5366
+ if (!WriteFile((HANDLE)_osfhnd(fd), buf, len, &written, pol)) {
4602
5367
  err = GetLastError();
4603
5368
  if (err != ERROR_IO_PENDING) {
5369
+ if (pol) CloseHandle(ol.hEvent);
4604
5370
  if (err == ERROR_ACCESS_DENIED)
4605
5371
  errno = EBADF;
4606
5372
  else
@@ -4639,16 +5405,23 @@ rb_w32_write(int fd, const void *buf, size_t size)
4639
5405
 
4640
5406
  if (!(_osfile(fd) & (FDEV | FPIPE))) {
4641
5407
  LONG high = ol.OffsetHigh;
4642
- LONG low = ol.Offset + written;
5408
+ DWORD low = ol.Offset + written;
4643
5409
  if (low < ol.Offset)
4644
5410
  ++high;
4645
5411
  SetFilePointer((HANDLE)_osfhnd(fd), low, &high, FILE_BEGIN);
4646
5412
  }
4647
5413
  }
4648
5414
 
5415
+ ret += written;
5416
+ if (written == len) {
5417
+ buf = (const char *)buf + len;
5418
+ if (size > 0)
5419
+ goto retry;
5420
+ }
5421
+
4649
5422
  MTHREAD_ONLY(LeaveCriticalSection(&_pioinfo(fd)->lock));
4650
5423
 
4651
- return written;
5424
+ return ret;
4652
5425
  }
4653
5426
  #endif //WINCE
4654
5427
 
@@ -4676,15 +5449,15 @@ unixtime_to_filetime(time_t time, FILETIME *ft)
4676
5449
  return 0;
4677
5450
  }
4678
5451
 
4679
- int
4680
- rb_w32_utime(const char *path, const struct utimbuf *times)
5452
+ static int
5453
+ wutime(const WCHAR *path, const struct utimbuf *times)
4681
5454
  {
4682
5455
  HANDLE hFile;
4683
5456
  FILETIME atime, mtime;
4684
5457
  struct stati64 stat;
4685
5458
  int ret = 0;
4686
5459
 
4687
- if (rb_w32_stati64(path, &stat)) {
5460
+ if (wstati64(path, &stat)) {
4688
5461
  return -1;
4689
5462
  }
4690
5463
 
@@ -4702,11 +5475,11 @@ rb_w32_utime(const char *path, const struct utimbuf *times)
4702
5475
  }
4703
5476
 
4704
5477
  RUBY_CRITICAL({
4705
- const DWORD attr = GetFileAttributes(path);
5478
+ const DWORD attr = GetFileAttributesW(path);
4706
5479
  if (attr != (DWORD)-1 && (attr & FILE_ATTRIBUTE_READONLY))
4707
- SetFileAttributes(path, attr & ~FILE_ATTRIBUTE_READONLY);
4708
- hFile = CreateFile(path, GENERIC_WRITE, 0, 0, OPEN_EXISTING,
4709
- IsWin95() ? 0 : FILE_FLAG_BACKUP_SEMANTICS, 0);
5480
+ SetFileAttributesW(path, attr & ~FILE_ATTRIBUTE_READONLY);
5481
+ hFile = CreateFileW(path, GENERIC_WRITE, 0, 0, OPEN_EXISTING,
5482
+ IsWin95() ? 0 : FILE_FLAG_BACKUP_SEMANTICS, 0);
4710
5483
  if (hFile == INVALID_HANDLE_VALUE) {
4711
5484
  errno = map_errno(GetLastError());
4712
5485
  ret = -1;
@@ -4719,73 +5492,200 @@ rb_w32_utime(const char *path, const struct utimbuf *times)
4719
5492
  CloseHandle(hFile);
4720
5493
  }
4721
5494
  if (attr != (DWORD)-1 && (attr & FILE_ATTRIBUTE_READONLY))
4722
- SetFileAttributes(path, attr);
5495
+ SetFileAttributesW(path, attr);
4723
5496
  });
4724
5497
 
4725
5498
  return ret;
4726
5499
  }
4727
5500
 
4728
- #ifndef _WIN32_WCE
4729
5501
  int
4730
- rb_w32_mkdir(const char *path, int mode)
5502
+ rb_w32_uutime(const char *path, const struct utimbuf *times)
5503
+ {
5504
+ WCHAR *wpath;
5505
+ int ret;
5506
+
5507
+ if (!(wpath = utf8_to_wstr(path, NULL)))
5508
+ return -1;
5509
+ ret = wutime(wpath, times);
5510
+ free(wpath);
5511
+ return ret;
5512
+ }
5513
+
5514
+ int
5515
+ rb_w32_utime(const char *path, const struct utimbuf *times)
5516
+ {
5517
+ WCHAR *wpath;
5518
+ int ret;
5519
+
5520
+ if (!(wpath = filecp_to_wstr(path, NULL)))
5521
+ return -1;
5522
+ ret = wutime(wpath, times);
5523
+ free(wpath);
5524
+ return ret;
5525
+ }
5526
+
5527
+ int
5528
+ rb_w32_uchdir(const char *path)
5529
+ {
5530
+ WCHAR *wpath;
5531
+ int ret;
5532
+
5533
+ if (!(wpath = utf8_to_wstr(path, NULL)))
5534
+ return -1;
5535
+ ret = _wchdir(wpath);
5536
+ free(wpath);
5537
+ return ret;
5538
+ }
5539
+
5540
+ static int
5541
+ wmkdir(const WCHAR *wpath, int mode)
4731
5542
  {
4732
5543
  int ret = -1;
4733
- RUBY_CRITICAL(
4734
- if (CreateDirectory(path, NULL) == FALSE) {
5544
+
5545
+ RUBY_CRITICAL(do {
5546
+ if (CreateDirectoryW(wpath, NULL) == FALSE) {
4735
5547
  errno = map_errno(GetLastError());
4736
5548
  break;
4737
5549
  }
4738
- if (chmod(path, mode) == -1) {
4739
- RemoveDirectory(path);
5550
+ if (_wchmod(wpath, mode) == -1) {
5551
+ RemoveDirectoryW(wpath);
4740
5552
  break;
4741
5553
  }
4742
5554
  ret = 0;
4743
- );
5555
+ } while (0));
4744
5556
  return ret;
4745
5557
  }
4746
- #endif //#ifndef _WIN32_WCE
4747
5558
 
4748
5559
  int
4749
- rb_w32_rmdir(const char *path)
5560
+ rb_w32_umkdir(const char *path, int mode)
5561
+ {
5562
+ WCHAR *wpath;
5563
+ int ret;
5564
+
5565
+ if (!(wpath = utf8_to_wstr(path, NULL)))
5566
+ return -1;
5567
+ ret = wmkdir(wpath, mode);
5568
+ free(wpath);
5569
+ return ret;
5570
+ }
5571
+
5572
+ int
5573
+ rb_w32_mkdir(const char *path, int mode)
5574
+ {
5575
+ WCHAR *wpath;
5576
+ int ret;
5577
+
5578
+ if (!(wpath = filecp_to_wstr(path, NULL)))
5579
+ return -1;
5580
+ ret = wmkdir(wpath, mode);
5581
+ free(wpath);
5582
+ return ret;
5583
+ }
5584
+
5585
+ static int
5586
+ wrmdir(const WCHAR *wpath)
4750
5587
  {
4751
5588
  int ret = 0;
4752
5589
  RUBY_CRITICAL({
4753
- const DWORD attr = GetFileAttributes(path);
5590
+ const DWORD attr = GetFileAttributesW(wpath);
4754
5591
  if (attr != (DWORD)-1 && (attr & FILE_ATTRIBUTE_READONLY)) {
4755
- SetFileAttributes(path, attr & ~FILE_ATTRIBUTE_READONLY);
5592
+ SetFileAttributesW(wpath, attr & ~FILE_ATTRIBUTE_READONLY);
4756
5593
  }
4757
- if (RemoveDirectory(path) == FALSE) {
5594
+ if (RemoveDirectoryW(wpath) == FALSE) {
4758
5595
  errno = map_errno(GetLastError());
4759
5596
  ret = -1;
4760
5597
  if (attr != (DWORD)-1 && (attr & FILE_ATTRIBUTE_READONLY)) {
4761
- SetFileAttributes(path, attr);
5598
+ SetFileAttributesW(wpath, attr);
4762
5599
  }
4763
5600
  }
4764
5601
  });
4765
5602
  return ret;
4766
5603
  }
4767
5604
 
4768
- #ifndef _WIN32_WCE
4769
5605
  int
4770
- rb_w32_unlink(const char *path)
5606
+ rb_w32_rmdir(const char *path)
5607
+ {
5608
+ WCHAR *wpath;
5609
+ int ret;
5610
+
5611
+ if (!(wpath = filecp_to_wstr(path, NULL)))
5612
+ return -1;
5613
+ ret = wrmdir(wpath);
5614
+ free(wpath);
5615
+ return ret;
5616
+ }
5617
+
5618
+ int
5619
+ rb_w32_urmdir(const char *path)
5620
+ {
5621
+ WCHAR *wpath;
5622
+ int ret;
5623
+
5624
+ if (!(wpath = utf8_to_wstr(path, NULL)))
5625
+ return -1;
5626
+ ret = wrmdir(wpath);
5627
+ free(wpath);
5628
+ return ret;
5629
+ }
5630
+
5631
+ static int
5632
+ wunlink(const WCHAR *path)
4771
5633
  {
4772
5634
  int ret = 0;
4773
5635
  RUBY_CRITICAL({
4774
- const DWORD attr = GetFileAttributes(path);
5636
+ const DWORD attr = GetFileAttributesW(path);
4775
5637
  if (attr != (DWORD)-1 && (attr & FILE_ATTRIBUTE_READONLY)) {
4776
- SetFileAttributes(path, attr & ~FILE_ATTRIBUTE_READONLY);
5638
+ SetFileAttributesW(path, attr & ~FILE_ATTRIBUTE_READONLY);
4777
5639
  }
4778
- if (DeleteFile(path) == FALSE) {
5640
+ if (DeleteFileW(path) == FALSE) {
4779
5641
  errno = map_errno(GetLastError());
4780
5642
  ret = -1;
4781
5643
  if (attr != (DWORD)-1 && (attr & FILE_ATTRIBUTE_READONLY)) {
4782
- SetFileAttributes(path, attr);
5644
+ SetFileAttributesW(path, attr);
4783
5645
  }
4784
5646
  }
4785
5647
  });
4786
5648
  return ret;
4787
5649
  }
4788
- #endif //!_WIN32_WCE
5650
+
5651
+ int
5652
+ rb_w32_uunlink(const char *path)
5653
+ {
5654
+ WCHAR *wpath;
5655
+ int ret;
5656
+
5657
+ if (!(wpath = utf8_to_wstr(path, NULL)))
5658
+ return -1;
5659
+ ret = wunlink(wpath);
5660
+ free(wpath);
5661
+ return ret;
5662
+ }
5663
+
5664
+ int
5665
+ rb_w32_unlink(const char *path)
5666
+ {
5667
+ WCHAR *wpath;
5668
+ int ret;
5669
+
5670
+ if (!(wpath = filecp_to_wstr(path, NULL)))
5671
+ return -1;
5672
+ ret = wunlink(wpath);
5673
+ free(wpath);
5674
+ return ret;
5675
+ }
5676
+
5677
+ int
5678
+ rb_w32_uchmod(const char *path, int mode)
5679
+ {
5680
+ WCHAR *wpath;
5681
+ int ret;
5682
+
5683
+ if (!(wpath = filecp_to_wstr(path, NULL)))
5684
+ return -1;
5685
+ ret = _wchmod(wpath, mode);
5686
+ free(wpath);
5687
+ return ret;
5688
+ }
4789
5689
 
4790
5690
  #if !defined(__BORLANDC__)&& !defined(_WIN32_WCE)
4791
5691
  int
@@ -4854,3 +5754,26 @@ rb_w32_fsopen(const char *path, const char *mode, int shflags)
4854
5754
  return f;
4855
5755
  }
4856
5756
  #endif
5757
+
5758
+ #if defined(_MSC_VER) && RT_VER <= 60
5759
+ extern long _ftol(double);
5760
+ long
5761
+ _ftol2(double d)
5762
+ {
5763
+ return _ftol(d);
5764
+ }
5765
+ long
5766
+ _ftol2_sse(double d)
5767
+ {
5768
+ return _ftol(d);
5769
+ }
5770
+ #endif
5771
+
5772
+ #ifndef signbit
5773
+ int
5774
+ signbit(double x)
5775
+ {
5776
+ int *ip = (int *)(&x + 1) - 1;
5777
+ return *ip < 0;
5778
+ }
5779
+ #endif