Comments (6)
Probably a name mangling issue.
from sdk.
Thanks @Diaga for the very nice repro!
Here is a simplified example illustrating the problem in a standalone application:
class B<T> {}
class B$ {}
main() => B<int>();
It appears DDC introduces a helper declaration when defining generic classes, but it is not checking whether the name for the helper conflicts with other definitions in the same module. In the example above, it introduces a helper called B$
to represent the generic instantiation of B
, but B$
is also the declaration of the second class. When the latter overrides the former, it makes uses of the former invalid (like the instantiation of B<int>()
)
from sdk.
It's worth noting that this also happens with other conflicting declarations. For example:
class B<T> {}
final B$ = 0;
main() => B<int>();
So it's not sufficient to look for conflicts among classes. The error is slightly different in this case, but the cause is the same.
from sdk.
DDC emits auxiliary classes (and other top level identifiers) for generics and other structures with a $
suffix (see here). Lemme take a look at making these temporary Ids instead, which obey the built-in renaming semantics.
Thanks for the great repros, everyone!
from sdk.
Closing the loop here, DDC implicitly emits a generic object constructors as their original class name + $
. The renaming logic here is a tricky to clean up (we can't just use temporaries since this "API" needs to be stable across our runtime). The workaround is simple (i.e., avoid creating top level elements named X$
if X is a generic class), but we can obfuscate the name in the short term if this becomes a blocker.
from sdk.
Consider working towards a fix. I expect names with $
in then may get more prevalent with macros.
(You could change all $
s in the original name to $$_
and then any $
you insert yourself will not cause it to be equal to a source $
).
from sdk.
Related Issues (20)
- [dart2wasm] Generics unexpected runtimeType when extends to nullable HOT 6
- Analyzer Feedback from IntelliJ HOT 1
- Discrepancy between Analyzer and Compiler on nullability propagation in records HOT 6
- Make it easier to run dart compiled to wasm in node.js HOT 7
- [3.4.0] GitHub actions `dart pub global run coverage:test_with_coverage` doesn't terminate on Windows
- Analysis server doesn't run macros correctly when they're provided through an "export" HOT 5
- Macros: Augmenting a constructor doesn't copy over the default values. HOT 2
- Macros: Are macros compatible with class modifiers? HOT 3
- [Wildcard Variables] Dart2JS Implementation HOT 1
- [Wildcard Variables] DDC Implementation HOT 5
- [Wildcard Variables] Web debugging support
- vm_service_tester.dart has a wrong uri HOT 1
- Store buffer verification code triggers
- Assert error for aliased constructors in annotations
- Analyzer crashing while processing macro usage HOT 9
- [cfe] Enum named `_` issue
- [CP] Fix `dart run` missing fast path when using Flutter HOT 2
- pkg:json - Support for enums HOT 2
- pkg:json - Support for dynamic values
- Macros: Declaring a constructor on a generic class with an `implements` breaks generation HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sdk.