@@ -3144,51 +3144,65 @@ module ts {
3144
3144
Debug . fail ( "Should not have attempted to parse class member declaration." ) ;
3145
3145
}
3146
3146
3147
- function parseClassDeclaration ( pos : number , flags : NodeFlags ) : ClassDeclaration {
3148
- var node = < ClassDeclaration > createNode ( SyntaxKind . ClassDeclaration , pos ) ;
3149
- node . flags = flags ;
3147
+ function parseClassDeclaration ( fullStart : number , flags : NodeFlags ) : ClassDeclaration {
3150
3148
parseExpected ( SyntaxKind . ClassKeyword ) ;
3151
- node . name = parseIdentifier ( ) ;
3152
- node . typeParameters = parseTypeParameters ( ) ;
3149
+ var name = parseIdentifier ( ) ;
3150
+ var typeParameters = parseTypeParameters ( ) ;
3153
3151
// TODO(jfreeman): Parse arbitrary sequence of heritage clauses and error for order and duplicates
3154
3152
3155
- node . baseType = parseOptional ( SyntaxKind . ExtendsKeyword ) ? parseTypeReference ( ) : undefined ;
3153
+ var baseType = parseOptional ( SyntaxKind . ExtendsKeyword ) ? parseTypeReference ( ) : undefined ;
3156
3154
if ( parseOptional ( SyntaxKind . ImplementsKeyword ) ) {
3157
- node . implementedTypes = parseDelimitedList ( ParsingContext . BaseTypeReferences , parseTypeReference ) ;
3155
+ var implementedTypes = parseDelimitedList ( ParsingContext . BaseTypeReferences , parseTypeReference ) ;
3158
3156
}
3159
3157
if ( parseExpected ( SyntaxKind . OpenBraceToken ) ) {
3160
- node . members = parseList ( ParsingContext . ClassMembers , /*checkForStrictMode*/ false , parseClassMemberDeclaration ) ;
3158
+ var members = parseList ( ParsingContext . ClassMembers , /*checkForStrictMode*/ false , parseClassMemberDeclaration ) ;
3161
3159
parseExpected ( SyntaxKind . CloseBraceToken ) ;
3162
3160
}
3163
3161
else {
3164
- node . members = createMissingList < Declaration > ( ) ;
3162
+ var members = createMissingList < Declaration > ( ) ;
3165
3163
}
3166
- return finishNode ( node ) ;
3164
+
3165
+ var node = < ClassDeclaration > createAndFinishNode ( fullStart , SyntaxKind . ClassDeclaration ) ;
3166
+ node . flags |= flags ;
3167
+ node . name = name ;
3168
+ node . typeParameters = typeParameters ;
3169
+ node . baseType = baseType ;
3170
+ node . implementedTypes = implementedTypes ;
3171
+ node . members = members ;
3172
+ return node ;
3167
3173
}
3168
3174
3169
- function parseInterfaceDeclaration ( pos : number , flags : NodeFlags ) : InterfaceDeclaration {
3170
- var node = < InterfaceDeclaration > createNode ( SyntaxKind . InterfaceDeclaration , pos ) ;
3171
- node . flags = flags ;
3175
+ function parseInterfaceDeclaration ( fullStart : number , flags : NodeFlags ) : InterfaceDeclaration {
3172
3176
parseExpected ( SyntaxKind . InterfaceKeyword ) ;
3173
- node . name = parseIdentifier ( ) ;
3174
- node . typeParameters = parseTypeParameters ( ) ;
3177
+ var name = parseIdentifier ( ) ;
3178
+ var typeParameters = parseTypeParameters ( ) ;
3175
3179
// TODO(jfreeman): Parse arbitrary sequence of heritage clauses and error for order and duplicates
3176
3180
if ( parseOptional ( SyntaxKind . ExtendsKeyword ) ) {
3177
- node . baseTypes = parseDelimitedList ( ParsingContext . BaseTypeReferences , parseTypeReference ) ;
3181
+ var baseTypes = parseDelimitedList ( ParsingContext . BaseTypeReferences , parseTypeReference ) ;
3178
3182
}
3179
- node . members = parseTypeLiteral ( ) . members ;
3180
- return finishNode ( node ) ;
3183
+ var members = parseTypeLiteral ( ) . members ;
3184
+
3185
+ var node = < InterfaceDeclaration > createAndFinishNode ( fullStart , SyntaxKind . InterfaceDeclaration ) ;
3186
+ node . flags |= flags ;
3187
+ node . name = name ;
3188
+ node . typeParameters = typeParameters ;
3189
+ node . baseTypes = baseTypes ;
3190
+ node . members = members ;
3191
+ return node ;
3181
3192
}
3182
3193
3183
- function parseTypeAliasDeclaration ( pos : number , flags : NodeFlags ) : TypeAliasDeclaration {
3184
- var node = < TypeAliasDeclaration > createNode ( SyntaxKind . TypeAliasDeclaration , pos ) ;
3185
- node . flags = flags ;
3194
+ function parseTypeAliasDeclaration ( fullStart : number , flags : NodeFlags ) : TypeAliasDeclaration {
3186
3195
parseExpected ( SyntaxKind . TypeKeyword ) ;
3187
- node . name = parseIdentifier ( ) ;
3196
+ var name = parseIdentifier ( ) ;
3188
3197
parseExpected ( SyntaxKind . EqualsToken ) ;
3189
- node . type = parseType ( ) ;
3198
+ var type = parseType ( ) ;
3190
3199
parseSemicolon ( ) ;
3191
- return finishNode ( node ) ;
3200
+
3201
+ var node = < TypeAliasDeclaration > createAndFinishNode ( fullStart , SyntaxKind . TypeAliasDeclaration ) ;
3202
+ node . flags |= flags ;
3203
+ node . name = name ;
3204
+ node . type = type ;
3205
+ return node ;
3192
3206
}
3193
3207
3194
3208
// In an ambient declaration, the grammar only allows integer literals as initializers.
@@ -3225,7 +3239,7 @@ module ts {
3225
3239
}
3226
3240
3227
3241
var node = < EnumDeclaration > createAndFinishNode ( fullStart , SyntaxKind . EnumDeclaration ) ;
3228
- node . flags = flags ;
3242
+ node . flags | = flags ;
3229
3243
node . name = name ;
3230
3244
node . members = members ;
3231
3245
return node ;
@@ -3254,7 +3268,7 @@ module ts {
3254
3268
: parseModuleBody ( ) ;
3255
3269
3256
3270
var node = < ModuleDeclaration > createAndFinishNode ( fullStart , SyntaxKind . ModuleDeclaration ) ;
3257
- node . flags = flags ;
3271
+ node . flags | = flags ;
3258
3272
node . name = name ;
3259
3273
node . body = body ;
3260
3274
return node ;
@@ -3265,15 +3279,17 @@ module ts {
3265
3279
var body = parseModuleBody ( ) ;
3266
3280
3267
3281
var node = < ModuleDeclaration > createAndFinishNode ( fullStart , SyntaxKind . ModuleDeclaration ) ;
3268
- node . flags = flags ;
3282
+ node . flags | = flags ;
3269
3283
node . name = name ;
3270
3284
node . body = body ;
3271
3285
return node ;
3272
3286
}
3273
3287
3274
- function parseModuleDeclaration ( pos : number , flags : NodeFlags ) : ModuleDeclaration {
3288
+ function parseModuleDeclaration ( fullStart : number , flags : NodeFlags ) : ModuleDeclaration {
3275
3289
parseExpected ( SyntaxKind . ModuleKeyword ) ;
3276
- return token === SyntaxKind . StringLiteral ? parseAmbientExternalModuleDeclaration ( pos , flags ) : parseInternalModuleTail ( pos , flags ) ;
3290
+ return token === SyntaxKind . StringLiteral
3291
+ ? parseAmbientExternalModuleDeclaration ( fullStart , flags )
3292
+ : parseInternalModuleTail ( fullStart , flags ) ;
3277
3293
}
3278
3294
3279
3295
function parseImportDeclaration ( fullStart : number , flags : NodeFlags ) : ImportDeclaration {
@@ -3290,7 +3306,7 @@ module ts {
3290
3306
parseSemicolon ( ) ;
3291
3307
3292
3308
var node = < ImportDeclaration > createAndFinishNode ( fullStart , SyntaxKind . ImportDeclaration ) ;
3293
- node . flags = flags ;
3309
+ node . flags | = flags ;
3294
3310
node . name = name ;
3295
3311
node . externalModuleName = externalModuleName ;
3296
3312
node . entityName = entityName ;
0 commit comments