-
-
Notifications
You must be signed in to change notification settings - Fork 57
Add Python Path for Windows #533
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
b659dfc
to
019a6b6
Compare
I looked into the cause of the test error, and it seems that it may not be a problem with the Python interpreter selection. Traceback (most recent call last):
File "<string>", line 1, in <module>
File "examples/helloworld.er", line -1, in <module>
UnicodeEncodeError: 'cp932' codec can't encode character '\u03ac' in position 3: illegal multibyte sequence I don't remember seeing this error when I wrote this test, but this output may have been obtained as a result of several improvements to make the test results readable.
In fact, the test passed when I deleted everything except alphabets and hiragana. |
8d570ee
to
2febb71
Compare
examples/helloworld.er
Outdated
@@ -1,3 +1,6 @@ | |||
sys = pyimport "sys" | |||
sys.stdout.reconfigure!(encoding:="utf-8") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is inconvenient that multilingual support is only available if the user sets it up using sys.stdout.reconfigure!
, so I think it would be better to include a process to embed this code when generating the code.
For example, Erg embeds a code in the bytecode that passes its own standard API path and loads it. Using this as a reference, it is possible to call sys.stdout.reconfigure
first.
erg/crates/erg_compiler/codegen.rs
Lines 3929 to 3953 in b2fb80c
fn load_prelude_py(&mut self) { | |
self.emit_global_import_items( | |
Identifier::static_public("sys"), | |
vec![( | |
Identifier::static_public("path"), | |
Some(Identifier::private("#path")), | |
)], | |
); | |
self.emit_load_name_instr(Identifier::private("#path")); | |
self.emit_load_method_instr(Identifier::static_public("append"), BoundAttr); | |
self.emit_load_const(erg_core_path().to_str().unwrap()); | |
self.emit_call_instr(1, BoundAttr); | |
self.stack_dec(); | |
self.emit_pop_top(); | |
let erg_std_mod = Identifier::static_public("_erg_std_prelude"); | |
// escaping | |
self.emit_global_import_items( | |
erg_std_mod.clone(), | |
vec![( | |
Identifier::static_public("contains_operator"), | |
Some(Identifier::private("#contains_operator")), | |
)], | |
); | |
self.emit_import_all_instr(erg_std_mod); | |
} |
4d9c25c
to
017b13f
Compare
Co-authored-by: Shunsuke Shibayama <sbym1346@gmail.com>
2febb71
to
c2c2931
Compare
Changes proposed in this PR:
@mtshiba