diff --git a/testTs/expect/classes/mixinAbstractClasses.txt b/testTs/expect/classes/mixinAbstractClasses.txt new file mode 100644 index 0000000000000000000000000000000000000000..007190ee8aba3f25ab2fd749feb48ccca8dd25d7 --- /dev/null +++ b/testTs/expect/classes/mixinAbstractClasses.txt @@ -0,0 +1,13 @@ +{'lb': [{'t': 2, 'v': 3}, {'t': 2, 'v': 0}, {'t': 5, 'v': 'Mixin'}, {'t': 2, 'v': 0}, {'t': 2, 'v': 1}, {'t': 25, 'v': 0}, {'t': 25, 'v': 0}], 'k': '_1'} +{'lb': [{'t': 2, 'v': 1}, {'t': 2, 'v': 1}, {'t': 25, 'v': 0}, {'t': 2, 'v': 1}, {'t': 25, 'v': 0}, {'t': 2, 'v': 0}, {'t': 2, 'v': 1}, {'t': 5, 'v': 'mixinMethod'}, {'t': 24, 'v': '_3'}, {'t': 2, 'v': 0}, {'t': 2, 'v': 0}], 'k': '_2'} +{'lb': [{'t': 2, 'v': 3}, {'t': 2, 'v': 0}, {'t': 5, 'v': 'mixinMethod'}, {'t': 2, 'v': 0}, {'t': 2, 'v': 0}, {'t': 25, 'v': 0}], 'k': '_3'} +{'lb': [{'t': 2, 'v': 1}, {'t': 2, 'v': 0}, {'t': 25, 'v': 0}, {'t': 2, 'v': 0}, {'t': 2, 'v': 0}, {'t': 2, 'v': 1}, {'t': 5, 'v': 'baseMethod'}, {'t': 24, 'v': '_5'}, {'t': 2, 'v': 0}, {'t': 2, 'v': 0}], 'k': '_4'} +{'lb': [{'t': 2, 'v': 3}, {'t': 2, 'v': 0}, {'t': 5, 'v': 'baseMethod'}, {'t': 2, 'v': 0}, {'t': 2, 'v': 0}, {'t': 25, 'v': 0}], 'k': '_5'} +{'lb': [{'t': 2, 'v': 2}, {'t': 24, 'v': '_4'}], 'k': '_6'} +{'lb': [{'t': 2, 'v': 1}, {'t': 2, 'v': 1}, {'t': 25, 'v': 0}, {'t': 2, 'v': 0}, {'t': 2, 'v': 0}, {'t': 2, 'v': 1}, {'t': 5, 'v': 'abstractBaseMethod'}, {'t': 24, 'v': '_8'}, {'t': 2, 'v': 0}, {'t': 2, 'v': 0}], 'k': '_7'} +{'lb': [{'t': 2, 'v': 3}, {'t': 2, 'v': 64}, {'t': 5, 'v': 'abstractBaseMethod'}, {'t': 2, 'v': 0}, {'t': 2, 'v': 0}, {'t': 25, 'v': 3}], 'k': '_8'} +{'lb': [{'t': 2, 'v': 1}, {'t': 2, 'v': 0}, {'t': 25, 'v': 0}, {'t': 2, 'v': 0}, {'t': 2, 'v': 0}, {'t': 2, 'v': 0}, {'t': 2, 'v': 0}, {'t': 2, 'v': 0}], 'k': '_9'} +{'lb': [{'t': 2, 'v': 2}, {'t': 24, 'v': '_9'}], 'k': '_10'} +{'lb': [{'t': 2, 'v': 1}, {'t': 2, 'v': 0}, {'t': 25, 'v': 0}, {'t': 2, 'v': 0}, {'t': 2, 'v': 0}, {'t': 2, 'v': 1}, {'t': 5, 'v': 'abstractBaseMethod'}, {'t': 24, 'v': '_12'}, {'t': 2, 'v': 0}, {'t': 2, 'v': 0}], 'k': '_11'} +{'lb': [{'t': 2, 'v': 3}, {'t': 2, 'v': 0}, {'t': 5, 'v': 'abstractBaseMethod'}, {'t': 2, 'v': 0}, {'t': 2, 'v': 0}, {'t': 25, 'v': 0}], 'k': '_12'} +{'lb': [{'t': 2, 'v': 2}, {'t': 24, 'v': '_11'}], 'k': '_13'} diff --git a/testTs/skip_tests.json b/testTs/skip_tests.json index 10bd289e1b7a1947a99876da2e754917b1bbe92f..9cb86c755237cb03bebfb8a920aeb1ee80b7a5b6 100644 --- a/testTs/skip_tests.json +++ b/testTs/skip_tests.json @@ -2624,7 +2624,6 @@ "./testTs/test/node/allowJs/nodeModulesAllowJs1.ts", "./testTs/test/node/allowJs/nodeModulesAllowJsPackagePatternExportsTrailers.ts", "./testTs/test/classes/mixinAbstractClassesReturnTypeInference.ts", - "./testTs/test/classes/mixinAbstractClasses.ts", "./testTs/test/classes/classExpressions/classWithStaticFieldInParameterBindingPattern.3.ts", "./testTs/test/classes/classExpressions/classWithStaticFieldInParameterInitializer.3.ts", "./testTs/test/classes/classExpressions/extendClassExpressionFromModule.ts", @@ -5058,4 +5057,4 @@ "./testTs/test/override/override17.ts", "./testTs/test/parser/ecmascript5/IndexMemberDeclarations/parserIndexMemberDeclaration6.ts" ] -} \ No newline at end of file +} diff --git a/ts2panda/src/base/typeSystem.ts b/ts2panda/src/base/typeSystem.ts index 18a04e51326805ea38334dfe9ec5af7fe4c5001e..5c1cc93f53643ea4903fb597f912b087133cbd4a 100644 --- a/ts2panda/src/base/typeSystem.ts +++ b/ts2panda/src/base/typeSystem.ts @@ -123,15 +123,16 @@ export enum L2Type { } -export enum ModifierAbstract { +export enum ClassModifierAbstract { NONABSTRACT, ABSTRACT } -export enum Modifier { +export enum MethodModifier { STATIC = 1 << 2, ASYNC = 1 << 3, - ASTERISK = 1 << 4 + ASTERISK = 1 << 4, + ABSTRACT = 1 << 6 // The fifth bit is held by GetOrSetAccessorFlag } export enum ModifierReadonly { @@ -270,7 +271,7 @@ export class TypeSummary extends BaseType { } export class ClassType extends BaseType { - modifier: number = ModifierAbstract.NONABSTRACT; // 0 -> unabstract, 1 -> abstract; + modifier: number = ClassModifierAbstract.NONABSTRACT; // 0 -> unabstract, 1 -> abstract; extendsHeritage: number = PrimitiveType.ANY; implementsHeritages: Array = new Array(); // fileds Array: [typeIndex] [public -> 0, private -> 1, protected -> 2] [readonly -> 1] @@ -312,7 +313,7 @@ export class ClassType extends BaseType { for (let modifier of node.modifiers) { switch (modifier.kind) { case ts.SyntaxKind.AbstractKeyword: { - this.modifier = ModifierAbstract.ABSTRACT; + this.modifier = ClassModifierAbstract.ABSTRACT; break; } default: { @@ -400,7 +401,7 @@ export class ClassType extends BaseType { // Then, get the typeIndex and fill in the methods array let typeIndex = this.tryGetTypeIndex(member); - let isStatic = funcType.hasModifier(Modifier.STATIC); + let isStatic = funcType.hasModifier(MethodModifier.STATIC); if (isStatic) { this.staticMethods.set(funcType.getFunctionName(), typeIndex!); } else { @@ -563,11 +564,15 @@ export class FunctionType extends BaseType { break; } case ts.SyntaxKind.StaticKeyword: { - this.modifiers = Modifier.STATIC; + this.modifiers = MethodModifier.STATIC; break; } case ts.SyntaxKind.AsyncKeyword: { - this.modifiers += Modifier.ASYNC; + this.modifiers += MethodModifier.ASYNC; + break; + } + case ts.SyntaxKind.AbstractKeyword: { + this.modifiers += MethodModifier.ABSTRACT; break; } default: @@ -577,7 +582,7 @@ export class FunctionType extends BaseType { } if (!ts.isMethodSignature(node) && node.asteriskToken) { - this.modifiers += Modifier.ASTERISK; + this.modifiers += MethodModifier.ASTERISK; } } @@ -605,7 +610,7 @@ export class FunctionType extends BaseType { return this.modifiers; } - hasModifier(modifier: Modifier) { + hasModifier(modifier: MethodModifier) { return (this.modifiers & modifier) ? true : false; }