From: Mark Guzman Date: 2008-01-08T15:20:31+09:00 Subject: Re: Embedding 1.9 --------------ms070206010201000706070005 Content-Type: multipart/mixed; boundary="------------050607090806070203040202" This is a multi-part message in MIME format. --------------050607090806070203040202 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Dave Thomas wrote: > > On Jan 7, 2008, at 7:41 PM, Mark Guzman wrote: > >> Have you checked out VIM? It has ruby embedded and provides an >> interface into vim buffers from ruby. HTH. Good luck. > > Mark: > > I don;t believe it has Ruby 1.9, though. > > > Dave > Quite true. My addled eyes missed the blatant 1.9 in the title. It did get me started on applying a little elbow work to them problem. The vim code ports to 1.9 just fine. Changing a few of those pesky RSTRING(xyz)->ptr and len's to their new macros eliminates the majority of the compile errors. The only other item seems to be error info handling, which went from being a static variable to a function rb_errinfo. I'm sure you've already run into all the nitty gritty. I've attached a patch versus the current vim trunk. I haven't tried anything more intensive than loading and executing a simple file as of yet. --mark --------------050607090806070203040202 Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0"; name="if_ruby_19.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="if_ruby_19.patch" Index: if_ruby.c =================================================================== --- if_ruby.c (revision 777) +++ if_ruby.c (working copy) @@ -26,6 +26,7 @@ # define RUBYEXTERN extern #endif +#define HAVE_STRUCT_TIMESPEC /* * This is tricky. In ruby.h there is (inline) function rb_class_of() * definition. This function use these variables. But we want function to @@ -129,7 +130,8 @@ #define rb_str_concat dll_rb_str_concat #define rb_str_new dll_rb_str_new #define rb_str_new2 dll_rb_str_new2 -#define ruby_errinfo (*dll_ruby_errinfo) +#define rb_errinfo dll_rb_errinfo +#define ruby_init_stack dll_ruby_init_stack #define ruby_init dll_ruby_init #define ruby_init_loadpath dll_ruby_init_loadpath #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18 @@ -183,7 +185,8 @@ static VALUE (*dll_rb_str_concat) (VALUE, VALUE); static VALUE (*dll_rb_str_new) (const char*, long); static VALUE (*dll_rb_str_new2) (const char*); -static VALUE *dll_ruby_errinfo; +static VALUE (*dll_rb_errinfo) (void); +static void (*dll_ruby_init_stack) (void); static void (*dll_ruby_init) (void); static void (*dll_ruby_init_loadpath) (void); #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18 @@ -245,7 +248,8 @@ {"rb_str_concat", (RUBY_PROC*)&dll_rb_str_concat}, {"rb_str_new", (RUBY_PROC*)&dll_rb_str_new}, {"rb_str_new2", (RUBY_PROC*)&dll_rb_str_new2}, - {"ruby_errinfo", (RUBY_PROC*)&dll_ruby_errinfo}, + {"rb_errinfo", (RUBY_PROC*)&dll_rb_errinfo}, + {"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack}, {"ruby_init", (RUBY_PROC*)&dll_ruby_init}, {"ruby_init_loadpath", (RUBY_PROC*)&dll_ruby_init_loadpath}, #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18 @@ -413,7 +417,8 @@ #ifdef DYNAMIC_RUBY if (ruby_enabled(TRUE)) { -#endif +#endif + RUBY_INIT_STACK ruby_init(); ruby_init_loadpath(); ruby_io_init(); @@ -433,9 +438,6 @@ static void error_print(int state) { -#ifndef DYNAMIC_RUBY - RUBYEXTERN VALUE ruby_errinfo; -#endif VALUE eclass; VALUE einfo; char buff[BUFSIZ]; @@ -468,9 +470,9 @@ break; case TAG_RAISE: case TAG_FATAL: - eclass = CLASS_OF(ruby_errinfo); - einfo = rb_obj_as_string(ruby_errinfo); - if (eclass == rb_eRuntimeError && RSTRING(einfo)->len == 0) { + eclass = CLASS_OF(rb_errinfo()); + einfo = rb_obj_as_string(rb_errinfo()); + if (eclass == rb_eRuntimeError && RSTRING_LEN(einfo) == 0) { EMSG(_("E272: unhandled exception")); } else { @@ -479,7 +481,7 @@ epath = rb_class_path(eclass); vim_snprintf(buff, BUFSIZ, "%s: %s", - RSTRING(epath)->ptr, RSTRING(einfo)->ptr); + RSTRING_PTR(epath), RSTRING_PTR(einfo)); p = strchr(buff, '\n'); if (p) *p = '\0'; EMSG(buff); @@ -497,8 +499,8 @@ char *buff, *p; str = rb_obj_as_string(str); - buff = ALLOCA_N(char, RSTRING(str)->len); - strcpy(buff, RSTRING(str)->ptr); + buff = ALLOCA_N(char, RSTRING_LEN(str)); + strcpy(buff, RSTRING_PTR(str)); p = strchr(buff, '\n'); if (p) *p = '\0'; MSG(buff); @@ -906,7 +908,7 @@ if (i > 0) rb_str_cat(str, ", ", 2); rb_str_concat(str, rb_inspect(argv[i])); } - MSG(RSTRING(str)->ptr); + MSG(RSTRING_PTR(str)); return Qnil; } --------------050607090806070203040202-- --------------ms070206010201000706070005 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIJ4TCC Az8wggKooAMCAQICAQ0wDQYJKoZIhvcNAQEFBQAwgdExCzAJBgNVBAYTAlpBMRUwEwYDVQQI EwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhhd3RlIENv bnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xJDAi BgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVy c29uYWwtZnJlZW1haWxAdGhhd3RlLmNvbTAeFw0wMzA3MTcwMDAwMDBaFw0xMzA3MTYyMzU5 NTlaMGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBM dGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQTCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxKY8VXNV+065yplaHmjAdQRwnd/p/6Me7L3N9Vvy Gna9fww6YfK/Uc4B1OVQCjDXAmNaLIkVcI7dyfArhVqqP3FWy688Cwfn8R+RNiQqE88r1fOC dz0Dviv+uxg+B79AgAJk16emu59l0cUqVIUPSAR/p7bRPGEEQB5kGXJgt/sCAwEAAaOBlDCB kTASBgNVHRMBAf8ECDAGAQH/AgEAMEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwudGhh d3RlLmNvbS9UaGF3dGVQZXJzb25hbEZyZWVtYWlsQ0EuY3JsMAsGA1UdDwQEAwIBBjApBgNV HREEIjAgpB4wHDEaMBgGA1UEAxMRUHJpdmF0ZUxhYmVsMi0xMzgwDQYJKoZIhvcNAQEFBQAD gYEASIzRUIPqCy7MDaNmrGcPf6+svsIXoUOWlJ1/TCG4+DYfqi2fNi/A9BxQIJNwPP2t4WFi w9k6GX6EsZkbAMUaC4J0niVQlGLH2ydxVyWN3amcOY6MIE9lX5Xa9/eH1sYITq726jTlEBpb NU1341YheILcIRk13iSx0x1G/11fZU8wggNLMIICtKADAgECAhAuVywDSabbDt+fceOkfFgt MA0GCSqGSIb3DQEBBQUAMGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3Vs dGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNz dWluZyBDQTAeFw0wNzExMDEwMzA4NTRaFw0wODEwMzEwMzA4NTRaMIGJMR8wHQYDVQQDExZU aGF3dGUgRnJlZW1haWwgTWVtYmVyMSIwIAYJKoZIhvcNAQkBFhNzZWdmYXVsdEBoYXNuby5p bmZvMRwwGgYJKoZIhvcNAQkBFg1tZ0BoYXNuby5pbmZvMSQwIgYJKoZIhvcNAQkBFhVtYXJr Lmd1em1hbkBnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCa6sWo i2Qd7PY1Vf61K6TCUPOiQgNRLSlF2GQzA3mjv7glKrUxMQ2re50pktThWGKVIRHIQhjMVQix Ebpym9gcAXVQBDNJd9MSkzMhyHuT68uun261pNwZGBXU3Bmmd0qOSQOzYptkmJXGhDRjkLxr LW/QXQLaV/stvZy45ssODmFqj9hL0bLrDszEPjp4CMiTejlEkxczmwsqIzLXWpRp9qaVOQOI oFe9v0JlExx/LTxqWTt7NDsVUWxsuk7zUqoW6+PR9QNA5LZ0LD1bIgG5MdUaAgj34kPJPFG7 9XAjQKO4D7S6PvoHVltF2d2l9Vi+2Y4F+CEYJG7XQoi4BsAfAgMBAAGjVjBUMEQGA1UdEQQ9 MDuBE3NlZ2ZhdWx0QGhhc25vLmluZm+BDW1nQGhhc25vLmluZm+BFW1hcmsuZ3V6bWFuQGdt YWlsLmNvbTAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBBQUAA4GBAHGXy2OK9B86BzR5cnu6 3lKPFb5nsSp8/nN9at4Mmgks2F68WvYUxvg5dfADC3t1xxEZkZtFymSpwnJIeWl5CUqlnDFp EpFYaCl6A2vDX3fHBSLLGt37QnRzQ0AHNDUV/wiZFxoMnd3wgroJDNXxHKkWxhYXbz3zLGmO dAFEtu47MIIDSzCCArSgAwIBAgIQLlcsA0mm2w7fn3HjpHxYLTANBgkqhkiG9w0BAQUFADBi MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEs MCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIElzc3VpbmcgQ0EwHhcNMDcxMTAx MDMwODU0WhcNMDgxMDMxMDMwODU0WjCBiTEfMB0GA1UEAxMWVGhhd3RlIEZyZWVtYWlsIE1l bWJlcjEiMCAGCSqGSIb3DQEJARYTc2VnZmF1bHRAaGFzbm8uaW5mbzEcMBoGCSqGSIb3DQEJ ARYNbWdAaGFzbm8uaW5mbzEkMCIGCSqGSIb3DQEJARYVbWFyay5ndXptYW5AZ21haWwuY29t MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmurFqItkHez2NVX+tSukwlDzokID US0pRdhkMwN5o7+4JSq1MTENq3udKZLU4VhilSERyEIYzFUIsRG6cpvYHAF1UAQzSXfTEpMz Ich7k+vLrp9utaTcGRgV1NwZpndKjkkDs2KbZJiVxoQ0Y5C8ay1v0F0C2lf7Lb2cuObLDg5h ao/YS9Gy6w7MxD46eAjIk3o5RJMXM5sLKiMy11qUafamlTkDiKBXvb9CZRMcfy08alk7ezQ7 FVFsbLpO81KqFuvj0fUDQOS2dCw9WyIBuTHVGgII9+JDyTxRu/VwI0CjuA+0uj76B1ZbRdnd pfVYvtmOBfghGCRu10KIuAbAHwIDAQABo1YwVDBEBgNVHREEPTA7gRNzZWdmYXVsdEBoYXNu by5pbmZvgQ1tZ0BoYXNuby5pbmZvgRVtYXJrLmd1em1hbkBnbWFpbC5jb20wDAYDVR0TAQH/ BAIwADANBgkqhkiG9w0BAQUFAAOBgQBxl8tjivQfOgc0eXJ7ut5SjxW+Z7EqfP5zfWreDJoJ LNhevFr2FMb4OXXwAwt7dccRGZGbRcpkqcJySHlpeQlKpZwxaRKRWGgpegNrw193xwUiyxrd +0J0c0NABzQ1Ff8ImRcaDJ3d8IK6CQzV8RypFsYWF2898yxpjnQBRLbuOzGCA2QwggNgAgEB MHYwYjELMAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0 ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBAhAuVywD SabbDt+fceOkfFgtMAkGBSsOAwIaBQCgggHDMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEw HAYJKoZIhvcNAQkFMQ8XDTA4MDEwODA2MjAzMFowIwYJKoZIhvcNAQkEMRYEFGi1WUGw6csU aW4BjH/TY0LGqks3MFIGCSqGSIb3DQEJDzFFMEMwCgYIKoZIhvcNAwcwDgYIKoZIhvcNAwIC AgCAMA0GCCqGSIb3DQMCAgFAMAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMIGFBgkrBgEEAYI3 EAQxeDB2MGIxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5 KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQQIQ LlcsA0mm2w7fn3HjpHxYLTCBhwYLKoZIhvcNAQkQAgsxeKB2MGIxCzAJBgNVBAYTAlpBMSUw IwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUg UGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQQIQLlcsA0mm2w7fn3HjpHxYLTANBgkqhkiG 9w0BAQEFAASCAQA5tyy5xuMIjnjEcF77CI6rEPQIqMiCEzw5qsOzN6a82/i4y2LWy+Rja+g+ XiWDX2+PBVzcEwiwQEWKYRn4X0CwNRO6ZaDIAF9WY5MlapJnDK5sM09TFgp2iAP53sFZDQ8o L9Ef3ryj4bu1c0ezsnoo1kRgOT9CWLeHke6qKIr/M79kbKo5AMmlWCZKusUcRmFSNATXslZS MdOFycz/iG7/V0pF38dygUVe9pQI91vv3TppOjTC/DA6mm+5tdI01uv+XUxkuQI6y8JzvGmg 2HXM9sgsSaL2m/B9vHYfUtiS3tmlWb2/YqXP89gxLJmCj/ORLxPXtPw/OpK4TTf/SyO7AAAA AAAA --------------ms070206010201000706070005--