| Index: frog/leg/emitter.dart
|
| ===================================================================
|
| --- frog/leg/emitter.dart (revision 5830)
|
| +++ frog/leg/emitter.dart (working copy)
|
| @@ -310,7 +310,13 @@
|
| }
|
| }
|
| generateTypeTests(classElement, (Element other) {
|
| - buffer.add('${attachTo(namer.operatorIs(other))} = true;\n');
|
| + buffer.add('${attachTo(namer.operatorIs(other))} = ');
|
| + if (nativeEmitter.requiresNativeIsCheck(other)) {
|
| + buffer.add('function() { return true; }');
|
| + } else {
|
| + buffer.add('true');
|
| + }
|
| + buffer.add(';\n');
|
| });
|
|
|
| if (classElement === compiler.objectClass && compiler.enabledNoSuchMethod) {
|
| @@ -327,17 +333,20 @@
|
| if (compiler.universe.isChecks.contains(cls)) {
|
| generateTypeTest(cls);
|
| }
|
| - generateInterfacesIsTests(cls, generateTypeTest);
|
| + generateInterfacesIsTests(cls, generateTypeTest, new Set<Element>());
|
| }
|
|
|
| void generateInterfacesIsTests(ClassElement cls,
|
| - void generateTypeTest(ClassElement element)) {
|
| + void generateTypeTest(ClassElement element),
|
| + Set<Element> alreadyGenerated) {
|
| for (Type interfaceType in cls.interfaces) {
|
| Element element = interfaceType.element;
|
| - if (compiler.universe.isChecks.contains(element)) {
|
| + if (!alreadyGenerated.contains(element) &&
|
| + compiler.universe.isChecks.contains(element)) {
|
| + alreadyGenerated.add(element);
|
| generateTypeTest(element);
|
| }
|
| - generateInterfacesIsTests(element, generateTypeTest);
|
| + generateInterfacesIsTests(element, generateTypeTest, alreadyGenerated);
|
| }
|
| }
|
|
|
| @@ -691,6 +700,7 @@
|
| buffer.add('function ${namer.ISOLATE}() {');
|
| emitStaticNonFinalFieldInitializations(buffer);
|
| buffer.add('}\n\n');
|
| + nativeEmitter.emitIsChecks(buffer);
|
| emitClasses(buffer);
|
| emitStaticFunctions(buffer);
|
| emitStaticFunctionGetters(buffer);
|
|
|