Don't set inType flag when parsing property names (#266)
* Don't set inType flag when parsing property names * Add inPropertyName type definition * Move inPropertyName check before this.curContext()
This commit is contained in:
committed by
Daniel Tschinder
parent
dd4c4ead2d
commit
3267e5f365
@@ -850,11 +850,14 @@ pp.parsePropertyName = function (prop) {
|
||||
prop.computed = true;
|
||||
prop.key = this.parseMaybeAssign();
|
||||
this.expect(tt.bracketR);
|
||||
return prop.key;
|
||||
} else {
|
||||
prop.computed = false;
|
||||
return prop.key = (this.match(tt.num) || this.match(tt.string)) ? this.parseExprAtom() : this.parseIdentifier(true);
|
||||
const oldInPropertyName = this.state.inPropertyName;
|
||||
this.state.inPropertyName = true;
|
||||
prop.key = (this.match(tt.num) || this.match(tt.string)) ? this.parseExprAtom() : this.parseIdentifier(true);
|
||||
this.state.inPropertyName = oldInPropertyName;
|
||||
}
|
||||
return prop.key;
|
||||
};
|
||||
|
||||
// Initialize empty function node.
|
||||
|
||||
@@ -949,17 +949,6 @@ export default function (instance) {
|
||||
};
|
||||
});
|
||||
|
||||
// ensure that inside property names, < isn't interpreted as JSX, but as a type parameter
|
||||
instance.extend("parsePropertyName", function (inner) {
|
||||
return function (prop) {
|
||||
const oldInType = this.state.inType;
|
||||
this.state.inType = true;
|
||||
const out = inner.call(this, prop);
|
||||
this.state.inType = oldInType;
|
||||
return out;
|
||||
};
|
||||
});
|
||||
|
||||
// ensure that inside flow types, we bypass the jsx parser plugin
|
||||
instance.extend("readToken", function (inner) {
|
||||
return function (code) {
|
||||
|
||||
@@ -416,7 +416,9 @@ export default function(instance) {
|
||||
|
||||
instance.extend("readToken", function(inner) {
|
||||
return function(code) {
|
||||
let context = this.curContext();
|
||||
if (this.state.inPropertyName) return inner.call(this, code);
|
||||
|
||||
const context = this.curContext();
|
||||
|
||||
if (context === tc.j_expr) {
|
||||
return this.jsxReadToken();
|
||||
|
||||
@@ -16,6 +16,7 @@ export default class State {
|
||||
this.inFunction =
|
||||
this.inGenerator =
|
||||
this.inAsync =
|
||||
this.inPropertyName =
|
||||
this.inType =
|
||||
this.noAnonFunctionType =
|
||||
false;
|
||||
@@ -69,6 +70,7 @@ export default class State {
|
||||
inMethod: boolean;
|
||||
inAsync: boolean;
|
||||
inType: boolean;
|
||||
inPropertyName: boolean;
|
||||
|
||||
// Labels in scope.
|
||||
labels: Array<Object>;
|
||||
|
||||
Reference in New Issue
Block a user