Browse Source

Support number literals as method names. Fixes #470.

Dmitry Panov 2 years ago
parent
commit
473251c96b
2 changed files with 15 additions and 2 deletions
  1. 14 1
      compiler_test.go
  2. 1 1
      parser/expression.go

+ 14 - 1
compiler_test.go

@@ -3236,9 +3236,10 @@ func TestObjectLiteralWithNumericKeys(t *testing.T) {
 	var keys1 = Object.keys(o1);
 	var o2 = {1e21: true};
 	var keys2 = Object.keys(o2);
+	let o3 = {0(){return true}};
 	keys.length === 1 && keys[0] === "1000" && 
 	keys1.length === 1 && keys1[0] === "1000" && o1[1e3] === true &&
-	keys2.length === 1 && keys2[0] === "1e+21";
+	keys2.length === 1 && keys2[0] === "1e+21" && o3[0]();
 	`
 	testScript(SCRIPT, valueTrue, t)
 }
@@ -5697,6 +5698,18 @@ func TestClassMethodSpecial(t *testing.T) {
 	testScript(SCRIPT, _undefined, t)
 }
 
+func TestClassMethodNumLiteral(t *testing.T) {
+	const SCRIPT = `
+	class C {
+		0() {
+			return true;
+		}
+	}
+	new C()[0]();
+	`
+	testScript(SCRIPT, valueTrue, t)
+}
+
 func TestAsyncFunc(t *testing.T) {
 	const SCRIPT = `
 	async (x = true, y) => {};

+ 1 - 1
parser/expression.go

@@ -400,7 +400,7 @@ func (self *_parser) parseObjectProperty() ast.Property {
 	if value == nil {
 		return nil
 	}
-	if token.IsId(tkn) || tkn == token.STRING || tkn == token.ILLEGAL {
+	if token.IsId(tkn) || tkn == token.STRING || tkn == token.NUMBER || tkn == token.ILLEGAL {
 		switch {
 		case self.token == token.LEFT_PARENTHESIS:
 			return &ast.PropertyKeyed{