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
@@ -160,8 +160,8 @@ void rho_ruby_stop_threadidle()
160
160
  g_th_stored = 0;
161
161
  }
162
162
  }
163
-
164
- #if !defined(OS_SYMBIAN) && (defined(RHO_SYMBIAN) || defined (RHODES_EMULATOR))
163
+
164
+ #if !defined(OS_SYMBIAN) && (defined(RHO_SYMBIAN))// || defined (RHODES_EMULATOR))
165
165
  int daylight;
166
166
  char *tzname[2];
167
167
  #endif
@@ -299,7 +299,7 @@ int rho_ruby_is_enabled_eval()
299
299
  #ifdef RHODES_EMULATOR
300
300
  return 1;
301
301
  #else
302
- return 0;
302
+ return 1;
303
303
  #endif
304
304
  }
305
305
 
@@ -640,7 +640,7 @@ rho_param *rho_param_fromvalue(VALUE v)
640
640
  for (i = 0; i < size; ++i) {
641
641
  VALUE key = rb_ary_entry(keys, i);
642
642
  VALUE value = rb_hash_aref(v, key);
643
- p->v.hash->name[i] = strdup(StringValuePtr(key));
643
+ p->v.hash->name[i] = strdup(RSTRING_PTR(rb_String(key)));
644
644
  p->v.hash->value[i] = rho_param_fromvalue(value);
645
645
  }
646
646
  return p;
@@ -750,7 +750,7 @@ VALUE rho_ruby_main_thread()
750
750
 
751
751
  VALUE rho_ruby_current_thread()
752
752
  {
753
- if ( ruby_native_thread_p() != Qtrue )
753
+ if ( ruby_native_thread_p() != 1 )
754
754
  return 0;
755
755
 
756
756
  return rb_thread_current();
@@ -886,3 +886,7 @@ rb_type_to_s(VALUE obj)
886
886
  }
887
887
  }
888
888
 
889
+ int rho_is_eval_disabled()
890
+ {
891
+ return !rho_conf_getBool("enable_eval");
892
+ }
@@ -417,7 +417,7 @@ VALUE require_compiled(VALUE fname, VALUE* result)
417
417
 
418
418
  if ( strcmp("strscan",szName1)==0 || strcmp("enumerator",szName1)==0 ||
419
419
  strcmp("stringio",szName1)==0 || strcmp("socket",szName1)==0 ||
420
- strcmp("digest.so",szName1)==0 ||
420
+ strcmp("digest.so",szName1)==0 ||
421
421
  strcmp("fcntl",szName1)==0 || strcmp("digest/md5",szName1)==0 ||
422
422
  strcmp("digest/sha1",szName1)==0 )
423
423
  return Qtrue;
@@ -38,6 +38,10 @@
38
38
  * - PF_UNSPEC case would be handled in getipnodebyname() with the AI_ALL flag.
39
39
  */
40
40
 
41
+ #ifndef EAI_NODATA
42
+ #define EAI_NODATA 7
43
+ #endif
44
+
41
45
  #include "ruby/config.h"
42
46
  #ifdef RUBY_EXTCONF_H
43
47
  #include RUBY_EXTCONF_H
@@ -66,8 +66,8 @@ static VALUE db_init(int argc, VALUE *argv, VALUE self)
66
66
  rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc);
67
67
 
68
68
  Data_Get_Struct(self, void *, ppDB);
69
- szDbName = STR2CSTR(argv[0]);
70
- szDbPartition = STR2CSTR(argv[1]);
69
+ szDbName = StringValuePtr(argv[0]);
70
+ szDbPartition = StringValuePtr(argv[1]);
71
71
 
72
72
  result = (int)rho_db_open(szDbName, szDbPartition, ppDB);//sqlite3_open(szDbName,ppDB);
73
73
  if ( result != SQLITE_OK )
@@ -3,9 +3,9 @@
3
3
  %{
4
4
  /* Put header files here or function declarations like below */
5
5
  #define dosync rho_sync_doSyncAllSources
6
- extern VALUE rho_sync_doSyncAllSources(int show_status_popup);
6
+ extern VALUE rho_sync_doSyncAllSources(int show_status_popup, const char * query_params);
7
7
  #define dosync_source rho_sync_doSyncSource
8
- extern VALUE rho_sync_doSyncSource(VALUE source_id,int show_status_popup);
8
+ extern VALUE rho_sync_doSyncSource(VALUE source_id,int show_status_popup, const char * query_params);
9
9
  #define dosearch rho_sync_doSearch
10
10
  extern VALUE rho_sync_doSearch(VALUE ar_sources, const char *from, const char *params, int sync_changes, int nProgressStep, const char* callback, const char* callback_params);
11
11
  extern VALUE rho_sync_login(const char *login, const char *password, const char* callback);
@@ -69,6 +69,9 @@
69
69
 
70
70
  extern VALUE rho_sync_is_syncing();
71
71
  #define is_syncing rho_sync_is_syncing
72
+
73
+ extern VALUE rho_sync_register_push();
74
+ #define register_push rho_sync_register_push
72
75
 
73
76
  #if !defined(bool)
74
77
  #define bool int
@@ -80,8 +83,13 @@
80
83
  %typemap(default) bool show_status_popup {
81
84
  $1 = 1;
82
85
  }
83
- extern VALUE dosync(bool show_status_popup);
84
- extern VALUE dosync_source(VALUE source_id, bool show_status_popup);
86
+
87
+ %typemap(default) const char * query_params {
88
+ $1 = 0;
89
+ }
90
+
91
+ extern VALUE dosync(bool show_status_popup, const char * query_params);
92
+ extern VALUE dosync_source(VALUE source_id, bool show_status_popup, const char * query_params);
85
93
  extern VALUE dosearch(VALUE ar_sources, const char *from, const char *params, bool sync_changes, int nProgressStep, const char* callback, const char* callback_params);
86
94
  extern VALUE login(const char *login, const char *password, const char* callback);
87
95
  extern int logged_in();
@@ -105,4 +113,5 @@ extern void enable_status_popup(bool b);
105
113
  extern void set_source_property(int nSrcID, const char* szPropName, const char* szPropValue);
106
114
  extern void set_ssl_verify_peer(bool b);
107
115
  extern void update_blob_attribs(const char* szPartition, int source_id);
108
- extern VALUE is_syncing();
116
+ extern VALUE is_syncing();
117
+ extern void register_push();
@@ -1816,9 +1816,9 @@ static VALUE mSyncEngine;
1816
1816
 
1817
1817
  /* Put header files here or function declarations like below */
1818
1818
  #define dosync rho_sync_doSyncAllSources
1819
- extern VALUE rho_sync_doSyncAllSources(int show_status_popup);
1819
+ extern VALUE rho_sync_doSyncAllSources(int show_status_popup, const char * query_params);
1820
1820
  #define dosync_source rho_sync_doSyncSource
1821
- extern VALUE rho_sync_doSyncSource(VALUE source_id,int show_status_popup);
1821
+ extern VALUE rho_sync_doSyncSource(VALUE source_id,int show_status_popup, const char * query_params);
1822
1822
  #define dosearch rho_sync_doSearch
1823
1823
  extern VALUE rho_sync_doSearch(VALUE ar_sources, const char *from, const char *params, int sync_changes, int nProgressStep, const char* callback, const char* callback_params);
1824
1824
  extern VALUE rho_sync_login(const char *login, const char *password, const char* callback);
@@ -1882,6 +1882,9 @@ static VALUE mSyncEngine;
1882
1882
 
1883
1883
  extern VALUE rho_sync_is_syncing();
1884
1884
  #define is_syncing rho_sync_is_syncing
1885
+
1886
+ extern VALUE rho_sync_register_push();
1887
+ #define register_push rho_sync_register_push
1885
1888
 
1886
1889
  #if !defined(bool)
1887
1890
  #define bool int
@@ -1907,7 +1910,7 @@ SWIG_ruby_failed(void)
1907
1910
  }
1908
1911
 
1909
1912
 
1910
- /*@SWIG:/usr/local/share/swig/2.0.4/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
1913
+ /*@SWIG:C:\Install\swigwin-2.0.4\Lib\ruby\rubyprimtypes.swg,19,%ruby_aux_method@*/
1911
1914
  SWIGINTERN VALUE SWIG_AUX_NUM2LONG(VALUE *args)
1912
1915
  {
1913
1916
  VALUE obj = args[0];
@@ -2038,15 +2041,22 @@ SWIG_From_int (int value)
2038
2041
  SWIGINTERN VALUE
2039
2042
  _wrap_dosync(int argc, VALUE *argv, VALUE self) {
2040
2043
  bool arg1 ;
2044
+ char *arg2 = (char *) 0 ;
2041
2045
  bool val1 ;
2042
2046
  int ecode1 = 0 ;
2047
+ int res2 ;
2048
+ char *buf2 = 0 ;
2049
+ int alloc2 = 0 ;
2043
2050
  VALUE result;
2044
2051
  VALUE vresult = Qnil;
2045
2052
 
2046
2053
  {
2047
2054
  arg1 = 1;
2048
2055
  }
2049
- if ((argc < 0) || (argc > 1)) {
2056
+ {
2057
+ arg2 = 0;
2058
+ }
2059
+ if ((argc < 0) || (argc > 2)) {
2050
2060
  rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
2051
2061
  }
2052
2062
  if (argc > 0) {
@@ -2056,10 +2066,19 @@ _wrap_dosync(int argc, VALUE *argv, VALUE self) {
2056
2066
  }
2057
2067
  arg1 = (bool)(val1);
2058
2068
  }
2059
- result = (VALUE)dosync(arg1);
2069
+ if (argc > 1) {
2070
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
2071
+ if (!SWIG_IsOK(res2)) {
2072
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","dosync", 2, argv[1] ));
2073
+ }
2074
+ arg2 = (char *)(buf2);
2075
+ }
2076
+ result = (VALUE)dosync(arg1,(char const *)arg2);
2060
2077
  vresult = result;
2078
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
2061
2079
  return vresult;
2062
2080
  fail:
2081
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
2063
2082
  return Qnil;
2064
2083
  }
2065
2084
 
@@ -2068,15 +2087,22 @@ SWIGINTERN VALUE
2068
2087
  _wrap_dosync_source(int argc, VALUE *argv, VALUE self) {
2069
2088
  VALUE arg1 = (VALUE) 0 ;
2070
2089
  bool arg2 ;
2090
+ char *arg3 = (char *) 0 ;
2071
2091
  bool val2 ;
2072
2092
  int ecode2 = 0 ;
2093
+ int res3 ;
2094
+ char *buf3 = 0 ;
2095
+ int alloc3 = 0 ;
2073
2096
  VALUE result;
2074
2097
  VALUE vresult = Qnil;
2075
2098
 
2076
2099
  {
2077
2100
  arg2 = 1;
2078
2101
  }
2079
- if ((argc < 1) || (argc > 2)) {
2102
+ {
2103
+ arg3 = 0;
2104
+ }
2105
+ if ((argc < 1) || (argc > 3)) {
2080
2106
  rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
2081
2107
  }
2082
2108
  arg1 = argv[0];
@@ -2087,10 +2113,19 @@ _wrap_dosync_source(int argc, VALUE *argv, VALUE self) {
2087
2113
  }
2088
2114
  arg2 = (bool)(val2);
2089
2115
  }
2090
- result = (VALUE)dosync_source(arg1,arg2);
2116
+ if (argc > 2) {
2117
+ res3 = SWIG_AsCharPtrAndSize(argv[2], &buf3, NULL, &alloc3);
2118
+ if (!SWIG_IsOK(res3)) {
2119
+ SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","dosync_source", 3, argv[2] ));
2120
+ }
2121
+ arg3 = (char *)(buf3);
2122
+ }
2123
+ result = (VALUE)dosync_source(arg1,arg2,(char const *)arg3);
2091
2124
  vresult = result;
2125
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
2092
2126
  return vresult;
2093
2127
  fail:
2128
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
2094
2129
  return Qnil;
2095
2130
  }
2096
2131
 
@@ -2754,6 +2789,18 @@ fail:
2754
2789
  }
2755
2790
 
2756
2791
 
2792
+ SWIGINTERN VALUE
2793
+ _wrap_register_push(int argc, VALUE *argv, VALUE self) {
2794
+ if ((argc < 0) || (argc > 0)) {
2795
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
2796
+ }
2797
+ register_push();
2798
+ return Qnil;
2799
+ fail:
2800
+ return Qnil;
2801
+ }
2802
+
2803
+
2757
2804
 
2758
2805
  /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
2759
2806
 
@@ -3053,5 +3100,6 @@ SWIGEXPORT void Init_SyncEngine(void) {
3053
3100
  rb_define_module_function(mSyncEngine, "set_ssl_verify_peer", _wrap_set_ssl_verify_peer, -1);
3054
3101
  rb_define_module_function(mSyncEngine, "update_blob_attribs", _wrap_update_blob_attribs, -1);
3055
3102
  rb_define_module_function(mSyncEngine, "is_syncing", _wrap_is_syncing, -1);
3103
+ rb_define_module_function(mSyncEngine, "register_push", _wrap_register_push, -1);
3056
3104
  }
3057
3105
 
@@ -60,6 +60,10 @@ extern void rho_sys_start_timer( int interval, const char *url, const char* para
60
60
  #define stop_timer rho_sys_stop_timer
61
61
  extern void rho_sys_stop_timer( const char *url );
62
62
 
63
+ #define set_application_icon_badge rho_sys_set_application_icon_badge
64
+ extern void rho_sys_set_application_icon_badge(int badge_number);
65
+
66
+
63
67
  #if !defined(bool)
64
68
  #define bool int
65
69
  #define true 1
@@ -83,8 +87,8 @@ extern void rho_sys_stop_timer( const char *url );
83
87
  val = rb_hash_aref($input, key);
84
88
  Check_Type(key, T_STRING);
85
89
  Check_Type(val, T_STRING);
86
- $2[i] = STR2CSTR(key);
87
- $3[i] = STR2CSTR(val);
90
+ $2[i] = StringValuePtr(key);
91
+ $3[i] = StringValuePtr(val);
88
92
  }
89
93
  }
90
94
  }
@@ -113,3 +117,4 @@ extern void app_install(const char *url);
113
117
  extern void app_uninstall(const char *appname);
114
118
  extern void start_timer( int interval, const char *url, const char* params);
115
119
  extern void stop_timer( const char *url);
120
+ extern void set_application_icon_badge(int badge_number);
@@ -1874,6 +1874,10 @@ extern void rho_sys_start_timer( int interval, const char *url, const char* para
1874
1874
  #define stop_timer rho_sys_stop_timer
1875
1875
  extern void rho_sys_stop_timer( const char *url );
1876
1876
 
1877
+ #define set_application_icon_badge rho_sys_set_application_icon_badge
1878
+ extern void rho_sys_set_application_icon_badge(int badge_number);
1879
+
1880
+
1877
1881
  #if !defined(bool)
1878
1882
  #define bool int
1879
1883
  #define true 1
@@ -2089,8 +2093,8 @@ _wrap_syscall(int argc, VALUE *argv, VALUE self) {
2089
2093
  val2 = rb_hash_aref(argv[1], key2);
2090
2094
  Check_Type(key2, T_STRING);
2091
2095
  Check_Type(val2, T_STRING);
2092
- arg3[i2] = STR2CSTR(key2);
2093
- arg4[i2] = STR2CSTR(val2);
2096
+ arg3[i2] = StringValuePtr(key2);
2097
+ arg4[i2] = StringValuePtr(val2);
2094
2098
  }
2095
2099
  }
2096
2100
  }
@@ -2553,6 +2557,27 @@ fail:
2553
2557
  }
2554
2558
 
2555
2559
 
2560
+ SWIGINTERN VALUE
2561
+ _wrap_set_application_icon_badge(int argc, VALUE *argv, VALUE self) {
2562
+ int arg1 ;
2563
+ int val1 ;
2564
+ int ecode1 = 0 ;
2565
+
2566
+ if ((argc < 1) || (argc > 1)) {
2567
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
2568
+ }
2569
+ ecode1 = SWIG_AsVal_int(argv[0], &val1);
2570
+ if (!SWIG_IsOK(ecode1)) {
2571
+ SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "int","set_application_icon_badge", 1, argv[0] ));
2572
+ }
2573
+ arg1 = (int)(val1);
2574
+ set_application_icon_badge(arg1);
2575
+ return Qnil;
2576
+ fail:
2577
+ return Qnil;
2578
+ }
2579
+
2580
+
2556
2581
 
2557
2582
  /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
2558
2583
 
@@ -2850,5 +2875,6 @@ SWIGEXPORT void Init_System(void) {
2850
2875
  rb_define_module_function(mSystem, "app_uninstall", _wrap_app_uninstall, -1);
2851
2876
  rb_define_module_function(mSystem, "start_timer", _wrap_start_timer, -1);
2852
2877
  rb_define_module_function(mSystem, "stop_timer", _wrap_stop_timer, -1);
2878
+ rb_define_module_function(mSystem, "set_application_icon_badge", _wrap_set_application_icon_badge, -1);
2853
2879
  }
2854
2880
 
@@ -56,9 +56,7 @@ int flock(int, int);
56
56
  #endif
57
57
 
58
58
  #include <sys/types.h>
59
- /* RHO BEGIN */
60
- #include <common/stat.h>
61
- /* RHO END */
59
+ #include <sys/stat.h>
62
60
 
63
61
  #ifdef HAVE_SYS_MKDEV_H
64
62
  #include <sys/mkdev.h>
@@ -72,20 +70,38 @@ int flock(int, int);
72
70
  #define lstat stat
73
71
  #endif
74
72
 
75
- //RHO
76
- static int
77
- file_load_ok(const char *path);
78
- //RHO
73
+ /* define system APIs */
74
+ #ifdef _WIN32__
75
+ #define STAT(p, s) rb_w32_ustati64(p, s)
76
+ #undef lstat
77
+ #define lstat(p, s) rb_w32_ustati64(p, s)
78
+ #undef access
79
+ #define access(p, m) rb_w32_uaccess(p, m)
80
+ #undef chmod
81
+ #define chmod(p, m) rb_w32_uchmod(p, m)
82
+ #undef chown
83
+ #define chown(p, o, g) rb_w32_uchown(p, o, g)
84
+ #undef utime
85
+ #define utime(p, t) rb_w32_uutime(p, t)
86
+ #undef link
87
+ #define link(f, t) rb_w32_ulink(f, t)
88
+ #undef unlink
89
+ #define unlink(p) rb_w32_uunlink(p)
90
+ #undef rename
91
+ #define rename(f, t) rb_w32_urename(f, t)
92
+ #else
93
+ #define STAT(p, s) stat(p, s)
94
+ #endif
79
95
 
80
- #ifdef __BEOS__ /* should not change ID if -1 */
96
+ #if defined(__BEOS__) || defined(__HAIKU__) /* should not change ID if -1 */
81
97
  static int
82
98
  be_chown(const char *path, uid_t owner, gid_t group)
83
99
  {
84
- if (owner == -1 || group == -1) {
100
+ if (owner == (uid_t)-1 || group == (gid_t)-1) {
85
101
  struct stat st;
86
- if (stat(path, &st) < 0) return -1;
87
- if (owner == -1) owner = st.st_uid;
88
- if (group == -1) group = st.st_gid;
102
+ if (STAT(path, &st) < 0) return -1;
103
+ if (owner == (uid_t)-1) owner = st.st_uid;
104
+ if (group == (gid_t)-1) group = st.st_gid;
89
105
  }
90
106
  return chown(path, owner, group);
91
107
  }
@@ -93,43 +109,63 @@ be_chown(const char *path, uid_t owner, gid_t group)
93
109
  static int
94
110
  be_fchown(int fd, uid_t owner, gid_t group)
95
111
  {
96
- if (owner == -1 || group == -1) {
112
+ if (owner == (uid_t)-1 || group == (gid_t)-1) {
97
113
  struct stat st;
98
114
  if (fstat(fd, &st) < 0) return -1;
99
- if (owner == -1) owner = st.st_uid;
100
- if (group == -1) group = st.st_gid;
115
+ if (owner == (uid_t)-1) owner = st.st_uid;
116
+ if (group == (gid_t)-1) group = st.st_gid;
101
117
  }
102
118
  return fchown(fd, owner, group);
103
119
  }
104
120
  #define fchown be_fchown
105
- #endif /* __BEOS__ */
121
+ #endif /* __BEOS__ || __HAIKU__ */
106
122
 
107
123
  VALUE rb_cFile;
108
124
  VALUE rb_mFileTest;
109
125
  VALUE rb_cStat;
110
126
 
127
+ #define insecure_obj_p(obj, level) (level >= 4 || (level > 0 && OBJ_TAINTED(obj)))
128
+
129
+ static VALUE
130
+ file_path_convert(VALUE name)
131
+ {
132
+ #ifndef _WIN32 /* non Windows == Unix */
133
+ rb_encoding *fname_encoding = rb_enc_from_index(ENCODING_GET(name));
134
+ rb_encoding *fs_encoding;
135
+ if (rb_default_internal_encoding() != NULL
136
+ && rb_usascii_encoding() != fname_encoding
137
+ && rb_ascii8bit_encoding() != fname_encoding
138
+ && (fs_encoding = rb_filesystem_encoding()) != fname_encoding) {
139
+ /* Don't call rb_filesystem_encoding() before US-ASCII and ASCII-8BIT */
140
+ name = rb_str_conv_enc(name, fname_encoding, fs_encoding);
141
+ }
142
+ #endif
143
+ return name;
144
+ }
145
+
111
146
  static VALUE
112
- rb_get_path_check(VALUE obj, int check)
147
+ rb_get_path_check(VALUE obj, int level)
113
148
  {
114
149
  VALUE tmp;
115
150
  ID to_path;
116
151
 
117
- if (check) rb_check_safe_obj(obj);
118
- tmp = rb_check_string_type(obj);
119
- if (!NIL_P(tmp)) goto exit;
152
+ if (insecure_obj_p(obj, level)) {
153
+ rb_insecure_operation();
154
+ }
120
155
 
121
156
  CONST_ID(to_path, "to_path");
122
- if (rb_respond_to(obj, to_path)) {
123
- tmp = rb_funcall(obj, to_path, 0, 0);
124
- }
125
- else {
157
+ tmp = rb_check_funcall(obj, to_path, 0, 0);
158
+ if (tmp == Qundef) {
126
159
  tmp = obj;
127
160
  }
128
- exit:
161
+ StringValue(tmp);
162
+
163
+ tmp = file_path_convert(tmp);
129
164
  StringValueCStr(tmp);
130
- if (check && obj != tmp) {
131
- rb_check_safe_obj(tmp);
165
+ if (obj != tmp && insecure_obj_p(tmp, level)) {
166
+ rb_insecure_operation();
132
167
  }
168
+ rb_enc_check(tmp, rb_enc_from_encoding(rb_usascii_encoding()));
133
169
  return rb_str_new4(tmp);
134
170
  }
135
171
 
@@ -142,7 +178,26 @@ rb_get_path_no_checksafe(VALUE obj)
142
178
  VALUE
143
179
  rb_get_path(VALUE obj)
144
180
  {
145
- return rb_get_path_check(obj, 1);
181
+ return rb_get_path_check(obj, rb_safe_level());
182
+ }
183
+
184
+ VALUE
185
+ rb_str_encode_ospath(VALUE path)
186
+ {
187
+ #ifdef _WIN32
188
+ rb_encoding *enc = rb_enc_get(path);
189
+ if (enc != rb_ascii8bit_encoding()) {
190
+ rb_encoding *utf8 = rb_utf8_encoding();
191
+ if (enc != utf8)
192
+ path = rb_str_encode(path, rb_enc_from_encoding(utf8), 0, Qnil);
193
+ }
194
+ else if (RSTRING_LEN(path) > 0) {
195
+ path = rb_str_dup(path);
196
+ rb_enc_associate(path, rb_filesystem_encoding());
197
+ path = rb_str_encode(path, rb_enc_from_encoding(rb_utf8_encoding()), 0, Qnil);
198
+ }
199
+ #endif
200
+ return path;
146
201
  }
147
202
 
148
203
  static long
@@ -154,6 +209,7 @@ apply2files(void (*func)(const char *, void *), VALUE vargs, void *arg)
154
209
  rb_secure(4);
155
210
  for (i=0; i<RARRAY_LEN(vargs); i++) {
156
211
  path = rb_get_path(RARRAY_PTR(vargs)[i]);
212
+ path = rb_str_encode_ospath(path);
157
213
  (*func)(StringValueCStr(path), arg);
158
214
  }
159
215
 
@@ -162,14 +218,14 @@ apply2files(void (*func)(const char *, void *), VALUE vargs, void *arg)
162
218
 
163
219
  /*
164
220
  * call-seq:
165
- * file.path -> filename
166
- *
221
+ * file.path -> filename
222
+ *
167
223
  * Returns the pathname used to create <i>file</i> as a string. Does
168
224
  * not normalize the name.
169
- *
225
+ *
170
226
  * File.new("testfile").path #=> "testfile"
171
227
  * File.new("/tmp/../tmp/xxx", "w").path #=> "/tmp/../tmp/xxx"
172
- *
228
+ *
173
229
  */
174
230
 
175
231
  static VALUE
@@ -183,6 +239,17 @@ rb_file_path(VALUE obj)
183
239
  return rb_obj_taint(rb_str_dup(fptr->pathv));
184
240
  }
185
241
 
242
+ static size_t
243
+ stat_memsize(const void *p)
244
+ {
245
+ return p ? sizeof(struct stat) : 0;
246
+ }
247
+
248
+ static const rb_data_type_t stat_data_type = {
249
+ "stat",
250
+ NULL, RUBY_TYPED_DEFAULT_FREE, stat_memsize,
251
+ };
252
+
186
253
  static VALUE
187
254
  stat_new_0(VALUE klass, struct stat *st)
188
255
  {
@@ -192,7 +259,7 @@ stat_new_0(VALUE klass, struct stat *st)
192
259
  nst = ALLOC(struct stat);
193
260
  *nst = *st;
194
261
  }
195
- return Data_Wrap_Struct(klass, NULL, -1, nst);
262
+ return TypedData_Wrap_Struct(klass, &stat_data_type, nst);
196
263
  }
197
264
 
198
265
  static VALUE
@@ -205,7 +272,7 @@ static struct stat*
205
272
  get_stat(VALUE self)
206
273
  {
207
274
  struct stat* st;
208
- Data_Get_Struct(self, struct stat, st);
275
+ TypedData_Get_Struct(self, struct stat, &stat_data_type, st);
209
276
  if (!st) rb_raise(rb_eTypeError, "uninitialized File::Stat");
210
277
  return st;
211
278
  }
@@ -214,11 +281,11 @@ static struct timespec stat_mtimespec(struct stat *st);
214
281
 
215
282
  /*
216
283
  * call-seq:
217
- * stat <=> other_stat => -1, 0, 1
218
- *
284
+ * stat <=> other_stat -> -1, 0, 1, nil
285
+ *
219
286
  * Compares <code>File::Stat</code> objects by comparing their
220
287
  * respective modification times.
221
- *
288
+ *
222
289
  * f1 = File.new("f1", "w")
223
290
  * sleep 1
224
291
  * f2 = File.new("f2", "w")
@@ -244,29 +311,39 @@ rb_stat_cmp(VALUE self, VALUE other)
244
311
 
245
312
  #define ST2UINT(val) ((val) & ~(~1UL << (sizeof(val) * CHAR_BIT - 1)))
246
313
 
314
+ #ifndef NUM2DEVT
315
+ # define NUM2DEVT(v) NUM2UINT(v)
316
+ #endif
317
+ #ifndef DEVT2NUM
318
+ # define DEVT2NUM(v) UINT2NUM(v)
319
+ #endif
320
+ #ifndef PRI_DEVT_PREFIX
321
+ # define PRI_DEVT_PREFIX ""
322
+ #endif
323
+
247
324
  /*
248
325
  * call-seq:
249
- * stat.dev => fixnum
250
- *
326
+ * stat.dev -> fixnum
327
+ *
251
328
  * Returns an integer representing the device on which <i>stat</i>
252
329
  * resides.
253
- *
330
+ *
254
331
  * File.stat("testfile").dev #=> 774
255
332
  */
256
333
 
257
334
  static VALUE
258
335
  rb_stat_dev(VALUE self)
259
336
  {
260
- return INT2NUM(get_stat(self)->st_dev);
337
+ return DEVT2NUM(get_stat(self)->st_dev);
261
338
  }
262
339
 
263
340
  /*
264
341
  * call-seq:
265
- * stat.dev_major => fixnum
266
- *
342
+ * stat.dev_major -> fixnum
343
+ *
267
344
  * Returns the major part of <code>File_Stat#dev</code> or
268
345
  * <code>nil</code>.
269
- *
346
+ *
270
347
  * File.stat("/dev/fd1").dev_major #=> 2
271
348
  * File.stat("/dev/tty").dev_major #=> 5
272
349
  */
@@ -274,10 +351,8 @@ rb_stat_dev(VALUE self)
274
351
  static VALUE
275
352
  rb_stat_dev_major(VALUE self)
276
353
  {
277
- /* On Android "major" is inline function rather than macro */
278
- #if defined(major) || defined(OS_ANDROID)
279
- long dev = get_stat(self)->st_dev;
280
- return ULONG2NUM(major(dev));
354
+ #if defined(major)
355
+ return INT2NUM(major(get_stat(self)->st_dev));
281
356
  #else
282
357
  return Qnil;
283
358
  #endif
@@ -285,11 +360,11 @@ rb_stat_dev_major(VALUE self)
285
360
 
286
361
  /*
287
362
  * call-seq:
288
- * stat.dev_minor => fixnum
289
- *
363
+ * stat.dev_minor -> fixnum
364
+ *
290
365
  * Returns the minor part of <code>File_Stat#dev</code> or
291
366
  * <code>nil</code>.
292
- *
367
+ *
293
368
  * File.stat("/dev/fd1").dev_minor #=> 1
294
369
  * File.stat("/dev/tty").dev_minor #=> 0
295
370
  */
@@ -297,10 +372,8 @@ rb_stat_dev_major(VALUE self)
297
372
  static VALUE
298
373
  rb_stat_dev_minor(VALUE self)
299
374
  {
300
- /* On Android "minor" is inline function rather than macro */
301
- #if defined(minor) || defined(OS_ANDROID)
302
- long dev = get_stat(self)->st_dev;
303
- return ULONG2NUM(minor(dev));
375
+ #if defined(minor)
376
+ return INT2NUM(minor(get_stat(self)->st_dev));
304
377
  #else
305
378
  return Qnil;
306
379
  #endif
@@ -308,18 +381,18 @@ rb_stat_dev_minor(VALUE self)
308
381
 
309
382
  /*
310
383
  * call-seq:
311
- * stat.ino => fixnum
312
- *
384
+ * stat.ino -> fixnum
385
+ *
313
386
  * Returns the inode number for <i>stat</i>.
314
- *
387
+ *
315
388
  * File.stat("testfile").ino #=> 1083669
316
- *
389
+ *
317
390
  */
318
391
 
319
392
  static VALUE
320
393
  rb_stat_ino(VALUE self)
321
394
  {
322
- #ifdef HUGE_ST_INO
395
+ #if SIZEOF_STRUCT_STAT_ST_INO > SIZEOF_LONG
323
396
  return ULL2NUM(get_stat(self)->st_ino);
324
397
  #else
325
398
  return ULONG2NUM(get_stat(self)->st_ino);
@@ -328,12 +401,12 @@ rb_stat_ino(VALUE self)
328
401
 
329
402
  /*
330
403
  * call-seq:
331
- * stat.mode => fixnum
332
- *
404
+ * stat.mode -> fixnum
405
+ *
333
406
  * Returns an integer representing the permission bits of
334
407
  * <i>stat</i>. The meaning of the bits is platform dependent; on
335
408
  * Unix systems, see <code>stat(2)</code>.
336
- *
409
+ *
337
410
  * File.chmod(0644, "testfile") #=> 1
338
411
  * s = File.stat("testfile")
339
412
  * sprintf("%o", s.mode) #=> "100644"
@@ -347,14 +420,14 @@ rb_stat_mode(VALUE self)
347
420
 
348
421
  /*
349
422
  * call-seq:
350
- * stat.nlink => fixnum
351
- *
423
+ * stat.nlink -> fixnum
424
+ *
352
425
  * Returns the number of hard links to <i>stat</i>.
353
- *
426
+ *
354
427
  * File.stat("testfile").nlink #=> 1
355
428
  * File.link("testfile", "testfile.bak") #=> 0
356
429
  * File.stat("testfile").nlink #=> 2
357
- *
430
+ *
358
431
  */
359
432
 
360
433
  static VALUE
@@ -365,12 +438,12 @@ rb_stat_nlink(VALUE self)
365
438
 
366
439
  /*
367
440
  * call-seq:
368
- * stat.uid => fixnum
369
- *
441
+ * stat.uid -> fixnum
442
+ *
370
443
  * Returns the numeric user id of the owner of <i>stat</i>.
371
- *
444
+ *
372
445
  * File.stat("testfile").uid #=> 501
373
- *
446
+ *
374
447
  */
375
448
 
376
449
  static VALUE
@@ -381,12 +454,12 @@ rb_stat_uid(VALUE self)
381
454
 
382
455
  /*
383
456
  * call-seq:
384
- * stat.gid => fixnum
385
- *
457
+ * stat.gid -> fixnum
458
+ *
386
459
  * Returns the numeric group id of the owner of <i>stat</i>.
387
- *
460
+ *
388
461
  * File.stat("testfile").gid #=> 500
389
- *
462
+ *
390
463
  */
391
464
 
392
465
  static VALUE
@@ -397,12 +470,12 @@ rb_stat_gid(VALUE self)
397
470
 
398
471
  /*
399
472
  * call-seq:
400
- * stat.rdev => fixnum or nil
401
- *
473
+ * stat.rdev -> fixnum or nil
474
+ *
402
475
  * Returns an integer representing the device type on which
403
476
  * <i>stat</i> resides. Returns <code>nil</code> if the operating
404
477
  * system doesn't support this feature.
405
- *
478
+ *
406
479
  * File.stat("/dev/fd1").rdev #=> 513
407
480
  * File.stat("/dev/tty").rdev #=> 1280
408
481
  */
@@ -419,11 +492,11 @@ rb_stat_rdev(VALUE self)
419
492
 
420
493
  /*
421
494
  * call-seq:
422
- * stat.rdev_major => fixnum
423
- *
495
+ * stat.rdev_major -> fixnum
496
+ *
424
497
  * Returns the major part of <code>File_Stat#rdev</code> or
425
498
  * <code>nil</code>.
426
- *
499
+ *
427
500
  * File.stat("/dev/fd1").rdev_major #=> 2
428
501
  * File.stat("/dev/tty").rdev_major #=> 5
429
502
  */
@@ -431,7 +504,7 @@ rb_stat_rdev(VALUE self)
431
504
  static VALUE
432
505
  rb_stat_rdev_major(VALUE self)
433
506
  {
434
- #if defined(HAVE_ST_RDEV) && (defined(major) || defined(OS_ANDROID))
507
+ #if defined(HAVE_ST_RDEV) && defined(major)
435
508
  long rdev = get_stat(self)->st_rdev;
436
509
  return ULONG2NUM(major(rdev));
437
510
  #else
@@ -441,11 +514,11 @@ rb_stat_rdev_major(VALUE self)
441
514
 
442
515
  /*
443
516
  * call-seq:
444
- * stat.rdev_minor => fixnum
445
- *
517
+ * stat.rdev_minor -> fixnum
518
+ *
446
519
  * Returns the minor part of <code>File_Stat#rdev</code> or
447
520
  * <code>nil</code>.
448
- *
521
+ *
449
522
  * File.stat("/dev/fd1").rdev_minor #=> 1
450
523
  * File.stat("/dev/tty").rdev_minor #=> 0
451
524
  */
@@ -453,7 +526,7 @@ rb_stat_rdev_major(VALUE self)
453
526
  static VALUE
454
527
  rb_stat_rdev_minor(VALUE self)
455
528
  {
456
- #if defined(HAVE_ST_RDEV) && (defined(minor) || defined(OS_ANDROID))
529
+ #if defined(HAVE_ST_RDEV) && defined(minor)
457
530
  long rdev = get_stat(self)->st_rdev;
458
531
  return ULONG2NUM(minor(rdev));
459
532
  #else
@@ -463,10 +536,10 @@ rb_stat_rdev_minor(VALUE self)
463
536
 
464
537
  /*
465
538
  * call-seq:
466
- * stat.size => fixnum
467
- *
539
+ * stat.size -> fixnum
540
+ *
468
541
  * Returns the size of <i>stat</i> in bytes.
469
- *
542
+ *
470
543
  * File.stat("testfile").size #=> 66
471
544
  */
472
545
 
@@ -478,13 +551,13 @@ rb_stat_size(VALUE self)
478
551
 
479
552
  /*
480
553
  * call-seq:
481
- * stat.blksize => integer or nil
482
- *
554
+ * stat.blksize -> integer or nil
555
+ *
483
556
  * Returns the native file system's block size. Will return <code>nil</code>
484
557
  * on platforms that don't support this information.
485
- *
558
+ *
486
559
  * File.stat("testfile").blksize #=> 4096
487
- *
560
+ *
488
561
  */
489
562
 
490
563
  static VALUE
@@ -499,20 +572,24 @@ rb_stat_blksize(VALUE self)
499
572
 
500
573
  /*
501
574
  * call-seq:
502
- * stat.blocks => integer or nil
503
- *
575
+ * stat.blocks -> integer or nil
576
+ *
504
577
  * Returns the number of native file system blocks allocated for this
505
- * file, or <code>nil</code> if the operating system doesn't
578
+ * file, or <code>nil</code> if the operating system doesn't
506
579
  * support this feature.
507
- *
580
+ *
508
581
  * File.stat("testfile").blocks #=> 2
509
582
  */
510
583
 
511
584
  static VALUE
512
585
  rb_stat_blocks(VALUE self)
513
586
  {
514
- #ifdef HAVE_ST_BLOCKS
587
+ #ifdef HAVE_STRUCT_STAT_ST_BLOCKS
588
+ # if SIZEOF_STRUCT_STAT_ST_BLOCKS > SIZEOF_LONG
589
+ return ULL2NUM(get_stat(self)->st_blocks);
590
+ # else
515
591
  return ULONG2NUM(get_stat(self)->st_blocks);
592
+ # endif
516
593
  #else
517
594
  return Qnil;
518
595
  #endif
@@ -528,11 +605,7 @@ stat_atimespec(struct stat *st)
528
605
  #elif defined(HAVE_STRUCT_STAT_ST_ATIMESPEC)
529
606
  ts.tv_nsec = st->st_atimespec.tv_nsec;
530
607
  #elif defined(HAVE_STRUCT_STAT_ST_ATIMENSEC)
531
- # if defined(OS_ANDROID)
532
- ts.tv_nsec = st->st_atime_nsec;
533
- # else
534
608
  ts.tv_nsec = st->st_atimensec;
535
- # endif
536
609
  #else
537
610
  ts.tv_nsec = 0;
538
611
  #endif
@@ -596,13 +669,13 @@ stat_ctime(struct stat *st)
596
669
 
597
670
  /*
598
671
  * call-seq:
599
- * stat.atime => time
600
- *
672
+ * stat.atime -> time
673
+ *
601
674
  * Returns the last access time for this file as an object of class
602
675
  * <code>Time</code>.
603
- *
676
+ *
604
677
  * File.stat("testfile").atime #=> Wed Dec 31 18:00:00 CST 1969
605
- *
678
+ *
606
679
  */
607
680
 
608
681
  static VALUE
@@ -613,12 +686,12 @@ rb_stat_atime(VALUE self)
613
686
 
614
687
  /*
615
688
  * call-seq:
616
- * stat.mtime -> aTime
617
- *
689
+ * stat.mtime -> aTime
690
+ *
618
691
  * Returns the modification time of <i>stat</i>.
619
- *
692
+ *
620
693
  * File.stat("testfile").mtime #=> Wed Apr 09 08:53:14 CDT 2003
621
- *
694
+ *
622
695
  */
623
696
 
624
697
  static VALUE
@@ -629,14 +702,14 @@ rb_stat_mtime(VALUE self)
629
702
 
630
703
  /*
631
704
  * call-seq:
632
- * stat.ctime -> aTime
633
- *
705
+ * stat.ctime -> aTime
706
+ *
634
707
  * Returns the change time for <i>stat</i> (that is, the time
635
708
  * directory information about the file was changed, not the file
636
709
  * itself).
637
- *
710
+ *
638
711
  * File.stat("testfile").ctime #=> Wed Apr 09 08:53:14 CDT 2003
639
- *
712
+ *
640
713
  */
641
714
 
642
715
  static VALUE
@@ -647,15 +720,15 @@ rb_stat_ctime(VALUE self)
647
720
 
648
721
  /*
649
722
  * call-seq:
650
- * stat.inspect => string
723
+ * stat.inspect -> string
651
724
  *
652
725
  * Produce a nicely formatted description of <i>stat</i>.
653
726
  *
654
727
  * File.stat("/etc/passwd").inspect
655
- * #=> "#<File::Stat dev=0xe000005, ino=1078078, mode=0100644,
656
- * # nlink=1, uid=0, gid=0, rdev=0x0, size=1374, blksize=4096,
657
- * # blocks=8, atime=Wed Dec 10 10:16:12 CST 2003,
658
- * # mtime=Fri Sep 12 15:41:41 CDT 2003,
728
+ * #=> "#<File::Stat dev=0xe000005, ino=1078078, mode=0100644,
729
+ * # nlink=1, uid=0, gid=0, rdev=0x0, size=1374, blksize=4096,
730
+ * # blocks=8, atime=Wed Dec 10 10:16:12 CST 2003,
731
+ * # mtime=Fri Sep 12 15:41:41 CDT 2003,
659
732
  * # ctime=Mon Oct 27 11:20:27 CST 2003>"
660
733
  */
661
734
 
@@ -663,7 +736,7 @@ static VALUE
663
736
  rb_stat_inspect(VALUE self)
664
737
  {
665
738
  VALUE str;
666
- int i;
739
+ size_t i;
667
740
  static const struct {
668
741
  const char *name;
669
742
  VALUE (*func)(VALUE);
@@ -684,7 +757,7 @@ rb_stat_inspect(VALUE self)
684
757
  };
685
758
 
686
759
  struct stat* st;
687
- Data_Get_Struct(self, struct stat, st);
760
+ TypedData_Get_Struct(self, struct stat, &stat_data_type, st);
688
761
  if (!st) {
689
762
  return rb_sprintf("#<%s: uninitialized>", rb_obj_classname(self));
690
763
  }
@@ -703,10 +776,10 @@ rb_stat_inspect(VALUE self)
703
776
  rb_str_buf_cat2(str, "=");
704
777
  v = (*member[i].func)(self);
705
778
  if (i == 2) { /* mode */
706
- rb_str_catf(str, "0%lo", NUM2ULONG(v));
779
+ rb_str_catf(str, "0%lo", (unsigned long)NUM2ULONG(v));
707
780
  }
708
781
  else if (i == 0 || i == 6) { /* dev/rdev */
709
- rb_str_catf(str, "0x%lx", NUM2ULONG(v));
782
+ rb_str_catf(str, "0x%"PRI_DEVT_PREFIX"x", NUM2DEVT(v));
710
783
  }
711
784
  else {
712
785
  rb_str_append(str, rb_inspect(v));
@@ -732,7 +805,8 @@ rb_stat(VALUE file, struct stat *st)
732
805
  return fstat(fptr->fd, st);
733
806
  }
734
807
  FilePathValue(file);
735
- return stat(StringValueCStr(file), st);
808
+ file = rb_str_encode_ospath(file);
809
+ return STAT(StringValueCStr(file), st);
736
810
  }
737
811
 
738
812
  #ifdef _WIN32
@@ -751,10 +825,18 @@ w32_io_info(VALUE *file, BY_HANDLE_FILE_INFORMATION *st)
751
825
  if (f == (HANDLE)-1) return INVALID_HANDLE_VALUE;
752
826
  }
753
827
  else {
828
+ VALUE tmp;
829
+ WCHAR *ptr;
830
+ int len;
754
831
  FilePathValue(*file);
755
- f = CreateFile(StringValueCStr(*file), 0,
756
- FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
757
- rb_w32_iswin95() ? 0 : FILE_FLAG_BACKUP_SEMANTICS, NULL);
832
+ tmp = rb_str_encode_ospath(*file);
833
+ len = MultiByteToWideChar(CP_UTF8, 0, RSTRING_PTR(tmp), -1, NULL, 0);
834
+ ptr = ALLOCA_N(WCHAR, len);
835
+ MultiByteToWideChar(CP_UTF8, 0, RSTRING_PTR(tmp), -1, ptr, len);
836
+ f = CreateFileW(ptr, 0,
837
+ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
838
+ rb_w32_iswin95() ? 0 : FILE_FLAG_BACKUP_SEMANTICS,
839
+ NULL);
758
840
  if (f == INVALID_HANDLE_VALUE) return f;
759
841
  ret = f;
760
842
  }
@@ -769,13 +851,13 @@ w32_io_info(VALUE *file, BY_HANDLE_FILE_INFORMATION *st)
769
851
 
770
852
  /*
771
853
  * call-seq:
772
- * File.stat(file_name) => stat
773
- *
854
+ * File.stat(file_name) -> stat
855
+ *
774
856
  * Returns a <code>File::Stat</code> object for the named file (see
775
857
  * <code>File::Stat</code>).
776
- *
858
+ *
777
859
  * File.stat("testfile").mtime #=> Tue Apr 08 12:58:04 CDT 2003
778
- *
860
+ *
779
861
  */
780
862
 
781
863
  static VALUE
@@ -786,7 +868,6 @@ rb_file_s_stat(VALUE klass, VALUE fname)
786
868
  rb_secure(4);
787
869
  FilePathValue(fname);
788
870
  if (rb_stat(fname, &st) < 0) {
789
- FilePathValue(fname);
790
871
  rb_sys_fail(RSTRING_PTR(fname));
791
872
  }
792
873
  return stat_new(&st);
@@ -794,17 +875,17 @@ rb_file_s_stat(VALUE klass, VALUE fname)
794
875
 
795
876
  /*
796
877
  * call-seq:
797
- * ios.stat => stat
798
- *
878
+ * ios.stat -> stat
879
+ *
799
880
  * Returns status information for <em>ios</em> as an object of type
800
881
  * <code>File::Stat</code>.
801
- *
882
+ *
802
883
  * f = File.new("testfile")
803
884
  * s = f.stat
804
885
  * "%o" % s.mode #=> "100644"
805
886
  * s.blksize #=> 4096
806
887
  * s.atime #=> Wed Apr 09 08:53:54 CDT 2003
807
- *
888
+ *
808
889
  */
809
890
 
810
891
  static VALUE
@@ -823,16 +904,16 @@ rb_io_stat(VALUE obj)
823
904
 
824
905
  /*
825
906
  * call-seq:
826
- * File.lstat(file_name) => stat
827
- *
907
+ * File.lstat(file_name) -> stat
908
+ *
828
909
  * Same as <code>File::stat</code>, but does not follow the last symbolic
829
910
  * link. Instead, reports on the link itself.
830
- *
911
+ *
831
912
  * File.symlink("testfile", "link2test") #=> 0
832
913
  * File.stat("testfile").size #=> 66
833
914
  * File.lstat("link2test").size #=> 8
834
915
  * File.stat("link2test").size #=> 66
835
- *
916
+ *
836
917
  */
837
918
 
838
919
  static VALUE
@@ -843,6 +924,7 @@ rb_file_s_lstat(VALUE klass, VALUE fname)
843
924
 
844
925
  rb_secure(2);
845
926
  FilePathValue(fname);
927
+ fname = rb_str_encode_ospath(fname);
846
928
  if (lstat(StringValueCStr(fname), &st) == -1) {
847
929
  rb_sys_fail(RSTRING_PTR(fname));
848
930
  }
@@ -854,11 +936,11 @@ rb_file_s_lstat(VALUE klass, VALUE fname)
854
936
 
855
937
  /*
856
938
  * call-seq:
857
- * file.lstat => stat
858
- *
939
+ * file.lstat -> stat
940
+ *
859
941
  * Same as <code>IO#stat</code>, but does not follow the last symbolic
860
942
  * link. Instead, reports on the link itself.
861
- *
943
+ *
862
944
  * File.symlink("testfile", "link2test") #=> 0
863
945
  * File.stat("testfile").size #=> 66
864
946
  * f = File.new("link2test")
@@ -872,11 +954,13 @@ rb_file_lstat(VALUE obj)
872
954
  #ifdef HAVE_LSTAT
873
955
  rb_io_t *fptr;
874
956
  struct stat st;
957
+ VALUE path;
875
958
 
876
959
  rb_secure(2);
877
960
  GetOpenFile(obj, fptr);
878
961
  if (NIL_P(fptr->pathv)) return Qnil;
879
- if (lstat(RSTRING_PTR(fptr->pathv), &st) == -1) {
962
+ path = rb_str_encode_ospath(fptr->pathv);
963
+ if (lstat(RSTRING_PTR(path), &st) == -1) {
880
964
  rb_sys_fail_path(fptr->pathv);
881
965
  }
882
966
  return stat_new(&st);
@@ -885,13 +969,12 @@ rb_file_lstat(VALUE obj)
885
969
  #endif
886
970
  }
887
971
 
888
- #ifndef HAVE_GROUP_MEMBER
889
972
  static int
890
- group_member(GETGROUPS_T gid)
973
+ rb_group_member(GETGROUPS_T gid)
891
974
  {
892
975
  #ifndef _WIN32
893
976
  if (getgid() == gid || getegid() == gid)
894
- return Qtrue;
977
+ return TRUE;
895
978
 
896
979
  # ifdef HAVE_GETGROUPS
897
980
  # ifndef NGROUPS
@@ -908,13 +991,12 @@ group_member(GETGROUPS_T gid)
908
991
  anum = getgroups(NGROUPS, gary);
909
992
  while (--anum >= 0)
910
993
  if (gary[anum] == gid)
911
- return Qtrue;
994
+ return TRUE;
912
995
  }
913
996
  # endif
914
997
  #endif
915
- return Qfalse;
998
+ return FALSE;
916
999
  }
917
- #endif
918
1000
 
919
1001
  #ifndef S_IXUGO
920
1002
  # define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
@@ -932,7 +1014,8 @@ eaccess(const char *path, int mode)
932
1014
  struct stat st;
933
1015
  rb_uid_t euid;
934
1016
 
935
- if (stat(path, &st) < 0) return -1;
1017
+ if (STAT(path, &st) < 0)
1018
+ return -1;
936
1019
 
937
1020
  euid = geteuid();
938
1021
 
@@ -951,21 +1034,28 @@ eaccess(const char *path, int mode)
951
1034
 
952
1035
  if (st.st_uid == euid) /* owner */
953
1036
  mode <<= 6;
954
- else if (group_member(st.st_gid))
1037
+ else if (rb_group_member(st.st_gid))
955
1038
  mode <<= 3;
956
1039
 
957
- if ((st.st_mode & mode) == mode) return 0;
1040
+ if ((int)(st.st_mode & mode) == mode) return 0;
958
1041
 
959
1042
  return -1;
960
1043
  #else
961
1044
  # if defined(_MSC_VER) || defined(__MINGW32__)
962
1045
  mode &= ~1;
963
1046
  # endif
1047
+
964
1048
  return access(path, mode);
965
1049
  #endif
966
1050
  }
967
1051
  #endif
968
1052
 
1053
+ static inline int
1054
+ access_internal(const char *path, int mode)
1055
+ {
1056
+ return access(path, mode);
1057
+ }
1058
+
969
1059
 
970
1060
  /*
971
1061
  * Document-class: FileTest
@@ -974,25 +1064,15 @@ eaccess(const char *path, int mode)
974
1064
  * those used in <code>File::Stat</code>. It exists as a standalone
975
1065
  * module, and its methods are also insinuated into the <code>File</code>
976
1066
  * class. (Note that this is not done by inclusion: the interpreter cheats).
977
- *
978
- */
979
-
980
- /*
981
- * File.directory?(file_name) => true or false
982
- * File.directory?(file_name) => true or false
983
- *
984
- * Returns <code>true</code> if the named file is a directory,
985
- * <code>false</code> otherwise.
986
1067
  *
987
- * File.directory?(".")
988
1068
  */
989
1069
 
990
1070
  /*
991
1071
  * Document-method: exist?
992
1072
  *
993
1073
  * call-seq:
994
- * Dir.exist?(file_name) => true or false
995
- * Dir.exists?(file_name) => true or false
1074
+ * Dir.exist?(file_name) -> true or false
1075
+ * Dir.exists?(file_name) -> true or false
996
1076
  *
997
1077
  * Returns <code>true</code> if the named file is a directory,
998
1078
  * <code>false</code> otherwise.
@@ -1003,10 +1083,11 @@ eaccess(const char *path, int mode)
1003
1083
  * Document-method: directory?
1004
1084
  *
1005
1085
  * call-seq:
1006
- * File.directory?(file_name) => true or false
1086
+ * File.directory?(file_name) -> true or false
1007
1087
  *
1008
1088
  * Returns <code>true</code> if the named file is a directory,
1009
- * <code>false</code> otherwise.
1089
+ * or a symlink that points at a directory, and <code>false</code>
1090
+ * otherwise.
1010
1091
  *
1011
1092
  * File.directory?(".")
1012
1093
  */
@@ -1017,7 +1098,6 @@ rb_file_directory_p(VALUE obj, VALUE fname)
1017
1098
  #ifndef S_ISDIR
1018
1099
  # define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
1019
1100
  #endif
1020
-
1021
1101
  //RHO
1022
1102
  #ifdef DOSISH
1023
1103
  /* int ret = 1;
@@ -1051,7 +1131,7 @@ rb_file_directory_p(VALUE obj, VALUE fname)
1051
1131
 
1052
1132
  /*
1053
1133
  * call-seq:
1054
- * File.pipe?(file_name) => true or false
1134
+ * File.pipe?(file_name) -> true or false
1055
1135
  *
1056
1136
  * Returns <code>true</code> if the named file is a pipe.
1057
1137
  */
@@ -1075,7 +1155,7 @@ rb_file_pipe_p(VALUE obj, VALUE fname)
1075
1155
 
1076
1156
  /*
1077
1157
  * call-seq:
1078
- * File.symlink?(file_name) => true or false
1158
+ * File.symlink?(file_name) -> true or false
1079
1159
  *
1080
1160
  * Returns <code>true</code> if the named file is a symbolic link.
1081
1161
  */
@@ -1102,6 +1182,7 @@ rb_file_symlink_p(VALUE obj, VALUE fname)
1102
1182
 
1103
1183
  rb_secure(2);
1104
1184
  FilePathValue(fname);
1185
+ fname = rb_str_encode_ospath(fname);
1105
1186
  if (lstat(StringValueCStr(fname), &st) < 0) return Qfalse;
1106
1187
  if (S_ISLNK(st.st_mode)) return Qtrue;
1107
1188
  #endif
@@ -1111,7 +1192,7 @@ rb_file_symlink_p(VALUE obj, VALUE fname)
1111
1192
 
1112
1193
  /*
1113
1194
  * call-seq:
1114
- * File.socket?(file_name) => true or false
1195
+ * File.socket?(file_name) -> true or false
1115
1196
  *
1116
1197
  * Returns <code>true</code> if the named file is a socket.
1117
1198
  */
@@ -1145,7 +1226,7 @@ rb_file_socket_p(VALUE obj, VALUE fname)
1145
1226
 
1146
1227
  /*
1147
1228
  * call-seq:
1148
- * File.blockdev?(file_name) => true or false
1229
+ * File.blockdev?(file_name) -> true or false
1149
1230
  *
1150
1231
  * Returns <code>true</code> if the named file is a block device.
1151
1232
  */
@@ -1173,7 +1254,7 @@ rb_file_blockdev_p(VALUE obj, VALUE fname)
1173
1254
 
1174
1255
  /*
1175
1256
  * call-seq:
1176
- * File.chardev?(file_name) => true or false
1257
+ * File.chardev?(file_name) -> true or false
1177
1258
  *
1178
1259
  * Returns <code>true</code> if the named file is a character device.
1179
1260
  */
@@ -1194,18 +1275,16 @@ rb_file_chardev_p(VALUE obj, VALUE fname)
1194
1275
 
1195
1276
  /*
1196
1277
  * call-seq:
1197
- * File.exist?(file_name) => true or false
1198
- * File.exists?(file_name) => true or false
1278
+ * File.exist?(file_name) -> true or false
1279
+ * File.exists?(file_name) -> true or false
1199
1280
  *
1200
1281
  * Return <code>true</code> if the named file exists.
1201
1282
  */
1202
1283
 
1203
- int rho_rhodesapp_isrubycompiler();
1204
1284
  static VALUE
1205
1285
  rb_file_exist_p(VALUE obj, VALUE fname)
1206
1286
  {
1207
- //RHO
1208
- struct stat st;
1287
+ struct stat st;
1209
1288
 
1210
1289
  #ifdef DOSISH
1211
1290
  /* int ret = 1;
@@ -1233,12 +1312,11 @@ rb_file_exist_p(VALUE obj, VALUE fname)
1233
1312
 
1234
1313
  if (rb_stat(fname, &st) < 0) return Qfalse;
1235
1314
  return Qtrue;
1236
- //RHO
1237
1315
  }
1238
1316
 
1239
1317
  /*
1240
1318
  * call-seq:
1241
- * File.readable?(file_name) => true or false
1319
+ * File.readable?(file_name) -> true or false
1242
1320
  *
1243
1321
  * Returns <code>true</code> if the named file is readable by the effective
1244
1322
  * user id of this process.
@@ -1249,13 +1327,14 @@ rb_file_readable_p(VALUE obj, VALUE fname)
1249
1327
  {
1250
1328
  rb_secure(2);
1251
1329
  FilePathValue(fname);
1330
+ fname = rb_str_encode_ospath(fname);
1252
1331
  if (eaccess(StringValueCStr(fname), R_OK) < 0) return Qfalse;
1253
1332
  return Qtrue;
1254
1333
  }
1255
1334
 
1256
1335
  /*
1257
1336
  * call-seq:
1258
- * File.readable_real?(file_name) => true or false
1337
+ * File.readable_real?(file_name) -> true or false
1259
1338
  *
1260
1339
  * Returns <code>true</code> if the named file is readable by the real
1261
1340
  * user id of this process.
@@ -1266,7 +1345,8 @@ rb_file_readable_real_p(VALUE obj, VALUE fname)
1266
1345
  {
1267
1346
  rb_secure(2);
1268
1347
  FilePathValue(fname);
1269
- if (access(StringValueCStr(fname), R_OK) < 0) return Qfalse;
1348
+ fname = rb_str_encode_ospath(fname);
1349
+ if (access_internal(StringValueCStr(fname), R_OK) < 0) return Qfalse;
1270
1350
  return Qtrue;
1271
1351
  }
1272
1352
 
@@ -1280,16 +1360,16 @@ rb_file_readable_real_p(VALUE obj, VALUE fname)
1280
1360
 
1281
1361
  /*
1282
1362
  * call-seq:
1283
- * File.world_readable?(file_name) => fixnum or nil
1363
+ * File.world_readable?(file_name) -> fixnum or nil
1284
1364
  *
1285
1365
  * If <i>file_name</i> is readable by others, returns an integer
1286
1366
  * representing the file permission bits of <i>file_name</i>. Returns
1287
1367
  * <code>nil</code> otherwise. The meaning of the bits is platform
1288
1368
  * dependent; on Unix systems, see <code>stat(2)</code>.
1289
- *
1290
- * File.world_readable?("/etc/passwd") # => 420
1369
+ *
1370
+ * File.world_readable?("/etc/passwd") #=> 420
1291
1371
  * m = File.world_readable?("/etc/passwd")
1292
- * sprintf("%o", m) # => "644"
1372
+ * sprintf("%o", m) #=> "644"
1293
1373
  */
1294
1374
 
1295
1375
  static VALUE
@@ -1308,7 +1388,7 @@ rb_file_world_readable_p(VALUE obj, VALUE fname)
1308
1388
 
1309
1389
  /*
1310
1390
  * call-seq:
1311
- * File.writable?(file_name) => true or false
1391
+ * File.writable?(file_name) -> true or false
1312
1392
  *
1313
1393
  * Returns <code>true</code> if the named file is writable by the effective
1314
1394
  * user id of this process.
@@ -1319,13 +1399,14 @@ rb_file_writable_p(VALUE obj, VALUE fname)
1319
1399
  {
1320
1400
  rb_secure(2);
1321
1401
  FilePathValue(fname);
1402
+ fname = rb_str_encode_ospath(fname);
1322
1403
  if (eaccess(StringValueCStr(fname), W_OK) < 0) return Qfalse;
1323
1404
  return Qtrue;
1324
1405
  }
1325
1406
 
1326
1407
  /*
1327
1408
  * call-seq:
1328
- * File.writable_real?(file_name) => true or false
1409
+ * File.writable_real?(file_name) -> true or false
1329
1410
  *
1330
1411
  * Returns <code>true</code> if the named file is writable by the real
1331
1412
  * user id of this process.
@@ -1336,19 +1417,20 @@ rb_file_writable_real_p(VALUE obj, VALUE fname)
1336
1417
  {
1337
1418
  rb_secure(2);
1338
1419
  FilePathValue(fname);
1339
- if (access(StringValueCStr(fname), W_OK) < 0) return Qfalse;
1420
+ fname = rb_str_encode_ospath(fname);
1421
+ if (access_internal(StringValueCStr(fname), W_OK) < 0) return Qfalse;
1340
1422
  return Qtrue;
1341
1423
  }
1342
1424
 
1343
1425
  /*
1344
1426
  * call-seq:
1345
- * File.world_writable?(file_name) => fixnum or nil
1427
+ * File.world_writable?(file_name) -> fixnum or nil
1346
1428
  *
1347
1429
  * If <i>file_name</i> is writable by others, returns an integer
1348
1430
  * representing the file permission bits of <i>file_name</i>. Returns
1349
1431
  * <code>nil</code> otherwise. The meaning of the bits is platform
1350
1432
  * dependent; on Unix systems, see <code>stat(2)</code>.
1351
- *
1433
+ *
1352
1434
  * File.world_writable?("/tmp") #=> 511
1353
1435
  * m = File.world_writable?("/tmp")
1354
1436
  * sprintf("%o", m) #=> "777"
@@ -1370,7 +1452,7 @@ rb_file_world_writable_p(VALUE obj, VALUE fname)
1370
1452
 
1371
1453
  /*
1372
1454
  * call-seq:
1373
- * File.executable?(file_name) => true or false
1455
+ * File.executable?(file_name) -> true or false
1374
1456
  *
1375
1457
  * Returns <code>true</code> if the named file is executable by the effective
1376
1458
  * user id of this process.
@@ -1381,13 +1463,14 @@ rb_file_executable_p(VALUE obj, VALUE fname)
1381
1463
  {
1382
1464
  rb_secure(2);
1383
1465
  FilePathValue(fname);
1466
+ fname = rb_str_encode_ospath(fname);
1384
1467
  if (eaccess(StringValueCStr(fname), X_OK) < 0) return Qfalse;
1385
1468
  return Qtrue;
1386
1469
  }
1387
1470
 
1388
1471
  /*
1389
1472
  * call-seq:
1390
- * File.executable_real?(file_name) => true or false
1473
+ * File.executable_real?(file_name) -> true or false
1391
1474
  *
1392
1475
  * Returns <code>true</code> if the named file is executable by the real
1393
1476
  * user id of this process.
@@ -1398,7 +1481,8 @@ rb_file_executable_real_p(VALUE obj, VALUE fname)
1398
1481
  {
1399
1482
  rb_secure(2);
1400
1483
  FilePathValue(fname);
1401
- if (access(StringValueCStr(fname), X_OK) < 0) return Qfalse;
1484
+ fname = rb_str_encode_ospath(fname);
1485
+ if (access_internal(StringValueCStr(fname), X_OK) < 0) return Qfalse;
1402
1486
  return Qtrue;
1403
1487
  }
1404
1488
 
@@ -1408,7 +1492,7 @@ rb_file_executable_real_p(VALUE obj, VALUE fname)
1408
1492
 
1409
1493
  /*
1410
1494
  * call-seq:
1411
- * File.file?(file_name) => true or false
1495
+ * File.file?(file_name) -> true or false
1412
1496
  *
1413
1497
  * Returns <code>true</code> if the named file exists and is a
1414
1498
  * regular file.
@@ -1426,7 +1510,7 @@ rb_file_file_p(VALUE obj, VALUE fname)
1426
1510
 
1427
1511
  /*
1428
1512
  * call-seq:
1429
- * File.zero?(file_name) => true or false
1513
+ * File.zero?(file_name) -> true or false
1430
1514
  *
1431
1515
  * Returns <code>true</code> if the named file exists and has
1432
1516
  * a zero size.
@@ -1444,7 +1528,7 @@ rb_file_zero_p(VALUE obj, VALUE fname)
1444
1528
 
1445
1529
  /*
1446
1530
  * call-seq:
1447
- * File.size?(file_name) => Integer or nil
1531
+ * File.size?(file_name) -> Integer or nil
1448
1532
  *
1449
1533
  * Returns +nil+ if +file_name+ doesn't exist or has zero size, the size of the
1450
1534
  * file otherwise.
@@ -1462,7 +1546,7 @@ rb_file_size_p(VALUE obj, VALUE fname)
1462
1546
 
1463
1547
  /*
1464
1548
  * call-seq:
1465
- * File.owned?(file_name) => true or false
1549
+ * File.owned?(file_name) -> true or false
1466
1550
  *
1467
1551
  * Returns <code>true</code> if the named file exists and the
1468
1552
  * effective used id of the calling process is the owner of
@@ -1491,7 +1575,7 @@ rb_file_rowned_p(VALUE obj, VALUE fname)
1491
1575
 
1492
1576
  /*
1493
1577
  * call-seq:
1494
- * File.grpowned?(file_name) => true or false
1578
+ * File.grpowned?(file_name) -> true or false
1495
1579
  *
1496
1580
  * Returns <code>true</code> if the named file exists and the
1497
1581
  * effective group id of the calling process is the owner of
@@ -1505,7 +1589,7 @@ rb_file_grpowned_p(VALUE obj, VALUE fname)
1505
1589
  struct stat st;
1506
1590
 
1507
1591
  if (rb_stat(fname, &st) < 0) return Qfalse;
1508
- if (group_member(st.st_gid)) return Qtrue;
1592
+ if (rb_group_member(st.st_gid)) return Qtrue;
1509
1593
  #endif
1510
1594
  return Qfalse;
1511
1595
  }
@@ -1518,7 +1602,8 @@ check3rdbyte(VALUE fname, int mode)
1518
1602
 
1519
1603
  rb_secure(2);
1520
1604
  FilePathValue(fname);
1521
- if (stat(StringValueCStr(fname), &st) < 0) return Qfalse;
1605
+ fname = rb_str_encode_ospath(fname);
1606
+ if (STAT(StringValueCStr(fname), &st) < 0) return Qfalse;
1522
1607
  if (st.st_mode & mode) return Qtrue;
1523
1608
  return Qfalse;
1524
1609
  }
@@ -1526,7 +1611,7 @@ check3rdbyte(VALUE fname, int mode)
1526
1611
 
1527
1612
  /*
1528
1613
  * call-seq:
1529
- * File.setuid?(file_name) => true or false
1614
+ * File.setuid?(file_name) -> true or false
1530
1615
  *
1531
1616
  * Returns <code>true</code> if the named file has the setuid bit set.
1532
1617
  */
@@ -1543,7 +1628,7 @@ rb_file_suid_p(VALUE obj, VALUE fname)
1543
1628
 
1544
1629
  /*
1545
1630
  * call-seq:
1546
- * File.setgid?(file_name) => true or false
1631
+ * File.setgid?(file_name) -> true or false
1547
1632
  *
1548
1633
  * Returns <code>true</code> if the named file has the setgid bit set.
1549
1634
  */
@@ -1560,7 +1645,7 @@ rb_file_sgid_p(VALUE obj, VALUE fname)
1560
1645
 
1561
1646
  /*
1562
1647
  * call-seq:
1563
- * File.sticky?(file_name) => true or false
1648
+ * File.sticky?(file_name) -> true or false
1564
1649
  *
1565
1650
  * Returns <code>true</code> if the named file has the sticky bit set.
1566
1651
  */
@@ -1577,7 +1662,7 @@ rb_file_sticky_p(VALUE obj, VALUE fname)
1577
1662
 
1578
1663
  /*
1579
1664
  * call-seq:
1580
- * File.identical?(file_1, file_2) => true or false
1665
+ * File.identical?(file_1, file_2) -> true or false
1581
1666
  *
1582
1667
  * Returns <code>true</code> if the named files are identical.
1583
1668
  *
@@ -1603,13 +1688,13 @@ rb_file_identical_p(VALUE obj, VALUE fname1, VALUE fname2)
1603
1688
  if (st1.st_dev != st2.st_dev) return Qfalse;
1604
1689
  if (st1.st_ino != st2.st_ino) return Qfalse;
1605
1690
  #else
1606
- #ifdef _WIN32
1691
+ # ifdef _WIN32
1607
1692
  BY_HANDLE_FILE_INFORMATION st1, st2;
1608
1693
  HANDLE f1 = 0, f2 = 0;
1609
- #endif
1694
+ # endif
1610
1695
 
1611
1696
  rb_secure(2);
1612
- #ifdef _WIN32
1697
+ # ifdef _WIN32
1613
1698
  f1 = w32_io_info(&fname1, &st1);
1614
1699
  if (f1 == INVALID_HANDLE_VALUE) return Qfalse;
1615
1700
  f2 = w32_io_info(&fname2, &st2);
@@ -1623,13 +1708,15 @@ rb_file_identical_p(VALUE obj, VALUE fname1, VALUE fname2)
1623
1708
  return Qtrue;
1624
1709
  if (!f1 || !f2) return Qfalse;
1625
1710
  if (rb_w32_iswin95()) return Qfalse;
1626
- #else
1711
+ # else
1627
1712
  FilePathValue(fname1);
1628
1713
  fname1 = rb_str_new4(fname1);
1714
+ fname1 = rb_str_encode_ospath(fname1);
1629
1715
  FilePathValue(fname2);
1716
+ fname2 = rb_str_encode_ospath(fname2);
1630
1717
  if (access(RSTRING_PTR(fname1), 0)) return Qfalse;
1631
1718
  if (access(RSTRING_PTR(fname2), 0)) return Qfalse;
1632
- #endif
1719
+ # endif
1633
1720
  fname1 = rb_file_expand_path(fname1, Qnil);
1634
1721
  fname2 = rb_file_expand_path(fname2, Qnil);
1635
1722
  if (RSTRING_LEN(fname1) != RSTRING_LEN(fname2)) return Qfalse;
@@ -1641,7 +1728,7 @@ rb_file_identical_p(VALUE obj, VALUE fname1, VALUE fname2)
1641
1728
 
1642
1729
  /*
1643
1730
  * call-seq:
1644
- * File.size(file_name) => integer
1731
+ * File.size(file_name) -> integer
1645
1732
  *
1646
1733
  * Returns the size of <code>file_name</code>.
1647
1734
  */
@@ -1701,14 +1788,14 @@ rb_file_ftype(const struct stat *st)
1701
1788
 
1702
1789
  /*
1703
1790
  * call-seq:
1704
- * File.ftype(file_name) => string
1705
- *
1791
+ * File.ftype(file_name) -> string
1792
+ *
1706
1793
  * Identifies the type of the named file; the return string is one of
1707
1794
  * ``<code>file</code>'', ``<code>directory</code>'',
1708
1795
  * ``<code>characterSpecial</code>'', ``<code>blockSpecial</code>'',
1709
1796
  * ``<code>fifo</code>'', ``<code>link</code>'',
1710
1797
  * ``<code>socket</code>'', or ``<code>unknown</code>''.
1711
- *
1798
+ *
1712
1799
  * File.ftype("testfile") #=> "file"
1713
1800
  * File.ftype("/dev/tty") #=> "characterSpecial"
1714
1801
  * File.ftype("/tmp/.X11-unix/X0") #=> "socket"
@@ -1721,6 +1808,7 @@ rb_file_s_ftype(VALUE klass, VALUE fname)
1721
1808
 
1722
1809
  rb_secure(2);
1723
1810
  FilePathValue(fname);
1811
+ fname = rb_str_encode_ospath(fname);
1724
1812
  if (lstat(StringValueCStr(fname), &st) == -1) {
1725
1813
  rb_sys_fail(RSTRING_PTR(fname));
1726
1814
  }
@@ -1730,12 +1818,12 @@ rb_file_s_ftype(VALUE klass, VALUE fname)
1730
1818
 
1731
1819
  /*
1732
1820
  * call-seq:
1733
- * File.atime(file_name) => time
1734
- *
1821
+ * File.atime(file_name) -> time
1822
+ *
1735
1823
  * Returns the last access time for the named file as a Time object).
1736
- *
1824
+ *
1737
1825
  * File.atime("testfile") #=> Wed Apr 09 08:51:48 CDT 2003
1738
- *
1826
+ *
1739
1827
  */
1740
1828
 
1741
1829
  static VALUE
@@ -1752,13 +1840,13 @@ rb_file_s_atime(VALUE klass, VALUE fname)
1752
1840
 
1753
1841
  /*
1754
1842
  * call-seq:
1755
- * file.atime => time
1756
- *
1843
+ * file.atime -> time
1844
+ *
1757
1845
  * Returns the last access time (a <code>Time</code> object)
1758
1846
  * for <i>file</i>, or epoch if <i>file</i> has not been accessed.
1759
- *
1847
+ *
1760
1848
  * File.new("testfile").atime #=> Wed Dec 31 18:00:00 CST 1969
1761
- *
1849
+ *
1762
1850
  */
1763
1851
 
1764
1852
  static VALUE
@@ -1776,12 +1864,12 @@ rb_file_atime(VALUE obj)
1776
1864
 
1777
1865
  /*
1778
1866
  * call-seq:
1779
- * File.mtime(file_name) => time
1780
- *
1867
+ * File.mtime(file_name) -> time
1868
+ *
1781
1869
  * Returns the modification time for the named file as a Time object.
1782
- *
1870
+ *
1783
1871
  * File.mtime("testfile") #=> Tue Apr 08 12:58:04 CDT 2003
1784
- *
1872
+ *
1785
1873
  */
1786
1874
 
1787
1875
  static VALUE
@@ -1798,12 +1886,12 @@ rb_file_s_mtime(VALUE klass, VALUE fname)
1798
1886
 
1799
1887
  /*
1800
1888
  * call-seq:
1801
- * file.mtime -> time
1802
- *
1889
+ * file.mtime -> time
1890
+ *
1803
1891
  * Returns the modification time for <i>file</i>.
1804
- *
1892
+ *
1805
1893
  * File.new("testfile").mtime #=> Wed Apr 09 08:53:14 CDT 2003
1806
- *
1894
+ *
1807
1895
  */
1808
1896
 
1809
1897
  static VALUE
@@ -1821,14 +1909,14 @@ rb_file_mtime(VALUE obj)
1821
1909
 
1822
1910
  /*
1823
1911
  * call-seq:
1824
- * File.ctime(file_name) => time
1825
- *
1912
+ * File.ctime(file_name) -> time
1913
+ *
1826
1914
  * Returns the change time for the named file (the time at which
1827
1915
  * directory information about the file was changed, not the file
1828
1916
  * itself).
1829
- *
1917
+ *
1830
1918
  * File.ctime("testfile") #=> Wed Apr 09 08:53:13 CDT 2003
1831
- *
1919
+ *
1832
1920
  */
1833
1921
 
1834
1922
  static VALUE
@@ -1845,13 +1933,13 @@ rb_file_s_ctime(VALUE klass, VALUE fname)
1845
1933
 
1846
1934
  /*
1847
1935
  * call-seq:
1848
- * file.ctime -> time
1849
- *
1936
+ * file.ctime -> time
1937
+ *
1850
1938
  * Returns the change time for <i>file</i> (that is, the time directory
1851
1939
  * information about the file was changed, not the file itself).
1852
- *
1940
+ *
1853
1941
  * File.new("testfile").ctime #=> Wed Apr 09 08:53:14 CDT 2003
1854
- *
1942
+ *
1855
1943
  */
1856
1944
 
1857
1945
  static VALUE
@@ -1867,6 +1955,32 @@ rb_file_ctime(VALUE obj)
1867
1955
  return stat_ctime(&st);
1868
1956
  }
1869
1957
 
1958
+ /*
1959
+ * call-seq:
1960
+ * file.size -> integer
1961
+ *
1962
+ * Returns the size of <i>file</i> in bytes.
1963
+ *
1964
+ * File.new("testfile").size #=> 66
1965
+ *
1966
+ */
1967
+
1968
+ static VALUE
1969
+ rb_file_size(VALUE obj)
1970
+ {
1971
+ rb_io_t *fptr;
1972
+ struct stat st;
1973
+
1974
+ GetOpenFile(obj, fptr);
1975
+ if (fptr->mode & FMODE_WRITABLE) {
1976
+ rb_io_flush(obj);
1977
+ }
1978
+ if (fstat(fptr->fd, &st) == -1) {
1979
+ rb_sys_fail_path(fptr->pathv);
1980
+ }
1981
+ return OFFT2NUM(st.st_size);
1982
+ }
1983
+
1870
1984
  static void
1871
1985
  chmod_internal(const char *path, void *mode)
1872
1986
  {
@@ -1876,14 +1990,14 @@ chmod_internal(const char *path, void *mode)
1876
1990
 
1877
1991
  /*
1878
1992
  * call-seq:
1879
- * File.chmod(mode_int, file_name, ... ) -> integer
1880
- *
1993
+ * File.chmod(mode_int, file_name, ... ) -> integer
1994
+ *
1881
1995
  * Changes permission bits on the named file(s) to the bit pattern
1882
1996
  * represented by <i>mode_int</i>. Actual effects are operating system
1883
1997
  * dependent (see the beginning of this section). On Unix systems, see
1884
1998
  * <code>chmod(2)</code> for details. Returns the number of files
1885
1999
  * processed.
1886
- *
2000
+ *
1887
2001
  * File.chmod(0644, "testfile", "out") #=> 2
1888
2002
  */
1889
2003
 
@@ -1905,13 +2019,13 @@ rb_file_s_chmod(int argc, VALUE *argv)
1905
2019
 
1906
2020
  /*
1907
2021
  * call-seq:
1908
- * file.chmod(mode_int) => 0
1909
- *
2022
+ * file.chmod(mode_int) -> 0
2023
+ *
1910
2024
  * Changes permission bits on <i>file</i> to the bit pattern
1911
2025
  * represented by <i>mode_int</i>. Actual effects are platform
1912
2026
  * dependent; on Unix systems, see <code>chmod(2)</code> for details.
1913
2027
  * Follows symbolic links. Also see <code>File#lchmod</code>.
1914
- *
2028
+ *
1915
2029
  * f = File.new("out", "w");
1916
2030
  * f.chmod(0644) #=> 0
1917
2031
  */
@@ -1921,6 +2035,9 @@ rb_file_chmod(VALUE obj, VALUE vmode)
1921
2035
  {
1922
2036
  rb_io_t *fptr;
1923
2037
  int mode;
2038
+ #ifndef HAVE_FCHMOD
2039
+ VALUE path;
2040
+ #endif
1924
2041
 
1925
2042
  rb_secure(2);
1926
2043
  mode = NUM2INT(vmode);
@@ -1931,7 +2048,8 @@ rb_file_chmod(VALUE obj, VALUE vmode)
1931
2048
  rb_sys_fail_path(fptr->pathv);
1932
2049
  #else
1933
2050
  if (NIL_P(fptr->pathv)) return Qnil;
1934
- if (chmod(RSTRING_PTR(fptr->pathv), mode) == -1)
2051
+ path = rb_str_encode_ospath(fptr->pathv);
2052
+ if (chmod(RSTRING_PTR(path), mode) == -1)
1935
2053
  rb_sys_fail_path(fptr->pathv);
1936
2054
  #endif
1937
2055
 
@@ -1948,12 +2066,12 @@ lchmod_internal(const char *path, void *mode)
1948
2066
 
1949
2067
  /*
1950
2068
  * call-seq:
1951
- * File.lchmod(mode_int, file_name, ...) => integer
1952
- *
2069
+ * File.lchmod(mode_int, file_name, ...) -> integer
2070
+ *
1953
2071
  * Equivalent to <code>File::chmod</code>, but does not follow symbolic
1954
2072
  * links (so it will change the permissions associated with the link,
1955
2073
  * not the file referenced by the link). Often not available.
1956
- *
2074
+ *
1957
2075
  */
1958
2076
 
1959
2077
  static VALUE
@@ -1971,12 +2089,7 @@ rb_file_s_lchmod(int argc, VALUE *argv)
1971
2089
  return LONG2FIX(n);
1972
2090
  }
1973
2091
  #else
1974
- static VALUE
1975
- rb_file_s_lchmod(int argc, VALUE *argv)
1976
- {
1977
- rb_notimplement();
1978
- return Qnil; /* not reached */
1979
- }
2092
+ #define rb_file_s_lchmod rb_f_notimplement
1980
2093
  #endif
1981
2094
 
1982
2095
  struct chown_args {
@@ -1994,17 +2107,17 @@ chown_internal(const char *path, void *arg)
1994
2107
 
1995
2108
  /*
1996
2109
  * call-seq:
1997
- * File.chown(owner_int, group_int, file_name,... ) -> integer
1998
- *
2110
+ * File.chown(owner_int, group_int, file_name,... ) -> integer
2111
+ *
1999
2112
  * Changes the owner and group of the named file(s) to the given
2000
2113
  * numeric owner and group id's. Only a process with superuser
2001
2114
  * privileges may change the owner of a file. The current owner of a
2002
2115
  * file may change the file's group to any group to which the owner
2003
2116
  * belongs. A <code>nil</code> or -1 owner or group id is ignored.
2004
2117
  * Returns the number of files processed.
2005
- *
2118
+ *
2006
2119
  * File.chown(nil, 100, "testfile")
2007
- *
2120
+ *
2008
2121
  */
2009
2122
 
2010
2123
  static VALUE
@@ -2035,17 +2148,17 @@ rb_file_s_chown(int argc, VALUE *argv)
2035
2148
 
2036
2149
  /*
2037
2150
  * call-seq:
2038
- * file.chown(owner_int, group_int ) => 0
2039
- *
2151
+ * file.chown(owner_int, group_int ) -> 0
2152
+ *
2040
2153
  * Changes the owner and group of <i>file</i> to the given numeric
2041
2154
  * owner and group id's. Only a process with superuser privileges may
2042
2155
  * change the owner of a file. The current owner of a file may change
2043
2156
  * the file's group to any group to which the owner belongs. A
2044
2157
  * <code>nil</code> or -1 owner or group id is ignored. Follows
2045
2158
  * symbolic links. See also <code>File#lchown</code>.
2046
- *
2159
+ *
2047
2160
  * File.new("testfile").chown(502, 1000)
2048
- *
2161
+ *
2049
2162
  */
2050
2163
 
2051
2164
  static VALUE
@@ -2053,14 +2166,18 @@ rb_file_chown(VALUE obj, VALUE owner, VALUE group)
2053
2166
  {
2054
2167
  rb_io_t *fptr;
2055
2168
  int o, g;
2169
+ #ifndef HAVE_FCHOWN
2170
+ VALUE path;
2171
+ #endif
2056
2172
 
2057
2173
  rb_secure(2);
2058
2174
  o = NIL_P(owner) ? -1 : NUM2INT(owner);
2059
2175
  g = NIL_P(group) ? -1 : NUM2INT(group);
2060
2176
  GetOpenFile(obj, fptr);
2061
- #if defined(__CYGWIN32__) || defined(_WIN32) || defined(__EMX__)
2177
+ #ifndef HAVE_FCHOWN
2062
2178
  if (NIL_P(fptr->pathv)) return Qnil;
2063
- if (chown(RSTRING_PTR(fptr->pathv), o, g) == -1)
2179
+ path = rb_str_encode_ospath(fptr->pathv);
2180
+ if (chown(RSTRING_PTR(path), o, g) == -1)
2064
2181
  rb_sys_fail_path(fptr->pathv);
2065
2182
  #else
2066
2183
  if (fchown(fptr->fd, o, g) == -1)
@@ -2070,7 +2187,7 @@ rb_file_chown(VALUE obj, VALUE owner, VALUE group)
2070
2187
  return INT2FIX(0);
2071
2188
  }
2072
2189
 
2073
- #if defined(HAVE_LCHOWN) && !defined(__CHECKER__)
2190
+ #if defined(HAVE_LCHOWN)
2074
2191
  static void
2075
2192
  lchown_internal(const char *path, void *arg)
2076
2193
  {
@@ -2081,13 +2198,13 @@ lchown_internal(const char *path, void *arg)
2081
2198
 
2082
2199
  /*
2083
2200
  * call-seq:
2084
- * file.lchown(owner_int, group_int, file_name,..) => integer
2085
- *
2201
+ * file.lchown(owner_int, group_int, file_name,..) -> integer
2202
+ *
2086
2203
  * Equivalent to <code>File::chown</code>, but does not follow symbolic
2087
2204
  * links (so it will change the owner associated with the link, not the
2088
2205
  * file referenced by the link). Often not available. Returns number
2089
2206
  * of files in the argument list.
2090
- *
2207
+ *
2091
2208
  */
2092
2209
 
2093
2210
  static VALUE
@@ -2116,34 +2233,73 @@ rb_file_s_lchown(int argc, VALUE *argv)
2116
2233
  return LONG2FIX(n);
2117
2234
  }
2118
2235
  #else
2119
- static VALUE
2120
- rb_file_s_lchown(int argc, VALUE *argv)
2121
- {
2122
- rb_notimplement();
2123
- }
2236
+ #define rb_file_s_lchown rb_f_notimplement
2124
2237
  #endif
2125
2238
 
2126
2239
  struct timespec rb_time_timespec(VALUE time);
2127
2240
 
2241
+ struct utime_args {
2242
+ const struct timespec* tsp;
2243
+ VALUE atime, mtime;
2244
+ };
2245
+
2246
+ #if defined DOSISH || defined __CYGWIN__
2247
+ NORETURN(static void utime_failed(const char *, const struct timespec *, VALUE, VALUE));
2248
+
2249
+ static void
2250
+ utime_failed(const char *path, const struct timespec *tsp, VALUE atime, VALUE mtime)
2251
+ {
2252
+ if (tsp && errno == EINVAL) {
2253
+ VALUE e[2], a = Qnil, m = Qnil;
2254
+ int d = 0;
2255
+ if (!NIL_P(atime)) {
2256
+ a = rb_inspect(atime);
2257
+ }
2258
+ if (!NIL_P(mtime) && mtime != atime && !rb_equal(atime, mtime)) {
2259
+ m = rb_inspect(mtime);
2260
+ }
2261
+ if (NIL_P(a)) e[0] = m;
2262
+ else if (NIL_P(m) || rb_str_cmp(a, m) == 0) e[0] = a;
2263
+ else {
2264
+ e[0] = rb_str_plus(a, rb_str_new_cstr(" or "));
2265
+ rb_str_append(e[0], m);
2266
+ d = 1;
2267
+ }
2268
+ if (!NIL_P(e[0])) {
2269
+ if (path) {
2270
+ if (!d) e[0] = rb_str_dup(e[0]);
2271
+ rb_str_cat2(rb_str_cat2(e[0], " for "), path);
2272
+ }
2273
+ e[1] = INT2FIX(EINVAL);
2274
+ rb_exc_raise(rb_class_new_instance(2, e, rb_eSystemCallError));
2275
+ }
2276
+ errno = EINVAL;
2277
+ }
2278
+ rb_sys_fail(path);
2279
+ }
2280
+ #else
2281
+ #define utime_failed(path, tsp, atime, mtime) rb_sys_fail(path)
2282
+ #endif
2283
+
2128
2284
  #if defined(HAVE_UTIMES)
2129
2285
 
2130
2286
  static void
2131
2287
  utime_internal(const char *path, void *arg)
2132
2288
  {
2133
- struct timespec *tsp = arg;
2134
- struct timeval tvbuf[2], *tvp = arg;
2289
+ struct utime_args *v = arg;
2290
+ const struct timespec *tsp = v->tsp;
2291
+ struct timeval tvbuf[2], *tvp = NULL;
2135
2292
 
2136
2293
  #ifdef HAVE_UTIMENSAT
2137
2294
  static int try_utimensat = 1;
2138
2295
 
2139
2296
  if (try_utimensat) {
2140
- struct timespec *tsp = arg;
2141
2297
  if (utimensat(AT_FDCWD, path, tsp, 0) < 0) {
2142
2298
  if (errno == ENOSYS) {
2143
2299
  try_utimensat = 0;
2144
2300
  goto no_utimensat;
2145
2301
  }
2146
- rb_sys_fail(path);
2302
+ utime_failed(path, tsp, v->atime, v->mtime);
2147
2303
  }
2148
2304
  return;
2149
2305
  }
@@ -2152,13 +2308,13 @@ no_utimensat:
2152
2308
 
2153
2309
  if (tsp) {
2154
2310
  tvbuf[0].tv_sec = tsp[0].tv_sec;
2155
- tvbuf[0].tv_usec = tsp[0].tv_nsec / 1000;
2311
+ tvbuf[0].tv_usec = (int)(tsp[0].tv_nsec / 1000);
2156
2312
  tvbuf[1].tv_sec = tsp[1].tv_sec;
2157
- tvbuf[1].tv_usec = tsp[1].tv_nsec / 1000;
2313
+ tvbuf[1].tv_usec = (int)(tsp[1].tv_nsec / 1000);
2158
2314
  tvp = tvbuf;
2159
2315
  }
2160
2316
  if (utimes(path, tvp) < 0)
2161
- rb_sys_fail(path);
2317
+ utime_failed(path, tsp, v->atime, v->mtime);
2162
2318
  }
2163
2319
 
2164
2320
  #else
@@ -2173,7 +2329,8 @@ struct utimbuf {
2173
2329
  static void
2174
2330
  utime_internal(const char *path, void *arg)
2175
2331
  {
2176
- struct timespec *tsp = arg;
2332
+ struct utime_args *v = arg;
2333
+ const struct timespec *tsp = v->tsp;
2177
2334
  struct utimbuf utbuf, *utp = NULL;
2178
2335
  if (tsp) {
2179
2336
  utbuf.actime = tsp[0].tv_sec;
@@ -2181,14 +2338,14 @@ utime_internal(const char *path, void *arg)
2181
2338
  utp = &utbuf;
2182
2339
  }
2183
2340
  if (utime(path, utp) < 0)
2184
- rb_sys_fail(path);
2341
+ utime_failed(path, tsp, v->atime, v->mtime);
2185
2342
  }
2186
2343
 
2187
2344
  #endif
2188
2345
 
2189
2346
  /*
2190
2347
  * call-seq:
2191
- * File.utime(atime, mtime, file_name,...) => integer
2348
+ * File.utime(atime, mtime, file_name,...) -> integer
2192
2349
  *
2193
2350
  * Sets the access and modification times of each
2194
2351
  * named file to the first two arguments. Returns
@@ -2198,20 +2355,22 @@ utime_internal(const char *path, void *arg)
2198
2355
  static VALUE
2199
2356
  rb_file_s_utime(int argc, VALUE *argv)
2200
2357
  {
2201
- VALUE atime, mtime, rest;
2358
+ VALUE rest;
2359
+ struct utime_args args;
2202
2360
  struct timespec tss[2], *tsp = NULL;
2203
2361
  long n;
2204
2362
 
2205
2363
  rb_secure(2);
2206
- rb_scan_args(argc, argv, "2*", &atime, &mtime, &rest);
2364
+ rb_scan_args(argc, argv, "2*", &args.atime, &args.mtime, &rest);
2207
2365
 
2208
- if (!NIL_P(atime) || !NIL_P(mtime)) {
2366
+ if (!NIL_P(args.atime) || !NIL_P(args.mtime)) {
2209
2367
  tsp = tss;
2210
- tsp[0] = rb_time_timespec(atime);
2211
- tsp[1] = rb_time_timespec(mtime);
2368
+ tsp[0] = rb_time_timespec(args.atime);
2369
+ tsp[1] = rb_time_timespec(args.mtime);
2212
2370
  }
2371
+ args.tsp = tsp;
2213
2372
 
2214
- n = apply2files(utime_internal, rest, tsp);
2373
+ n = apply2files(utime_internal, rest, &args);
2215
2374
  return LONG2FIX(n);
2216
2375
  }
2217
2376
 
@@ -2227,7 +2386,7 @@ sys_fail2(VALUE s1, VALUE s2)
2227
2386
  #endif
2228
2387
  const char *e1, *e2;
2229
2388
  int len = 5;
2230
- int l1 = RSTRING_LEN(s1), l2 = RSTRING_LEN(s2);
2389
+ long l1 = RSTRING_LEN(s1), l2 = RSTRING_LEN(s2);
2231
2390
 
2232
2391
  e1 = e2 = "";
2233
2392
  if (l1 > max_pathlen) {
@@ -2240,22 +2399,23 @@ sys_fail2(VALUE s1, VALUE s2)
2240
2399
  e2 = "...";
2241
2400
  len += 3;
2242
2401
  }
2243
- len += l1 + l2;
2402
+ len += (int)l1 + (int)l2;
2244
2403
  buf = ALLOCA_N(char, len);
2245
2404
  snprintf(buf, len, "(%.*s%s, %.*s%s)",
2246
- l1, RSTRING_PTR(s1), e1,
2247
- l2, RSTRING_PTR(s2), e2);
2405
+ (int)l1, RSTRING_PTR(s1), e1,
2406
+ (int)l2, RSTRING_PTR(s2), e2);
2248
2407
  rb_sys_fail(buf);
2249
2408
  }
2250
2409
 
2410
+ #ifdef HAVE_LINK
2251
2411
  /*
2252
2412
  * call-seq:
2253
- * File.link(old_name, new_name) => 0
2254
- *
2413
+ * File.link(old_name, new_name) -> 0
2414
+ *
2255
2415
  * Creates a new name for an existing file using a hard link. Will not
2256
2416
  * overwrite <i>new_name</i> if it already exists (raising a subclass
2257
2417
  * of <code>SystemCallError</code>). Not available on all platforms.
2258
- *
2418
+ *
2259
2419
  * File.link("testfile", ".testfile") #=> 0
2260
2420
  * IO.readlines(".testfile")[0] #=> "This is line one\n"
2261
2421
  */
@@ -2263,58 +2423,60 @@ sys_fail2(VALUE s1, VALUE s2)
2263
2423
  static VALUE
2264
2424
  rb_file_s_link(VALUE klass, VALUE from, VALUE to)
2265
2425
  {
2266
- #ifdef HAVE_LINK
2267
2426
  rb_secure(2);
2268
2427
  FilePathValue(from);
2269
2428
  FilePathValue(to);
2429
+ from = rb_str_encode_ospath(from);
2430
+ to = rb_str_encode_ospath(to);
2270
2431
 
2271
2432
  if (link(StringValueCStr(from), StringValueCStr(to)) < 0) {
2272
2433
  sys_fail2(from, to);
2273
2434
  }
2274
2435
  return INT2FIX(0);
2436
+ }
2275
2437
  #else
2276
- rb_notimplement();
2277
- return Qnil; /* not reached */
2438
+ #define rb_file_s_link rb_f_notimplement
2278
2439
  #endif
2279
- }
2280
2440
 
2441
+ #ifdef HAVE_SYMLINK
2281
2442
  /*
2282
2443
  * call-seq:
2283
- * File.symlink(old_name, new_name) => 0
2284
- *
2444
+ * File.symlink(old_name, new_name) -> 0
2445
+ *
2285
2446
  * Creates a symbolic link called <i>new_name</i> for the existing file
2286
2447
  * <i>old_name</i>. Raises a <code>NotImplemented</code> exception on
2287
2448
  * platforms that do not support symbolic links.
2288
- *
2449
+ *
2289
2450
  * File.symlink("testfile", "link2test") #=> 0
2290
- *
2451
+ *
2291
2452
  */
2292
2453
 
2293
2454
  static VALUE
2294
2455
  rb_file_s_symlink(VALUE klass, VALUE from, VALUE to)
2295
2456
  {
2296
- #ifdef HAVE_SYMLINK
2297
2457
  rb_secure(2);
2298
2458
  FilePathValue(from);
2299
2459
  FilePathValue(to);
2460
+ from = rb_str_encode_ospath(from);
2461
+ to = rb_str_encode_ospath(to);
2300
2462
 
2301
2463
  if (symlink(StringValueCStr(from), StringValueCStr(to)) < 0) {
2302
2464
  sys_fail2(from, to);
2303
2465
  }
2304
2466
  return INT2FIX(0);
2467
+ }
2305
2468
  #else
2306
- rb_notimplement();
2307
- return Qnil; /* not reached */
2469
+ #define rb_file_s_symlink rb_f_notimplement
2308
2470
  #endif
2309
- }
2310
2471
 
2472
+ #ifdef HAVE_READLINK
2311
2473
  /*
2312
2474
  * call-seq:
2313
- * File.readlink(link_name) -> file_name
2314
- *
2475
+ * File.readlink(link_name) -> file_name
2476
+ *
2315
2477
  * Returns the name of the file referenced by the given link.
2316
2478
  * Not available on all platforms.
2317
- *
2479
+ *
2318
2480
  * File.symlink("testfile", "link2test") #=> 0
2319
2481
  * File.readlink("link2test") #=> "testfile"
2320
2482
  */
@@ -2322,14 +2484,14 @@ rb_file_s_symlink(VALUE klass, VALUE from, VALUE to)
2322
2484
  static VALUE
2323
2485
  rb_file_s_readlink(VALUE klass, VALUE path)
2324
2486
  {
2325
- #ifdef HAVE_READLINK
2326
2487
  char *buf;
2327
2488
  int size = 100;
2328
- int rv;
2489
+ ssize_t rv;
2329
2490
  VALUE v;
2330
2491
 
2331
2492
  rb_secure(2);
2332
2493
  FilePathValue(path);
2494
+ path = rb_str_encode_ospath(path);
2333
2495
  buf = xmalloc(size);
2334
2496
  while ((rv = readlink(RSTRING_PTR(path), buf, size)) == size
2335
2497
  #ifdef _AIX
@@ -2343,15 +2505,14 @@ rb_file_s_readlink(VALUE klass, VALUE path)
2343
2505
  xfree(buf);
2344
2506
  rb_sys_fail_path(path);
2345
2507
  }
2346
- v = rb_tainted_str_new(buf, rv);
2508
+ v = rb_filesystem_str_new(buf, rv);
2347
2509
  xfree(buf);
2348
2510
 
2349
2511
  return v;
2512
+ }
2350
2513
  #else
2351
- rb_notimplement();
2352
- return Qnil; /* not reached */
2514
+ #define rb_file_s_readlink rb_f_notimplement
2353
2515
  #endif
2354
- }
2355
2516
 
2356
2517
  static void
2357
2518
  unlink_internal(const char *path, void *arg)
@@ -2362,9 +2523,9 @@ unlink_internal(const char *path, void *arg)
2362
2523
 
2363
2524
  /*
2364
2525
  * call-seq:
2365
- * File.delete(file_name, ...) => integer
2366
- * File.unlink(file_name, ...) => integer
2367
- *
2526
+ * File.delete(file_name, ...) -> integer
2527
+ * File.unlink(file_name, ...) -> integer
2528
+ *
2368
2529
  * Deletes the named files, returning the number of names
2369
2530
  * passed as arguments. Raises an exception on any error.
2370
2531
  * See also <code>Dir::rmdir</code>.
@@ -2382,11 +2543,11 @@ rb_file_s_unlink(VALUE klass, VALUE args)
2382
2543
 
2383
2544
  /*
2384
2545
  * call-seq:
2385
- * File.rename(old_name, new_name) => 0
2386
- *
2546
+ * File.rename(old_name, new_name) -> 0
2547
+ *
2387
2548
  * Renames the given file to the new name. Raises a
2388
2549
  * <code>SystemCallError</code> if the file cannot be renamed.
2389
- *
2550
+ *
2390
2551
  * File.rename("afile", "afile.bak") #=> 0
2391
2552
  */
2392
2553
 
@@ -2394,17 +2555,20 @@ static VALUE
2394
2555
  rb_file_s_rename(VALUE klass, VALUE from, VALUE to)
2395
2556
  {
2396
2557
  const char *src, *dst;
2558
+ VALUE f, t;
2397
2559
 
2398
2560
  rb_secure(2);
2399
2561
  FilePathValue(from);
2400
2562
  FilePathValue(to);
2401
- src = StringValueCStr(from);
2402
- dst = StringValueCStr(to);
2563
+ f = rb_str_encode_ospath(from);
2564
+ t = rb_str_encode_ospath(to);
2565
+ src = StringValueCStr(f);
2566
+ dst = StringValueCStr(t);
2403
2567
  #if defined __CYGWIN__
2404
2568
  errno = 0;
2405
2569
  #endif
2406
2570
  if (rename(src, dst) < 0) {
2407
- #if defined DOSISH && !defined _WIN32
2571
+ #if defined DOSISH
2408
2572
  switch (errno) {
2409
2573
  case EEXIST:
2410
2574
  #if defined (__EMX__)
@@ -2424,15 +2588,15 @@ rb_file_s_rename(VALUE klass, VALUE from, VALUE to)
2424
2588
 
2425
2589
  /*
2426
2590
  * call-seq:
2427
- * File.umask() => integer
2428
- * File.umask(integer) => integer
2429
- *
2591
+ * File.umask() -> integer
2592
+ * File.umask(integer) -> integer
2593
+ *
2430
2594
  * Returns the current umask value for this process. If the optional
2431
2595
  * argument is given, set the umask to that value and return the
2432
2596
  * previous value. Umask values are <em>subtracted</em> from the
2433
2597
  * default permissions, so a umask of <code>0222</code> would make a
2434
2598
  * file read-only for everyone.
2435
- *
2599
+ *
2436
2600
  * File.umask(0006) #=> 18
2437
2601
  * File.umask #=> 6
2438
2602
  */
@@ -2451,7 +2615,7 @@ rb_file_s_umask(int argc, VALUE *argv)
2451
2615
  omask = umask(NUM2INT(argv[0]));
2452
2616
  }
2453
2617
  else {
2454
- rb_raise(rb_eArgError, "wrong number of arguments");
2618
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..1)", argc);
2455
2619
  }
2456
2620
  return INT2FIX(omask);
2457
2621
  }
@@ -2462,27 +2626,39 @@ rb_file_s_umask(int argc, VALUE *argv)
2462
2626
  #if defined __CYGWIN__ || defined DOSISH
2463
2627
  #define DOSISH_UNC
2464
2628
  #define DOSISH_DRIVE_LETTER
2465
- #define isdirsep(x) ((x) == '/' || (x) == '\\')
2629
+ #define FILE_ALT_SEPARATOR '\\'
2630
+ #endif
2631
+ #ifdef FILE_ALT_SEPARATOR
2632
+ #define isdirsep(x) ((x) == '/' || (x) == FILE_ALT_SEPARATOR)
2633
+ static const char file_alt_separator[] = {FILE_ALT_SEPARATOR, '\0'};
2466
2634
  #else
2467
2635
  #define isdirsep(x) ((x) == '/')
2468
2636
  #endif
2469
2637
 
2638
+ #ifndef USE_NTFS
2470
2639
  #if defined _WIN32 || defined __CYGWIN__
2471
2640
  #define USE_NTFS 1
2472
2641
  #else
2473
2642
  #define USE_NTFS 0
2474
2643
  #endif
2644
+ #endif
2475
2645
 
2476
2646
  #if USE_NTFS
2477
- #define istrailinggabage(x) ((x) == '.' || (x) == ' ')
2647
+ #define istrailinggarbage(x) ((x) == '.' || (x) == ' ')
2478
2648
  #else
2479
- #define istrailinggabage(x) 0
2649
+ #define istrailinggarbage(x) 0
2480
2650
  #endif
2481
2651
 
2482
2652
  #ifndef CharNext /* defined as CharNext[AW] on Windows. */
2483
2653
  # define CharNext(p) ((p) + 1)
2484
2654
  #endif
2485
2655
 
2656
+ #if defined(DOSISH_UNC)
2657
+ #define has_unc(buf) (isdirsep((buf)[0]) && isdirsep((buf)[1]))
2658
+ #else
2659
+ #define has_unc(buf) 0
2660
+ #endif
2661
+
2486
2662
  #ifdef DOSISH_DRIVE_LETTER
2487
2663
  static inline int
2488
2664
  has_drive_letter(const char *buf)
@@ -2521,6 +2697,19 @@ getcwdofdrv(int drv)
2521
2697
  }
2522
2698
  return drvcwd;
2523
2699
  }
2700
+
2701
+ static inline int
2702
+ not_same_drive(VALUE path, int drive)
2703
+ {
2704
+ const char *p = RSTRING_PTR(path);
2705
+ if (RSTRING_LEN(path) < 2) return 0;
2706
+ if (has_drive_letter(p)) {
2707
+ return TOLOWER(p[0]) != TOLOWER(drive);
2708
+ }
2709
+ else {
2710
+ return has_unc(p);
2711
+ }
2712
+ }
2524
2713
  #endif
2525
2714
 
2526
2715
  static inline char *
@@ -2543,7 +2732,7 @@ rb_path_next(const char *s)
2543
2732
  return (char *)s;
2544
2733
  }
2545
2734
 
2546
- #if defined(DOSISH_UNC) || defined(DOSISH_DRIVE_LETTER)
2735
+ #if defined(DOSISH_UNC) || defined(DOSISH_DRIVE_LETTER)
2547
2736
  #define skipprefix rb_path_skip_prefix
2548
2737
  #else
2549
2738
  #define skipprefix(path) (path)
@@ -2551,7 +2740,7 @@ rb_path_next(const char *s)
2551
2740
  char *
2552
2741
  rb_path_skip_prefix(const char *path)
2553
2742
  {
2554
- #if defined(DOSISH_UNC) || defined(DOSISH_DRIVE_LETTER)
2743
+ #if defined(DOSISH_UNC) || defined(DOSISH_DRIVE_LETTER)
2555
2744
  #ifdef DOSISH_UNC
2556
2745
  if (isdirsep(path[0]) && isdirsep(path[1])) {
2557
2746
  path += 2;
@@ -2569,7 +2758,19 @@ rb_path_skip_prefix(const char *path)
2569
2758
  return (char *)path;
2570
2759
  }
2571
2760
 
2572
- #define strrdirsep rb_path_last_separator
2761
+ static inline char *
2762
+ skipprefixroot(const char *path)
2763
+ {
2764
+ #if defined(DOSISH_UNC) || defined(DOSISH_DRIVE_LETTER)
2765
+ char *p = skipprefix(path);
2766
+ while (isdirsep(*p)) p++;
2767
+ return p;
2768
+ #else
2769
+ return skiproot(path);
2770
+ #endif
2771
+ }
2772
+
2773
+ #define strrdirsep rb_path_last_separator
2573
2774
  char *
2574
2775
  rb_path_last_separator(const char *path)
2575
2776
  {
@@ -2617,9 +2818,9 @@ ntfs_tail(const char *path)
2617
2818
  {
2618
2819
  while (*path == '.') path++;
2619
2820
  while (*path && *path != ':') {
2620
- if (istrailinggabage(*path)) {
2821
+ if (istrailinggarbage(*path)) {
2621
2822
  const char *last = path++;
2622
- while (istrailinggabage(*path)) path++;
2823
+ while (istrailinggarbage(*path)) path++;
2623
2824
  if (!*path || *path == ':') return (char *)last;
2624
2825
  }
2625
2826
  else if (isdirsep(*path)) {
@@ -2637,7 +2838,7 @@ ntfs_tail(const char *path)
2637
2838
  #endif
2638
2839
 
2639
2840
  #define BUFCHECK(cond) do {\
2640
- long bdiff = p - buf;\
2841
+ bdiff = p - buf;\
2641
2842
  if (cond) {\
2642
2843
  do {buflen *= 2;} while (cond);\
2643
2844
  rb_str_resize(result, buflen);\
@@ -2652,72 +2853,92 @@ ntfs_tail(const char *path)
2652
2853
  buflen = RSTRING_LEN(result),\
2653
2854
  pend = p + buflen)
2654
2855
 
2655
- #define SET_EXTERNAL_ENCODING() (\
2656
- (void)(extenc || (extenc = rb_default_external_encoding())),\
2657
- rb_enc_associate(result, extenc))
2856
+ VALUE
2857
+ rb_home_dir(const char *user, VALUE result)
2858
+ {
2859
+ const char *dir;
2860
+ char *buf;
2861
+ #if defined DOSISH || defined __CYGWIN__
2862
+ char *p;
2863
+ #endif
2864
+ long dirlen;
2658
2865
 
2659
- static int is_absolute_path(const char*);
2866
+ if (!user || !*user) {
2867
+ if (!(dir = getenv("HOME"))) {
2868
+ rb_raise(rb_eArgError, "couldn't find HOME environment -- expanding `~'");
2869
+ }
2870
+ dirlen = strlen(dir);
2871
+ rb_str_resize(result, dirlen);
2872
+ memcpy(buf = RSTRING_PTR(result), dir, dirlen);
2873
+ }
2874
+ else {
2875
+ #ifdef HAVE_PWD_H
2876
+ struct passwd *pwPtr = getpwnam(user);
2877
+ if (!pwPtr) {
2878
+ endpwent();
2879
+ rb_raise(rb_eArgError, "user %s doesn't exist", user);
2880
+ }
2881
+ dirlen = strlen(pwPtr->pw_dir);
2882
+ rb_str_resize(result, dirlen);
2883
+ strcpy(buf = RSTRING_PTR(result), pwPtr->pw_dir);
2884
+ endpwent();
2885
+ #else
2886
+ return Qnil;
2887
+ #endif
2888
+ }
2889
+ #if defined DOSISH || defined __CYGWIN__
2890
+ for (p = buf; *p; p = CharNext(p)) {
2891
+ if (*p == '\\') {
2892
+ *p = '/';
2893
+ }
2894
+ }
2895
+ #endif
2896
+ rb_enc_associate_index(result, rb_filesystem_encindex());
2897
+ return result;
2898
+ }
2660
2899
 
2661
2900
  static VALUE
2662
2901
  file_expand_path(VALUE fname, VALUE dname, int abs_mode, VALUE result)
2663
2902
  {
2664
2903
  const char *s, *b;
2665
2904
  char *buf, *p, *pend, *root;
2666
- long buflen, dirlen;
2905
+ size_t buflen, dirlen, bdiff;
2667
2906
  int tainted;
2668
- rb_encoding *extenc = 0;
2669
2907
 
2670
- FilePathValue(fname);
2671
2908
  s = StringValuePtr(fname);
2672
2909
  BUFINIT();
2673
2910
  tainted = OBJ_TAINTED(fname);
2674
2911
 
2675
2912
  if (s[0] == '~' && abs_mode == 0) { /* execute only if NOT absolute_path() */
2913
+ long userlen = 0;
2914
+ tainted = 1;
2676
2915
  if (isdirsep(s[1]) || s[1] == '\0') {
2677
- const char *dir = getenv("HOME");
2678
-
2679
- if (!dir) {
2680
- rb_raise(rb_eArgError, "couldn't find HOME environment -- expanding `%s'", s);
2681
- }
2682
- dirlen = strlen(dir);
2683
- BUFCHECK(dirlen > buflen);
2684
- strcpy(buf, dir);
2685
- #if defined DOSISH || defined __CYGWIN__
2686
- for (p = buf; *p; p = CharNext(p)) {
2687
- if (*p == '\\') {
2688
- *p = '/';
2689
- }
2690
- }
2691
- #else
2692
- p = buf + strlen(dir);
2693
- #endif
2694
- s++;
2695
- tainted = 1;
2696
- SET_EXTERNAL_ENCODING();
2916
+ buf = 0;
2917
+ rb_str_set_len(result, 0);
2918
+ if (*++s) ++s;
2697
2919
  }
2698
2920
  else {
2699
- #ifdef HAVE_PWD_H
2700
- struct passwd *pwPtr;
2701
- s++;
2702
- #endif
2703
2921
  s = nextdirsep(b = s);
2704
- BUFCHECK(bdiff + (s-b) >= buflen);
2705
- memcpy(p, b, s-b);
2706
- p += s-b;
2707
- *p = '\0';
2708
- #ifdef HAVE_PWD_H
2709
- pwPtr = getpwnam(buf);
2710
- if (!pwPtr) {
2711
- endpwent();
2712
- rb_raise(rb_eArgError, "user %s doesn't exist", buf);
2922
+ userlen = s - b;
2923
+ BUFCHECK(bdiff + userlen >= buflen);
2924
+ memcpy(p, b, userlen);
2925
+ rb_str_set_len(result, userlen);
2926
+ buf = p + 1;
2927
+ p += userlen;
2928
+ }
2929
+ if (NIL_P(rb_home_dir(buf, result))) {
2930
+ rb_raise(rb_eArgError, "can't find user %s", buf);
2931
+ }
2932
+ if (!rb_is_absolute_path(RSTRING_PTR(result))) {
2933
+ if (userlen) {
2934
+ rb_raise(rb_eArgError, "non-absolute home of %.*s", (int)userlen, b);
2935
+ }
2936
+ else {
2937
+ rb_raise(rb_eArgError, "non-absolute home");
2713
2938
  }
2714
- dirlen = strlen(pwPtr->pw_dir);
2715
- BUFCHECK(dirlen > buflen);
2716
- strcpy(buf, pwPtr->pw_dir);
2717
- p = buf + strlen(pwPtr->pw_dir);
2718
- endpwent();
2719
- #endif
2720
2939
  }
2940
+ BUFINIT();
2941
+ p = pend;
2721
2942
  }
2722
2943
  #ifdef DOSISH_DRIVE_LETTER
2723
2944
  /* skip drive letter */
@@ -2729,11 +2950,12 @@ file_expand_path(VALUE fname, VALUE dname, int abs_mode, VALUE result)
2729
2950
  memcpy(p, s, 2);
2730
2951
  p += 2;
2731
2952
  s += 2;
2953
+ rb_enc_copy(result, fname);
2732
2954
  }
2733
2955
  else {
2734
2956
  /* specified drive, but not full path */
2735
2957
  int same = 0;
2736
- if (!NIL_P(dname)) {
2958
+ if (!NIL_P(dname) && !not_same_drive(dname, s[0])) {
2737
2959
  file_expand_path(dname, Qnil, abs_mode, result);
2738
2960
  BUFINIT();
2739
2961
  if (has_drive_letter(p) && TOLOWER(p[0]) == TOLOWER(s[0])) {
@@ -2749,17 +2971,20 @@ file_expand_path(VALUE fname, VALUE dname, int abs_mode, VALUE result)
2749
2971
  BUFCHECK(dirlen > buflen);
2750
2972
  strcpy(buf, dir);
2751
2973
  xfree(dir);
2752
- SET_EXTERNAL_ENCODING();
2974
+ rb_enc_associate_index(result, rb_filesystem_encindex());
2753
2975
  }
2976
+ else
2977
+ rb_enc_associate(result, rb_enc_check(result, fname));
2754
2978
  p = chompdirsep(skiproot(buf));
2755
2979
  s += 2;
2756
2980
  }
2757
2981
  }
2758
2982
  #endif
2759
- else if (!is_absolute_path(s)) {
2983
+ else if (!rb_is_absolute_path(s)) {
2760
2984
  if (!NIL_P(dname)) {
2761
2985
  file_expand_path(dname, Qnil, abs_mode, result);
2762
2986
  BUFINIT();
2987
+ rb_enc_associate(result, rb_enc_check(result, fname));
2763
2988
  }
2764
2989
  else {
2765
2990
  char *dir = my_getcwd();
@@ -2769,7 +2994,7 @@ file_expand_path(VALUE fname, VALUE dname, int abs_mode, VALUE result)
2769
2994
  BUFCHECK(dirlen > buflen);
2770
2995
  strcpy(buf, dir);
2771
2996
  xfree(dir);
2772
- SET_EXTERNAL_ENCODING();
2997
+ rb_enc_associate_index(result, rb_filesystem_encindex());
2773
2998
  }
2774
2999
  #if defined DOSISH || defined __CYGWIN__
2775
3000
  if (isdirsep(*s)) {
@@ -2782,19 +3007,25 @@ file_expand_path(VALUE fname, VALUE dname, int abs_mode, VALUE result)
2782
3007
  p = chompdirsep(skiproot(buf));
2783
3008
  }
2784
3009
  else {
3010
+ size_t len;
2785
3011
  b = s;
2786
3012
  do s++; while (isdirsep(*s));
2787
- p = buf + (s - b);
3013
+ len = s - b;
3014
+ p = buf + len;
2788
3015
  BUFCHECK(bdiff >= buflen);
2789
- memset(buf, '/', p - buf);
3016
+ memset(buf, '/', len);
3017
+ rb_str_set_len(result, len);
3018
+ rb_enc_associate(result, rb_enc_check(result, fname));
2790
3019
  }
2791
3020
  if (p > buf && p[-1] == '/')
2792
3021
  --p;
2793
3022
  else {
3023
+ rb_str_set_len(result, p-buf);
2794
3024
  BUFCHECK(bdiff + 1 >= buflen);
2795
3025
  *p = '/';
2796
3026
  }
2797
3027
 
3028
+ rb_str_set_len(result, p-buf+1);
2798
3029
  BUFCHECK(bdiff + 1 >= buflen);
2799
3030
  p[1] = 0;
2800
3031
  root = skipprefix(buf);
@@ -2823,7 +3054,7 @@ file_expand_path(VALUE fname, VALUE dname, int abs_mode, VALUE result)
2823
3054
  }
2824
3055
  #if USE_NTFS
2825
3056
  else {
2826
- do *++s; while (istrailinggabage(*s));
3057
+ do ++s; while (istrailinggarbage(*s));
2827
3058
  }
2828
3059
  #endif
2829
3060
  break;
@@ -2843,7 +3074,7 @@ file_expand_path(VALUE fname, VALUE dname, int abs_mode, VALUE result)
2843
3074
  --s;
2844
3075
  case ' ': {
2845
3076
  const char *e = s;
2846
- while (istrailinggabage(*s)) s++;
3077
+ while (istrailinggarbage(*s)) s++;
2847
3078
  if (!*s) {
2848
3079
  s = e;
2849
3080
  goto endpath;
@@ -2858,6 +3089,7 @@ file_expand_path(VALUE fname, VALUE dname, int abs_mode, VALUE result)
2858
3089
  #endif
2859
3090
  if (s > b) {
2860
3091
  long rootdiff = root - buf;
3092
+ rb_str_set_len(result, p-buf+1);
2861
3093
  BUFCHECK(bdiff + (s-b+1) >= buflen);
2862
3094
  root = buf + rootdiff;
2863
3095
  memcpy(++p, b, s-b);
@@ -2874,14 +3106,21 @@ file_expand_path(VALUE fname, VALUE dname, int abs_mode, VALUE result)
2874
3106
 
2875
3107
  if (s > b) {
2876
3108
  #if USE_NTFS
3109
+ static const char prime[] = ":$DATA";
3110
+ enum {prime_len = sizeof(prime) -1};
2877
3111
  endpath:
2878
- if (s > b + 6 && strncasecmp(s - 6, ":$DATA", 6) == 0) {
3112
+ if (s > b + prime_len && strncasecmp(s - prime_len, prime, prime_len) == 0) {
2879
3113
  /* alias of stream */
2880
3114
  /* get rid of a bug of x64 VC++ */
2881
- if (*(s-7) == ':') s -= 7; /* prime */
2882
- else if (memchr(b, ':', s - 6 - b)) s -= 6; /* alternative */
3115
+ if (*(s - (prime_len+1)) == ':') {
3116
+ s -= prime_len + 1; /* prime */
3117
+ }
3118
+ else if (memchr(b, ':', s - prime_len - b)) {
3119
+ s -= prime_len; /* alternative */
3120
+ }
2883
3121
  }
2884
3122
  #endif
3123
+ rb_str_set_len(result, p-buf+1);
2885
3124
  BUFCHECK(bdiff + (s-b) >= buflen);
2886
3125
  memcpy(++p, b, s-b);
2887
3126
  p += s-b;
@@ -2947,16 +3186,29 @@ file_expand_path(VALUE fname, VALUE dname, int abs_mode, VALUE result)
2947
3186
  return result;
2948
3187
  }
2949
3188
 
3189
+ #define EXPAND_PATH_BUFFER() rb_usascii_str_new(0, MAXPATHLEN + 2)
3190
+
3191
+ #define check_expand_path_args(fname, dname) \
3192
+ ((fname = rb_get_path(fname)), \
3193
+ (NIL_P(dname) ? dname : (dname = rb_get_path(dname))))
3194
+
3195
+ static VALUE
3196
+ file_expand_path_1(VALUE fname)
3197
+ {
3198
+ return file_expand_path(fname, Qnil, 0, EXPAND_PATH_BUFFER());
3199
+ }
3200
+
2950
3201
  VALUE
2951
3202
  rb_file_expand_path(VALUE fname, VALUE dname)
2952
3203
  {
2953
- return file_expand_path(fname, dname, 0, rb_usascii_str_new(0, MAXPATHLEN + 2));
3204
+ check_expand_path_args(fname, dname);
3205
+ return file_expand_path(fname, dname, 0, EXPAND_PATH_BUFFER());
2954
3206
  }
2955
3207
 
2956
3208
  /*
2957
3209
  * call-seq:
2958
- * File.expand_path(file_name [, dir_string] ) -> abs_file_name
2959
- *
3210
+ * File.expand_path(file_name [, dir_string] ) -> abs_file_name
3211
+ *
2960
3212
  * Converts a pathname to an absolute pathname. Relative paths are
2961
3213
  * referenced from the current working directory of the process unless
2962
3214
  * <i>dir_string</i> is given, in which case it will be used as the
@@ -2965,7 +3217,7 @@ rb_file_expand_path(VALUE fname, VALUE dname)
2965
3217
  * directory (the environment variable <code>HOME</code> must be set
2966
3218
  * correctly). ``<code>~</code><i>user</i>'' expands to the named
2967
3219
  * user's home directory.
2968
- *
3220
+ *
2969
3221
  * File.expand_path("~oracle/bin") #=> "/home/oracle/bin"
2970
3222
  * File.expand_path("../../bin", "/tmp/x") #=> "/bin"
2971
3223
  */
@@ -2986,19 +3238,20 @@ rb_file_s_expand_path(int argc, VALUE *argv)
2986
3238
  VALUE
2987
3239
  rb_file_absolute_path(VALUE fname, VALUE dname)
2988
3240
  {
2989
- return file_expand_path(fname, dname, 1, rb_usascii_str_new(0, MAXPATHLEN + 2));
3241
+ check_expand_path_args(fname, dname);
3242
+ return file_expand_path(fname, dname, 1, EXPAND_PATH_BUFFER());
2990
3243
  }
2991
3244
 
2992
3245
  /*
2993
3246
  * call-seq:
2994
- * File.absolute_path(file_name [, dir_string] ) -> abs_file_name
2995
- *
3247
+ * File.absolute_path(file_name [, dir_string] ) -> abs_file_name
3248
+ *
2996
3249
  * Converts a pathname to an absolute pathname. Relative paths are
2997
3250
  * referenced from the current working directory of the process unless
2998
3251
  * <i>dir_string</i> is given, in which case it will be used as the
2999
3252
  * starting point. If the given pathname starts with a ``<code>~</code>''
3000
3253
  * it is NOT expanded, it is treated as a normal directory name.
3001
- *
3254
+ *
3002
3255
  * File.absolute_path("~oracle/bin") #=> "<relative_path>/~oracle/bin"
3003
3256
  */
3004
3257
 
@@ -3015,10 +3268,210 @@ rb_file_s_absolute_path(int argc, VALUE *argv)
3015
3268
  return rb_file_absolute_path(fname, dname);
3016
3269
  }
3017
3270
 
3018
- static int
3019
- rmext(const char *p, int l1, const char *e)
3271
+ static void
3272
+ realpath_rec(long *prefixlenp, VALUE *resolvedp, char *unresolved, VALUE loopcheck, int strict, int last)
3273
+ {
3274
+ ID resolving;
3275
+ CONST_ID(resolving, "resolving");
3276
+ while (*unresolved) {
3277
+ char *testname = unresolved;
3278
+ char *unresolved_firstsep = rb_path_next(unresolved);
3279
+ long testnamelen = unresolved_firstsep - unresolved;
3280
+ char *unresolved_nextname = unresolved_firstsep;
3281
+ while (isdirsep(*unresolved_nextname)) unresolved_nextname++;
3282
+ unresolved = unresolved_nextname;
3283
+ if (testnamelen == 1 && testname[0] == '.') {
3284
+ }
3285
+ else if (testnamelen == 2 && testname[0] == '.' && testname[1] == '.') {
3286
+ if (*prefixlenp < RSTRING_LEN(*resolvedp)) {
3287
+ char *resolved_names = RSTRING_PTR(*resolvedp) + *prefixlenp;
3288
+ char *lastsep = rb_path_last_separator(resolved_names);
3289
+ long len = lastsep ? lastsep - resolved_names : 0;
3290
+ rb_str_resize(*resolvedp, *prefixlenp + len);
3291
+ }
3292
+ }
3293
+ else {
3294
+ VALUE checkval;
3295
+ VALUE testpath = rb_str_dup(*resolvedp);
3296
+ if (*prefixlenp < RSTRING_LEN(testpath))
3297
+ rb_str_cat2(testpath, "/");
3298
+ rb_str_cat(testpath, testname, testnamelen);
3299
+ checkval = rb_hash_aref(loopcheck, testpath);
3300
+ if (!NIL_P(checkval)) {
3301
+ if (checkval == ID2SYM(resolving)) {
3302
+ errno = ELOOP;
3303
+ rb_sys_fail(RSTRING_PTR(testpath));
3304
+ }
3305
+ else {
3306
+ *resolvedp = rb_str_dup(checkval);
3307
+ }
3308
+ }
3309
+ else {
3310
+ struct stat sbuf;
3311
+ int ret;
3312
+ VALUE testpath2 = rb_str_encode_ospath(testpath);
3313
+ ret = lstat(RSTRING_PTR(testpath2), &sbuf);
3314
+ if (ret == -1) {
3315
+ if (errno == ENOENT) {
3316
+ if (strict || !last || *unresolved_firstsep)
3317
+ rb_sys_fail(RSTRING_PTR(testpath));
3318
+ *resolvedp = testpath;
3319
+ break;
3320
+ }
3321
+ else {
3322
+ rb_sys_fail(RSTRING_PTR(testpath));
3323
+ }
3324
+ }
3325
+ #ifdef HAVE_READLINK
3326
+ if (S_ISLNK(sbuf.st_mode)) {
3327
+ volatile VALUE link;
3328
+ char *link_prefix, *link_names;
3329
+ long link_prefixlen;
3330
+ rb_hash_aset(loopcheck, testpath, ID2SYM(resolving));
3331
+ link = rb_file_s_readlink(rb_cFile, testpath);
3332
+ link_prefix = RSTRING_PTR(link);
3333
+ link_names = skipprefixroot(link_prefix);
3334
+ link_prefixlen = link_names - link_prefix;
3335
+ if (link_prefixlen == 0) {
3336
+ realpath_rec(prefixlenp, resolvedp, link_names, loopcheck, strict, *unresolved_firstsep == '\0');
3337
+ }
3338
+ else {
3339
+ *resolvedp = rb_str_new(link_prefix, link_prefixlen);
3340
+ *prefixlenp = link_prefixlen;
3341
+ realpath_rec(prefixlenp, resolvedp, link_names, loopcheck, strict, *unresolved_firstsep == '\0');
3342
+ }
3343
+ rb_hash_aset(loopcheck, testpath, rb_str_dup_frozen(*resolvedp));
3344
+ }
3345
+ else
3346
+ #endif
3347
+ {
3348
+ VALUE s = rb_str_dup_frozen(testpath);
3349
+ rb_hash_aset(loopcheck, s, s);
3350
+ *resolvedp = testpath;
3351
+ }
3352
+ }
3353
+ }
3354
+ }
3355
+ }
3356
+
3357
+ VALUE
3358
+ rb_realpath_internal(VALUE basedir, VALUE path, int strict)
3359
+ {
3360
+ long prefixlen;
3361
+ VALUE resolved;
3362
+ volatile VALUE unresolved_path;
3363
+ VALUE loopcheck;
3364
+ volatile VALUE curdir = Qnil;
3365
+
3366
+ char *path_names = NULL, *basedir_names = NULL, *curdir_names = NULL;
3367
+ char *ptr, *prefixptr = NULL;
3368
+
3369
+ rb_secure(2);
3370
+
3371
+ FilePathValue(path);
3372
+ unresolved_path = rb_str_dup_frozen(path);
3373
+
3374
+ if (!NIL_P(basedir)) {
3375
+ FilePathValue(basedir);
3376
+ basedir = rb_str_dup_frozen(basedir);
3377
+ }
3378
+
3379
+ ptr = RSTRING_PTR(unresolved_path);
3380
+ path_names = skipprefixroot(ptr);
3381
+ if (ptr != path_names) {
3382
+ resolved = rb_enc_str_new(ptr, path_names - ptr,
3383
+ rb_enc_get(unresolved_path));
3384
+ goto root_found;
3385
+ }
3386
+
3387
+ if (!NIL_P(basedir)) {
3388
+ ptr = RSTRING_PTR(basedir);
3389
+ basedir_names = skipprefixroot(ptr);
3390
+ if (ptr != basedir_names) {
3391
+ resolved = rb_enc_str_new(ptr, basedir_names - ptr,
3392
+ rb_enc_get(basedir));
3393
+ goto root_found;
3394
+ }
3395
+ }
3396
+
3397
+ curdir = rb_dir_getwd();
3398
+ ptr = RSTRING_PTR(curdir);
3399
+ curdir_names = skipprefixroot(ptr);
3400
+ resolved = rb_enc_str_new(ptr, curdir_names - ptr, rb_enc_get(curdir));
3401
+
3402
+ root_found:
3403
+ prefixptr = RSTRING_PTR(resolved);
3404
+ prefixlen = RSTRING_LEN(resolved);
3405
+ ptr = chompdirsep(prefixptr);
3406
+ if (*ptr) {
3407
+ prefixlen = ++ptr - prefixptr;
3408
+ rb_str_set_len(resolved, prefixlen);
3409
+ }
3410
+ #ifdef FILE_ALT_SEPARATOR
3411
+ while (prefixptr < ptr) {
3412
+ if (*prefixptr == FILE_ALT_SEPARATOR) {
3413
+ *prefixptr = '/';
3414
+ }
3415
+ prefixptr = CharNext(prefixptr);
3416
+ }
3417
+ #endif
3418
+
3419
+ loopcheck = rb_hash_new();
3420
+ if (curdir_names)
3421
+ realpath_rec(&prefixlen, &resolved, curdir_names, loopcheck, 1, 0);
3422
+ if (basedir_names)
3423
+ realpath_rec(&prefixlen, &resolved, basedir_names, loopcheck, 1, 0);
3424
+ realpath_rec(&prefixlen, &resolved, path_names, loopcheck, strict, 1);
3425
+
3426
+ OBJ_TAINT(resolved);
3427
+ return resolved;
3428
+ }
3429
+
3430
+ /*
3431
+ * call-seq:
3432
+ * File.realpath(pathname [, dir_string]) -> real_pathname
3433
+ *
3434
+ * Returns the real (absolute) pathname of _pathname_ in the actual
3435
+ * filesystem not containing symlinks or useless dots.
3436
+ *
3437
+ * If _dir_string_ is given, it is used as a base directory
3438
+ * for interpreting relative pathname instead of the current directory.
3439
+ *
3440
+ * All components of the pathname must exist when this method is
3441
+ * called.
3442
+ */
3443
+ static VALUE
3444
+ rb_file_s_realpath(int argc, VALUE *argv, VALUE klass)
3445
+ {
3446
+ VALUE path, basedir;
3447
+ rb_scan_args(argc, argv, "11", &path, &basedir);
3448
+ return rb_realpath_internal(basedir, path, 1);
3449
+ }
3450
+
3451
+ /*
3452
+ * call-seq:
3453
+ * File.realdirpath(pathname [, dir_string]) -> real_pathname
3454
+ *
3455
+ * Returns the real (absolute) pathname of _pathname_ in the actual filesystem.
3456
+ * The real pathname doesn't contain symlinks or useless dots.
3457
+ *
3458
+ * If _dir_string_ is given, it is used as a base directory
3459
+ * for interpreting relative pathname instead of the current directory.
3460
+ *
3461
+ * The last component of the real pathname can be nonexistent.
3462
+ */
3463
+ static VALUE
3464
+ rb_file_s_realdirpath(int argc, VALUE *argv, VALUE klass)
3465
+ {
3466
+ VALUE path, basedir;
3467
+ rb_scan_args(argc, argv, "11", &path, &basedir);
3468
+ return rb_realpath_internal(basedir, path, 0);
3469
+ }
3470
+
3471
+ static size_t
3472
+ rmext(const char *p, long l1, const char *e)
3020
3473
  {
3021
- int l0, l2;
3474
+ long l0, l2;
3022
3475
 
3023
3476
  if (!e) return 0;
3024
3477
 
@@ -3047,36 +3500,15 @@ rmext(const char *p, int l1, const char *e)
3047
3500
  return 0;
3048
3501
  }
3049
3502
 
3050
- /*
3051
- * call-seq:
3052
- * File.basename(file_name [, suffix] ) -> base_name
3053
- *
3054
- * Returns the last component of the filename given in <i>file_name</i>,
3055
- * which must be formed using forward slashes (``<code>/</code>'')
3056
- * regardless of the separator used on the local file system. If
3057
- * <i>suffix</i> is given and present at the end of <i>file_name</i>,
3058
- * it is removed.
3059
- *
3060
- * File.basename("/home/gumby/work/ruby.rb") #=> "ruby.rb"
3061
- * File.basename("/home/gumby/work/ruby.rb", ".rb") #=> "ruby"
3062
- */
3063
-
3064
- static VALUE
3065
- rb_file_s_basename(int argc, VALUE *argv)
3503
+ const char *
3504
+ ruby_find_basename(const char *name, long *len, long *ext)
3066
3505
  {
3067
- VALUE fname, fext, basename;
3068
- const char *name, *p;
3506
+ const char *p;
3069
3507
  #if defined DOSISH_DRIVE_LETTER || defined DOSISH_UNC
3070
3508
  const char *root;
3071
3509
  #endif
3072
- int f, n;
3510
+ long f, n = -1;
3073
3511
 
3074
- if (rb_scan_args(argc, argv, "11", &fname, &fext) == 2) {
3075
- StringValue(fext);
3076
- }
3077
- FilePathStringValue(fname);
3078
- if (RSTRING_LEN(fname) == 0 || !*(name = RSTRING_PTR(fname)))
3079
- return fname;
3080
3512
  name = skipprefix(name);
3081
3513
  #if defined DOSISH_DRIVE_LETTER || defined DOSISH_UNC
3082
3514
  root = name;
@@ -3115,11 +3547,57 @@ rb_file_s_basename(int argc, VALUE *argv)
3115
3547
  #else
3116
3548
  n = chompdirsep(p) - p;
3117
3549
  #endif
3550
+ }
3551
+
3552
+ if (len)
3553
+ *len = f;
3554
+ if (ext)
3555
+ *ext = n;
3556
+ return p;
3557
+ }
3558
+
3559
+ /*
3560
+ * call-seq:
3561
+ * File.basename(file_name [, suffix] ) -> base_name
3562
+ *
3563
+ * Returns the last component of the filename given in <i>file_name</i>,
3564
+ * which must be formed using forward slashes (``<code>/</code>'')
3565
+ * regardless of the separator used on the local file system. If
3566
+ * <i>suffix</i> is given and present at the end of <i>file_name</i>,
3567
+ * it is removed.
3568
+ *
3569
+ * File.basename("/home/gumby/work/ruby.rb") #=> "ruby.rb"
3570
+ * File.basename("/home/gumby/work/ruby.rb", ".rb") #=> "ruby"
3571
+ */
3572
+
3573
+ static VALUE
3574
+ rb_file_s_basename(int argc, VALUE *argv)
3575
+ {
3576
+ VALUE fname, fext, basename;
3577
+ const char *name, *p;
3578
+ long f, n;
3579
+
3580
+ if (rb_scan_args(argc, argv, "11", &fname, &fext) == 2) {
3581
+ rb_encoding *enc;
3582
+ StringValue(fext);
3583
+ if (!rb_enc_asciicompat(enc = rb_enc_get(fext))) {
3584
+ rb_raise(rb_eEncCompatError, "ascii incompatible character encodings: %s",
3585
+ rb_enc_name(enc));
3586
+ }
3587
+ }
3588
+ FilePathStringValue(fname);
3589
+ if (!NIL_P(fext)) rb_enc_check(fname, fext);
3590
+ if (RSTRING_LEN(fname) == 0 || !*(name = RSTRING_PTR(fname)))
3591
+ return rb_str_new_shared(fname);
3592
+
3593
+ p = ruby_find_basename(name, &f, &n);
3594
+ if (n >= 0) {
3118
3595
  if (NIL_P(fext) || !(f = rmext(p, n, StringValueCStr(fext)))) {
3119
3596
  f = n;
3120
3597
  }
3121
- if (f == RSTRING_LEN(fname)) return fname;
3598
+ if (f == RSTRING_LEN(fname)) return rb_str_new_shared(fname);
3122
3599
  }
3600
+
3123
3601
  basename = rb_str_new(p, f);
3124
3602
  rb_enc_copy(basename, fname);
3125
3603
  OBJ_INFECT(basename, fname);
@@ -3128,18 +3606,24 @@ rb_file_s_basename(int argc, VALUE *argv)
3128
3606
 
3129
3607
  /*
3130
3608
  * call-seq:
3131
- * File.dirname(file_name ) -> dir_name
3132
- *
3609
+ * File.dirname(file_name ) -> dir_name
3610
+ *
3133
3611
  * Returns all components of the filename given in <i>file_name</i>
3134
3612
  * except the last one. The filename must be formed using forward
3135
3613
  * slashes (``<code>/</code>'') regardless of the separator used on the
3136
3614
  * local file system.
3137
- *
3615
+ *
3138
3616
  * File.dirname("/home/gumby/work/ruby.rb") #=> "/home/gumby/work"
3139
3617
  */
3140
3618
 
3141
3619
  static VALUE
3142
3620
  rb_file_s_dirname(VALUE klass, VALUE fname)
3621
+ {
3622
+ return rb_file_dirname(fname);
3623
+ }
3624
+
3625
+ VALUE
3626
+ rb_file_dirname(VALUE fname)
3143
3627
  {
3144
3628
  const char *name, *root, *p;
3145
3629
  VALUE dirname;
@@ -3179,40 +3663,35 @@ rb_file_s_dirname(VALUE klass, VALUE fname)
3179
3663
  }
3180
3664
 
3181
3665
  /*
3182
- * call-seq:
3183
- * File.extname(path) -> string
3184
- *
3185
- * Returns the extension (the portion of file name in <i>path</i>
3186
- * after the period).
3187
- *
3188
- * File.extname("test.rb") #=> ".rb"
3189
- * File.extname("a/b/d/test.rb") #=> ".rb"
3190
- * File.extname("test") #=> ""
3191
- * File.extname(".profile") #=> ""
3192
- *
3666
+ * accept a String, and return the pointer of the extension.
3667
+ * if len is passed, set the length of extension to it.
3668
+ * returned pointer is in ``name'' or NULL.
3669
+ * returns *len
3670
+ * no dot NULL 0
3671
+ * dotfile top 0
3672
+ * end with dot dot 1
3673
+ * .ext dot len of .ext
3674
+ * .ext:stream dot len of .ext without :stream (NT only)
3675
+ *
3193
3676
  */
3194
-
3195
- static VALUE
3196
- rb_file_s_extname(VALUE klass, VALUE fname)
3677
+ const char *
3678
+ ruby_find_extname(const char *name, long *len)
3197
3679
  {
3198
- const char *name, *p, *e;
3199
- VALUE extname;
3680
+ const char *p, *e;
3200
3681
 
3201
- FilePathStringValue(fname);
3202
- name = StringValueCStr(fname);
3203
3682
  p = strrdirsep(name); /* get the last path component */
3204
3683
  if (!p)
3205
3684
  p = name;
3206
3685
  else
3207
- name = ++p;
3686
+ do name = ++p; while (isdirsep(*p));
3208
3687
 
3209
3688
  e = 0;
3210
3689
  while (*p && *p == '.') p++;
3211
3690
  while (*p) {
3212
- if (*p == '.' || istrailinggabage(*p)) {
3691
+ if (*p == '.' || istrailinggarbage(*p)) {
3213
3692
  #if USE_NTFS
3214
3693
  const char *last = p++, *dot = last;
3215
- while (istrailinggabage(*p)) {
3694
+ while (istrailinggarbage(*p)) {
3216
3695
  if (*p == '.') dot = p;
3217
3696
  p++;
3218
3697
  }
@@ -3235,9 +3714,46 @@ rb_file_s_extname(VALUE klass, VALUE fname)
3235
3714
  break;
3236
3715
  p = CharNext(p);
3237
3716
  }
3238
- if (!e || e == name || e+1 == p) /* no dot, or the only dot is first or end? */
3717
+
3718
+ if (len) {
3719
+ /* no dot, or the only dot is first or end? */
3720
+ if (!e || e == name)
3721
+ *len = 0;
3722
+ else if (e+1 == p)
3723
+ *len = 1;
3724
+ else
3725
+ *len = p - e;
3726
+ }
3727
+ return e;
3728
+ }
3729
+
3730
+ /*
3731
+ * call-seq:
3732
+ * File.extname(path) -> string
3733
+ *
3734
+ * Returns the extension (the portion of file name in <i>path</i>
3735
+ * after the period).
3736
+ *
3737
+ * File.extname("test.rb") #=> ".rb"
3738
+ * File.extname("a/b/d/test.rb") #=> ".rb"
3739
+ * File.extname("test") #=> ""
3740
+ * File.extname(".profile") #=> ""
3741
+ *
3742
+ */
3743
+
3744
+ static VALUE
3745
+ rb_file_s_extname(VALUE klass, VALUE fname)
3746
+ {
3747
+ const char *name, *e;
3748
+ long len;
3749
+ VALUE extname;
3750
+
3751
+ FilePathStringValue(fname);
3752
+ name = StringValueCStr(fname);
3753
+ e = ruby_find_extname(name, &len);
3754
+ if (len <= 1)
3239
3755
  return rb_str_new(0, 0);
3240
- extname = rb_str_new(e, p - e); /* keep the dot, too! */
3756
+ extname = rb_str_new(e, len); /* keep the dot, too! */
3241
3757
  rb_enc_copy(extname, fname);
3242
3758
  OBJ_INFECT(extname, fname);
3243
3759
  return extname;
@@ -3245,13 +3761,13 @@ rb_file_s_extname(VALUE klass, VALUE fname)
3245
3761
 
3246
3762
  /*
3247
3763
  * call-seq:
3248
- * File.path(path) -> string
3249
- *
3764
+ * File.path(path) -> string
3765
+ *
3250
3766
  * Returns the string representation of the path
3251
- *
3767
+ *
3252
3768
  * File.path("/dev/null") #=> "/dev/null"
3253
3769
  * File.path(Pathname.new("/tmp")) #=> "/tmp"
3254
- *
3770
+ *
3255
3771
  */
3256
3772
 
3257
3773
  static VALUE
@@ -3262,12 +3778,12 @@ rb_file_s_path(VALUE klass, VALUE fname)
3262
3778
 
3263
3779
  /*
3264
3780
  * call-seq:
3265
- * File.split(file_name) => array
3266
- *
3781
+ * File.split(file_name) -> array
3782
+ *
3267
3783
  * Splits the given string into a directory and a file component and
3268
3784
  * returns them in a two-element array. See also
3269
3785
  * <code>File::dirname</code> and <code>File::basename</code>.
3270
- *
3786
+ *
3271
3787
  * File.split("/home/gumby/.profile") #=> ["/home/gumby", ".profile"]
3272
3788
  */
3273
3789
 
@@ -3286,7 +3802,7 @@ static VALUE
3286
3802
  file_inspect_join(VALUE ary, VALUE argp, int recur)
3287
3803
  {
3288
3804
  VALUE *arg = (VALUE *)argp;
3289
- if (recur) return rb_usascii_str_new2("[...]");
3805
+ if (recur || ary == arg[0]) rb_raise(rb_eArgError, "recursive array");
3290
3806
  return rb_file_join(arg[0], arg[1]);
3291
3807
  }
3292
3808
 
@@ -3320,7 +3836,10 @@ rb_file_join(VALUE ary, VALUE sep)
3320
3836
  case T_STRING:
3321
3837
  break;
3322
3838
  case T_ARRAY:
3323
- {
3839
+ if (ary == tmp) {
3840
+ rb_raise(rb_eArgError, "recursive array");
3841
+ }
3842
+ else {
3324
3843
  VALUE args[2];
3325
3844
 
3326
3845
  args[0] = tmp;
@@ -3349,13 +3868,13 @@ rb_file_join(VALUE ary, VALUE sep)
3349
3868
 
3350
3869
  /*
3351
3870
  * call-seq:
3352
- * File.join(string, ...) -> path
3353
- *
3871
+ * File.join(string, ...) -> path
3872
+ *
3354
3873
  * Returns a new string formed by joining the strings using
3355
3874
  * <code>File::SEPARATOR</code>.
3356
- *
3875
+ *
3357
3876
  * File.join("usr", "mail", "gumby") #=> "usr/mail/gumby"
3358
- *
3877
+ *
3359
3878
  */
3360
3879
 
3361
3880
  static VALUE
@@ -3364,19 +3883,20 @@ rb_file_s_join(VALUE klass, VALUE args)
3364
3883
  return rb_file_join(args, separator);
3365
3884
  }
3366
3885
 
3886
+ #if defined(HAVE_TRUNCATE) || defined(HAVE_CHSIZE)
3367
3887
  /*
3368
3888
  * call-seq:
3369
- * File.truncate(file_name, integer) => 0
3370
- *
3889
+ * File.truncate(file_name, integer) -> 0
3890
+ *
3371
3891
  * Truncates the file <i>file_name</i> to be at most <i>integer</i>
3372
3892
  * bytes long. Not available on all platforms.
3373
- *
3893
+ *
3374
3894
  * f = File.new("out", "w")
3375
3895
  * f.write("1234567890") #=> 10
3376
3896
  * f.close #=> nil
3377
3897
  * File.truncate("out", 5) #=> 0
3378
3898
  * File.size("out") #=> 5
3379
- *
3899
+ *
3380
3900
  */
3381
3901
 
3382
3902
  static VALUE
@@ -3387,43 +3907,38 @@ rb_file_s_truncate(VALUE klass, VALUE path, VALUE len)
3387
3907
  rb_secure(2);
3388
3908
  pos = NUM2OFFT(len);
3389
3909
  FilePathValue(path);
3910
+ path = rb_str_encode_ospath(path);
3390
3911
  #ifdef HAVE_TRUNCATE
3391
3912
  if (truncate(StringValueCStr(path), pos) < 0)
3392
3913
  rb_sys_fail(RSTRING_PTR(path));
3393
- #else
3394
- # ifdef HAVE_CHSIZE
3914
+ #else /* defined(HAVE_CHSIZE) */
3395
3915
  {
3396
3916
  int tmpfd;
3397
3917
 
3398
- # ifdef _WIN32
3399
- if ((tmpfd = open(StringValueCStr(path), O_RDWR)) < 0) {
3400
- rb_sys_fail(RSTRING_PTR(path));
3401
- }
3402
- # else
3403
3918
  if ((tmpfd = open(StringValueCStr(path), 0)) < 0) {
3404
3919
  rb_sys_fail(RSTRING_PTR(path));
3405
3920
  }
3406
- # endif
3407
3921
  if (chsize(tmpfd, pos) < 0) {
3408
3922
  close(tmpfd);
3409
3923
  rb_sys_fail(RSTRING_PTR(path));
3410
3924
  }
3411
3925
  close(tmpfd);
3412
3926
  }
3413
- # else
3414
- rb_notimplement();
3415
- # endif
3416
3927
  #endif
3417
3928
  return INT2FIX(0);
3418
3929
  }
3930
+ #else
3931
+ #define rb_file_s_truncate rb_f_notimplement
3932
+ #endif
3419
3933
 
3934
+ #if defined(HAVE_FTRUNCATE) || defined(HAVE_CHSIZE)
3420
3935
  /*
3421
3936
  * call-seq:
3422
- * file.truncate(integer) => 0
3423
- *
3937
+ * file.truncate(integer) -> 0
3938
+ *
3424
3939
  * Truncates <i>file</i> to at most <i>integer</i> bytes. The file
3425
3940
  * must be opened for writing. Not available on all platforms.
3426
- *
3941
+ *
3427
3942
  * f = File.new("out", "w")
3428
3943
  * f.syswrite("1234567890") #=> 10
3429
3944
  * f.truncate(5) #=> 0
@@ -3447,16 +3962,15 @@ rb_file_truncate(VALUE obj, VALUE len)
3447
3962
  #ifdef HAVE_FTRUNCATE
3448
3963
  if (ftruncate(fptr->fd, pos) < 0)
3449
3964
  rb_sys_fail_path(fptr->pathv);
3450
- #else
3451
- # ifdef HAVE_CHSIZE
3965
+ #else /* defined(HAVE_CHSIZE) */
3452
3966
  if (chsize(fptr->fd, pos) < 0)
3453
- rb_sys_fail(fptr->pathv);
3454
- # else
3455
- rb_notimplement();
3456
- # endif
3967
+ rb_sys_fail_path(fptr->pathv);
3457
3968
  #endif
3458
3969
  return INT2FIX(0);
3459
3970
  }
3971
+ #else
3972
+ #define rb_file_truncate rb_f_notimplement
3973
+ #endif
3460
3974
 
3461
3975
  # ifndef LOCK_SH
3462
3976
  # define LOCK_SH 1
@@ -3495,14 +4009,14 @@ rb_thread_flock(void *data)
3495
4009
 
3496
4010
  /*
3497
4011
  * call-seq:
3498
- * file.flock (locking_constant ) => 0 or false
3499
- *
4012
+ * file.flock (locking_constant )-> 0 or false
4013
+ *
3500
4014
  * Locks or unlocks a file according to <i>locking_constant</i> (a
3501
4015
  * logical <em>or</em> of the values in the table below).
3502
4016
  * Returns <code>false</code> if <code>File::LOCK_NB</code> is
3503
4017
  * specified and the operation would otherwise have blocked. Not
3504
4018
  * available on all platforms.
3505
- *
4019
+ *
3506
4020
  * Locking constants (in class File):
3507
4021
  *
3508
4022
  * LOCK_EX | Exclusive lock. Only one process may hold an
@@ -3518,14 +4032,28 @@ rb_thread_flock(void *data)
3518
4032
  *
3519
4033
  * Example:
3520
4034
  *
3521
- * File.new("testfile").flock(File::LOCK_UN) #=> 0
3522
- *
4035
+ * # update a counter using write lock
4036
+ * # don't use "w" because it truncates the file before lock.
4037
+ * File.open("counter", File::RDWR|File::CREAT, 0644) {|f|
4038
+ * f.flock(File::LOCK_EX)
4039
+ * value = f.read.to_i + 1
4040
+ * f.rewind
4041
+ * f.write("#{value}\n")
4042
+ * f.flush
4043
+ * f.truncate(f.pos)
4044
+ * }
4045
+ *
4046
+ * # read the counter using read lock
4047
+ * File.open("counter", "r") {|f|
4048
+ * f.flock(File::LOCK_SH)
4049
+ * p f.read
4050
+ * }
4051
+ *
3523
4052
  */
3524
4053
 
3525
4054
  static VALUE
3526
4055
  rb_file_flock(VALUE obj, VALUE operation)
3527
4056
  {
3528
- #ifndef __CHECKER__
3529
4057
  rb_io_t *fptr;
3530
4058
  int op[2], op1;
3531
4059
 
@@ -3559,7 +4087,6 @@ rb_file_flock(VALUE obj, VALUE operation)
3559
4087
  rb_sys_fail_path(fptr->pathv);
3560
4088
  }
3561
4089
  }
3562
- #endif
3563
4090
  return INT2FIX(0);
3564
4091
  }
3565
4092
  #undef flock
@@ -3588,60 +4115,60 @@ test_check(int n, int argc, VALUE *argv)
3588
4115
 
3589
4116
  /*
3590
4117
  * call-seq:
3591
- * test(int_cmd, file1 [, file2] ) => obj
3592
- *
4118
+ * test(int_cmd, file1 [, file2] ) -> obj
4119
+ *
3593
4120
  * Uses the integer <i>aCmd</i> to perform various tests on
3594
4121
  * <i>file1</i> (first table below) or on <i>file1</i> and
3595
4122
  * <i>file2</i> (second table).
3596
- *
4123
+ *
3597
4124
  * File tests on a single file:
3598
4125
  *
3599
4126
  * Test Returns Meaning
3600
- * ?A | Time | Last access time for file1
3601
- * ?b | boolean | True if file1 is a block device
3602
- * ?c | boolean | True if file1 is a character device
3603
- * ?C | Time | Last change time for file1
3604
- * ?d | boolean | True if file1 exists and is a directory
3605
- * ?e | boolean | True if file1 exists
3606
- * ?f | boolean | True if file1 exists and is a regular file
3607
- * ?g | boolean | True if file1 has the \CF{setgid} bit
4127
+ * "A" | Time | Last access time for file1
4128
+ * "b" | boolean | True if file1 is a block device
4129
+ * "c" | boolean | True if file1 is a character device
4130
+ * "C" | Time | Last change time for file1
4131
+ * "d" | boolean | True if file1 exists and is a directory
4132
+ * "e" | boolean | True if file1 exists
4133
+ * "f" | boolean | True if file1 exists and is a regular file
4134
+ * "g" | boolean | True if file1 has the \CF{setgid} bit
3608
4135
  * | | set (false under NT)
3609
- * ?G | boolean | True if file1 exists and has a group
4136
+ * "G" | boolean | True if file1 exists and has a group
3610
4137
  * | | ownership equal to the caller's group
3611
- * ?k | boolean | True if file1 exists and has the sticky bit set
3612
- * ?l | boolean | True if file1 exists and is a symbolic link
3613
- * ?M | Time | Last modification time for file1
3614
- * ?o | boolean | True if file1 exists and is owned by
4138
+ * "k" | boolean | True if file1 exists and has the sticky bit set
4139
+ * "l" | boolean | True if file1 exists and is a symbolic link
4140
+ * "M" | Time | Last modification time for file1
4141
+ * "o" | boolean | True if file1 exists and is owned by
3615
4142
  * | | the caller's effective uid
3616
- * ?O | boolean | True if file1 exists and is owned by
4143
+ * "O" | boolean | True if file1 exists and is owned by
3617
4144
  * | | the caller's real uid
3618
- * ?p | boolean | True if file1 exists and is a fifo
3619
- * ?r | boolean | True if file1 is readable by the effective
4145
+ * "p" | boolean | True if file1 exists and is a fifo
4146
+ * "r" | boolean | True if file1 is readable by the effective
3620
4147
  * | | uid/gid of the caller
3621
- * ?R | boolean | True if file is readable by the real
4148
+ * "R" | boolean | True if file is readable by the real
3622
4149
  * | | uid/gid of the caller
3623
- * ?s | int/nil | If file1 has nonzero size, return the size,
4150
+ * "s" | int/nil | If file1 has nonzero size, return the size,
3624
4151
  * | | otherwise return nil
3625
- * ?S | boolean | True if file1 exists and is a socket
3626
- * ?u | boolean | True if file1 has the setuid bit set
3627
- * ?w | boolean | True if file1 exists and is writable by
4152
+ * "S" | boolean | True if file1 exists and is a socket
4153
+ * "u" | boolean | True if file1 has the setuid bit set
4154
+ * "w" | boolean | True if file1 exists and is writable by
3628
4155
  * | | the effective uid/gid
3629
- * ?W | boolean | True if file1 exists and is writable by
4156
+ * "W" | boolean | True if file1 exists and is writable by
3630
4157
  * | | the real uid/gid
3631
- * ?x | boolean | True if file1 exists and is executable by
4158
+ * "x" | boolean | True if file1 exists and is executable by
3632
4159
  * | | the effective uid/gid
3633
- * ?X | boolean | True if file1 exists and is executable by
4160
+ * "X" | boolean | True if file1 exists and is executable by
3634
4161
  * | | the real uid/gid
3635
- * ?z | boolean | True if file1 exists and has a zero length
4162
+ * "z" | boolean | True if file1 exists and has a zero length
3636
4163
  *
3637
4164
  * Tests that take two files:
3638
4165
  *
3639
- * ?- | boolean | True if file1 and file2 are identical
3640
- * ?= | boolean | True if the modification times of file1
4166
+ * "-" | boolean | True if file1 and file2 are identical
4167
+ * "=" | boolean | True if the modification times of file1
3641
4168
  * | | and file2 are equal
3642
- * ?< | boolean | True if the modification time of file1
4169
+ * "<" | boolean | True if the modification time of file1
3643
4170
  * | | is prior to that of file2
3644
- * ?> | boolean | True if the modification time of file1
4171
+ * ">" | boolean | True if the modification time of file1
3645
4172
  * | | is after that of file2
3646
4173
  */
3647
4174
 
@@ -3650,7 +4177,7 @@ rb_f_test(int argc, VALUE *argv)
3650
4177
  {
3651
4178
  int cmd;
3652
4179
 
3653
- if (argc == 0) rb_raise(rb_eArgError, "wrong number of arguments");
4180
+ if (argc == 0) rb_raise(rb_eArgError, "wrong number of arguments (0 for 2..3)");
3654
4181
  cmd = NUM2CHR(argv[0]);
3655
4182
  if (cmd == 0) goto unknown;
3656
4183
  if (strchr("bcdefgGkloOprRsSuwWxXz", cmd)) {
@@ -3712,7 +4239,7 @@ rb_f_test(int argc, VALUE *argv)
3712
4239
  return rb_file_writable_p(0, argv[1]);
3713
4240
 
3714
4241
  case 'W':
3715
- return rb_file_world_writable_p(0, argv[1]);
4242
+ return rb_file_writable_real_p(0, argv[1]);
3716
4243
 
3717
4244
  case 'x':
3718
4245
  return rb_file_executable_p(0, argv[1]);
@@ -3774,10 +4301,10 @@ rb_f_test(int argc, VALUE *argv)
3774
4301
  unknown:
3775
4302
  /* unknown command */
3776
4303
  if (ISPRINT(cmd)) {
3777
- rb_raise(rb_eArgError, "unknown command ?%c", cmd);
4304
+ rb_raise(rb_eArgError, "unknown command '%s%c'", cmd == '\'' || cmd == '\\' ? "\\" : "", cmd);
3778
4305
  }
3779
4306
  else {
3780
- rb_raise(rb_eArgError, "unknown command ?\\x%02X", cmd);
4307
+ rb_raise(rb_eArgError, "unknown command \"\\x%02X\"", cmd);
3781
4308
  }
3782
4309
  return Qnil; /* not reached */
3783
4310
  }
@@ -3806,7 +4333,7 @@ rb_stat_s_alloc(VALUE klass)
3806
4333
  /*
3807
4334
  * call-seq:
3808
4335
  *
3809
- * File::Stat.new(file_name) => stat
4336
+ * File::Stat.new(file_name) -> stat
3810
4337
  *
3811
4338
  * Create a File::Stat object for the given file name (raising an
3812
4339
  * exception if the file doesn't exist).
@@ -3819,7 +4346,8 @@ rb_stat_init(VALUE obj, VALUE fname)
3819
4346
 
3820
4347
  rb_secure(2);
3821
4348
  FilePathValue(fname);
3822
- if (stat(StringValueCStr(fname), &st) == -1) {
4349
+ fname = rb_str_encode_ospath(fname);
4350
+ if (STAT(StringValueCStr(fname), &st) == -1) {
3823
4351
  rb_sys_fail(RSTRING_PTR(fname));
3824
4352
  }
3825
4353
  if (DATA_PTR(obj)) {
@@ -3860,16 +4388,16 @@ rb_stat_init_copy(VALUE copy, VALUE orig)
3860
4388
 
3861
4389
  /*
3862
4390
  * call-seq:
3863
- * stat.ftype => string
3864
- *
4391
+ * stat.ftype -> string
4392
+ *
3865
4393
  * Identifies the type of <i>stat</i>. The return string is one of:
3866
4394
  * ``<code>file</code>'', ``<code>directory</code>'',
3867
4395
  * ``<code>characterSpecial</code>'', ``<code>blockSpecial</code>'',
3868
4396
  * ``<code>fifo</code>'', ``<code>link</code>'',
3869
4397
  * ``<code>socket</code>'', or ``<code>unknown</code>''.
3870
- *
4398
+ *
3871
4399
  * File.stat("/dev/tty").ftype #=> "characterSpecial"
3872
- *
4400
+ *
3873
4401
  */
3874
4402
 
3875
4403
  static VALUE
@@ -3880,11 +4408,11 @@ rb_stat_ftype(VALUE obj)
3880
4408
 
3881
4409
  /*
3882
4410
  * call-seq:
3883
- * stat.directory? => true or false
3884
- *
4411
+ * stat.directory? -> true or false
4412
+ *
3885
4413
  * Returns <code>true</code> if <i>stat</i> is a directory,
3886
4414
  * <code>false</code> otherwise.
3887
- *
4415
+ *
3888
4416
  * File.stat("testfile").directory? #=> false
3889
4417
  * File.stat(".").directory? #=> true
3890
4418
  */
@@ -3898,8 +4426,8 @@ rb_stat_d(VALUE obj)
3898
4426
 
3899
4427
  /*
3900
4428
  * call-seq:
3901
- * stat.pipe? => true or false
3902
- *
4429
+ * stat.pipe? -> true or false
4430
+ *
3903
4431
  * Returns <code>true</code> if the operating system supports pipes and
3904
4432
  * <i>stat</i> is a pipe; <code>false</code> otherwise.
3905
4433
  */
@@ -3916,19 +4444,19 @@ rb_stat_p(VALUE obj)
3916
4444
 
3917
4445
  /*
3918
4446
  * call-seq:
3919
- * stat.symlink? => true or false
3920
- *
4447
+ * stat.symlink? -> true or false
4448
+ *
3921
4449
  * Returns <code>true</code> if <i>stat</i> is a symbolic link,
3922
4450
  * <code>false</code> if it isn't or if the operating system doesn't
3923
4451
  * support this feature. As <code>File::stat</code> automatically
3924
4452
  * follows symbolic links, <code>symlink?</code> will always be
3925
4453
  * <code>false</code> for an object returned by
3926
4454
  * <code>File::stat</code>.
3927
- *
4455
+ *
3928
4456
  * File.symlink("testfile", "alink") #=> 0
3929
4457
  * File.stat("alink").symlink? #=> false
3930
4458
  * File.lstat("alink").symlink? #=> true
3931
- *
4459
+ *
3932
4460
  */
3933
4461
 
3934
4462
  static VALUE
@@ -3942,14 +4470,14 @@ rb_stat_l(VALUE obj)
3942
4470
 
3943
4471
  /*
3944
4472
  * call-seq:
3945
- * stat.socket? => true or false
3946
- *
4473
+ * stat.socket? -> true or false
4474
+ *
3947
4475
  * Returns <code>true</code> if <i>stat</i> is a socket,
3948
4476
  * <code>false</code> if it isn't or if the operating system doesn't
3949
4477
  * support this feature.
3950
- *
4478
+ *
3951
4479
  * File.stat("testfile").socket? #=> false
3952
- *
4480
+ *
3953
4481
  */
3954
4482
 
3955
4483
  static VALUE
@@ -3964,15 +4492,15 @@ rb_stat_S(VALUE obj)
3964
4492
 
3965
4493
  /*
3966
4494
  * call-seq:
3967
- * stat.blockdev? => true or false
3968
- *
4495
+ * stat.blockdev? -> true or false
4496
+ *
3969
4497
  * Returns <code>true</code> if the file is a block device,
3970
4498
  * <code>false</code> if it isn't or if the operating system doesn't
3971
4499
  * support this feature.
3972
- *
4500
+ *
3973
4501
  * File.stat("testfile").blockdev? #=> false
3974
4502
  * File.stat("/dev/hda1").blockdev? #=> true
3975
- *
4503
+ *
3976
4504
  */
3977
4505
 
3978
4506
  static VALUE
@@ -3987,14 +4515,14 @@ rb_stat_b(VALUE obj)
3987
4515
 
3988
4516
  /*
3989
4517
  * call-seq:
3990
- * stat.chardev? => true or false
3991
- *
4518
+ * stat.chardev? -> true or false
4519
+ *
3992
4520
  * Returns <code>true</code> if the file is a character device,
3993
4521
  * <code>false</code> if it isn't or if the operating system doesn't
3994
4522
  * support this feature.
3995
- *
4523
+ *
3996
4524
  * File.stat("/dev/tty").chardev? #=> true
3997
- *
4525
+ *
3998
4526
  */
3999
4527
 
4000
4528
  static VALUE
@@ -4007,14 +4535,14 @@ rb_stat_c(VALUE obj)
4007
4535
 
4008
4536
  /*
4009
4537
  * call-seq:
4010
- * stat.owned? => true or false
4011
- *
4538
+ * stat.owned? -> true or false
4539
+ *
4012
4540
  * Returns <code>true</code> if the effective user id of the process is
4013
4541
  * the same as the owner of <i>stat</i>.
4014
- *
4542
+ *
4015
4543
  * File.stat("testfile").owned? #=> true
4016
4544
  * File.stat("/etc/passwd").owned? #=> false
4017
- *
4545
+ *
4018
4546
  */
4019
4547
 
4020
4548
  static VALUE
@@ -4033,34 +4561,34 @@ rb_stat_rowned(VALUE obj)
4033
4561
 
4034
4562
  /*
4035
4563
  * call-seq:
4036
- * stat.grpowned? => true or false
4037
- *
4564
+ * stat.grpowned? -> true or false
4565
+ *
4038
4566
  * Returns true if the effective group id of the process is the same as
4039
4567
  * the group id of <i>stat</i>. On Windows NT, returns <code>false</code>.
4040
- *
4568
+ *
4041
4569
  * File.stat("testfile").grpowned? #=> true
4042
4570
  * File.stat("/etc/passwd").grpowned? #=> false
4043
- *
4571
+ *
4044
4572
  */
4045
4573
 
4046
4574
  static VALUE
4047
4575
  rb_stat_grpowned(VALUE obj)
4048
4576
  {
4049
4577
  #ifndef _WIN32
4050
- if (group_member(get_stat(obj)->st_gid)) return Qtrue;
4578
+ if (rb_group_member(get_stat(obj)->st_gid)) return Qtrue;
4051
4579
  #endif
4052
4580
  return Qfalse;
4053
4581
  }
4054
4582
 
4055
4583
  /*
4056
4584
  * call-seq:
4057
- * stat.readable? => true or false
4058
- *
4585
+ * stat.readable? -> true or false
4586
+ *
4059
4587
  * Returns <code>true</code> if <i>stat</i> is readable by the
4060
4588
  * effective user id of this process.
4061
- *
4589
+ *
4062
4590
  * File.stat("testfile").readable? #=> true
4063
- *
4591
+ *
4064
4592
  */
4065
4593
 
4066
4594
  static VALUE
@@ -4087,13 +4615,13 @@ rb_stat_r(VALUE obj)
4087
4615
 
4088
4616
  /*
4089
4617
  * call-seq:
4090
- * stat.readable_real? -> true or false
4091
- *
4618
+ * stat.readable_real? -> true or false
4619
+ *
4092
4620
  * Returns <code>true</code> if <i>stat</i> is readable by the real
4093
4621
  * user id of this process.
4094
- *
4622
+ *
4095
4623
  * File.stat("testfile").readable_real? #=> true
4096
- *
4624
+ *
4097
4625
  */
4098
4626
 
4099
4627
  static VALUE
@@ -4109,7 +4637,7 @@ rb_stat_R(VALUE obj)
4109
4637
  return st->st_mode & S_IRUSR ? Qtrue : Qfalse;
4110
4638
  #endif
4111
4639
  #ifdef S_IRGRP
4112
- if (group_member(get_stat(obj)->st_gid))
4640
+ if (rb_group_member(get_stat(obj)->st_gid))
4113
4641
  return st->st_mode & S_IRGRP ? Qtrue : Qfalse;
4114
4642
  #endif
4115
4643
  #ifdef S_IROTH
@@ -4120,15 +4648,15 @@ rb_stat_R(VALUE obj)
4120
4648
 
4121
4649
  /*
4122
4650
  * call-seq:
4123
- * stat.world_readable? => fixnum or nil
4651
+ * stat.world_readable? -> fixnum or nil
4124
4652
  *
4125
4653
  * If <i>stat</i> is readable by others, returns an integer
4126
4654
  * representing the file permission bits of <i>stat</i>. Returns
4127
4655
  * <code>nil</code> otherwise. The meaning of the bits is platform
4128
4656
  * dependent; on Unix systems, see <code>stat(2)</code>.
4129
- *
4130
- * m = File.stat("/etc/passwd").world_readable? # => 420
4131
- * sprintf("%o", m) # => "644"
4657
+ *
4658
+ * m = File.stat("/etc/passwd").world_readable? #=> 420
4659
+ * sprintf("%o", m) #=> "644"
4132
4660
  */
4133
4661
 
4134
4662
  static VALUE
@@ -4146,13 +4674,13 @@ rb_stat_wr(VALUE obj)
4146
4674
 
4147
4675
  /*
4148
4676
  * call-seq:
4149
- * stat.writable? -> true or false
4150
- *
4677
+ * stat.writable? -> true or false
4678
+ *
4151
4679
  * Returns <code>true</code> if <i>stat</i> is writable by the
4152
4680
  * effective user id of this process.
4153
- *
4681
+ *
4154
4682
  * File.stat("testfile").writable? #=> true
4155
- *
4683
+ *
4156
4684
  */
4157
4685
 
4158
4686
  static VALUE
@@ -4179,13 +4707,13 @@ rb_stat_w(VALUE obj)
4179
4707
 
4180
4708
  /*
4181
4709
  * call-seq:
4182
- * stat.writable_real? -> true or false
4183
- *
4710
+ * stat.writable_real? -> true or false
4711
+ *
4184
4712
  * Returns <code>true</code> if <i>stat</i> is writable by the real
4185
4713
  * user id of this process.
4186
- *
4714
+ *
4187
4715
  * File.stat("testfile").writable_real? #=> true
4188
- *
4716
+ *
4189
4717
  */
4190
4718
 
4191
4719
  static VALUE
@@ -4201,7 +4729,7 @@ rb_stat_W(VALUE obj)
4201
4729
  return st->st_mode & S_IWUSR ? Qtrue : Qfalse;
4202
4730
  #endif
4203
4731
  #ifdef S_IWGRP
4204
- if (group_member(get_stat(obj)->st_gid))
4732
+ if (rb_group_member(get_stat(obj)->st_gid))
4205
4733
  return st->st_mode & S_IWGRP ? Qtrue : Qfalse;
4206
4734
  #endif
4207
4735
  #ifdef S_IWOTH
@@ -4212,15 +4740,15 @@ rb_stat_W(VALUE obj)
4212
4740
 
4213
4741
  /*
4214
4742
  * call-seq:
4215
- * stat.world_writable? => fixnum or nil
4743
+ * stat.world_writable? -> fixnum or nil
4216
4744
  *
4217
4745
  * If <i>stat</i> is writable by others, returns an integer
4218
4746
  * representing the file permission bits of <i>stat</i>. Returns
4219
4747
  * <code>nil</code> otherwise. The meaning of the bits is platform
4220
4748
  * dependent; on Unix systems, see <code>stat(2)</code>.
4221
- *
4222
- * m = File.stat("/tmp").world_writable? # => 511
4223
- * sprintf("%o", m) # => "777"
4749
+ *
4750
+ * m = File.stat("/tmp").world_writable? #=> 511
4751
+ * sprintf("%o", m) #=> "777"
4224
4752
  */
4225
4753
 
4226
4754
  static VALUE
@@ -4238,15 +4766,15 @@ rb_stat_ww(VALUE obj)
4238
4766
 
4239
4767
  /*
4240
4768
  * call-seq:
4241
- * stat.executable? => true or false
4242
- *
4769
+ * stat.executable? -> true or false
4770
+ *
4243
4771
  * Returns <code>true</code> if <i>stat</i> is executable or if the
4244
4772
  * operating system doesn't distinguish executable files from
4245
4773
  * nonexecutable files. The tests are made using the effective owner of
4246
4774
  * the process.
4247
- *
4775
+ *
4248
4776
  * File.stat("testfile").executable? #=> false
4249
- *
4777
+ *
4250
4778
  */
4251
4779
 
4252
4780
  static VALUE
@@ -4275,8 +4803,8 @@ rb_stat_x(VALUE obj)
4275
4803
 
4276
4804
  /*
4277
4805
  * call-seq:
4278
- * stat.executable_real? => true or false
4279
- *
4806
+ * stat.executable_real? -> true or false
4807
+ *
4280
4808
  * Same as <code>executable?</code>, but tests using the real owner of
4281
4809
  * the process.
4282
4810
  */
@@ -4296,7 +4824,7 @@ rb_stat_X(VALUE obj)
4296
4824
  return st->st_mode & S_IXUSR ? Qtrue : Qfalse;
4297
4825
  #endif
4298
4826
  #ifdef S_IXGRP
4299
- if (group_member(get_stat(obj)->st_gid))
4827
+ if (rb_group_member(get_stat(obj)->st_gid))
4300
4828
  return st->st_mode & S_IXGRP ? Qtrue : Qfalse;
4301
4829
  #endif
4302
4830
  #ifdef S_IXOTH
@@ -4307,13 +4835,13 @@ rb_stat_X(VALUE obj)
4307
4835
 
4308
4836
  /*
4309
4837
  * call-seq:
4310
- * stat.file? => true or false
4311
- *
4838
+ * stat.file? -> true or false
4839
+ *
4312
4840
  * Returns <code>true</code> if <i>stat</i> is a regular file (not
4313
4841
  * a device file, pipe, socket, etc.).
4314
- *
4842
+ *
4315
4843
  * File.stat("testfile").file? #=> true
4316
- *
4844
+ *
4317
4845
  */
4318
4846
 
4319
4847
  static VALUE
@@ -4325,13 +4853,13 @@ rb_stat_f(VALUE obj)
4325
4853
 
4326
4854
  /*
4327
4855
  * call-seq:
4328
- * stat.zero? => true or false
4329
- *
4856
+ * stat.zero? -> true or false
4857
+ *
4330
4858
  * Returns <code>true</code> if <i>stat</i> is a zero-length file;
4331
4859
  * <code>false</code> otherwise.
4332
- *
4860
+ *
4333
4861
  * File.stat("testfile").zero? #=> false
4334
- *
4862
+ *
4335
4863
  */
4336
4864
 
4337
4865
  static VALUE
@@ -4343,12 +4871,12 @@ rb_stat_z(VALUE obj)
4343
4871
 
4344
4872
  /*
4345
4873
  * call-seq:
4346
- * state.size => integer
4347
- *
4874
+ * state.size -> integer
4875
+ *
4348
4876
  * Returns the size of <i>stat</i> in bytes.
4349
- *
4877
+ *
4350
4878
  * File.stat("testfile").size #=> 66
4351
- *
4879
+ *
4352
4880
  */
4353
4881
 
4354
4882
  static VALUE
@@ -4362,12 +4890,12 @@ rb_stat_s(VALUE obj)
4362
4890
 
4363
4891
  /*
4364
4892
  * call-seq:
4365
- * stat.setuid? => true or false
4366
- *
4893
+ * stat.setuid? -> true or false
4894
+ *
4367
4895
  * Returns <code>true</code> if <i>stat</i> has the set-user-id
4368
4896
  * permission bit set, <code>false</code> if it doesn't or if the
4369
4897
  * operating system doesn't support this feature.
4370
- *
4898
+ *
4371
4899
  * File.stat("/bin/su").setuid? #=> true
4372
4900
  */
4373
4901
 
@@ -4382,14 +4910,14 @@ rb_stat_suid(VALUE obj)
4382
4910
 
4383
4911
  /*
4384
4912
  * call-seq:
4385
- * stat.setgid? => true or false
4386
- *
4913
+ * stat.setgid? -> true or false
4914
+ *
4387
4915
  * Returns <code>true</code> if <i>stat</i> has the set-group-id
4388
4916
  * permission bit set, <code>false</code> if it doesn't or if the
4389
4917
  * operating system doesn't support this feature.
4390
- *
4918
+ *
4391
4919
  * File.stat("/usr/sbin/lpc").setgid? #=> true
4392
- *
4920
+ *
4393
4921
  */
4394
4922
 
4395
4923
  static VALUE
@@ -4403,14 +4931,14 @@ rb_stat_sgid(VALUE obj)
4403
4931
 
4404
4932
  /*
4405
4933
  * call-seq:
4406
- * stat.sticky? => true or false
4407
- *
4934
+ * stat.sticky? -> true or false
4935
+ *
4408
4936
  * Returns <code>true</code> if <i>stat</i> has its sticky bit set,
4409
4937
  * <code>false</code> if it doesn't or if the operating system doesn't
4410
4938
  * support this feature.
4411
- *
4939
+ *
4412
4940
  * File.stat("testfile").sticky? #=> false
4413
- *
4941
+ *
4414
4942
  */
4415
4943
 
4416
4944
  static VALUE
@@ -4430,8 +4958,8 @@ rb_file_const(const char *name, VALUE value)
4430
4958
  rb_define_const(rb_mFConst, name, value);
4431
4959
  }
4432
4960
 
4433
- static int
4434
- is_absolute_path(const char *path)
4961
+ int
4962
+ rb_is_absolute_path(const char *path)
4435
4963
  {
4436
4964
  #ifdef DOSISH_DRIVE_LETTER
4437
4965
  if (has_drive_letter(path) && isdirsep(path[2])) return 1;
@@ -4461,7 +4989,7 @@ path_check_0(VALUE path, int execpath)
4461
4989
  const char *p0 = StringValueCStr(path);
4462
4990
  char *p = 0, *s;
4463
4991
 
4464
- if (!is_absolute_path(p0)) {
4992
+ if (!rb_is_absolute_path(p0)) {
4465
4993
  char *buf = my_getcwd();
4466
4994
  VALUE newpath;
4467
4995
 
@@ -4470,13 +4998,14 @@ path_check_0(VALUE path, int execpath)
4470
4998
 
4471
4999
  rb_str_cat2(newpath, "/");
4472
5000
  rb_str_cat2(newpath, p0);
4473
- p0 = RSTRING_PTR(path = newpath);
5001
+ path = newpath;
5002
+ p0 = RSTRING_PTR(path);
4474
5003
  }
4475
5004
  for (;;) {
4476
5005
  #ifndef S_IWOTH
4477
5006
  # define S_IWOTH 002
4478
5007
  #endif
4479
- if (stat(p0, &st) == 0 && S_ISDIR(st.st_mode) && (st.st_mode & S_IWOTH)
5008
+ if (STAT(p0, &st) == 0 && S_ISDIR(st.st_mode) && (st.st_mode & S_IWOTH)
4480
5009
  #ifdef S_ISVTX
4481
5010
  && !(p && execpath && (st.st_mode & S_ISVTX))
4482
5011
  #endif
@@ -4484,6 +5013,7 @@ path_check_0(VALUE path, int execpath)
4484
5013
  rb_warn("Insecure world writable dir %s in %sPATH, mode 0%o",
4485
5014
  p0, (execpath ? "" : "LOAD_"), st.st_mode);
4486
5015
  if (p) *p = '/';
5016
+ RB_GC_GUARD(path);
4487
5017
  return 0;
4488
5018
  }
4489
5019
  s = strrdirsep(p0);
@@ -4495,15 +5025,11 @@ path_check_0(VALUE path, int execpath)
4495
5025
  }
4496
5026
  #endif
4497
5027
 
4498
- static int
4499
- fpath_check(const char *path)
4500
- {
4501
5028
  #if ENABLE_PATH_CHECK
4502
- return path_check_0(rb_str_new2(path), Qfalse);
5029
+ #define fpath_check(path) path_check_0(path, FALSE)
4503
5030
  #else
4504
- return 1;
5031
+ #define fpath_check(path) 1
4505
5032
  #endif
4506
- }
4507
5033
 
4508
5034
  int
4509
5035
  rb_path_check(const char *path)
@@ -4520,7 +5046,7 @@ rb_path_check(const char *path)
4520
5046
  if (!p) p = pend;
4521
5047
 
4522
5048
  for (;;) {
4523
- if (!path_check_0(rb_str_new(p0, p - p0), Qtrue)) {
5049
+ if (!path_check_0(rb_str_new(p0, p - p0), TRUE)) {
4524
5050
  return 0; /* not safe */
4525
5051
  }
4526
5052
  p0 = p + 1;
@@ -4550,6 +5076,12 @@ file_load_ok(const char *path)
4550
5076
  return ret;
4551
5077
  }
4552
5078
 
5079
+ int
5080
+ rb_file_load_ok(const char *path)
5081
+ {
5082
+ return file_load_ok(path);
5083
+ }
5084
+
4553
5085
  static int
4554
5086
  is_explicit_relative(const char *path)
4555
5087
  {
@@ -4560,42 +5092,62 @@ is_explicit_relative(const char *path)
4560
5092
 
4561
5093
  VALUE rb_get_load_path(void);
4562
5094
 
5095
+ static VALUE
5096
+ copy_path_class(VALUE path, VALUE orig)
5097
+ {
5098
+ RBASIC(path)->klass = rb_obj_class(orig);
5099
+ OBJ_FREEZE(path);
5100
+ return path;
5101
+ }
5102
+
4563
5103
  int
4564
5104
  rb_find_file_ext(VALUE *filep, const char *const *ext)
4565
5105
  {
4566
- const char *f = RSTRING_PTR(*filep);
4567
- VALUE fname, load_path, tmp;
5106
+ return rb_find_file_ext_safe(filep, ext, rb_safe_level());
5107
+ }
5108
+
5109
+ int
5110
+ rb_find_file_ext_safe(VALUE *filep, const char *const *ext, int safe_level)
5111
+ {
5112
+ const char *f = StringValueCStr(*filep);
5113
+ VALUE fname = *filep, load_path, tmp;
4568
5114
  long i, j, fnlen;
5115
+ int expanded = 0;
4569
5116
 
4570
5117
  if (!ext[0]) return 0;
4571
5118
 
4572
5119
  if (f[0] == '~') {
4573
- fname = rb_file_expand_path(*filep, Qnil);
4574
- if (rb_safe_level() >= 2 && OBJ_TAINTED(fname)) {
5120
+ fname = file_expand_path_1(fname);
5121
+ if (safe_level >= 1 && OBJ_TAINTED(fname)) {
4575
5122
  rb_raise(rb_eSecurityError, "loading from unsafe file %s", f);
4576
5123
  }
4577
- OBJ_FREEZE(fname);
4578
- f = StringValueCStr(fname);
5124
+ f = RSTRING_PTR(fname);
4579
5125
  *filep = fname;
5126
+ expanded = 1;
4580
5127
  }
4581
5128
 
4582
- if (is_absolute_path(f) || is_explicit_relative(f)) {
4583
- fname = rb_str_dup(*filep);
5129
+ if (expanded || rb_is_absolute_path(f) || is_explicit_relative(f)) {
5130
+ if (safe_level >= 1 && !fpath_check(fname)) {
5131
+ rb_raise(rb_eSecurityError, "loading from unsafe path %s", f);
5132
+ }
5133
+ if (!expanded) fname = file_expand_path_1(fname);
4584
5134
  fnlen = RSTRING_LEN(fname);
4585
5135
  for (i=0; ext[i]; i++) {
4586
5136
  rb_str_cat2(fname, ext[i]);
4587
- if (file_load_ok(StringValueCStr(fname))) {
4588
- if (!is_absolute_path(f)) fname = rb_file_expand_path(fname, Qnil);
4589
- OBJ_FREEZE(fname);
4590
- *filep = fname;
4591
- return i+1;
5137
+ if (file_load_ok(RSTRING_PTR(fname))) {
5138
+ *filep = copy_path_class(fname, *filep);
5139
+ return (int)(i+1);
4592
5140
  }
4593
5141
  rb_str_set_len(fname, fnlen);
4594
5142
  }
4595
5143
  return 0;
4596
5144
  }
4597
5145
 
4598
- load_path = rb_get_load_path();
5146
+ if (safe_level >= 4) {
5147
+ rb_raise(rb_eSecurityError, "loading from non-absolute path %s", f);
5148
+ }
5149
+
5150
+ RB_GC_GUARD(load_path) = rb_get_load_path();
4599
5151
  if (!load_path) return 0;
4600
5152
 
4601
5153
  fname = rb_str_dup(*filep);
@@ -4607,14 +5159,12 @@ rb_find_file_ext(VALUE *filep, const char *const *ext)
4607
5159
  for (i = 0; i < RARRAY_LEN(load_path); i++) {
4608
5160
  VALUE str = RARRAY_PTR(load_path)[i];
4609
5161
 
4610
- FilePathValue(str);
5162
+ RB_GC_GUARD(str) = rb_get_path_check(str, safe_level);
4611
5163
  if (RSTRING_LEN(str) == 0) continue;
4612
5164
  file_expand_path(fname, str, 0, tmp);
4613
5165
  if (file_load_ok(RSTRING_PTR(tmp))) {
4614
- RBASIC(tmp)->klass = rb_obj_class(*filep);
4615
- OBJ_FREEZE(tmp);
4616
- *filep = tmp;
4617
- return j+1;
5166
+ *filep = copy_path_class(tmp, *filep);
5167
+ return (int)(j+1);
4618
5168
  }
4619
5169
  FL_UNSET(tmp, FL_TAINT | FL_UNTRUSTED);
4620
5170
  }
@@ -4626,29 +5176,38 @@ rb_find_file_ext(VALUE *filep, const char *const *ext)
4626
5176
 
4627
5177
  VALUE
4628
5178
  rb_find_file(VALUE path)
5179
+ {
5180
+ return rb_find_file_safe(path, rb_safe_level());
5181
+ }
5182
+
5183
+ VALUE
5184
+ rb_find_file_safe(VALUE path, int safe_level)
4629
5185
  {
4630
5186
  VALUE tmp, load_path;
4631
5187
  const char *f = StringValueCStr(path);
5188
+ int expanded = 0;
4632
5189
 
4633
5190
  if (f[0] == '~') {
4634
- path = rb_file_expand_path(path, Qnil);
4635
- if (rb_safe_level() >= 1 && OBJ_TAINTED(path)) {
4636
- rb_raise(rb_eSecurityError, "loading from unsafe path %s", f);
5191
+ tmp = file_expand_path_1(path);
5192
+ if (safe_level >= 1 && OBJ_TAINTED(tmp)) {
5193
+ rb_raise(rb_eSecurityError, "loading from unsafe file %s", f);
4637
5194
  }
4638
- OBJ_FREEZE(path);
4639
- f = StringValueCStr(path);
5195
+ path = copy_path_class(tmp, path);
5196
+ f = RSTRING_PTR(path);
5197
+ expanded = 1;
4640
5198
  }
4641
5199
 
4642
- if (is_absolute_path(f) || is_explicit_relative(f)) {
4643
- if (rb_safe_level() >= 1 && !fpath_check(f)) {
4644
- rb_raise(rb_eSecurityError, "loading from unsafe file %s", f);
5200
+ if (expanded || rb_is_absolute_path(f) || is_explicit_relative(f)) {
5201
+ if (safe_level >= 1 && !fpath_check(path)) {
5202
+ rb_raise(rb_eSecurityError, "loading from unsafe path %s", f);
4645
5203
  }
4646
5204
  if (!file_load_ok(f)) return 0;
4647
- if (!is_absolute_path(f)) path = rb_file_expand_path(path, Qnil);
5205
+ if (!expanded)
5206
+ path = copy_path_class(file_expand_path_1(path), path);
4648
5207
  return path;
4649
5208
  }
4650
5209
 
4651
- if (rb_safe_level() >= 4) {
5210
+ if (safe_level >= 4) {
4652
5211
  rb_raise(rb_eSecurityError, "loading from non-absolute path %s", f);
4653
5212
  }
4654
5213
 
@@ -4659,7 +5218,7 @@ rb_find_file(VALUE path)
4659
5218
  tmp = rb_str_tmp_new(MAXPATHLEN + 2);
4660
5219
  for (i = 0; i < RARRAY_LEN(load_path); i++) {
4661
5220
  VALUE str = RARRAY_PTR(load_path)[i];
4662
- FilePathValue(str);
5221
+ RB_GC_GUARD(str) = rb_get_path_check(str, safe_level);
4663
5222
  if (RSTRING_LEN(str) > 0) {
4664
5223
  file_expand_path(path, str, 0, tmp);
4665
5224
  f = RSTRING_PTR(tmp);
@@ -4667,19 +5226,17 @@ rb_find_file(VALUE path)
4667
5226
  }
4668
5227
  }
4669
5228
  return 0;
4670
- found:
4671
- RBASIC(tmp)->klass = rb_obj_class(path);
4672
- OBJ_FREEZE(tmp);
4673
5229
  }
4674
5230
  else {
4675
5231
  return 0; /* no path, no load */
4676
5232
  }
4677
5233
 
4678
- if (rb_safe_level() >= 1 && !fpath_check(f)) {
5234
+ found:
5235
+ if (safe_level >= 1 && !fpath_check(tmp)) {
4679
5236
  rb_raise(rb_eSecurityError, "loading from unsafe file %s", f);
4680
5237
  }
4681
5238
 
4682
- return tmp;
5239
+ return copy_path_class(tmp, path);
4683
5240
  }
4684
5241
 
4685
5242
  static void
@@ -4696,7 +5253,7 @@ define_filetest_function(const char *name, VALUE (*func)(ANYARGS), int argc)
4696
5253
  * <code>File</code> includes the methods of module
4697
5254
  * <code>FileTest</code> as class methods, allowing you to write (for
4698
5255
  * example) <code>File.exist?("foo")</code>.
4699
- *
5256
+ *
4700
5257
  * In the description of File methods,
4701
5258
  * <em>permission bits</em> are a platform-specific
4702
5259
  * set of bits that indicate permissions of a file. On Unix-based
@@ -4704,7 +5261,7 @@ define_filetest_function(const char *name, VALUE (*func)(ANYARGS), int argc)
4704
5261
  * owner, the group, and the rest of the world. For each of these
4705
5262
  * entities, permissions may be set to read, write, or execute the
4706
5263
  * file:
4707
- *
5264
+ *
4708
5265
  * The permission bits <code>0644</code> (in octal) would thus be
4709
5266
  * interpreted as read/write for owner, and read-only for group and
4710
5267
  * other. Higher-order bits may also be used to indicate the type of
@@ -4712,7 +5269,7 @@ define_filetest_function(const char *name, VALUE (*func)(ANYARGS), int argc)
4712
5269
  * special features. If the permissions are for a directory, the
4713
5270
  * meaning of the execute bit changes; when set the directory can be
4714
5271
  * searched.
4715
- *
5272
+ *
4716
5273
  * On non-Posix operating systems, there may be only the ability to
4717
5274
  * make a file read-only or read-write. In this case, the remaining
4718
5275
  * permission bits will be synthesized to resemble typical values. For
@@ -4784,6 +5341,8 @@ Init_File(void)
4784
5341
  rb_define_singleton_method(rb_cFile, "truncate", rb_file_s_truncate, 2);
4785
5342
  rb_define_singleton_method(rb_cFile, "expand_path", rb_file_s_expand_path, -1);
4786
5343
  rb_define_singleton_method(rb_cFile, "absolute_path", rb_file_s_absolute_path, -1);
5344
+ rb_define_singleton_method(rb_cFile, "realpath", rb_file_s_realpath, -1);
5345
+ rb_define_singleton_method(rb_cFile, "realdirpath", rb_file_s_realdirpath, -1);
4787
5346
  rb_define_singleton_method(rb_cFile, "basename", rb_file_s_basename, -1);
4788
5347
  rb_define_singleton_method(rb_cFile, "dirname", rb_file_s_dirname, 1);
4789
5348
  rb_define_singleton_method(rb_cFile, "extname", rb_file_s_extname, 1);
@@ -4796,7 +5355,7 @@ Init_File(void)
4796
5355
  rb_define_singleton_method(rb_cFile, "join", rb_file_s_join, -2);
4797
5356
 
4798
5357
  #ifdef DOSISH
4799
- rb_define_const(rb_cFile, "ALT_SEPARATOR", rb_obj_freeze(rb_usascii_str_new2("\\")));
5358
+ rb_define_const(rb_cFile, "ALT_SEPARATOR", rb_obj_freeze(rb_usascii_str_new2(file_alt_separator)));
4800
5359
  #else
4801
5360
  rb_define_const(rb_cFile, "ALT_SEPARATOR", Qnil);
4802
5361
  #endif
@@ -4808,6 +5367,7 @@ Init_File(void)
4808
5367
  rb_define_method(rb_cFile, "atime", rb_file_atime, 0);
4809
5368
  rb_define_method(rb_cFile, "mtime", rb_file_mtime, 0);
4810
5369
  rb_define_method(rb_cFile, "ctime", rb_file_ctime, 0);
5370
+ rb_define_method(rb_cFile, "size", rb_file_size, 0);
4811
5371
 
4812
5372
  rb_define_method(rb_cFile, "chmod", rb_file_chmod, 1);
4813
5373
  rb_define_method(rb_cFile, "chown", rb_file_chown, 2);