mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	 c933a6bb32
			
		
	
	
		c933a6bb32
		
			
		
	
	
	
	
		
			
			Basic support for pyrepl in Emscripten. Limitations: * requires JSPI * no signal handling implemented As followup work, it would be nice to implement a webworker variant for when JSPI is not available and proper signal handling. Because it requires JSPI, it doesn't work in Safari. Firefox requires setting an experimental flag. All the Chromiums have full support since May. Until we make it work without JSPI, let's keep the original web_example around. Co-authored-by: Łukasz Langa <lukasz@langa.pl> Co-authored-by: Éric <merwok@netwok.org>
		
			
				
	
	
		
			34 lines
		
	
	
	
		
			767 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
	
		
			767 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| from __future__ import annotations
 | |
| 
 | |
| import os
 | |
| import sys
 | |
| 
 | |
| # types
 | |
| if False:
 | |
|     from typing import IO
 | |
| 
 | |
| 
 | |
| trace_file: IO[str] | None = None
 | |
| if trace_filename := os.environ.get("PYREPL_TRACE"):
 | |
|     trace_file = open(trace_filename, "a")
 | |
| 
 | |
| 
 | |
| 
 | |
| if sys.platform == "emscripten":
 | |
|     from posix import _emscripten_log
 | |
| 
 | |
|     def trace(line: str, *k: object, **kw: object) -> None:
 | |
|         if "PYREPL_TRACE" not in os.environ:
 | |
|             return
 | |
|         if k or kw:
 | |
|             line = line.format(*k, **kw)
 | |
|         _emscripten_log(line)
 | |
| 
 | |
| else:
 | |
|     def trace(line: str, *k: object, **kw: object) -> None:
 | |
|         if trace_file is None:
 | |
|             return
 | |
|         if k or kw:
 | |
|             line = line.format(*k, **kw)
 | |
|         trace_file.write(line + "\n")
 | |
|         trace_file.flush()
 |