@@ -419,15 +419,44 @@ def _is_redefable(v: Var) -> bool:
419
419
#######################
420
420
421
421
422
+ _ATOM_ALIAS = genname ("atom" )
423
+ _ASSOC_ALIAS = genname ("assoc" )
424
+ _COMPILER_ALIAS = genname ("compiler" )
425
+ _DELAY_ALIAS = genname ("delay" )
426
+ _EXC_ALIAS = genname ("exc" )
422
427
_KW_ALIAS = genname ("kw" )
423
428
_LIST_ALIAS = genname ("llist" )
424
429
_MAP_ALIAS = genname ("lmap" )
430
+ _MULTIFN_ALIAS = genname ("multifn" )
431
+ _READER_ALIAS = genname ("reader" )
425
432
_RUNTIME_ALIAS = genname ("runtime" )
433
+ _SEQ_ALIAS = genname ("seq" )
426
434
_SET_ALIAS = genname ("lset" )
427
435
_SYM_ALIAS = genname ("sym" )
428
436
_VEC_ALIAS = genname ("vec" )
429
437
_VAR_ALIAS = genname ("Var" )
430
438
_UTIL_ALIAS = genname ("langutil" )
439
+
440
+ _MODULE_ALIASES = {
441
+ "builtins" : None ,
442
+ "basilisp.lang.atom" : _ATOM_ALIAS ,
443
+ "basilisp.lang.associative" : _ASSOC_ALIAS ,
444
+ "basilisp.lang.compiler" : _COMPILER_ALIAS ,
445
+ "basilisp.lang.delay" : _DELAY_ALIAS ,
446
+ "basilisp.lang.exception" : _EXC_ALIAS ,
447
+ "basilisp.lang.keyword" : _KW_ALIAS ,
448
+ "basilisp.lang.list" : _LIST_ALIAS ,
449
+ "basilisp.lang.map" : _MAP_ALIAS ,
450
+ "basilisp.lang.multifn" : _MULTIFN_ALIAS ,
451
+ "basilisp.lang.reader" : _READER_ALIAS ,
452
+ "basilisp.lang.runtime" : _RUNTIME_ALIAS ,
453
+ "basilisp.lang.seq" : _SEQ_ALIAS ,
454
+ "basilisp.lang.set" : _SET_ALIAS ,
455
+ "basilisp.lang.symbol" : _SYM_ALIAS ,
456
+ "basilisp.lang.vector" : _VEC_ALIAS ,
457
+ "basilisp.lang.util" : _UTIL_ALIAS ,
458
+ }
459
+
431
460
_NS_VAR_VALUE = f"{ _NS_VAR } .value"
432
461
433
462
_NS_VAR_NAME = _load_attr (f"{ _NS_VAR_VALUE } .name" )
@@ -1902,7 +1931,12 @@ def _maybe_class_to_py_ast(_: GeneratorContext, node: MaybeClass) -> GeneratedPy
1902
1931
"""Generate a Python AST node for accessing a potential Python module
1903
1932
variable name."""
1904
1933
assert node .op == NodeOp .MAYBE_CLASS
1905
- return GeneratedPyAST (node = ast .Name (id = node .class_ , ctx = ast .Load ()))
1934
+ return GeneratedPyAST (
1935
+ node = ast .Name (
1936
+ id = Maybe (_MODULE_ALIASES .get (node .class_ )).or_else_get (node .class_ ),
1937
+ ctx = ast .Load (),
1938
+ )
1939
+ )
1906
1940
1907
1941
1908
1942
@_with_ast_loc
@@ -1912,7 +1946,11 @@ def _maybe_host_form_to_py_ast(
1912
1946
"""Generate a Python AST node for accessing a potential Python module
1913
1947
variable name with a namespace."""
1914
1948
assert node .op == NodeOp .MAYBE_HOST_FORM
1915
- return GeneratedPyAST (node = _load_attr (f"{ node .class_ } .{ node .field } " ))
1949
+ return GeneratedPyAST (
1950
+ node = _load_attr (
1951
+ f"{ Maybe (_MODULE_ALIASES .get (node .class_ )).or_else_get (node .class_ )} .{ node .field } "
1952
+ )
1953
+ )
1916
1954
1917
1955
1918
1956
#########################
@@ -2426,22 +2464,12 @@ def gen_py_ast(ctx: GeneratorContext, lisp_ast: Node) -> GeneratedPyAST:
2426
2464
#############################
2427
2465
2428
2466
2429
- _MODULE_ALIASES = {
2430
- "builtins" : None ,
2431
- "basilisp.lang.keyword" : _KW_ALIAS ,
2432
- "basilisp.lang.list" : _LIST_ALIAS ,
2433
- "basilisp.lang.map" : _MAP_ALIAS ,
2434
- "basilisp.lang.runtime" : _RUNTIME_ALIAS ,
2435
- "basilisp.lang.set" : _SET_ALIAS ,
2436
- "basilisp.lang.symbol" : _SYM_ALIAS ,
2437
- "basilisp.lang.vector" : _VEC_ALIAS ,
2438
- "basilisp.lang.util" : _UTIL_ALIAS ,
2439
- }
2440
-
2441
-
2442
2467
def _module_imports (ctx : GeneratorContext ) -> Iterable [ast .Import ]:
2443
2468
"""Generate the Python Import AST node for importing all required
2444
2469
language support modules."""
2470
+ # Yield `import basilisp` so code attempting to call fully qualified
2471
+ # `basilisp.lang...` modules don't result in compiler errors
2472
+ yield ast .Import (names = [ast .alias (name = "basilisp" , asname = None )])
2445
2473
for imp in ctx .imports :
2446
2474
name = imp .key .name
2447
2475
alias = _MODULE_ALIASES .get (name , None )
0 commit comments