@@ -709,6 +709,11 @@ String maybeMangle(String name) {
709709 return ctx .maybeMangle (this .privateName , scope , name );
710710 }
711711
712+ String maybeMangleAndAddName (String name ) {
713+ String mangled = ctx .maybeMangle (this .privateName , scope , name );
714+ return addName (mangled );
715+ }
716+
712717 // --------------------- visitor ---------------------------
713718
714719 @ Override
@@ -1284,10 +1289,9 @@ private String mangle(String name) {
12841289 return ctx .mangle (scope , name );
12851290 }
12861291
1287- private void emitNotImplemented (String what , Builder b ) {
1288- b .beginRaiseNotImplementedError ();
1289- emitPythonConstant (toTruffleStringUncached (what ), b );
1290- b .endRaiseNotImplementedError ();
1292+ private String mangleAndAddName (String name ) {
1293+ String mangled = ctx .mangle (scope , name );
1294+ return addName (mangled );
12911295 }
12921296
12931297 /**
@@ -1335,12 +1339,12 @@ private void emitYield(Consumer<StatementCompiler> yieldValueProducer, Statement
13351339 }
13361340
13371341 private void beginSetAttribute (String name , Builder b ) {
1338- String mangled = maybeMangle (name );
1342+ String mangled = maybeMangleAndAddName (name );
13391343 b .beginSetAttribute (toTruffleStringUncached (mangled ));
13401344 }
13411345
13421346 private void beginGetAttribute (String name , Builder b ) {
1343- String mangled = maybeMangle (name );
1347+ String mangled = maybeMangleAndAddName (name );
13441348 b .beginGetAttribute (toTruffleStringUncached (mangled ));
13451349 }
13461350
@@ -1423,7 +1427,7 @@ private void emitNameFastOperation(String mangled, NameOperation op, Builder b)
14231427
14241428 private void emitNameGlobalOperation (String name , NameOperation op , Builder b , boolean isImplicitScope ) {
14251429 assert locals .get (name ) == null ;
1426- names . putIfAbsent (name , names . size () );
1430+ addName (name );
14271431 TruffleString tsName = toTruffleStringUncached (name );
14281432 switch (op ) {
14291433 case Read :
@@ -1456,9 +1460,14 @@ private void emitNameGlobalOperation(String name, NameOperation op, Builder b, b
14561460 }
14571461 }
14581462
1463+ private String addName (String name ) {
1464+ names .putIfAbsent (name , names .size ());
1465+ return name ;
1466+ }
1467+
14591468 private void emitNameSlowOperation (String name , NameOperation op , Builder b ) {
14601469 assert locals .get (name ) == null ;
1461- names . putIfAbsent (name , names . size () );
1470+ addName (name );
14621471 TruffleString tsName = toTruffleStringUncached (name );
14631472 switch (op ) {
14641473 case Read :
@@ -3579,7 +3588,7 @@ public Void visit(ExprTy.Subscript node) {
35793588 @ Override
35803589 public Void visit (ExprTy .Attribute node ) {
35813590 boolean newStatement = beginSourceSection (node , b );
3582- b .beginDeleteAttribute (toTruffleStringUncached (maybeMangle (node .attr )));
3591+ b .beginDeleteAttribute (toTruffleStringUncached (maybeMangleAndAddName (node .attr )));
35833592 node .value .accept (StatementCompiler .this );
35843593 b .endDeleteAttribute ();
35853594
@@ -3649,7 +3658,7 @@ public Void visit(StmtTy.Expr node) {
36493658 b .beginPrintExpr ();
36503659 node .value .accept (this );
36513660 b .endPrintExpr ();
3652- } else {
3661+ } else if (!( node . value instanceof ExprTy . Constant )) {
36533662 node .value .accept (this );
36543663 }
36553664 endSourceSection (b , newStatement );
@@ -3910,7 +3919,6 @@ private void emitMakeFunction(BytecodeDSLCodeUnit codeUnit, Object scopeKey, Str
39103919 TruffleString qualifiedName = codeUnit .qualname ;
39113920
39123921 // Register these in the Python constants list.
3913- addConstant (qualifiedName );
39143922 addConstant (codeUnit );
39153923
39163924 b .beginMakeFunction (functionName , qualifiedName , new BytecodeDSLCodeUnitAndRoot (codeUnit ));
@@ -4083,7 +4091,8 @@ public Void visit(StmtTy.ImportFrom node) {
40834091 ctx .errorCallback .onError (ErrorType .Syntax , node .getSourceRange (), "from __future__ imports must occur at the beginning of the file" );
40844092 }
40854093
4086- TruffleString tsModuleName = toTruffleStringUncached (node .module == null ? "" : node .module );
4094+ String moduleName = addName (node .module == null ? "" : node .module );
4095+ TruffleString tsModuleName = toTruffleStringUncached (moduleName );
40874096
40884097 if (node .names [0 ].name .equals ("*" )) {
40894098 b .emitImportStar (tsModuleName , node .level );
@@ -4104,6 +4113,7 @@ public Void visit(StmtTy.ImportFrom node) {
41044113 TruffleString [] importedNames = new TruffleString [node .names .length ];
41054114 for (int i = 0 ; i < node .names .length ; i ++) {
41064115 AliasTy alias = node .names [i ];
4116+ addName (alias .name );
41074117 String asName = alias .asName == null ? alias .name : alias .asName ;
41084118 beginStoreLocal (asName , b );
41094119
0 commit comments