mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-15 11:35:42 -06:00
Merge branch 'master' into labelledStatements
Conflicts: src/compiler/diagnosticInformationMap.generated.ts src/compiler/diagnosticMessages.json src/compiler/parser.ts
This commit is contained in:
commit
86007cc137
16
.travis.yml
16
.travis.yml
@ -1,3 +1,13 @@
|
||||
language: node_js
|
||||
node_js:
|
||||
- "0.10"
|
||||
language: node_js
|
||||
|
||||
node_js:
|
||||
- '0.10'
|
||||
|
||||
before_script: npm install -g codeclimate-test-reporter
|
||||
|
||||
after_script:
|
||||
- cat coverage/lcov.info | codeclimate
|
||||
|
||||
addons:
|
||||
code_climate:
|
||||
repo_token: 9852ac5362c8cc38c07ca5adc0f94c20c6c79bd78e17933dc284598a65338656
|
||||
|
||||
12
Jakefile
12
Jakefile
@ -306,6 +306,11 @@ function exec(cmd, completeHandler) {
|
||||
}
|
||||
complete();
|
||||
});
|
||||
ex.addListener("error", function(e, status) {
|
||||
process.stderr.write(status);
|
||||
process.stderr.write(e);
|
||||
complete();
|
||||
})
|
||||
try{
|
||||
ex.run();
|
||||
} catch(e) {
|
||||
@ -362,6 +367,13 @@ task("runtests", ["tests", builtLocalDirectory], function() {
|
||||
exec(cmd, deleteTemporaryProjectOutput);
|
||||
}, {async: true});
|
||||
|
||||
desc("Generates code coverage data via instanbul")
|
||||
task("generate-code-coverage", ["tests", builtLocalDirectory], function () {
|
||||
var cmd = "istanbul cover node_modules/mocha/bin/_mocha -- -R dot " + run;
|
||||
console.log(cmd);
|
||||
exec(cmd);
|
||||
}, { async: true });
|
||||
|
||||
// Browser tests
|
||||
var nodeServerOutFile = 'tests/webTestServer.js'
|
||||
var nodeServerInFile = 'tests/webTestServer.ts'
|
||||
|
||||
@ -36,9 +36,11 @@
|
||||
"jake" : "latest",
|
||||
"mocha" : "latest",
|
||||
"chai" : "latest",
|
||||
"browserify" : "latest"
|
||||
"browserify" : "latest",
|
||||
"istanbul": "latest",
|
||||
"codeclimate-test-reporter": "latest"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "jake runtests"
|
||||
"test": "jake generate-code-coverage"
|
||||
}
|
||||
}
|
||||
|
||||
@ -101,6 +101,9 @@ module ts {
|
||||
Duplicate_label_0: { code: 1114, category: DiagnosticCategory.Error, key: "Duplicate label '{0}'" },
|
||||
A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: DiagnosticCategory.Error, key: "A 'continue' statement can only jump to a label of an enclosing iteration statement." },
|
||||
A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { code: 1116, category: DiagnosticCategory.Error, key: "A 'break' statement can only jump to a label of an enclosing statement." },
|
||||
An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { code: 1117, category: DiagnosticCategory.Error, key: "An object literal cannot have multiple properties with the same name in strict mode." },
|
||||
An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { code: 1118, category: DiagnosticCategory.Error, key: "An object literal cannot have multiple get/set accessors with the same name." },
|
||||
An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: DiagnosticCategory.Error, key: "An object literal cannot have property and accessor with the same name." },
|
||||
Duplicate_identifier_0: { code: 2000, category: DiagnosticCategory.Error, key: "Duplicate identifier '{0}'." },
|
||||
new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 2068, category: DiagnosticCategory.Error, key: "'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead." },
|
||||
Multiple_constructor_implementations_are_not_allowed: { code: 2070, category: DiagnosticCategory.Error, key: "Multiple constructor implementations are not allowed." },
|
||||
|
||||
@ -396,7 +396,18 @@
|
||||
"category": "Error",
|
||||
"code": 1116
|
||||
},
|
||||
|
||||
"An object literal cannot have multiple properties with the same name in strict mode.": {
|
||||
"category": "Error",
|
||||
"code": 1117
|
||||
},
|
||||
"An object literal cannot have multiple get/set accessors with the same name.": {
|
||||
"category": "Error",
|
||||
"code": 1118
|
||||
},
|
||||
"An object literal cannot have property and accessor with the same name.": {
|
||||
"category": "Error",
|
||||
"code": 1119
|
||||
},
|
||||
"Duplicate identifier '{0}'.": {
|
||||
"category": "Error",
|
||||
"code": 2000
|
||||
|
||||
@ -1669,8 +1669,7 @@ module ts {
|
||||
|
||||
function emitDirectivePrologues(statements: Statement[], startWithNewLine: boolean): number {
|
||||
for (var i = 0; i < statements.length; ++i) {
|
||||
if (statements[i].kind === SyntaxKind.ExpressionStatement &&
|
||||
(<ExpressionStatement>statements[i]).expression.kind === SyntaxKind.StringLiteral) {
|
||||
if (isPrologueDirective(statements[i])) {
|
||||
if (startWithNewLine || i > 0) {
|
||||
writeLine();
|
||||
}
|
||||
|
||||
@ -123,6 +123,22 @@ module ts {
|
||||
return file.externalModuleIndicator !== undefined;
|
||||
}
|
||||
|
||||
export function isPrologueDirective(node: Node): boolean {
|
||||
return node.kind === SyntaxKind.ExpressionStatement && (<ExpressionStatement>node).expression.kind === SyntaxKind.StringLiteral;
|
||||
}
|
||||
|
||||
function isEvalOrArgumentsIdentifier(node: Node): boolean {
|
||||
return node.kind === SyntaxKind.Identifier &&
|
||||
(<Identifier>node).text &&
|
||||
((<Identifier>node).text === "eval" || (<Identifier>node).text === "arguments")
|
||||
}
|
||||
|
||||
/// Should be called only on prologue directives (isPrologueDirective(node) should be true)
|
||||
function isUseStrictPrologueDirective(node: Node): boolean {
|
||||
Debug.assert(isPrologueDirective(node));
|
||||
return (<Identifier>(<ExpressionStatement>node).expression).text === "use strict";
|
||||
}
|
||||
|
||||
// Invokes a callback for each child of the given node. The 'cbNode' callback is invoked for all child nodes
|
||||
// stored in properties. If a 'cbNodes' callback is specified, it is invoked for embedded arrays; otherwise,
|
||||
// embedded arrays are flattened and the 'cbNode' callback is invoked for each element. If a callback returns
|
||||
@ -403,6 +419,7 @@ module ts {
|
||||
var identifierCount = 0;
|
||||
var nodeCount = 0;
|
||||
var lineStarts: number[];
|
||||
var isInStrictMode = false;
|
||||
|
||||
var lookAheadMode = LookAheadMode.NotLookingAhead;
|
||||
var inAmbientContext = false;
|
||||
@ -545,6 +562,13 @@ module ts {
|
||||
file.syntacticErrors.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2));
|
||||
}
|
||||
|
||||
function reportInvalidUseInStrictMode(node: Identifier): void {
|
||||
// identifierToString cannot be used here since it uses backreference to 'parent' that is not yet set
|
||||
var name = sourceText.substring(skipTrivia(sourceText, node.pos), node.end);
|
||||
grammarErrorOnNode(node, Diagnostics.Invalid_use_of_0_in_strict_mode, name);
|
||||
}
|
||||
|
||||
|
||||
function grammarErrorAtPos(start: number, length: number, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void {
|
||||
file.syntacticErrors.push(createFileDiagnostic(file, start, length, message, arg0, arg1, arg2));
|
||||
}
|
||||
@ -649,7 +673,7 @@ module ts {
|
||||
}
|
||||
|
||||
function isIdentifier(): boolean {
|
||||
return token === SyntaxKind.Identifier || token > SyntaxKind.LastReservedWord;
|
||||
return token === SyntaxKind.Identifier || (isInStrictMode ? token > SyntaxKind.LastFutureReservedWord : token > SyntaxKind.LastReservedWord);
|
||||
}
|
||||
|
||||
function isSemicolon(): boolean {
|
||||
@ -894,14 +918,28 @@ module ts {
|
||||
}
|
||||
|
||||
// Parses a list of elements
|
||||
function parseList<T extends Node>(kind: ParsingContext, parseElement: () => T): NodeArray<T> {
|
||||
function parseList<T extends Node>(kind: ParsingContext, checkForStrictMode: boolean, parseElement: () => T): NodeArray<T> {
|
||||
var saveParsingContext = parsingContext;
|
||||
parsingContext |= 1 << kind;
|
||||
var result = <NodeArray<T>>[];
|
||||
result.pos = getNodePos();
|
||||
var saveIsInStrictMode = isInStrictMode;
|
||||
while (!isListTerminator(kind)) {
|
||||
if (isListElement(kind, /* inErrorRecovery */ false)) {
|
||||
result.push(parseElement());
|
||||
var element = parseElement();
|
||||
result.push(element);
|
||||
// test elements only if we are not already in strict mode
|
||||
if (!isInStrictMode && checkForStrictMode) {
|
||||
if (isPrologueDirective(element)) {
|
||||
if (isUseStrictPrologueDirective(element)) {
|
||||
isInStrictMode = true;
|
||||
checkForStrictMode = false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
checkForStrictMode = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
error(parsingContextErrors(kind));
|
||||
@ -911,6 +949,7 @@ module ts {
|
||||
nextToken();
|
||||
}
|
||||
}
|
||||
isInStrictMode = saveIsInStrictMode;
|
||||
result.end = getNodeEnd();
|
||||
parsingContext = saveParsingContext;
|
||||
return result;
|
||||
@ -992,12 +1031,13 @@ module ts {
|
||||
return createMissingList<T>();
|
||||
}
|
||||
|
||||
function parseEntityName(): EntityName {
|
||||
// The allowReservedWords parameter controls whether reserved words are permitted after the first dot
|
||||
function parseEntityName(allowReservedWords: boolean): EntityName {
|
||||
var entity: EntityName = parseIdentifier();
|
||||
while (parseOptional(SyntaxKind.DotToken)) {
|
||||
var node = <QualifiedName>createNode(SyntaxKind.QualifiedName, entity.pos);
|
||||
node.left = entity;
|
||||
node.right = parseIdentifier();
|
||||
node.right = allowReservedWords ? parseIdentifierName() : parseIdentifier();
|
||||
entity = finishNode(node);
|
||||
}
|
||||
return entity;
|
||||
@ -1026,7 +1066,7 @@ module ts {
|
||||
|
||||
function parseTypeReference(): TypeReferenceNode {
|
||||
var node = <TypeReferenceNode>createNode(SyntaxKind.TypeReference);
|
||||
node.typeName = parseEntityName();
|
||||
node.typeName = parseEntityName(/*allowReservedWords*/ false);
|
||||
if (!scanner.hasPrecedingLineBreak() && token === SyntaxKind.LessThanToken) {
|
||||
node.typeArguments = parseTypeArguments();
|
||||
}
|
||||
@ -1036,7 +1076,7 @@ module ts {
|
||||
function parseTypeQuery(): TypeQueryNode {
|
||||
var node = <TypeQueryNode>createNode(SyntaxKind.TypeQuery);
|
||||
parseExpected(SyntaxKind.TypeOfKeyword);
|
||||
node.exprName = parseEntityName();
|
||||
node.exprName = parseEntityName(/*allowReservedWords*/ true);
|
||||
return finishNode(node);
|
||||
}
|
||||
|
||||
@ -1095,6 +1135,18 @@ module ts {
|
||||
node.flags |= NodeFlags.Rest;
|
||||
}
|
||||
node.name = parseIdentifier();
|
||||
if (node.name.kind === SyntaxKind.Missing && node.flags === 0 && isModifier(token)) {
|
||||
// in cases like
|
||||
// 'use strict'
|
||||
// function foo(static)
|
||||
// isParameter('static') === true, because of isModifier('static')
|
||||
// however 'static' is not a legal identifier in a strict mode.
|
||||
// so result of this function will be ParameterDeclaration (flags = 0, name = missing, type = undefined, initializer = undefined)
|
||||
// and current token will not change => parsing of the enclosing parameter list will last till the end of time (or OOM)
|
||||
// to avoid this we'll advance cursor to the next token.
|
||||
nextToken();
|
||||
}
|
||||
|
||||
if (parseOptional(SyntaxKind.QuestionToken)) {
|
||||
node.flags |= NodeFlags.QuestionMark;
|
||||
}
|
||||
@ -1139,8 +1191,16 @@ module ts {
|
||||
|
||||
for (var i = 0; i < parameterCount; i++) {
|
||||
var parameter = parameters[i];
|
||||
|
||||
if (parameter.flags & NodeFlags.Rest) {
|
||||
// It is a SyntaxError if the Identifier "eval" or the Identifier "arguments" occurs as the
|
||||
// Identifier in a PropertySetParameterList of a PropertyAssignment that is contained in strict code
|
||||
// or if its FunctionBody is strict code(11.1.5).
|
||||
// It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a
|
||||
// strict mode FunctionDeclaration or FunctionExpression(13.1)
|
||||
if (isInStrictMode && isEvalOrArgumentsIdentifier(parameter.name)) {
|
||||
reportInvalidUseInStrictMode(parameter.name);
|
||||
return;
|
||||
}
|
||||
else if (parameter.flags & NodeFlags.Rest) {
|
||||
if (i !== (parameterCount - 1)) {
|
||||
grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list);
|
||||
return;
|
||||
@ -1297,7 +1357,7 @@ module ts {
|
||||
function parseTypeLiteral(): TypeLiteralNode {
|
||||
var node = <TypeLiteralNode>createNode(SyntaxKind.TypeLiteral);
|
||||
if (parseExpected(SyntaxKind.OpenBraceToken)) {
|
||||
node.members = parseList(ParsingContext.TypeMembers, parseTypeMember);
|
||||
node.members = parseList(ParsingContext.TypeMembers, /*checkForStrictMode*/ false, parseTypeMember);
|
||||
parseExpected(SyntaxKind.CloseBraceToken);
|
||||
}
|
||||
else {
|
||||
@ -1485,8 +1545,13 @@ module ts {
|
||||
|
||||
// Now see if we might be in cases '2' or '3'.
|
||||
// If the expression was a LHS expression, and we have an assignment operator, then
|
||||
// we're in '2' or '3'. Consume the assignement and return.
|
||||
// we're in '2' or '3'. Consume the assignment and return.
|
||||
if (isLeftHandSideExpression(expr) && isAssignmentOperator()) {
|
||||
if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) {
|
||||
// ECMA 262 (Annex C) The identifier eval or arguments may not appear as the LeftHandSideExpression of an
|
||||
// Assignment operator(11.13) or of a PostfixExpression(11.3)
|
||||
reportInvalidUseInStrictMode(<Identifier>expr);
|
||||
}
|
||||
var operator = token;
|
||||
nextToken();
|
||||
return makeBinaryExpression(expr, operator, parseAssignmentExpression(noIn));
|
||||
@ -1786,6 +1851,19 @@ module ts {
|
||||
var operator = token;
|
||||
nextToken();
|
||||
var operand = parseUnaryExpression();
|
||||
if (isInStrictMode) {
|
||||
// The identifier eval or arguments may not appear as the LeftHandSideExpression of an
|
||||
// Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression
|
||||
// operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator
|
||||
if ((token === SyntaxKind.PlusPlusToken || token === SyntaxKind.MinusMinusToken) && isEvalOrArgumentsIdentifier(operand)) {
|
||||
reportInvalidUseInStrictMode(<Identifier>operand);
|
||||
}
|
||||
else if (token === SyntaxKind.DeleteKeyword && operand.kind === SyntaxKind.Identifier) {
|
||||
// When a delete operator occurs within strict mode code, a SyntaxError is thrown if its
|
||||
// UnaryExpression is a direct reference to a variable, function argument, or function name
|
||||
grammarErrorOnNode(operand, Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode);
|
||||
}
|
||||
}
|
||||
return makeUnaryExpression(SyntaxKind.PrefixOperator, pos, operator, operand);
|
||||
case SyntaxKind.LessThanToken:
|
||||
return parseTypeAssertion();
|
||||
@ -1807,6 +1885,12 @@ module ts {
|
||||
|
||||
Debug.assert(isLeftHandSideExpression(expr));
|
||||
if ((token === SyntaxKind.PlusPlusToken || token === SyntaxKind.MinusMinusToken) && !scanner.hasPrecedingLineBreak()) {
|
||||
// The identifier eval or arguments may not appear as the LeftHandSideExpression of an
|
||||
// Assignment operator(11.13) or of a PostfixExpression(11.3) or as the UnaryExpression
|
||||
// operated upon by a Prefix Increment(11.4.4) or a Prefix Decrement(11.4.5) operator.
|
||||
if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) {
|
||||
reportInvalidUseInStrictMode(<Identifier>expr);
|
||||
}
|
||||
var operator = token;
|
||||
nextToken();
|
||||
expr = makeUnaryExpression(SyntaxKind.PostfixOperator, expr.pos, operator, expr);
|
||||
@ -1993,6 +2077,61 @@ module ts {
|
||||
if (scanner.hasPrecedingLineBreak()) node.flags |= NodeFlags.MultiLine;
|
||||
node.properties = parseDelimitedList(ParsingContext.ObjectLiteralMembers, parseObjectLiteralMember, TrailingCommaBehavior.Preserve);
|
||||
parseExpected(SyntaxKind.CloseBraceToken);
|
||||
|
||||
var seen: Map<SymbolFlags> = {};
|
||||
var Property = 1;
|
||||
var GetAccessor = 2;
|
||||
var SetAccesor = 4;
|
||||
var GetOrSetAccessor = GetAccessor | SetAccesor;
|
||||
forEach(node.properties, (p: Declaration) => {
|
||||
if (p.kind === SyntaxKind.OmittedExpression) {
|
||||
return;
|
||||
}
|
||||
// ECMA-262 11.1.5 Object Initialiser
|
||||
// If previous is not undefined then throw a SyntaxError exception if any of the following conditions are true
|
||||
// a.This production is contained in strict code and IsDataDescriptor(previous) is true and
|
||||
// IsDataDescriptor(propId.descriptor) is true.
|
||||
// b.IsDataDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true.
|
||||
// c.IsAccessorDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true.
|
||||
// d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true
|
||||
// and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields
|
||||
var currentKind: number;
|
||||
if (p.kind === SyntaxKind.PropertyAssignment) {
|
||||
currentKind = Property;
|
||||
}
|
||||
else if (p.kind === SyntaxKind.GetAccessor) {
|
||||
currentKind = GetAccessor;
|
||||
}
|
||||
else if (p.kind === SyntaxKind.SetAccessor) {
|
||||
currentKind = SetAccesor;
|
||||
}
|
||||
else {
|
||||
Debug.fail("Unexpected syntax kind:" + SyntaxKind[p.kind]);
|
||||
}
|
||||
|
||||
if (!hasProperty(seen, p.name.text)) {
|
||||
seen[p.name.text] = currentKind;
|
||||
}
|
||||
else {
|
||||
var existingKind = seen[p.name.text];
|
||||
if (currentKind === Property && existingKind === Property) {
|
||||
if (isInStrictMode) {
|
||||
grammarErrorOnNode(p.name, Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode);
|
||||
}
|
||||
}
|
||||
else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) {
|
||||
if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) {
|
||||
seen[p.name.text] = currentKind | existingKind;
|
||||
}
|
||||
else {
|
||||
grammarErrorOnNode(p.name, Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name);
|
||||
}
|
||||
}
|
||||
else {
|
||||
grammarErrorOnNode(p.name, Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name);
|
||||
}
|
||||
}
|
||||
});
|
||||
return finishNode(node);
|
||||
}
|
||||
|
||||
@ -2002,6 +2141,11 @@ module ts {
|
||||
var name = isIdentifier() ? parseIdentifier() : undefined;
|
||||
var sig = parseSignature(SyntaxKind.CallSignature, SyntaxKind.ColonToken);
|
||||
var body = parseBody(/* ignoreMissingOpenBrace */ false);
|
||||
if (name && isInStrictMode && isEvalOrArgumentsIdentifier(name)) {
|
||||
// It is a SyntaxError to use within strict mode code the identifiers eval or arguments as the
|
||||
// Identifier of a FunctionDeclaration or FunctionExpression or as a formal parameter name(13.1)
|
||||
reportInvalidUseInStrictMode(name);
|
||||
}
|
||||
return makeFunctionExpression(SyntaxKind.FunctionExpression, pos, name, sig, body);
|
||||
}
|
||||
|
||||
@ -2028,10 +2172,10 @@ module ts {
|
||||
|
||||
// STATEMENTS
|
||||
|
||||
function parseBlock(ignoreMissingOpenBrace: boolean): Block {
|
||||
function parseBlock(ignoreMissingOpenBrace: boolean, checkForStrictMode: boolean): Block {
|
||||
var node = <Block>createNode(SyntaxKind.Block);
|
||||
if (parseExpected(SyntaxKind.OpenBraceToken) || ignoreMissingOpenBrace) {
|
||||
node.statements = parseList(ParsingContext.BlockStatements, parseStatement);
|
||||
node.statements = parseList(ParsingContext.BlockStatements,checkForStrictMode, parseStatement);
|
||||
parseExpected(SyntaxKind.CloseBraceToken);
|
||||
}
|
||||
else {
|
||||
@ -2054,7 +2198,7 @@ module ts {
|
||||
}
|
||||
labelledStatementInfo.pushFunctionBoundary();
|
||||
|
||||
var block = parseBlock(ignoreMissingOpenBrace);
|
||||
var block = parseBlock(ignoreMissingOpenBrace, /*checkForStrictMode*/ true);
|
||||
block.kind = SyntaxKind.FunctionBlock;
|
||||
|
||||
labelledStatementInfo.pop();
|
||||
@ -2275,12 +2419,20 @@ module ts {
|
||||
|
||||
function parseWithStatement(): WithStatement {
|
||||
var node = <WithStatement>createNode(SyntaxKind.WithStatement);
|
||||
var startPos = scanner.getTokenPos();
|
||||
parseExpected(SyntaxKind.WithKeyword);
|
||||
var endPos = scanner.getStartPos();
|
||||
parseExpected(SyntaxKind.OpenParenToken);
|
||||
node.expression = parseExpression();
|
||||
parseExpected(SyntaxKind.CloseParenToken);
|
||||
node.statement = parseStatement();
|
||||
return finishNode(node);
|
||||
node = finishNode(node);
|
||||
if (isInStrictMode) {
|
||||
// Strict mode code may not include a WithStatement. The occurrence of a WithStatement in such
|
||||
// a context is an
|
||||
grammarErrorAtPos(startPos, endPos - startPos, Diagnostics.with_statements_are_not_allowed_in_strict_mode)
|
||||
}
|
||||
return node;
|
||||
}
|
||||
|
||||
function parseCaseClause(): CaseOrDefaultClause {
|
||||
@ -2288,7 +2440,7 @@ module ts {
|
||||
parseExpected(SyntaxKind.CaseKeyword);
|
||||
node.expression = parseExpression();
|
||||
parseExpected(SyntaxKind.ColonToken);
|
||||
node.statements = parseList(ParsingContext.SwitchClauseStatements, parseStatement);
|
||||
node.statements = parseList(ParsingContext.SwitchClauseStatements, /*checkForStrictMode*/ false, parseStatement);
|
||||
return finishNode(node);
|
||||
}
|
||||
|
||||
@ -2296,7 +2448,7 @@ module ts {
|
||||
var node = <CaseOrDefaultClause>createNode(SyntaxKind.DefaultClause);
|
||||
parseExpected(SyntaxKind.DefaultKeyword);
|
||||
parseExpected(SyntaxKind.ColonToken);
|
||||
node.statements = parseList(ParsingContext.SwitchClauseStatements, parseStatement);
|
||||
node.statements = parseList(ParsingContext.SwitchClauseStatements, /*checkForStrictMode*/ false, parseStatement);
|
||||
return finishNode(node);
|
||||
}
|
||||
|
||||
@ -2314,7 +2466,7 @@ module ts {
|
||||
|
||||
var saveInSwitchStatement = inSwitchStatement;
|
||||
inSwitchStatement = ControlBlockContext.Nested;
|
||||
node.clauses = parseList(ParsingContext.SwitchClauses, parseCaseOrDefaultClause);
|
||||
node.clauses = parseList(ParsingContext.SwitchClauses, /*checkForStrictMode*/ false, parseCaseOrDefaultClause);
|
||||
inSwitchStatement = saveInSwitchStatement;
|
||||
|
||||
parseExpected(SyntaxKind.CloseBraceToken);
|
||||
@ -2361,7 +2513,7 @@ module ts {
|
||||
function parseTokenAndBlock(token: SyntaxKind, kind: SyntaxKind): Block {
|
||||
var pos = getNodePos();
|
||||
parseExpected(token);
|
||||
var result = parseBlock(/* ignoreMissingOpenBrace */ false);
|
||||
var result = parseBlock(/* ignoreMissingOpenBrace */ false, /*checkForStrictMode*/ false);
|
||||
result.kind = kind;
|
||||
result.pos = pos;
|
||||
return result;
|
||||
@ -2376,7 +2528,7 @@ module ts {
|
||||
var typeAnnotationColonLength = scanner.getTextPos() - typeAnnotationColonStart;
|
||||
var typeAnnotation = parseTypeAnnotation();
|
||||
parseExpected(SyntaxKind.CloseParenToken);
|
||||
var result = <CatchBlock>parseBlock(/* ignoreMissingOpenBrace */ false);
|
||||
var result = <CatchBlock>parseBlock(/* ignoreMissingOpenBrace */ false, /*checkForStrictMode*/ false);
|
||||
result.kind = SyntaxKind.CatchBlock;
|
||||
result.pos = pos;
|
||||
result.variable = variable;
|
||||
@ -2384,6 +2536,11 @@ module ts {
|
||||
if (typeAnnotation) {
|
||||
errorAtPos(typeAnnotationColonStart, typeAnnotationColonLength, Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation);
|
||||
}
|
||||
if (isInStrictMode && isEvalOrArgumentsIdentifier(variable)) {
|
||||
// It is a SyntaxError if a TryStatement with a Catch occurs within strict code and the Identifier of the
|
||||
// Catch production is eval or arguments
|
||||
reportInvalidUseInStrictMode(variable);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -2479,7 +2636,7 @@ module ts {
|
||||
function parseStatement(): Statement {
|
||||
switch (token) {
|
||||
case SyntaxKind.OpenBraceToken:
|
||||
return parseBlock(/* ignoreMissingOpenBrace */ false);
|
||||
return parseBlock(/* ignoreMissingOpenBrace */ false, /*checkForStrictMode*/ false);
|
||||
case SyntaxKind.VarKeyword:
|
||||
return parseVariableStatement();
|
||||
case SyntaxKind.FunctionKeyword:
|
||||
@ -2557,6 +2714,11 @@ module ts {
|
||||
if (inAmbientContext && node.initializer && errorCountBeforeVariableDeclaration === file.syntacticErrors.length) {
|
||||
grammarErrorAtPos(initializerStart, initializerFirstTokenLength, Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);
|
||||
}
|
||||
if (isInStrictMode && isEvalOrArgumentsIdentifier(node.name)) {
|
||||
// It is a SyntaxError if a VariableDeclaration or VariableDeclarationNoIn occurs within strict code
|
||||
// and its Identifier is eval or arguments
|
||||
reportInvalidUseInStrictMode(node.name);
|
||||
}
|
||||
return finishNode(node);
|
||||
}
|
||||
|
||||
@ -2587,6 +2749,11 @@ module ts {
|
||||
node.parameters = sig.parameters;
|
||||
node.type = sig.type;
|
||||
node.body = parseAndCheckFunctionBody(/*isConstructor*/ false);
|
||||
if (isInStrictMode && isEvalOrArgumentsIdentifier(node.name)) {
|
||||
// It is a SyntaxError to use within strict mode code the identifiers eval or arguments as the
|
||||
// Identifier of a FunctionDeclaration or FunctionExpression or as a formal parameter name(13.1)
|
||||
reportInvalidUseInStrictMode(node.name);
|
||||
}
|
||||
return finishNode(node);
|
||||
}
|
||||
|
||||
@ -2929,7 +3096,7 @@ module ts {
|
||||
}
|
||||
var errorCountBeforeClassBody = file.syntacticErrors.length;
|
||||
if (parseExpected(SyntaxKind.OpenBraceToken)) {
|
||||
node.members = parseList(ParsingContext.ClassMembers, parseClassMemberDeclaration);
|
||||
node.members = parseList(ParsingContext.ClassMembers, /*checkForStrictMode*/ false, parseClassMemberDeclaration);
|
||||
parseExpected(SyntaxKind.CloseBraceToken);
|
||||
}
|
||||
else {
|
||||
@ -3029,7 +3196,7 @@ module ts {
|
||||
function parseModuleBody(): Block {
|
||||
var node = <Block>createNode(SyntaxKind.ModuleBlock);
|
||||
if (parseExpected(SyntaxKind.OpenBraceToken)) {
|
||||
node.statements = parseList(ParsingContext.ModuleElements, parseModuleElement);
|
||||
node.statements = parseList(ParsingContext.ModuleElements, /*checkForStrictMode*/ false, parseModuleElement);
|
||||
parseExpected(SyntaxKind.CloseBraceToken);
|
||||
}
|
||||
else {
|
||||
@ -3093,7 +3260,7 @@ module ts {
|
||||
parseExpected(SyntaxKind.ImportKeyword);
|
||||
node.name = parseIdentifier();
|
||||
parseExpected(SyntaxKind.EqualsToken);
|
||||
var entityName = parseEntityName();
|
||||
var entityName = parseEntityName(/*allowReservedWords*/ false);
|
||||
if (entityName.kind === SyntaxKind.Identifier && (<Identifier>entityName).text === "require" && parseOptional(SyntaxKind.OpenParenToken)) {
|
||||
node.externalModuleName = parseStringLiteral();
|
||||
parseExpected(SyntaxKind.CloseParenToken);
|
||||
@ -3286,7 +3453,7 @@ module ts {
|
||||
var referenceComments = processReferenceComments();
|
||||
file.referencedFiles = referenceComments.referencedFiles;
|
||||
file.amdDependencies = referenceComments.amdDependencies;
|
||||
file.statements = parseList(ParsingContext.SourceElements, parseSourceElement);
|
||||
file.statements = parseList(ParsingContext.SourceElements, /*checkForStrictMode*/ true, parseSourceElement);
|
||||
file.externalModuleIndicator = getExternalModuleIndicator();
|
||||
file.nodeCount = nodeCount;
|
||||
file.identifierCount = identifierCount;
|
||||
|
||||
@ -215,7 +215,9 @@ module ts {
|
||||
FirstReservedWord = BreakKeyword,
|
||||
LastReservedWord = WithKeyword,
|
||||
FirstKeyword = BreakKeyword,
|
||||
LastKeyword = StringKeyword
|
||||
LastKeyword = StringKeyword,
|
||||
FirstFutureReservedWord = ImplementsKeyword,
|
||||
LastFutureReservedWord = YieldKeyword
|
||||
}
|
||||
|
||||
export enum NodeFlags {
|
||||
|
||||
@ -89,7 +89,7 @@ class CompilerBaselineRunner extends RunnerBase {
|
||||
result = compileResult;
|
||||
}, function (settings) {
|
||||
harnessCompiler.setCompilerSettings(tcSettings);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
/// <reference path='..\compiler\sys.ts' />
|
||||
/// <reference path='external\mocha.d.ts'/>
|
||||
/// <reference path='external\chai.d.ts'/>
|
||||
///<reference path='sourceMapRecorder.ts'/>
|
||||
/// <reference path='sourceMapRecorder.ts'/>
|
||||
|
||||
// this will work in the browser via browserify
|
||||
var _chai: typeof chai = require('chai');
|
||||
@ -598,7 +598,7 @@ module Harness {
|
||||
this.inputFiles.push(file);
|
||||
}
|
||||
|
||||
public compile(options?: ts.CompilerOptions) {
|
||||
public setCompilerOptions(options?: ts.CompilerOptions) {
|
||||
this.compileOptions = options || { noResolve: false };
|
||||
}
|
||||
|
||||
@ -693,6 +693,11 @@ module Harness {
|
||||
options.declaration = !!setting.value;
|
||||
break;
|
||||
|
||||
case 'newline':
|
||||
case 'newlines':
|
||||
sys.newLine = setting.value;
|
||||
break;
|
||||
|
||||
case 'mapsourcefiles':
|
||||
case 'maproot':
|
||||
case 'generatedeclarationfiles':
|
||||
@ -753,6 +758,9 @@ module Harness {
|
||||
// Covert the source Map data into the baseline
|
||||
result.updateSourceMapRecord(program, sourceMapData);
|
||||
onComplete(result);
|
||||
|
||||
// reset what newline means in case the last test changed it
|
||||
sys.newLine = '\r\n';
|
||||
return options;
|
||||
}
|
||||
}
|
||||
@ -891,7 +899,7 @@ module Harness {
|
||||
var optionRegex = /^[\/]{2}\s*@(\w+)\s*:\s*(\S*)/gm; // multiple matches on multiple lines
|
||||
|
||||
// List of allowed metadata names
|
||||
var fileMetadataNames = ["filename", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outDir", "noimplicitany", "noresolve"];
|
||||
var fileMetadataNames = ["filename", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outDir", "noimplicitany", "noresolve", "newline", "newlines"];
|
||||
|
||||
function extractCompilerSettings(content: string): CompilerSetting[] {
|
||||
|
||||
@ -1119,7 +1127,7 @@ module Harness {
|
||||
return filePath.indexOf('lib.d.ts') >= 0 || filePath.indexOf('lib.core.d.ts') >= 0;
|
||||
}
|
||||
|
||||
if (Error) (<any>Error).stackTraceLimit = 100;
|
||||
if (Error) (<any>Error).stackTraceLimit = 1;
|
||||
}
|
||||
|
||||
// TODO: not sure why Utils.evalFile isn't working with this, eventually will concat it like old compiler instead of eval
|
||||
|
||||
@ -104,4 +104,6 @@ if (runners.length === 0) {
|
||||
// runners.push(new GeneratedFourslashRunner());
|
||||
}
|
||||
|
||||
sys.newLine = '\r\n';
|
||||
|
||||
runTests(runners);
|
||||
|
||||
@ -143,7 +143,7 @@ module RWC {
|
||||
harnessCompiler.addInputFile({ unitName: resolvedPath, content: content });
|
||||
});
|
||||
|
||||
harnessCompiler.compile();
|
||||
harnessCompiler.setCompilerOptions();
|
||||
|
||||
// Emit the results
|
||||
harnessCompiler.emitAll(emitterIOHost);
|
||||
|
||||
@ -37,7 +37,7 @@ class UnitTestRunner extends RunnerBase {
|
||||
return { unitName: test, content: Harness.IO.readFile(test) }
|
||||
});
|
||||
harnessCompiler.addInputFiles(toBeAdded);
|
||||
harnessCompiler.compile({ noResolve: true });
|
||||
harnessCompiler.setCompilerOptions({ noResolve: true });
|
||||
|
||||
var stdout = new Harness.Compiler.EmitterIOHost();
|
||||
var emitDiagnostics = harnessCompiler.emitAll(stdout);
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
==== tests/cases/compiler/constructorStaticParamNameErrors.ts (1 errors) ====
|
||||
'use strict'
|
||||
// static as constructor parameter name should give error if 'use strict'
|
||||
class test {
|
||||
constructor (static) { }
|
||||
~~~~~~
|
||||
!!! Identifier expected.
|
||||
}
|
||||
@ -1,14 +0,0 @@
|
||||
//// [constructorStaticParamNameErrors.ts]
|
||||
'use strict'
|
||||
// static as constructor parameter name should give error if 'use strict'
|
||||
class test {
|
||||
constructor (static) { }
|
||||
}
|
||||
|
||||
//// [constructorStaticParamNameErrors.js]
|
||||
'use strict';
|
||||
var test = (function () {
|
||||
function test(static) {
|
||||
}
|
||||
return test;
|
||||
})();
|
||||
@ -234,5 +234,5 @@
|
||||
interface B extends A { }
|
||||
var x: B = { };
|
||||
~
|
||||
!!! Type '{}' is not assignable to type 'B':
|
||||
!!! Property 'x' is missing in type '{}'.
|
||||
!!! Type '{}' is not assignable to type 'B':\n Property 'x' is missing in type '{}'.
|
||||
|
||||
@ -228,198 +228,8 @@ Point.prototype = {
|
||||
|
||||
interface A { x: string; }
|
||||
interface B extends A { }
|
||||
var x: B = { };
|
||||
var x: B = { };
|
||||
|
||||
|
||||
//// [contextualTyping.js]
|
||||
var C1T5 = (function () {
|
||||
function C1T5() {
|
||||
this.foo = function (i) {
|
||||
return i;
|
||||
};
|
||||
}
|
||||
return C1T5;
|
||||
})();
|
||||
var C2T5;
|
||||
(function (C2T5) {
|
||||
C2T5.foo = function (i) {
|
||||
return i;
|
||||
};
|
||||
})(C2T5 || (C2T5 = {}));
|
||||
var c3t1 = (function (s) {
|
||||
return s;
|
||||
});
|
||||
var c3t2 = ({
|
||||
n: 1
|
||||
});
|
||||
var c3t3 = [];
|
||||
var c3t4 = function () {
|
||||
return ({});
|
||||
};
|
||||
var c3t5 = function (n) {
|
||||
return ({});
|
||||
};
|
||||
var c3t6 = function (n, s) {
|
||||
return ({});
|
||||
};
|
||||
var c3t7 = function (n) {
|
||||
return n;
|
||||
};
|
||||
var c3t8 = function (n) {
|
||||
return n;
|
||||
};
|
||||
var c3t9 = [[], []];
|
||||
var c3t10 = [({}), ({})];
|
||||
var c3t11 = [function (n, s) {
|
||||
return s;
|
||||
}];
|
||||
var c3t12 = {
|
||||
foo: ({})
|
||||
};
|
||||
var c3t13 = ({
|
||||
f: function (i, s) {
|
||||
return s;
|
||||
}
|
||||
});
|
||||
var c3t14 = ({
|
||||
a: []
|
||||
});
|
||||
var C4T5 = (function () {
|
||||
function C4T5() {
|
||||
this.foo = function (i, s) {
|
||||
return s;
|
||||
};
|
||||
}
|
||||
return C4T5;
|
||||
})();
|
||||
var C5T5;
|
||||
(function (C5T5) {
|
||||
C5T5.foo;
|
||||
C5T5.foo = function (i, s) {
|
||||
return s;
|
||||
};
|
||||
})(C5T5 || (C5T5 = {}));
|
||||
var c6t5;
|
||||
c6t5 = function (n) {
|
||||
return ({});
|
||||
};
|
||||
var c7t2;
|
||||
c7t2[0] = ({ n: 1 });
|
||||
var objc8 = ({});
|
||||
objc8.t1 = (function (s) {
|
||||
return s;
|
||||
});
|
||||
objc8.t2 = ({
|
||||
n: 1
|
||||
});
|
||||
objc8.t3 = [];
|
||||
objc8.t4 = function () {
|
||||
return ({});
|
||||
};
|
||||
objc8.t5 = function (n) {
|
||||
return ({});
|
||||
};
|
||||
objc8.t6 = function (n, s) {
|
||||
return ({});
|
||||
};
|
||||
objc8.t7 = function (n) {
|
||||
return n;
|
||||
};
|
||||
objc8.t8 = function (n) {
|
||||
return n;
|
||||
};
|
||||
objc8.t9 = [[], []];
|
||||
objc8.t10 = [({}), ({})];
|
||||
objc8.t11 = [function (n, s) {
|
||||
return s;
|
||||
}];
|
||||
objc8.t12 = {
|
||||
foo: ({})
|
||||
};
|
||||
objc8.t13 = ({
|
||||
f: function (i, s) {
|
||||
return s;
|
||||
}
|
||||
});
|
||||
objc8.t14 = ({
|
||||
a: []
|
||||
});
|
||||
function c9t5(f) {
|
||||
}
|
||||
;
|
||||
c9t5(function (n) {
|
||||
return ({});
|
||||
});
|
||||
var c10t5 = function () {
|
||||
return function (n) {
|
||||
return ({});
|
||||
};
|
||||
};
|
||||
var C11t5 = (function () {
|
||||
function C11t5(f) {
|
||||
}
|
||||
return C11t5;
|
||||
})();
|
||||
;
|
||||
var i = new C11t5(function (n) {
|
||||
return ({});
|
||||
});
|
||||
var c12t1 = (function (s) {
|
||||
return s;
|
||||
});
|
||||
var c12t2 = ({
|
||||
n: 1
|
||||
});
|
||||
var c12t3 = [];
|
||||
var c12t4 = function () {
|
||||
return ({});
|
||||
};
|
||||
var c12t5 = function (n) {
|
||||
return ({});
|
||||
};
|
||||
var c12t6 = function (n, s) {
|
||||
return ({});
|
||||
};
|
||||
var c12t7 = function (n) {
|
||||
return n;
|
||||
};
|
||||
var c12t8 = function (n) {
|
||||
return n;
|
||||
};
|
||||
var c12t9 = [[], []];
|
||||
var c12t10 = [({}), ({})];
|
||||
var c12t11 = [function (n, s) {
|
||||
return s;
|
||||
}];
|
||||
var c12t12 = {
|
||||
foo: ({})
|
||||
};
|
||||
var c12t13 = ({
|
||||
f: function (i, s) {
|
||||
return s;
|
||||
}
|
||||
});
|
||||
var c12t14 = ({
|
||||
a: []
|
||||
});
|
||||
function EF1(a, b) {
|
||||
return a + b;
|
||||
}
|
||||
var efv = EF1(1, 2);
|
||||
function Point(x, y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
return this;
|
||||
}
|
||||
Point.origin = new Point(0, 0);
|
||||
Point.prototype.add = function (dx, dy) {
|
||||
return new Point(this.x + dx, this.y + dy);
|
||||
};
|
||||
Point.prototype = {
|
||||
x: 0,
|
||||
y: 0,
|
||||
add: function (dx, dy) {
|
||||
return new Point(this.x + dx, this.y + dy);
|
||||
}
|
||||
};
|
||||
var x = {};
|
||||
//# sourceMappingURL=contextualTyping.js.map
|
||||
var C1T5 = (function () {\n function C1T5() {\n this.foo = function (i) {\n return i;\n };\n }\n return C1T5;\n})();\nvar C2T5;\n(function (C2T5) {\n C2T5.foo = function (i) {\n return i;\n };\n})(C2T5 || (C2T5 = {}));\nvar c3t1 = (function (s) {\n return s;\n});\nvar c3t2 = ({\n n: 1\n});\nvar c3t3 = [];\nvar c3t4 = function () {\n return ({});\n};\nvar c3t5 = function (n) {\n return ({});\n};\nvar c3t6 = function (n, s) {\n return ({});\n};\nvar c3t7 = function (n) {\n return n;\n};\nvar c3t8 = function (n) {\n return n;\n};\nvar c3t9 = [[], []];\nvar c3t10 = [({}), ({})];\nvar c3t11 = [function (n, s) {\n return s;\n}];\nvar c3t12 = {\n foo: ({})\n};\nvar c3t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c3t14 = ({\n a: []\n});\nvar C4T5 = (function () {\n function C4T5() {\n this.foo = function (i, s) {\n return s;\n };\n }\n return C4T5;\n})();\nvar C5T5;\n(function (C5T5) {\n C5T5.foo;\n C5T5.foo = function (i, s) {\n return s;\n };\n})(C5T5 || (C5T5 = {}));\nvar c6t5;\nc6t5 = function (n) {\n return ({});\n};\nvar c7t2;\nc7t2[0] = ({ n: 1 });\nvar objc8 = ({});\nobjc8.t1 = (function (s) {\n return s;\n});\nobjc8.t2 = ({\n n: 1\n});\nobjc8.t3 = [];\nobjc8.t4 = function () {\n return ({});\n};\nobjc8.t5 = function (n) {\n return ({});\n};\nobjc8.t6 = function (n, s) {\n return ({});\n};\nobjc8.t7 = function (n) {\n return n;\n};\nobjc8.t8 = function (n) {\n return n;\n};\nobjc8.t9 = [[], []];\nobjc8.t10 = [({}), ({})];\nobjc8.t11 = [function (n, s) {\n return s;\n}];\nobjc8.t12 = {\n foo: ({})\n};\nobjc8.t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nobjc8.t14 = ({\n a: []\n});\nfunction c9t5(f) {\n}\n;\nc9t5(function (n) {\n return ({});\n});\nvar c10t5 = function () {\n return function (n) {\n return ({});\n };\n};\nvar C11t5 = (function () {\n function C11t5(f) {\n }\n return C11t5;\n})();\n;\nvar i = new C11t5(function (n) {\n return ({});\n});\nvar c12t1 = (function (s) {\n return s;\n});\nvar c12t2 = ({\n n: 1\n});\nvar c12t3 = [];\nvar c12t4 = function () {\n return ({});\n};\nvar c12t5 = function (n) {\n return ({});\n};\nvar c12t6 = function (n, s) {\n return ({});\n};\nvar c12t7 = function (n) {\n return n;\n};\nvar c12t8 = function (n) {\n return n;\n};\nvar c12t9 = [[], []];\nvar c12t10 = [({}), ({})];\nvar c12t11 = [function (n, s) {\n return s;\n}];\nvar c12t12 = {\n foo: ({})\n};\nvar c12t13 = ({\n f: function (i, s) {\n return s;\n }\n});\nvar c12t14 = ({\n a: []\n});\nfunction EF1(a, b) {\n return a + b;\n}\nvar efv = EF1(1, 2);\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n return this;\n}\nPoint.origin = new Point(0, 0);\nPoint.prototype.add = function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n};\nPoint.prototype = {\n x: 0,\n y: 0,\n add: function (dx, dy) {\n return new Point(this.x + dx, this.y + dy);\n }\n};\nvar x = {};\n//# sourceMappingURL=contextualTyping.js.map
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
||||
==== tests/cases/compiler/duplicateObjectLiteralProperty.ts (8 errors) ====
|
||||
==== tests/cases/compiler/duplicateObjectLiteralProperty.ts (9 errors) ====
|
||||
var x = {
|
||||
a: 1,
|
||||
b: true, // OK
|
||||
@ -30,6 +30,8 @@
|
||||
~
|
||||
!!! Accessors are only available when targeting ECMAScript 5 and higher.
|
||||
~
|
||||
!!! An object literal cannot have multiple get/set accessors with the same name.
|
||||
~
|
||||
!!! Duplicate identifier 'a'.
|
||||
};
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
==== tests/cases/compiler/duplicatePropertiesInStrictMode.ts (2 errors) ====
|
||||
"use strict";
|
||||
var x = {
|
||||
x: 1,
|
||||
x: 2
|
||||
~
|
||||
!!! An object literal cannot have multiple properties with the same name in strict mode.
|
||||
~
|
||||
!!! Duplicate identifier 'x'.
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
==== tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts (41 errors) ====
|
||||
==== tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts (59 errors) ====
|
||||
|
||||
// Multiple properties with the same name
|
||||
var e1 = { a: 0, a: 0 };
|
||||
@ -59,57 +59,93 @@
|
||||
// Accessor and property with the same name
|
||||
var f1 = { a: 0, get a() { return 0; } };
|
||||
~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! Duplicate identifier 'a'.
|
||||
var f2 = { a: '', get a() { return ''; } };
|
||||
~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! Duplicate identifier 'a'.
|
||||
var f3 = { a: 0, get a() { return ''; } };
|
||||
~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! Duplicate identifier 'a'.
|
||||
var f4 = { a: true, get a() { return false; } };
|
||||
~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! Duplicate identifier 'a'.
|
||||
var f5 = { a: {}, get a() { return {}; } };
|
||||
~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! Duplicate identifier 'a'.
|
||||
var f6 = { a: 0, get 'a'() { return 0; } };
|
||||
~~~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~~~
|
||||
!!! Duplicate identifier ''a''.
|
||||
var f7 = { 'a': 0, get a() { return 0; } };
|
||||
~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! Duplicate identifier 'a'.
|
||||
var f8 = { 'a': 0, get "a"() { return 0; } };
|
||||
~~~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~~~
|
||||
!!! Duplicate identifier '"a"'.
|
||||
var f9 = { 'a': 0, get 'a'() { return 0; } };
|
||||
~~~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~~~
|
||||
!!! Duplicate identifier ''a''.
|
||||
var f10 = { "a": 0, get 'a'() { return 0; } };
|
||||
~~~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~~~
|
||||
!!! Duplicate identifier ''a''.
|
||||
var f11 = { 1.0: 0, get '1'() { return 0; } };
|
||||
~~~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~~~
|
||||
!!! Duplicate identifier ''1''.
|
||||
var f12 = { 0: 0, get 0() { return 0; } };
|
||||
~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! Duplicate identifier '0'.
|
||||
var f13 = { 0: 0, get 0() { return 0; } };
|
||||
~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! Duplicate identifier '0'.
|
||||
var f14 = { 0: 0, get 0x0() { return 0; } };
|
||||
~~~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~~~
|
||||
!!! Duplicate identifier '0x0'.
|
||||
var f14 = { 0: 0, get 000() { return 0; } };
|
||||
~~~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~~~
|
||||
!!! Duplicate identifier '000'.
|
||||
var f15 = { "100": 0, get 1e2() { return 0; } };
|
||||
~~~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~~~
|
||||
!!! Duplicate identifier '1e2'.
|
||||
var f16 = { 0x20: 0, get 3.2e1() { return 0; } };
|
||||
~~~~~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~~~~~
|
||||
!!! Duplicate identifier '3.2e1'.
|
||||
var f17 = { a: 0, get b() { return 1; }, get a() { return 0; } };
|
||||
~
|
||||
!!! An object literal cannot have property and accessor with the same name.
|
||||
~
|
||||
!!! Duplicate identifier 'a'.
|
||||
|
||||
// Get and set accessor with mismatched type annotations
|
||||
|
||||
@ -1,135 +0,0 @@
|
||||
//// [objectLiteralErrors.ts]
|
||||
|
||||
// Multiple properties with the same name
|
||||
var e1 = { a: 0, a: 0 };
|
||||
var e2 = { a: '', a: '' };
|
||||
var e3 = { a: 0, a: '' };
|
||||
var e4 = { a: true, a: false };
|
||||
var e5 = { a: {}, a: {} };
|
||||
var e6 = { a: 0, 'a': 0 };
|
||||
var e7 = { 'a': 0, a: 0 };
|
||||
var e8 = { 'a': 0, "a": 0 };
|
||||
var e9 = { 'a': 0, 'a': 0 };
|
||||
var e10 = { "a": 0, 'a': 0 };
|
||||
var e11 = { 1.0: 0, '1': 0 };
|
||||
var e12 = { 0: 0, 0: 0 };
|
||||
var e13 = { 0: 0, 0: 0 };
|
||||
var e14 = { 0: 0, 0x0: 0 };
|
||||
var e14 = { 0: 0, 000: 0 };
|
||||
var e15 = { "100": 0, 1e2: 0 };
|
||||
var e16 = { 0x20: 0, 3.2e1: 0 };
|
||||
var e17 = { a: 0, b: 1, a: 0 };
|
||||
|
||||
// Accessor and property with the same name
|
||||
var f1 = { a: 0, get a() { return 0; } };
|
||||
var f2 = { a: '', get a() { return ''; } };
|
||||
var f3 = { a: 0, get a() { return ''; } };
|
||||
var f4 = { a: true, get a() { return false; } };
|
||||
var f5 = { a: {}, get a() { return {}; } };
|
||||
var f6 = { a: 0, get 'a'() { return 0; } };
|
||||
var f7 = { 'a': 0, get a() { return 0; } };
|
||||
var f8 = { 'a': 0, get "a"() { return 0; } };
|
||||
var f9 = { 'a': 0, get 'a'() { return 0; } };
|
||||
var f10 = { "a": 0, get 'a'() { return 0; } };
|
||||
var f11 = { 1.0: 0, get '1'() { return 0; } };
|
||||
var f12 = { 0: 0, get 0() { return 0; } };
|
||||
var f13 = { 0: 0, get 0() { return 0; } };
|
||||
var f14 = { 0: 0, get 0x0() { return 0; } };
|
||||
var f14 = { 0: 0, get 000() { return 0; } };
|
||||
var f15 = { "100": 0, get 1e2() { return 0; } };
|
||||
var f16 = { 0x20: 0, get 3.2e1() { return 0; } };
|
||||
var f17 = { a: 0, get b() { return 1; }, get a() { return 0; } };
|
||||
|
||||
// Get and set accessor with mismatched type annotations
|
||||
var g1 = { get a(): number { return 4; }, set a(n: string) { } };
|
||||
var g2 = { get a() { return 4; }, set a(n: string) { } };
|
||||
var g3 = { get a(): number { return undefined; }, set a(n: string) { } };
|
||||
|
||||
|
||||
//// [objectLiteralErrors.js]
|
||||
var e1 = { a: 0, a: 0 };
|
||||
var e2 = { a: '', a: '' };
|
||||
var e3 = { a: 0, a: '' };
|
||||
var e4 = { a: true, a: false };
|
||||
var e5 = { a: {}, a: {} };
|
||||
var e6 = { a: 0, 'a': 0 };
|
||||
var e7 = { 'a': 0, a: 0 };
|
||||
var e8 = { 'a': 0, "a": 0 };
|
||||
var e9 = { 'a': 0, 'a': 0 };
|
||||
var e10 = { "a": 0, 'a': 0 };
|
||||
var e11 = { 1.0: 0, '1': 0 };
|
||||
var e12 = { 0: 0, 0: 0 };
|
||||
var e13 = { 0: 0, 0: 0 };
|
||||
var e14 = { 0: 0, 0x0: 0 };
|
||||
var e14 = { 0: 0, 000: 0 };
|
||||
var e15 = { "100": 0, 1e2: 0 };
|
||||
var e16 = { 0x20: 0, 3.2e1: 0 };
|
||||
var e17 = { a: 0, b: 1, a: 0 };
|
||||
var f1 = { a: 0, get a() {
|
||||
return 0;
|
||||
} };
|
||||
var f2 = { a: '', get a() {
|
||||
return '';
|
||||
} };
|
||||
var f3 = { a: 0, get a() {
|
||||
return '';
|
||||
} };
|
||||
var f4 = { a: true, get a() {
|
||||
return false;
|
||||
} };
|
||||
var f5 = { a: {}, get a() {
|
||||
return {};
|
||||
} };
|
||||
var f6 = { a: 0, get 'a'() {
|
||||
return 0;
|
||||
} };
|
||||
var f7 = { 'a': 0, get a() {
|
||||
return 0;
|
||||
} };
|
||||
var f8 = { 'a': 0, get "a"() {
|
||||
return 0;
|
||||
} };
|
||||
var f9 = { 'a': 0, get 'a'() {
|
||||
return 0;
|
||||
} };
|
||||
var f10 = { "a": 0, get 'a'() {
|
||||
return 0;
|
||||
} };
|
||||
var f11 = { 1.0: 0, get '1'() {
|
||||
return 0;
|
||||
} };
|
||||
var f12 = { 0: 0, get 0() {
|
||||
return 0;
|
||||
} };
|
||||
var f13 = { 0: 0, get 0() {
|
||||
return 0;
|
||||
} };
|
||||
var f14 = { 0: 0, get 0x0() {
|
||||
return 0;
|
||||
} };
|
||||
var f14 = { 0: 0, get 000() {
|
||||
return 0;
|
||||
} };
|
||||
var f15 = { "100": 0, get 1e2() {
|
||||
return 0;
|
||||
} };
|
||||
var f16 = { 0x20: 0, get 3.2e1() {
|
||||
return 0;
|
||||
} };
|
||||
var f17 = { a: 0, get b() {
|
||||
return 1;
|
||||
}, get a() {
|
||||
return 0;
|
||||
} };
|
||||
var g1 = { get a() {
|
||||
return 4;
|
||||
}, set a(n) {
|
||||
} };
|
||||
var g2 = { get a() {
|
||||
return 4;
|
||||
}, set a(n) {
|
||||
} };
|
||||
var g3 = { get a() {
|
||||
return undefined;
|
||||
}, set a(n) {
|
||||
} };
|
||||
@ -1,4 +1,4 @@
|
||||
==== tests/cases/conformance/parser/ecmascript5/parser10.1.1-8gs.ts (1 errors) ====
|
||||
==== tests/cases/conformance/parser/ecmascript5/parser10.1.1-8gs.ts (4 errors) ====
|
||||
/// Copyright (c) 2012 Ecma International. All rights reserved.
|
||||
/// Ecma International makes this code available under the terms and conditions set
|
||||
/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
|
||||
@ -18,4 +18,10 @@
|
||||
~~~~~~~~~~~~~
|
||||
!!! Cannot find name 'NotEarlyError'.
|
||||
var public = 1;
|
||||
~~~~~~
|
||||
!!! Variable declaration expected.
|
||||
~
|
||||
!!! Variable declaration expected.
|
||||
~
|
||||
!!! Variable declaration expected.
|
||||
|
||||
@ -1,25 +0,0 @@
|
||||
//// [parser10.1.1-8gs.ts]
|
||||
/// Copyright (c) 2012 Ecma International. All rights reserved.
|
||||
/// Ecma International makes this code available under the terms and conditions set
|
||||
/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
|
||||
/// "Use Terms"). Any redistribution of this code must retain the above
|
||||
/// copyright and this notice and otherwise comply with the Use Terms.
|
||||
|
||||
/**
|
||||
* @path ch10/10.1/10.1.1/10.1.1-8gs.js
|
||||
* @description Strict Mode - Use Strict Directive Prologue is ''use strict';' which appears twice in the code
|
||||
* @noStrict
|
||||
* @negative ^((?!NotEarlyError).)*$
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
"use strict";
|
||||
throw NotEarlyError;
|
||||
var public = 1;
|
||||
|
||||
|
||||
//// [parser10.1.1-8gs.js]
|
||||
"use strict";
|
||||
"use strict";
|
||||
throw NotEarlyError;
|
||||
var public = 1;
|
||||
9
tests/baselines/reference/parser642331_1.errors.txt
Normal file
9
tests/baselines/reference/parser642331_1.errors.txt
Normal file
@ -0,0 +1,9 @@
|
||||
==== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser642331_1.ts (1 errors) ====
|
||||
"use strict";
|
||||
|
||||
class test {
|
||||
constructor (static) { }
|
||||
~~~~~~
|
||||
!!! Identifier expected.
|
||||
}
|
||||
|
||||
@ -1,15 +0,0 @@
|
||||
//// [parser642331_1.ts]
|
||||
"use strict";
|
||||
|
||||
class test {
|
||||
constructor (static) { }
|
||||
}
|
||||
|
||||
|
||||
//// [parser642331_1.js]
|
||||
"use strict";
|
||||
var test = (function () {
|
||||
function test(static) {
|
||||
}
|
||||
return test;
|
||||
})();
|
||||
6
tests/baselines/reference/parserStrictMode10.errors.txt
Normal file
6
tests/baselines/reference/parserStrictMode10.errors.txt
Normal file
@ -0,0 +1,6 @@
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode10.ts (1 errors) ====
|
||||
"use strict";
|
||||
function f(eval) {
|
||||
~~~~
|
||||
!!! Invalid use of 'eval' in strict mode.
|
||||
}
|
||||
@ -1,9 +0,0 @@
|
||||
//// [parserStrictMode10.ts]
|
||||
"use strict";
|
||||
function f(eval) {
|
||||
}
|
||||
|
||||
//// [parserStrictMode10.js]
|
||||
"use strict";
|
||||
function f(eval) {
|
||||
}
|
||||
6
tests/baselines/reference/parserStrictMode11.errors.txt
Normal file
6
tests/baselines/reference/parserStrictMode11.errors.txt
Normal file
@ -0,0 +1,6 @@
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode11.ts (1 errors) ====
|
||||
"use strict";
|
||||
var v = function f(eval) {
|
||||
~~~~
|
||||
!!! Invalid use of 'eval' in strict mode.
|
||||
};
|
||||
@ -1,9 +0,0 @@
|
||||
//// [parserStrictMode11.ts]
|
||||
"use strict";
|
||||
var v = function f(eval) {
|
||||
};
|
||||
|
||||
//// [parserStrictMode11.js]
|
||||
"use strict";
|
||||
var v = function f(eval) {
|
||||
};
|
||||
@ -1,5 +1,5 @@
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode12.ts (1 errors) ====
|
||||
"use strict";
|
||||
var v = { set foo(eval) { } }
|
||||
~~~
|
||||
!!! Accessors are only available when targeting ECMAScript 5 and higher.
|
||||
~~~~
|
||||
!!! Invalid use of 'eval' in strict mode.
|
||||
8
tests/baselines/reference/parserStrictMode13.errors.txt
Normal file
8
tests/baselines/reference/parserStrictMode13.errors.txt
Normal file
@ -0,0 +1,8 @@
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode13.ts (1 errors) ====
|
||||
"use strict";
|
||||
try {
|
||||
}
|
||||
catch(eval) {
|
||||
~~~~
|
||||
!!! Invalid use of 'eval' in strict mode.
|
||||
}
|
||||
@ -1,13 +0,0 @@
|
||||
//// [parserStrictMode13.ts]
|
||||
"use strict";
|
||||
try {
|
||||
}
|
||||
catch(eval) {
|
||||
}
|
||||
|
||||
//// [parserStrictMode13.js]
|
||||
"use strict";
|
||||
try {
|
||||
}
|
||||
catch (eval) {
|
||||
}
|
||||
@ -1,6 +1,8 @@
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode14.ts (2 errors) ====
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode14.ts (3 errors) ====
|
||||
"use strict";
|
||||
with (a) {
|
||||
~~~~
|
||||
!!! 'with' statements are not allowed in strict mode.
|
||||
~
|
||||
!!! All symbols within a 'with' block will be resolved to 'any'.
|
||||
~
|
||||
|
||||
@ -1,9 +0,0 @@
|
||||
//// [parserStrictMode14.ts]
|
||||
"use strict";
|
||||
with (a) {
|
||||
}
|
||||
|
||||
//// [parserStrictMode14.js]
|
||||
"use strict";
|
||||
with (a) {
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode2.ts (4 errors) ====
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode2.ts (5 errors) ====
|
||||
"use strict";
|
||||
foo1();
|
||||
~~~~
|
||||
@ -11,4 +11,6 @@
|
||||
!!! Cannot find name 'foo1'.
|
||||
static();
|
||||
~~~~~~
|
||||
!!! Cannot find name 'static'.
|
||||
!!! Declaration or statement expected.
|
||||
~
|
||||
!!! '=>' expected.
|
||||
@ -1,13 +0,0 @@
|
||||
//// [parserStrictMode2.ts]
|
||||
"use strict";
|
||||
foo1();
|
||||
foo1();
|
||||
foo1();
|
||||
static();
|
||||
|
||||
//// [parserStrictMode2.js]
|
||||
"use strict";
|
||||
foo1();
|
||||
foo1();
|
||||
foo1();
|
||||
static();
|
||||
@ -1,5 +1,7 @@
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode3.ts (1 errors) ====
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode3.ts (2 errors) ====
|
||||
"use strict";
|
||||
eval = 1;
|
||||
~~~~
|
||||
!!! Invalid use of 'eval' in strict mode.
|
||||
~~~~
|
||||
!!! Invalid left-hand side of assignment expression.
|
||||
@ -1,7 +0,0 @@
|
||||
//// [parserStrictMode3.ts]
|
||||
"use strict";
|
||||
eval = 1;
|
||||
|
||||
//// [parserStrictMode3.js]
|
||||
"use strict";
|
||||
eval = 1;
|
||||
@ -1,5 +1,7 @@
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode4.ts (1 errors) ====
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode4.ts (2 errors) ====
|
||||
"use strict";
|
||||
arguments = 1;
|
||||
~~~~~~~~~
|
||||
!!! Invalid use of 'arguments' in strict mode.
|
||||
~~~~~~~~~
|
||||
!!! Cannot find name 'arguments'.
|
||||
@ -1,7 +0,0 @@
|
||||
//// [parserStrictMode4.ts]
|
||||
"use strict";
|
||||
arguments = 1;
|
||||
|
||||
//// [parserStrictMode4.js]
|
||||
"use strict";
|
||||
arguments = 1;
|
||||
@ -1,5 +1,7 @@
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode5.ts (1 errors) ====
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode5.ts (2 errors) ====
|
||||
"use strict";
|
||||
eval += 1;
|
||||
~~~~
|
||||
!!! Invalid use of 'eval' in strict mode.
|
||||
~~~~~~~~~
|
||||
!!! Operator '+=' cannot be applied to types '(x: string) => any' and 'number'.
|
||||
@ -1,7 +0,0 @@
|
||||
//// [parserStrictMode5.ts]
|
||||
"use strict";
|
||||
eval += 1;
|
||||
|
||||
//// [parserStrictMode5.js]
|
||||
"use strict";
|
||||
eval += 1;
|
||||
@ -1,5 +1,7 @@
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode6.ts (1 errors) ====
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode6.ts (2 errors) ====
|
||||
"use strict";
|
||||
eval++;
|
||||
~~~~
|
||||
!!! Invalid use of 'eval' in strict mode.
|
||||
~~~~
|
||||
!!! An arithmetic operand must be of type 'any', 'number' or an enum type.
|
||||
@ -1,7 +0,0 @@
|
||||
//// [parserStrictMode6.ts]
|
||||
"use strict";
|
||||
eval++;
|
||||
|
||||
//// [parserStrictMode6.js]
|
||||
"use strict";
|
||||
eval++;
|
||||
@ -1,6 +1,8 @@
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode8.ts (1 errors) ====
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode8.ts (2 errors) ====
|
||||
"use strict";
|
||||
function eval() {
|
||||
~~~~
|
||||
!!! Invalid use of 'eval' in strict mode.
|
||||
~~~~
|
||||
!!! Overload signatures must all be ambient or non-ambient.
|
||||
}
|
||||
@ -1,9 +0,0 @@
|
||||
//// [parserStrictMode8.ts]
|
||||
"use strict";
|
||||
function eval() {
|
||||
}
|
||||
|
||||
//// [parserStrictMode8.js]
|
||||
"use strict";
|
||||
function eval() {
|
||||
}
|
||||
6
tests/baselines/reference/parserStrictMode9.errors.txt
Normal file
6
tests/baselines/reference/parserStrictMode9.errors.txt
Normal file
@ -0,0 +1,6 @@
|
||||
==== tests/cases/conformance/parser/ecmascript5/StrictMode/parserStrictMode9.ts (1 errors) ====
|
||||
"use strict";
|
||||
var v = function eval() {
|
||||
~~~~
|
||||
!!! Invalid use of 'eval' in strict mode.
|
||||
};
|
||||
@ -1,9 +0,0 @@
|
||||
//// [parserStrictMode9.ts]
|
||||
"use strict";
|
||||
var v = function eval() {
|
||||
};
|
||||
|
||||
//// [parserStrictMode9.js]
|
||||
"use strict";
|
||||
var v = function eval() {
|
||||
};
|
||||
@ -1,4 +1,4 @@
|
||||
==== tests/cases/conformance/scanner/ecmascript5/scanner10.1.1-8gs.ts (1 errors) ====
|
||||
==== tests/cases/conformance/scanner/ecmascript5/scanner10.1.1-8gs.ts (4 errors) ====
|
||||
/// Copyright (c) 2012 Ecma International. All rights reserved.
|
||||
/// Ecma International makes this code available under the terms and conditions set
|
||||
/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
|
||||
@ -18,4 +18,10 @@
|
||||
~~~~~~~~~~~~~
|
||||
!!! Cannot find name 'NotEarlyError'.
|
||||
var public = 1;
|
||||
~~~~~~
|
||||
!!! Variable declaration expected.
|
||||
~
|
||||
!!! Variable declaration expected.
|
||||
~
|
||||
!!! Variable declaration expected.
|
||||
|
||||
@ -1,25 +0,0 @@
|
||||
//// [scanner10.1.1-8gs.ts]
|
||||
/// Copyright (c) 2012 Ecma International. All rights reserved.
|
||||
/// Ecma International makes this code available under the terms and conditions set
|
||||
/// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
|
||||
/// "Use Terms"). Any redistribution of this code must retain the above
|
||||
/// copyright and this notice and otherwise comply with the Use Terms.
|
||||
|
||||
/**
|
||||
* @path ch10/10.1/10.1.1/10.1.1-8gs.js
|
||||
* @description Strict Mode - Use Strict Directive Prologue is ''use strict';' which appears twice in the code
|
||||
* @noStrict
|
||||
* @negative ^((?!NotEarlyError).)*$
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
"use strict";
|
||||
throw NotEarlyError;
|
||||
var public = 1;
|
||||
|
||||
|
||||
//// [scanner10.1.1-8gs.js]
|
||||
"use strict";
|
||||
"use strict";
|
||||
throw NotEarlyError;
|
||||
var public = 1;
|
||||
@ -1,4 +1,4 @@
|
||||
==== tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts (13 errors) ====
|
||||
==== tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts (14 errors) ====
|
||||
class C {
|
||||
get x() { return 1; }
|
||||
~
|
||||
@ -44,6 +44,8 @@
|
||||
~
|
||||
!!! Accessors are only available when targeting ECMAScript 5 and higher.
|
||||
~
|
||||
!!! An object literal cannot have multiple get/set accessors with the same name.
|
||||
~
|
||||
!!! Duplicate identifier 'x'.
|
||||
return 1;
|
||||
}
|
||||
|
||||
29
tests/baselines/reference/typeQueryWithReservedWords.js
Normal file
29
tests/baselines/reference/typeQueryWithReservedWords.js
Normal file
@ -0,0 +1,29 @@
|
||||
//// [typeQueryWithReservedWords.ts]
|
||||
class Controller {
|
||||
create() {
|
||||
}
|
||||
delete() {
|
||||
}
|
||||
var() {
|
||||
}
|
||||
}
|
||||
|
||||
interface IScope {
|
||||
create: typeof Controller.prototype.create;
|
||||
delete: typeof Controller.prototype.delete; // Should not error
|
||||
var: typeof Controller.prototype.var; // Should not error
|
||||
}
|
||||
|
||||
|
||||
//// [typeQueryWithReservedWords.js]
|
||||
var Controller = (function () {
|
||||
function Controller() {
|
||||
}
|
||||
Controller.prototype.create = function () {
|
||||
};
|
||||
Controller.prototype.delete = function () {
|
||||
};
|
||||
Controller.prototype.var = function () {
|
||||
};
|
||||
return Controller;
|
||||
})();
|
||||
@ -1,3 +1,4 @@
|
||||
// @newline: \n
|
||||
// @sourcemap: true
|
||||
// DEFAULT INTERFACES
|
||||
interface IFoo {
|
||||
@ -228,4 +229,4 @@ Point.prototype = {
|
||||
|
||||
interface A { x: string; }
|
||||
interface B extends A { }
|
||||
var x: B = { };
|
||||
var x: B = { };
|
||||
|
||||
5
tests/cases/compiler/duplicatePropertiesInStrictMode.ts
Normal file
5
tests/cases/compiler/duplicatePropertiesInStrictMode.ts
Normal file
@ -0,0 +1,5 @@
|
||||
"use strict";
|
||||
var x = {
|
||||
x: 1,
|
||||
x: 2
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
class Controller {
|
||||
create() {
|
||||
}
|
||||
delete() {
|
||||
}
|
||||
var() {
|
||||
}
|
||||
}
|
||||
|
||||
interface IScope {
|
||||
create: typeof Controller.prototype.create;
|
||||
delete: typeof Controller.prototype.delete; // Should not error
|
||||
var: typeof Controller.prototype.var; // Should not error
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user