Skip to content

Commit 4fd9c29

Browse files
author
Willem Wyndham
authored
fix: Do not serialize ? on optional parameters with initializer in ASTBuilder (AssemblyScript#1377)
1 parent 68db679 commit 4fd9c29

7 files changed

+7
-5
lines changed

src/extra/ast.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1613,7 +1613,7 @@ export class ASTBuilder {
16131613
var type = node.type;
16141614
var initializer = node.initializer;
16151615
if (type) {
1616-
if (kind == ParameterKind.OPTIONAL) sb.push("?");
1616+
if (kind == ParameterKind.OPTIONAL && !initializer) sb.push("?");
16171617
if (!isTypeOmitted(type)) {
16181618
sb.push(": ");
16191619
this.visitTypeNode(type);

tests/parser/constructor.ts.fixture.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ class MyClass {
44
constructor(a: i32, b: i32) {}
55
}
66
class MyClassImplicit {
7-
constructor(public a: i32, private readonly b?: i32 = 2, c?: i32 = 3) {}
7+
constructor(public a: i32, private readonly b: i32 = 2, c: i32 = 3) {}
88
}

tests/parser/function.ts.fixture.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
function simple(): void {}
2-
function typeparams<T, V extends T>(a?: V | null = null): void {}
2+
function typeparams<T, V extends T>(a: V | null = null): void {}
33
@decorator()
44
function withdecorator(): void {}
55
function withthis(this: i32): i32 {

tests/parser/parameter-optional.ts

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
function optionalParam(a: string = ""): void {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
function optionalParam(a: string = ""): void {}

tests/parser/parameter-order.ts.fixture.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ function restValid(a: i32, ...b: Array<i32>): void {}
22
function optionalValid(a: i32, b?: i32): void {}
33
function restParameterMustBeLast(...a: Array<i32>, b: i32): void {}
44
function optionalCannotPrecedeRequired(a?: i32, b: i32): void {}
5-
function optionalWithInitializerCannotPrecedeRequired(a?: i32 = 1, b: i32): void {}
5+
function optionalWithInitializerCannotPrecedeRequired(a: i32 = 1, b: i32): void {}
66
// ERROR 1014: "A rest parameter must be last in a parameter list." in parameter-order.ts(5,37+1)
77
// ERROR 1016: "A required parameter cannot follow an optional parameter." in parameter-order.ts(8,49+1)
88
// ERROR 1016: "A required parameter cannot follow an optional parameter." in parameter-order.ts(11,67+1)

tests/parser/string-binding.ts.fixture.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
@binding(BindingCall.NEW, [BindingType.STRING], BindingType.OBJECT_HANDLE)
22
export class ExternalString {
33
@binding(BindingCall.FUNCTION, [BindingType.U32, BindingType.U32], BindingType.OBJECT_HANDLE)
4-
static fromCharCode(char: u16, schar?: u16 = <u16>-1): String {
4+
static fromCharCode(char: u16, schar: u16 = <u16>-1): String {
55
return unreachable();
66
}
77
@binding(BindingCall.FUNCTION, [BindingType.U32], BindingType.OBJECT_HANDLE)

0 commit comments

Comments
 (0)