René's URL Explorer Experiment


Title: ffi: Initial implementation by tianxiadys · Pull Request #57761 · nodejs/node · GitHub

Open Graph Title: ffi: Initial implementation by tianxiadys · Pull Request #57761 · nodejs/node

X Title: ffi: Initial implementation by tianxiadys · Pull Request #57761 · nodejs/node

Description: All the following texts were translated from Chinese by GPT-4. If any wording comes across as offensive, please forgive me, it was not my intention. Thanks to @bengl early work, this PR evolved from his efforts (#46905). How to use Currently, FFI does not support all the platforms that Node.js supports. To avoid compilation failures on unsupported platforms and to prevent confusion for developers, I have added a compile-time flag, which is disabled by default. Here is an example of the configure commands: ./configure.py --with-ffi Or you are on the Windows platform. ./vcbuild.bat ffi This is an experimental feature. You must run Node with the --experimental-ffi flag to use it. Additionally, it is a security-sensitive feature, so you also need to use the --allow-ffi flag. By default, all permissions are enabled unless the permission model is manually activated by using the flag --permission or any --allow-* flag. Here is a command-line example: node --experimental-ffi --allow-ffi demo.js This is a test code that can run on the Windows platform. const { dlopen, UnsafeCallback, UnsafeFnPointer, UnsafePointer, UnsafePointerView } = require('node:ffi'); let a1 = dlopen('user32', { EnumWindows: { result: 'i32', parameters: ['pointer', 'u64'] } }); let a2 = new UnsafeCallback({ result: 'i32', parameters: ['pointer', 'u64'] }, (hWnd, lParam) => { console.log('hWnd', hWnd, 'lParam', lParam); return 1n; }); a1.symbols.EnumWindows(a2.pointer, 3); console.log(a1); console.log(a2); let b1 = dlopen('kernel32', { MultiByteToWideChar: { result: 'i32', parameters: ['u32', 'u32', 'pointer', 'i32', 'pointer', 'i32'] }, HeapAlloc: { result: 'pointer', parameters: ['pointer', 'u32', 'usize'] }, GetProcessHeap: { result: 'pointer', parameters: [] } }); let b2 = Buffer.from('你好', 'utf-8'); let b3 = b1.symbols.GetProcessHeap(); let b4 = b1.symbols.HeapAlloc(b3, 0, 100); let b5 = b1.symbols.MultiByteToWideChar(65001, 0, b2, -1, b4, 50); let b6 = UnsafePointerView.getArrayBuffer(b4, 10, 0); console.log(b1); console.log(b2); console.log(b3); console.log(b4); console.log(b5); console.log(b6); About the "libffi/fixed" and automake dependency The core of this feature relies on calling the libffi library. Referencing libffi is challenging because it heavily depends on automake and has poor support for MSVC. To successfully integrate this library, I made some adjustments. First, I streamlined the library's files by removing parts we don't currently need. These can be added back in as needed. Next, I created a separate fixed folder where I wrote files: ffi.h, ffi.c, ffiasm.S, fficonfig.h and ffitarget.h. These files use #if macros to handle most of the work that would normally be done by automake. Upgrading libffi in the future is both necessary and entirely feasible. I only added files without modifying any of libffi's existing files. When updating to a newer version of libffi, you simply need to replace the corresponding files. Support Platform Here is the system and CPU support status: Windows Linux Mac Other System x86 NO YES ToDo x64 YES YES YES ToDo ARM32 YES YES ToDo ARM64 YES YES YES ToDo ARM-EC NO Other Arch ToDo ToDo Blank spaces in the table indicate the absence of such combinations. Windows does not support the fifth type of CPU, and Mac only supports x64 and ARM64. Windows x86 is the most unique platform because it has numerous calling conventions, which are an important part of a function's signature. However, our JS API does not have a field to specify the calling convention. Fortunately, this platform is no longer actively supported by Node.js, so we can reasonably abandon it. The hybrid architecture (Windows ARM-EC) is a crazy idea, and I’m not sure whether this technology is widely used. Undoubtedly, it presents significant challenges for FFI. Currently, it is not supported and likely won’t be in the future either. Support for other architectures and systems will be addressed in future PRs. About ffi double For @atgreen: It seems that a double type field is missing in ffi_raw. Was this intentionally designed? Although this issue can be resolved by forcibly casting the pointer type, I didn't do so because I suspect there might be some traps I'm unaware of waiting for me. About compatibility with Deno.js For @aapoalas: A portion of the content remains unimplemented, divided into three parts: the UnsafeCallback.threadSafe method the nonblocking option, and all methods of UnsafePointerView except static getArrayBuffer. threadSafe and nonblocking the threadSafe method should not be able to exist independently of nonblocking. The most complex callback scenarios I can think of are the Win32 window procedure callback and APC invocation. The former involves registering a callback method in RegisterWndClass, and later, during the message loop, the thread processes the window procedure by calling DispatchMessage. The latter involves registering a callback method in ReadFileEx, and subsequently, the APC callback is entered internally within the SleepEx method. In any case, the prerequisite for the current thread to enter a callback function is that the thread must call a certain method, and this method will internally locate the callback function pointer recorded somewhere, and then enter the callback function. A thread cannot arbitrarily enter a callback function at any location; perhaps only Linux's signal method has such magical capabilities. In summary, threadSafe seems to apply only to certain specific scenarios. For example, an independent thread outside of the Node.js event loop executes some kind of loop, and at a certain point in the loop, it sends a message to the Node.js main thread. Wouldn't such a requirement be more suitable for implementation in a third-party library rather than in the core code of Node.js or Deno.js? UnsafePointerView The functionality of UnsafePointerView is to read arbitrary memory addresses in JavaScript. However, after creating an ArrayBuffer via a pointer, most of the features of this class become redundant, as they can be replaced by TypedArray, DataView, or Buffer (Node.js only). Therefore, UnsafePointerView seems to merely act as a wrapper? Open issues I can't wait to share this module with everyone! The following tasks have not been completed yet, but perhaps they can be ignored in this PR and completed in future PRs: Documentation for the ffi module (nightly users can refer to Deno.js's documentation). Support only for Windows, Linux, Mac platforms, and certain CPU architectures. Auto-update scripts for libffi. Unit test code and benchmark test code The double type is not supported. Not fully compatible with Deno.js. Other details I haven't thought of yet.

Open Graph Description: All the following texts were translated from Chinese by GPT-4. If any wording comes across as offensive, please forgive me, it was not my intention. Thanks to @bengl early work, this PR evolved fro...

X Description: All the following texts were translated from Chinese by GPT-4. If any wording comes across as offensive, please forgive me, it was not my intention. Thanks to @bengl early work, this PR evolved fro...

Opengraph URL: https://github.com/nodejs/node/pull/57761

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:9f233e57-f04d-b182-d404-1cdcbdb8e5e7
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-id91E8:37D99:23EF2E8:32F270E:6A4CE465
html-safe-noncefade8dead8cf456df82a1f3a47a47f4f9a908c058d24ddecaadbc1ce70272b73
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5MUU4OjM3RDk5OjIzRUYyRTg6MzJGMjcwRTo2QTRDRTQ2NSIsInZpc2l0b3JfaWQiOiI3NzM4OTEyNjA5OTM1NjE3MDEiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==
visitor-hmacf48081b4b194efe14d14a5cfe41ba58f1cc2799c8aa04c4337290a6d1c0c3dd1
hovercard-subject-tagpull_request:2441282989
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/nodejs/node/pull/57761/files
twitter:imagehttps://avatars.githubusercontent.com/u/29011385?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/29011385?s=400&v=4
og:image:altAll the following texts were translated from Chinese by GPT-4. If any wording comes across as offensive, please forgive me, it was not my intention. Thanks to @bengl early work, this PR evolved fro...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
None299b43bca6e02ad35197ffeba30d2466846d5fb02ab96fbced5b5e6cec589fb8
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/nodejs/node git https://github.com/nodejs/node.git
octolytics-dimension-user_id9950313
octolytics-dimension-user_loginnodejs
octolytics-dimension-repository_id27193779
octolytics-dimension-repository_nwonodejs/node
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id27193779
octolytics-dimension-repository_network_root_nwonodejs/node
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
releasec5a57f04eeb310f57c73fd6d751d957e2ca27ed2
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/nodejs/node/pull/57761/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fnodejs%2Fnode%2Fpull%2F57761%2Ffiles
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fnodejs%2Fnode%2Fpull%2F57761%2Ffiles
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=nodejs%2Fnode
Reloadhttps://github.com/nodejs/node/pull/57761/files
Reloadhttps://github.com/nodejs/node/pull/57761/files
Reloadhttps://github.com/nodejs/node/pull/57761/files
Please reload this pagehttps://github.com/nodejs/node/pull/57761/files
nodejs https://github.com/nodejs
nodehttps://github.com/nodejs/node
Please reload this pagehttps://github.com/nodejs/node/pull/57761/files
Notifications https://github.com/login?return_to=%2Fnodejs%2Fnode
Fork 36k https://github.com/login?return_to=%2Fnodejs%2Fnode
Star 118k https://github.com/login?return_to=%2Fnodejs%2Fnode
Code https://github.com/nodejs/node
Issues 1.4k https://github.com/nodejs/node/issues
Pull requests 961 https://github.com/nodejs/node/pulls
Actions https://github.com/nodejs/node/actions
Projects https://github.com/nodejs/node/projects
Security and quality 0 https://github.com/nodejs/node/security
Insights https://github.com/nodejs/node/pulse
Code https://github.com/nodejs/node
Issues https://github.com/nodejs/node/issues
Pull requests https://github.com/nodejs/node/pulls
Actions https://github.com/nodejs/node/actions
Projects https://github.com/nodejs/node/projects
Security and quality https://github.com/nodejs/node/security
Insights https://github.com/nodejs/node/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Fnodejs%2Fnode%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fnodejs%2Fnode%2Fissues%2Fnew%2Fchoose
tianxiadyshttps://github.com/tianxiadys
nodejs:mainhttps://github.com/nodejs/node/tree/main
tianxiadys:ffi0406https://github.com/tianxiadys/node/tree/ffi0406
Conversation 22 https://github.com/nodejs/node/pull/57761
Commits 4 https://github.com/nodejs/node/pull/57761/commits
Checks 0 https://github.com/nodejs/node/pull/57761/checks
Files changed https://github.com/nodejs/node/pull/57761/files
Please reload this pagehttps://github.com/nodejs/node/pull/57761/files
ffi: Initial implementation https://github.com/nodejs/node/pull/57761/files#top
Show all changes 4 commits https://github.com/nodejs/node/pull/57761/files
5f7abd8 node:ffi tianxiadys Apr 5, 2025 https://github.com/nodejs/node/pull/57761/commits/5f7abd8c87f4cf9d56d124805bd722f3fef69d0e
e92a2d8 fixed-0407 tianxiadys Apr 7, 2025 https://github.com/nodejs/node/pull/57761/commits/e92a2d883b0b085630b83ebe22258e93f610fb01
06e756c fixed-0407 tianxiadys Apr 7, 2025 https://github.com/nodejs/node/pull/57761/commits/06e756cf5a1f3f8d406350e2f2f71c56c8a8d1ae
56224f8 fixed-0407 tianxiadys Apr 7, 2025 https://github.com/nodejs/node/pull/57761/commits/56224f88ceed529c573c8c6a164136aef75ecba7
Clear filters https://github.com/nodejs/node/pull/57761/files
Please reload this pagehttps://github.com/nodejs/node/pull/57761/files
Please reload this pagehttps://github.com/nodejs/node/pull/57761/files
configure.py https://github.com/nodejs/node/pull/57761/files#diff-4d5f3192809ec1b9add6b33007e0c50031ad9a0a2f3f55a481b506468824db2c
LICENSE https://github.com/nodejs/node/pull/57761/files#diff-1db5ebafa7ed0c591cad536efa939a3567a27d6c76a25d6ca5216c702d1aa264
ffi.c https://github.com/nodejs/node/pull/57761/files#diff-84867b1af6f4a480e09ed0f3b66bd7258a970c06ab731cdd1182abdf4d23fad2
ffi.h https://github.com/nodejs/node/pull/57761/files#diff-52a646adae7070b1939992f40565ffa1d15da36e0459d5a9e43f93158ffb5a49
ffiasm.S https://github.com/nodejs/node/pull/57761/files#diff-70147a234902116c4da0f48d9e495031de5c10c1485b9fe1499ee01ea522580a
fficonfig.h https://github.com/nodejs/node/pull/57761/files#diff-cb027aced29b9084d2f7d3adb44a57946d1851ce080e5ddb42ea143ed10c6ed0
ffitarget.h https://github.com/nodejs/node/pull/57761/files#diff-a036d74a1b40747496fddd61c061f89248b05cef4549ed94a98b94a038c56f7f
ffi_cfi.h https://github.com/nodejs/node/pull/57761/files#diff-8da7cff57ee002bb2f4a9707bc3e4c78c12384407c0fb4ad8c56b8040e651817
ffi_common.h https://github.com/nodejs/node/pull/57761/files#diff-79c40e4878f2ba48928f983694940add23e4cf5b5931fd7dd91dd775a76b3df6
tramp.h https://github.com/nodejs/node/pull/57761/files#diff-733a93532a18b3bd6f3481eadc5c51a7ba7a52496d62dd0faf66222aa760a6aa
libffi.gyp https://github.com/nodejs/node/pull/57761/files#diff-70788133b1bb9b86d08e16cdb81f97ed50b3b7303d12841f22829f1f6e84f2a0
ffi.c https://github.com/nodejs/node/pull/57761/files#diff-fb37c8e2b376acc1afda82c341f5c3783760adf1e16562451177ee62ad0e11c3
ffitarget.h https://github.com/nodejs/node/pull/57761/files#diff-b9d9709366cba3158c6fa2952943772c23075a6c0c2e6481715d6a4695083ead
internal.h https://github.com/nodejs/node/pull/57761/files#diff-6dc135896e8541a1efc36c20267c468bd8bee6bf13a0d8f0cc7f642b5635cfbf
sysv.S https://github.com/nodejs/node/pull/57761/files#diff-ae2e37eec6c6bb8b41a624063f4587588fc6c90943352de0e97eb657abc6abd3
win64_armasm.S https://github.com/nodejs/node/pull/57761/files#diff-feb3d644603a839807fb914bc138844064e222e2fbd0d7ce7ce0946a55827b69
ffi.c https://github.com/nodejs/node/pull/57761/files#diff-164975ac6302cc1149eb96e76ba708fc8d10d16c960a6f9ec4fa1442fc579dfc
ffitarget.h https://github.com/nodejs/node/pull/57761/files#diff-9dcd35c2e401bf482083536ea1fa7e6b5cf85ff57d80c9cfdd6622c1b7d38504
internal.h https://github.com/nodejs/node/pull/57761/files#diff-2dab712e42ac4dfa02abd35c1ffb6093a49c8336bb0aa865cf7e3d275e19d9e4
sysv.S https://github.com/nodejs/node/pull/57761/files#diff-b6ee51c7046f5e73ca7586e6510293beeef10079ae28b403a7277294d9ec6e15
sysv_msvc_arm32.S https://github.com/nodejs/node/pull/57761/files#diff-69a65c22971c2c2a05a6931386353d9250f8146a7aa01f446eaa46ef409c42de
closures.c https://github.com/nodejs/node/pull/57761/files#diff-7b1d853bde041d6931d316eef320ba118a10215565dfee2156a988b5c65ade6c
debug.c https://github.com/nodejs/node/pull/57761/files#diff-279768a9b68bd3c7b68188d764bb213e9aae5f270d34db9759975e963ab484fd
dlmalloc.c https://github.com/nodejs/node/pull/57761/files#diff-4144408e98af114b7ffaa2f825327512c4fb468e347d45394ba39e987028c6ea
java_raw_api.c https://github.com/nodejs/node/pull/57761/files#diff-f8da79fa5b6fe7aa9a4a14249e8f7827ec507c2b542c6794a50ac9008f80ba1a
prep_cif.c https://github.com/nodejs/node/pull/57761/files#diff-7953bb0b1377011abe19c017c5d5486d84ad5bed726ce042f6d987f41aa59cc5
raw_api.c https://github.com/nodejs/node/pull/57761/files#diff-0945ad42f9e42702ae627655e0f4c8218fee87828754e6d1ad39388e4cf04694
tramp.c https://github.com/nodejs/node/pull/57761/files#diff-316bffbcad3b4f46822f01b8a50e688ae3a7c4e6b9224d173ad0036b6b2cab31
types.c https://github.com/nodejs/node/pull/57761/files#diff-27046374ebe56381b47808912ed5a5aaf4cfdcd8d05772faf6ea4660a1e9e7ba
asmnames.h https://github.com/nodejs/node/pull/57761/files#diff-935861adc24316a3f34518382171f21f16532acb914c0955a9ab06a9c37a56a5
ffi.c https://github.com/nodejs/node/pull/57761/files#diff-743e882dbd8d3715d521356ae89d52b4233449373adf8747e4d3d221a24101d1
ffi64.c https://github.com/nodejs/node/pull/57761/files#diff-b1875a12bac1ee4db79e515190beae0f864e6dcbe77bfb519abbcb0b87158e6d
ffitarget.h https://github.com/nodejs/node/pull/57761/files#diff-b64e015caabda06eae5712cdce0bf53e8495ddaf0fd8db8c0be85b28d487b2b0
ffiw64.c https://github.com/nodejs/node/pull/57761/files#diff-f9c73998c061c49c989be9ae321fe0d2660051044d822ca75480bd6f9b8b1a82
internal.h https://github.com/nodejs/node/pull/57761/files#diff-0bbc890b4cde4e7c224c322ad790d2e9729baa5314f9cb710f47fc457e8c9361
internal64.h https://github.com/nodejs/node/pull/57761/files#diff-f39fe450d558d35e276cfa7dc9844a9824819d6e9583e88a05d26cd27572dd8e
sysv.S https://github.com/nodejs/node/pull/57761/files#diff-172070c1821942f5fa7f30bfec7973e8c9fdec1375d93bbe39000a2892e80114
sysv_intel.S https://github.com/nodejs/node/pull/57761/files#diff-b23ccd3568b7eada022f53dfe55632492086dcd96d292bd460085dbd88dbacb9
unix64.S https://github.com/nodejs/node/pull/57761/files#diff-9742b22ecd0391dcd7f3fbb21717ac55ecdccf3af135e680d7c75f508a9640ec
win64.S https://github.com/nodejs/node/pull/57761/files#diff-636e3955b849779c77c78f4fa871985194348d2e4f51d756b71bf1857724f63f
win64_intel.S https://github.com/nodejs/node/pull/57761/files#diff-29f0e72b7d38f798a8c7e07086b4979c3960720ec436c909c85e28020d2d5e26
ffi.js https://github.com/nodejs/node/pull/57761/files#diff-9d0b523a2cce022302bad800a93d1dbc846dc8ac0739d56381b71221b4a6c666
realm.js https://github.com/nodejs/node/pull/57761/files#diff-274f941c2c63af2f20356e9417e17087320baec78ac2fd4ccffa753178fbb4c9
errors.js https://github.com/nodejs/node/pull/57761/files#diff-670bf55805b781d9a3579f8bca9104c04d94af87cc33220149fd7d37b095ca1c
pre_execution.js https://github.com/nodejs/node/pull/57761/files#diff-f996aabedc7259a2c541d8420902c3556f772f9d1f9c3861d1b90f421bc121ab
node.gyp https://github.com/nodejs/node/pull/57761/files#diff-9f1d0716c75f4df39d9e88499ac205b50301c0c672b816ce54d5339be4c2238c
node.gypi https://github.com/nodejs/node/pull/57761/files#diff-b60508a2277e763eafb225908159eb97df683373da3dd018236923bef0d06892
env.cc https://github.com/nodejs/node/pull/57761/files#diff-c546570c652a65d182b5c452e071328cdc3599e39b4bc390879b5c15dd545d58
node_binding.cc https://github.com/nodejs/node/pull/57761/files#diff-cea6643957d66774731d8224242d6e052f3da9198fbb1fa5afb7e91b896b4cc0
node_ffi.cc https://github.com/nodejs/node/pull/57761/files#diff-d585ac37af7068d4e6273cf96dd79d886d8a1a24a280e837541693a74293e74b
node_ffi.h https://github.com/nodejs/node/pull/57761/files#diff-ab035c4a3dd2b75ea44553242d985d32e44c801757d50387d3e773b8c40de81e
node_options.cc https://github.com/nodejs/node/pull/57761/files#diff-d0b7433f8ca620eba56fc39f79429c73e2b3f061ca6d27583132a37b788b8aa8
node_options.h https://github.com/nodejs/node/pull/57761/files#diff-a6dd6c44925932d3134081da80ed07216f5f66449f540442835557616bcd14f9
ffi_permission.cc https://github.com/nodejs/node/pull/57761/files#diff-62381cc80efb4ade191c92f29651b502df1fd029e6acaff3f763a8279d41ee45
ffi_permission.h https://github.com/nodejs/node/pull/57761/files#diff-90cbbd246558e54fbac71cf008ab3c704c372cf1cc5e9ef1073f2690f786a944
permission.cc https://github.com/nodejs/node/pull/57761/files#diff-6cfcd1b9b85b65a7bca66446ac5ae1322b59538a16c721796bcaf2a9f3781b7a
permission.h https://github.com/nodejs/node/pull/57761/files#diff-97a0900bcc50b378be56595592b7563e28d6bef07d1896a88e7b45119f0fb434
permission_base.h https://github.com/nodejs/node/pull/57761/files#diff-18ac5968ebbad2543641ec840aa6a765741a932b9ef9b97c9a27668da1619b3d
vcbuild.bat https://github.com/nodejs/node/pull/57761/files#diff-67745f8cde46d0a81ee94d49f2a7db1dd7aad869d8cdb0aca44ef60d127b431e
configure.pyhttps://github.com/nodejs/node/pull/57761/files#diff-4d5f3192809ec1b9add6b33007e0c50031ad9a0a2f3f55a481b506468824db2c
View file https://github.com/tianxiadys/node/blob/56224f88ceed529c573c8c6a164136aef75ecba7/configure.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/nodejs/node/pull/57761/{{ revealButtonHref }}
https://github.com/nodejs/node/pull/57761/files#diff-4d5f3192809ec1b9add6b33007e0c50031ad9a0a2f3f55a481b506468824db2c
https://github.com/nodejs/node/pull/57761/files#diff-4d5f3192809ec1b9add6b33007e0c50031ad9a0a2f3f55a481b506468824db2c
https://github.com/nodejs/node/pull/57761/files#diff-4d5f3192809ec1b9add6b33007e0c50031ad9a0a2f3f55a481b506468824db2c
https://github.com/nodejs/node/pull/57761/files#diff-4d5f3192809ec1b9add6b33007e0c50031ad9a0a2f3f55a481b506468824db2c
deps/libffi/LICENSEhttps://github.com/nodejs/node/pull/57761/files#diff-1db5ebafa7ed0c591cad536efa939a3567a27d6c76a25d6ca5216c702d1aa264
View file https://github.com/tianxiadys/node/blob/56224f88ceed529c573c8c6a164136aef75ecba7/deps/libffi/LICENSE
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/nodejs/node/pull/57761/{{ revealButtonHref }}
deps/libffi/fixed/ffi.chttps://github.com/nodejs/node/pull/57761/files#diff-84867b1af6f4a480e09ed0f3b66bd7258a970c06ab731cdd1182abdf4d23fad2
View file https://github.com/tianxiadys/node/blob/56224f88ceed529c573c8c6a164136aef75ecba7/deps/libffi/fixed/ffi.c
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/nodejs/node/pull/57761/{{ revealButtonHref }}
Please reload this pagehttps://github.com/nodejs/node/pull/57761/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.