Is there a way to import builtins created in the compiler? I know they can be used in the standard library but, I cannot find a way to use them in a test program. For example, how could I get access to Builtin.cmp_eq_Int64
or even Builtin.Int64
for that matter?
Theres no way to access these unless you’re the standard library. You really shouldn’t need to use these at all in user facing code which is why they aren’t allowed.
The reason I want to access them is to tests builtins I have created. Maybe just writing a test would be better, though.
If you’re testing a new Builtin, you can use the -parse-stdlib
flag to allow usage of Builtins.
Great. That is very helpful. Thank you!
@Alejandro unfortunately that did not work for me. I still get this error:
error: use of unresolved identifier 'Builtin'
I am invoking the program with:
$ build/Ninja-DebugAssert/swift-macosx-x86_64/bin/swift test/test.swift -parse-stdlib
Am I missing something? Thanks again for the help.
It works when I use swiftc
, maybe try that?
Aha worked like a charm. Thanks!
I believe it's a frontend option, so -Xfrontend -parse-stdlib
should also work
When you run swift myscript.swift
, arguments after the filename become arguments to the script, available in CommandLine.arguments
, rather than arguments to Swift.
(Ask Me How I Know™.)
The other gotcha you'll probably run into: If you use -parse-stdlib
but you still want access to the real standard library, you'll need to import Swift
.
Thank you for pointing this out, I always forget that's the case! I filed SR-11304 to see if we can improve the UX in this area. It's difficult to guess whether an argument was intended for swift
or the program being run in some cases, but for something like swift script.swift -parse-stdlib
I think an "are you sure you didn't mean to pass this to swift" warning would be acceptable.
What if you want to pass -parse-stdlib
to your script? In that case it will garble your output...