All the identifiers need to be escaped to make sure compiler doesnt confuse __NonUnderscore character incorrectly

Fixes #548
This commit is contained in:
Sheetal Nandi
2014-11-11 14:10:37 -08:00
parent 7a5c360025
commit 4c28e73372
5 changed files with 213 additions and 4 deletions

View File

@@ -1158,6 +1158,7 @@ module ts {
}
function internIdentifier(text: string): string {
text = escapeIdentifier(text);
return hasProperty(identifiers, text) ? identifiers[text] : (identifiers[text] = text);
}
@@ -1168,8 +1169,7 @@ module ts {
identifierCount++;
if (isIdentifier) {
var node = <Identifier>createNode(SyntaxKind.Identifier);
var text = escapeIdentifier(scanner.getTokenValue());
node.text = internIdentifier(text);
node.text = internIdentifier(scanner.getTokenValue());
nextToken();
return finishNode(node);
}

View File

@@ -0,0 +1,93 @@
//// [escapedReservedCompilerNamedIdentifier.ts]
// double underscores
var __proto__ = 10;
var o = {
"__proto__": 0
};
var b = o["__proto__"];
var o1 = {
__proto__: 0
};
var b1 = o1["__proto__"];
// Triple underscores
var ___proto__ = 10;
var o2 = {
"___proto__": 0
};
var b2 = o2["___proto__"];
var o3 = {
___proto__: 0
};
var b3 = o3["___proto__"];
// One underscore
var _proto__ = 10;
var o4 = {
"_proto__": 0
};
var b4 = o4["_proto__"];
var o5 = {
_proto__: 0
};
var b5 = o5["_proto__"];
//// [escapedReservedCompilerNamedIdentifier.js]
// double underscores
var __proto__ = 10;
var o = {
"__proto__": 0
};
var b = o["__proto__"];
var o1 = {
__proto__: 0
};
var b1 = o1["__proto__"];
// Triple underscores
var ___proto__ = 10;
var o2 = {
"___proto__": 0
};
var b2 = o2["___proto__"];
var o3 = {
___proto__: 0
};
var b3 = o3["___proto__"];
// One underscore
var _proto__ = 10;
var o4 = {
"_proto__": 0
};
var b4 = o4["_proto__"];
var o5 = {
_proto__: 0
};
var b5 = o5["_proto__"];
//// [escapedReservedCompilerNamedIdentifier.d.ts]
declare var __proto__: number;
declare var o: {
"__proto__": number;
};
declare var b: number;
declare var o1: {
__proto__: number;
};
declare var b1: number;
declare var ___proto__: number;
declare var o2: {
"___proto__": number;
};
declare var b2: number;
declare var o3: {
___proto__: number;
};
declare var b3: number;
declare var _proto__: number;
declare var o4: {
"_proto__": number;
};
declare var b4: number;
declare var o5: {
_proto__: number;
};
declare var b5: number;

View File

@@ -0,0 +1,85 @@
=== tests/cases/compiler/escapedReservedCompilerNamedIdentifier.ts ===
// double underscores
var __proto__ = 10;
>__proto__ : number
var o = {
>o : { "__proto__": number; }
>{ "__proto__": 0} : { "__proto__": number; }
"__proto__": 0
};
var b = o["__proto__"];
>b : number
>o["__proto__"] : number
>o : { "__proto__": number; }
var o1 = {
>o1 : { __proto__: number; }
>{ __proto__: 0} : { __proto__: number; }
__proto__: 0
>__proto__ : number
};
var b1 = o1["__proto__"];
>b1 : number
>o1["__proto__"] : number
>o1 : { __proto__: number; }
// Triple underscores
var ___proto__ = 10;
>___proto__ : number
var o2 = {
>o2 : { "___proto__": number; }
>{ "___proto__": 0} : { "___proto__": number; }
"___proto__": 0
};
var b2 = o2["___proto__"];
>b2 : number
>o2["___proto__"] : number
>o2 : { "___proto__": number; }
var o3 = {
>o3 : { ___proto__: number; }
>{ ___proto__: 0} : { ___proto__: number; }
___proto__: 0
>___proto__ : number
};
var b3 = o3["___proto__"];
>b3 : number
>o3["___proto__"] : number
>o3 : { ___proto__: number; }
// One underscore
var _proto__ = 10;
>_proto__ : number
var o4 = {
>o4 : { "_proto__": number; }
>{ "_proto__": 0} : { "_proto__": number; }
"_proto__": 0
};
var b4 = o4["_proto__"];
>b4 : number
>o4["_proto__"] : number
>o4 : { "_proto__": number; }
var o5 = {
>o5 : { _proto__: number; }
>{ _proto__: 0} : { _proto__: number; }
_proto__: 0
>_proto__ : number
};
var b5 = o5["_proto__"];
>b5 : number
>o5["_proto__"] : number
>o5 : { _proto__: number; }

View File

@@ -20,8 +20,8 @@ WorkspacePrototype['__proto__'] = EntityPrototype;
>EntityPrototype : any
var o = {
>o : {}
>{ "__proto__": 0} : {}
>o : { "__proto__": number; }
>{ "__proto__": 0} : { "__proto__": number; }
"__proto__": 0
};

View File

@@ -0,0 +1,31 @@
//@declaration: true
// double underscores
var __proto__ = 10;
var o = {
"__proto__": 0
};
var b = o["__proto__"];
var o1 = {
__proto__: 0
};
var b1 = o1["__proto__"];
// Triple underscores
var ___proto__ = 10;
var o2 = {
"___proto__": 0
};
var b2 = o2["___proto__"];
var o3 = {
___proto__: 0
};
var b3 = o3["___proto__"];
// One underscore
var _proto__ = 10;
var o4 = {
"_proto__": 0
};
var b4 = o4["_proto__"];
var o5 = {
_proto__: 0
};
var b5 = o5["_proto__"];