10
10
* @param {string } source Source
11
11
* @constructor
12
12
*/
13
- var Parser = function ( source ) {
13
+ var Parser = function ( source ) {
14
14
15
15
/**
16
16
* Tokenizer.
@@ -38,7 +38,7 @@ var ParserPrototype = Parser.prototype;
38
38
* @throws {Error } If the source cannot be parsed
39
39
* @expose
40
40
*/
41
- ParserPrototype . parse = function ( ) {
41
+ ParserPrototype . parse = function ( ) {
42
42
var topLevel = {
43
43
"name" : "[ROOT]" , // temporary
44
44
"package" : null ,
@@ -105,7 +105,7 @@ ParserPrototype.parse = function() {
105
105
}
106
106
}
107
107
} catch ( e ) {
108
- e . message = "Parse error at line " + this . tn . line + ": " + e . message ;
108
+ e . message = "Parse error at line " + this . tn . line + ": " + e . message ;
109
109
throw e ;
110
110
}
111
111
delete topLevel [ "name" ] ;
@@ -118,7 +118,7 @@ ParserPrototype.parse = function() {
118
118
* @throws {Error } If the source cannot be parsed
119
119
* @expose
120
120
*/
121
- Parser . parse = function ( source ) {
121
+ Parser . parse = function ( source ) {
122
122
return new Parser ( source ) . parse ( ) ;
123
123
} ;
124
124
@@ -146,7 +146,7 @@ function mkId(value, mayBeNegative) {
146
146
id = parseInt ( value . substring ( 1 ) , 8 ) ;
147
147
else
148
148
throw Error ( "illegal id value: " + ( sign < 0 ? '-' : '' ) + value ) ;
149
- id = ( sign * id ) | 0 ; // Force to 32bit
149
+ id = ( sign * id ) | 0 ; // Force to 32bit
150
150
if ( ! mayBeNegative && id < 0 )
151
151
throw Error ( "illegal id value: " + ( sign < 0 ? '-' : '' ) + value ) ;
152
152
return id ;
@@ -186,14 +186,14 @@ function mkNumber(val) {
186
186
* @returns {string }
187
187
* @private
188
188
*/
189
- ParserPrototype . _readString = function ( ) {
189
+ ParserPrototype . _readString = function ( ) {
190
190
var value = "" ,
191
191
token ,
192
192
delim ;
193
193
do {
194
194
delim = this . tn . next ( ) ;
195
195
if ( delim !== "'" && delim !== '"' )
196
- throw Error ( "illegal string delimiter: " + delim ) ;
196
+ throw Error ( "illegal string delimiter: " + delim ) ;
197
197
value += this . tn . next ( ) ;
198
198
this . tn . skip ( delim ) ;
199
199
token = this . tn . peek ( ) ;
@@ -207,7 +207,7 @@ ParserPrototype._readString = function() {
207
207
* @returns {number|boolean|string }
208
208
* @private
209
209
*/
210
- ParserPrototype . _readValue = function ( mayBeTypeRef ) {
210
+ ParserPrototype . _readValue = function ( mayBeTypeRef ) {
211
211
var token = this . tn . peek ( ) ,
212
212
value ;
213
213
if ( token === '"' || token === "'" )
@@ -219,7 +219,7 @@ ParserPrototype._readValue = function(mayBeTypeRef) {
219
219
return ( token . toLowerCase ( ) === 'true' ) ;
220
220
if ( mayBeTypeRef && Lang . TYPEREF . test ( token ) )
221
221
return token ;
222
- throw Error ( "illegal value: " + token ) ;
222
+ throw Error ( "illegal value: " + token ) ;
223
223
224
224
} ;
225
225
@@ -231,7 +231,7 @@ ParserPrototype._readValue = function(mayBeTypeRef) {
231
231
* @param {boolean= } isList
232
232
* @private
233
233
*/
234
- ParserPrototype . _parseOption = function ( parent , isList ) {
234
+ ParserPrototype . _parseOption = function ( parent , isList ) {
235
235
var token = this . tn . next ( ) ,
236
236
custom = false ;
237
237
if ( token === '(' ) {
@@ -241,11 +241,11 @@ ParserPrototype._parseOption = function(parent, isList) {
241
241
if ( ! Lang . TYPEREF . test ( token ) )
242
242
// we can allow options of the form google.protobuf.* since they will just get ignored anyways
243
243
// if (!/google\.protobuf\./.test(token)) // FIXME: Why should that not be a valid typeref?
244
- throw Error ( "illegal option name: " + token ) ;
244
+ throw Error ( "illegal option name: " + token ) ;
245
245
var name = token ;
246
246
if ( custom ) { // (my_method_option).foo, (my_method_option), some_method_option, (foo.my_option).bar
247
247
this . tn . skip ( ')' ) ;
248
- name = '(' + name + ')' ;
248
+ name = '(' + name + ')' ;
249
249
token = this . tn . peek ( ) ;
250
250
if ( Lang . FQTYPEREF . test ( token ) ) {
251
251
name += token ;
@@ -270,7 +270,7 @@ function setOption(options, name, value) {
270
270
options [ name ] = value ;
271
271
else {
272
272
if ( ! Array . isArray ( options [ name ] ) )
273
- options [ name ] = [ options [ name ] ] ;
273
+ options [ name ] = [ options [ name ] ] ;
274
274
options [ name ] . push ( value ) ;
275
275
}
276
276
}
@@ -281,7 +281,7 @@ function setOption(options, name, value) {
281
281
* @param {string } name
282
282
* @private
283
283
*/
284
- ParserPrototype . _parseOptionValue = function ( parent , name ) {
284
+ ParserPrototype . _parseOptionValue = function ( parent , name ) {
285
285
var token = this . tn . peek ( ) ;
286
286
if ( token !== '{' ) { // Plain value
287
287
setOption ( parent [ "options" ] , name , this . _readValue ( true ) ) ;
@@ -303,10 +303,10 @@ ParserPrototype._parseOptionValue = function(parent, name) {
303
303
* @param {!Object } parent Parent definition
304
304
* @private
305
305
*/
306
- ParserPrototype . _parseService = function ( parent ) {
306
+ ParserPrototype . _parseService = function ( parent ) {
307
307
var token = this . tn . next ( ) ;
308
308
if ( ! Lang . NAME . test ( token ) )
309
- throw Error ( "illegal service name at line " + this . tn . line + ": " + token ) ;
309
+ throw Error ( "illegal service name at line " + this . tn . line + ": " + token ) ;
310
310
var name = token ;
311
311
var svc = {
312
312
"name" : name ,
@@ -320,7 +320,7 @@ ParserPrototype._parseService = function(parent) {
320
320
else if ( token === 'rpc' )
321
321
this . _parseServiceRPC ( svc ) ;
322
322
else
323
- throw Error ( "illegal service token: " + token ) ;
323
+ throw Error ( "illegal service token: " + token ) ;
324
324
}
325
325
this . tn . omit ( ";" ) ;
326
326
parent [ "services" ] . push ( svc ) ;
@@ -331,11 +331,11 @@ ParserPrototype._parseService = function(parent) {
331
331
* @param {!Object } svc Service definition
332
332
* @private
333
333
*/
334
- ParserPrototype . _parseServiceRPC = function ( svc ) {
334
+ ParserPrototype . _parseServiceRPC = function ( svc ) {
335
335
var type = "rpc" ,
336
336
token = this . tn . next ( ) ;
337
337
if ( ! Lang . NAME . test ( token ) )
338
- throw Error ( "illegal rpc service method name: " + token ) ;
338
+ throw Error ( "illegal rpc service method name: " + token ) ;
339
339
var name = token ;
340
340
var method = {
341
341
"request" : null ,
@@ -347,21 +347,21 @@ ParserPrototype._parseServiceRPC = function(svc) {
347
347
this . tn . skip ( "(" ) ;
348
348
token = this . tn . next ( ) ;
349
349
if ( token . toLowerCase ( ) === "stream" ) {
350
- method [ "request_stream" ] = true ;
351
- token = this . tn . next ( ) ;
350
+ method [ "request_stream" ] = true ;
351
+ token = this . tn . next ( ) ;
352
352
}
353
353
if ( ! Lang . TYPEREF . test ( token ) )
354
- throw Error ( "illegal rpc service request type: " + token ) ;
354
+ throw Error ( "illegal rpc service request type: " + token ) ;
355
355
method [ "request" ] = token ;
356
356
this . tn . skip ( ")" ) ;
357
357
token = this . tn . next ( ) ;
358
358
if ( token . toLowerCase ( ) !== "returns" )
359
- throw Error ( "illegal rpc service request type delimiter: " + token ) ;
359
+ throw Error ( "illegal rpc service request type delimiter: " + token ) ;
360
360
this . tn . skip ( "(" ) ;
361
361
token = this . tn . next ( ) ;
362
362
if ( token . toLowerCase ( ) === "stream" ) {
363
- method [ "response_stream" ] = true ;
364
- token = this . tn . next ( ) ;
363
+ method [ "response_stream" ] = true ;
364
+ token = this . tn . next ( ) ;
365
365
}
366
366
method [ "response" ] = token ;
367
367
this . tn . skip ( ")" ) ;
@@ -389,7 +389,7 @@ ParserPrototype._parseServiceRPC = function(svc) {
389
389
* @returns {!Object }
390
390
* @private
391
391
*/
392
- ParserPrototype . _parseMessage = function ( parent , fld ) {
392
+ ParserPrototype . _parseMessage = function ( parent , fld ) {
393
393
var isGroup = ! ! fld ,
394
394
token = this . tn . next ( ) ;
395
395
var msg = {
@@ -403,7 +403,7 @@ ParserPrototype._parseMessage = function(parent, fld) {
403
403
// "extensions": undefined
404
404
} ;
405
405
if ( ! Lang . NAME . test ( token ) )
406
- throw Error ( "illegal " + ( isGroup ? "group" : "message" ) + " name: " + token ) ;
406
+ throw Error ( "illegal " + ( isGroup ? "group" : "message" ) + " name: " + token ) ;
407
407
msg [ "name" ] = token ;
408
408
if ( isGroup ) {
409
409
this . tn . skip ( "=" ) ;
@@ -439,10 +439,10 @@ ParserPrototype._parseMessage = function(parent, fld) {
439
439
this . _parseExtend ( msg ) ;
440
440
else if ( Lang . TYPEREF . test ( token ) ) {
441
441
if ( ! this . proto3 )
442
- throw Error ( "illegal field rule: " + token ) ;
442
+ throw Error ( "illegal field rule: " + token ) ;
443
443
this . _parseMessageField ( msg , "optional" , token ) ;
444
444
} else
445
- throw Error ( "illegal message token: " + token ) ;
445
+ throw Error ( "illegal message token: " + token ) ;
446
446
}
447
447
this . tn . omit ( ";" ) ;
448
448
parent [ "messages" ] . push ( msg ) ;
@@ -453,7 +453,7 @@ ParserPrototype._parseMessage = function(parent, fld) {
453
453
* Parses an ignored statement.
454
454
* @private
455
455
*/
456
- ParserPrototype . _parseIgnored = function ( ) {
456
+ ParserPrototype . _parseIgnored = function ( ) {
457
457
while ( this . tn . peek ( ) !== ';' )
458
458
this . tn . next ( ) ;
459
459
this . tn . skip ( ";" ) ;
@@ -467,9 +467,9 @@ ParserPrototype._parseIgnored = function() {
467
467
* @returns {!Object } Field descriptor
468
468
* @private
469
469
*/
470
- ParserPrototype . _parseMessageField = function ( msg , rule , type ) {
470
+ ParserPrototype . _parseMessageField = function ( msg , rule , type ) {
471
471
if ( ! Lang . RULE . test ( rule ) )
472
- throw Error ( "illegal message field rule: " + rule ) ;
472
+ throw Error ( "illegal message field rule: " + rule ) ;
473
473
var fld = {
474
474
"rule" : rule ,
475
475
"type" : "" ,
@@ -515,7 +515,7 @@ ParserPrototype._parseMessageField = function(msg, rule, type) {
515
515
// converted to lower-case so that it does not conflict with the former)."
516
516
var grp = this . _parseMessage ( msg , fld ) ;
517
517
if ( ! / ^ [ A - Z ] / . test ( grp [ "name" ] ) )
518
- throw Error ( 'illegal group name: ' + grp [ "name" ] ) ;
518
+ throw Error ( 'illegal group name: ' + grp [ "name" ] ) ;
519
519
fld [ "type" ] = grp [ "name" ] ;
520
520
fld [ "name" ] = grp [ "name" ] . toLowerCase ( ) ;
521
521
this . tn . omit ( ";" ) ;
@@ -547,10 +547,10 @@ ParserPrototype._parseMessageField = function(msg, rule, type) {
547
547
* @param {!Object } msg Message definition
548
548
* @private
549
549
*/
550
- ParserPrototype . _parseMessageOneOf = function ( msg ) {
550
+ ParserPrototype . _parseMessageOneOf = function ( msg ) {
551
551
var token = this . tn . next ( ) ;
552
552
if ( ! Lang . NAME . test ( token ) )
553
- throw Error ( "illegal oneof name: " + token ) ;
553
+ throw Error ( "illegal oneof name: " + token ) ;
554
554
var name = token ,
555
555
fld ;
556
556
var fields = [ ] ;
@@ -569,7 +569,7 @@ ParserPrototype._parseMessageOneOf = function(msg) {
569
569
* @param {!Object } fld Field definition
570
570
* @private
571
571
*/
572
- ParserPrototype . _parseFieldOptions = function ( fld ) {
572
+ ParserPrototype . _parseFieldOptions = function ( fld ) {
573
573
this . tn . skip ( "[" ) ;
574
574
var token ,
575
575
first = true ;
@@ -587,33 +587,38 @@ ParserPrototype._parseFieldOptions = function(fld) {
587
587
* @param {!Object } msg Message definition
588
588
* @private
589
589
*/
590
- ParserPrototype . _parseEnum = function ( msg ) {
590
+ ParserPrototype . _parseEnum = function ( msg ) {
591
591
var enm = {
592
592
"name" : "" ,
593
593
"values" : [ ] ,
594
594
"options" : { }
595
595
} ;
596
596
var token = this . tn . next ( ) ;
597
597
if ( ! Lang . NAME . test ( token ) )
598
- throw Error ( "illegal name: " + token ) ;
598
+ throw Error ( "illegal name: " + token ) ;
599
599
enm [ "name" ] = token ;
600
600
this . tn . skip ( "{" ) ;
601
601
while ( ( token = this . tn . next ( ) ) !== '}' ) {
602
- if ( token === "option" )
603
- this . _parseOption ( enm ) ;
604
- else {
605
- if ( ! Lang . NAME . test ( token ) )
606
- throw Error ( "illegal name: " + token ) ;
607
- this . tn . skip ( "=" ) ;
608
- var val = {
609
- "name" : token ,
610
- "id" : mkId ( this . tn . next ( ) , true )
611
- } ;
612
- token = this . tn . peek ( ) ;
613
- if ( token === "[" )
614
- this . _parseFieldOptions ( { "options" : { } } ) ;
615
- this . tn . skip ( ";" ) ;
616
- enm [ "values" ] . push ( val ) ;
602
+ switch ( token ) {
603
+ case "option" :
604
+ this . _parseOption ( enm ) ;
605
+ break ;
606
+ case "reserved" :
607
+ this . _parseIgnored ( ) ;
608
+ break ;
609
+ default :
610
+ if ( ! Lang . NAME . test ( token ) )
611
+ throw Error ( "illegal name: " + token ) ;
612
+ this . tn . skip ( "=" ) ;
613
+ var val = {
614
+ "name" : token ,
615
+ "id" : mkId ( this . tn . next ( ) , true )
616
+ } ;
617
+ token = this . tn . peek ( ) ;
618
+ if ( token === "[" )
619
+ this . _parseFieldOptions ( { "options" : { } } ) ;
620
+ this . tn . skip ( ";" ) ;
621
+ enm [ "values" ] . push ( val ) ;
617
622
}
618
623
}
619
624
this . tn . omit ( ";" ) ;
@@ -625,7 +630,7 @@ ParserPrototype._parseEnum = function(msg) {
625
630
* @returns {!Array.<!Array.<number>> }
626
631
* @private
627
632
*/
628
- ParserPrototype . _parseExtensionRanges = function ( ) {
633
+ ParserPrototype . _parseExtensionRanges = function ( ) {
629
634
var ranges = [ ] ;
630
635
var token ,
631
636
range ,
@@ -665,10 +670,10 @@ ParserPrototype._parseExtensionRanges = function() {
665
670
* @param {!Object } parent Parent object
666
671
* @private
667
672
*/
668
- ParserPrototype . _parseExtend = function ( parent ) {
673
+ ParserPrototype . _parseExtend = function ( parent ) {
669
674
var token = this . tn . next ( ) ;
670
675
if ( ! Lang . TYPEREF . test ( token ) )
671
- throw Error ( "illegal extend reference: " + token ) ;
676
+ throw Error ( "illegal extend reference: " + token ) ;
672
677
var ext = {
673
678
"ref" : token ,
674
679
"fields" : [ ]
@@ -679,10 +684,10 @@ ParserPrototype._parseExtend = function(parent) {
679
684
this . _parseMessageField ( ext , token ) ;
680
685
else if ( Lang . TYPEREF . test ( token ) ) {
681
686
if ( ! this . proto3 )
682
- throw Error ( "illegal field rule: " + token ) ;
687
+ throw Error ( "illegal field rule: " + token ) ;
683
688
this . _parseMessageField ( ext , "optional" , token ) ;
684
689
} else
685
- throw Error ( "illegal extend token: " + token ) ;
690
+ throw Error ( "illegal extend token: " + token ) ;
686
691
}
687
692
this . tn . omit ( ";" ) ;
688
693
parent [ "messages" ] . push ( ext ) ;
@@ -695,6 +700,6 @@ ParserPrototype._parseExtend = function(parent) {
695
700
* Returns a string representation of this parser.
696
701
* @returns {string }
697
702
*/
698
- ParserPrototype . toString = function ( ) {
699
- return "Parser at line " + this . tn . line ;
703
+ ParserPrototype . toString = function ( ) {
704
+ return "Parser at line " + this . tn . line ;
700
705
} ;
0 commit comments