ridl 2.5.6 → 2.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/LICENSE +21 -49
- data/README.rdoc +31 -25
- data/lib/ridl/backend.rb +7 -11
- data/lib/ridl/delegate.rb +84 -98
- data/lib/ridl/expression.rb +25 -33
- data/lib/ridl/genfile.rb +8 -9
- data/lib/ridl/node.rb +324 -395
- data/lib/ridl/options.rb +176 -0
- data/lib/ridl/optparse_ext.rb +8 -8
- data/lib/ridl/parser.rb +1504 -1311
- data/lib/ridl/parser.ry +41 -44
- data/lib/ridl/require.rb +0 -1
- data/lib/ridl/ridl.rb +0 -1
- data/lib/ridl/runner.rb +246 -82
- data/lib/ridl/scanner.rb +103 -104
- data/lib/ridl/type.rb +47 -22
- data/lib/ridl/version.rb +3 -4
- metadata +17 -21
- data/lib/idl/BiDirPolicy.pidl +0 -28
- data/lib/idl/CosNaming.idl +0 -260
- data/lib/idl/IOP.pidl +0 -98
- data/lib/idl/Messaging.pidl +0 -152
- data/lib/idl/PortableServer.pidl +0 -371
- data/lib/idl/TimeBase.pidl +0 -40
- data/lib/idl/orb.idl +0 -200
data/lib/ridl/scanner.rb
CHANGED
@@ -8,7 +8,6 @@
|
|
8
8
|
# included with this program.
|
9
9
|
#
|
10
10
|
# Copyright (c) Remedy IT Expertise BV
|
11
|
-
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
12
11
|
#--------------------------------------------------------------------
|
13
12
|
require 'racc/parser'
|
14
13
|
require 'delegate'
|
@@ -44,7 +43,9 @@ module IDL
|
|
44
43
|
|
45
44
|
class In
|
46
45
|
def initialize(src, name = '', line = 0, column = 1)
|
47
|
-
@src
|
46
|
+
@src = src
|
47
|
+
@fwd = src.getc # look ahead character
|
48
|
+
@bwd = nil # look back character
|
48
49
|
@pos = Position.new(name, line, column)
|
49
50
|
@mark = nil
|
50
51
|
end
|
@@ -72,14 +73,14 @@ module IDL
|
|
72
73
|
@pos.line += 1
|
73
74
|
@pos.column = 1
|
74
75
|
end
|
75
|
-
|
76
|
+
else
|
76
77
|
@pos.column += 1
|
77
78
|
end
|
78
79
|
|
79
80
|
if false
|
80
81
|
if not @bwd.nil? or cur.nil? or @fwd.nil?
|
81
82
|
printf("%c(%02x), %c(%02x), %c(%02x) @(l:%d,c:%d)\n",
|
82
|
-
@bwd
|
83
|
+
@bwd, @bwd, cur, cur, @fwd, @fwd, @pos.line, @pos.column)
|
83
84
|
end
|
84
85
|
end
|
85
86
|
@bwd = cur
|
@@ -97,46 +98,24 @@ module IDL
|
|
97
98
|
end
|
98
99
|
alias skipc getc
|
99
100
|
|
100
|
-
def _include?(ch, *chars)
|
101
|
-
chars.each { |v|
|
102
|
-
return true if case v
|
103
|
-
when Array
|
104
|
-
_include?(ch, *v)
|
105
|
-
when Enumerable
|
106
|
-
v.include? ch
|
107
|
-
when Fixnum
|
108
|
-
v == ch
|
109
|
-
when String
|
110
|
-
v == ch
|
111
|
-
else
|
112
|
-
false
|
113
|
-
end
|
114
|
-
}
|
115
|
-
false
|
116
|
-
end
|
117
|
-
|
118
101
|
def skipwhile(*chars, &block)
|
119
|
-
if block
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
break unless block.call(ch)
|
125
|
-
skipc
|
102
|
+
if block
|
103
|
+
until (ch = lookc).nil?
|
104
|
+
return ch unless block.call(ch)
|
105
|
+
skipc
|
106
|
+
end
|
126
107
|
end
|
127
|
-
|
108
|
+
nil
|
128
109
|
end
|
129
110
|
|
130
111
|
def skipuntil(*chars, &block)
|
131
|
-
if block
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
break if block.call(ch)
|
137
|
-
skipc
|
112
|
+
if block
|
113
|
+
until (ch = lookc).nil?
|
114
|
+
return ch if block.call(ch)
|
115
|
+
skipc
|
116
|
+
end
|
138
117
|
end
|
139
|
-
|
118
|
+
nil
|
140
119
|
end
|
141
120
|
|
142
121
|
def mark(*ini)
|
@@ -159,6 +138,10 @@ module IDL
|
|
159
138
|
@mark = nil
|
160
139
|
ret
|
161
140
|
end
|
141
|
+
|
142
|
+
def close
|
143
|
+
@src.close # close input source
|
144
|
+
end
|
162
145
|
end ## of class In
|
163
146
|
|
164
147
|
class StrIStream
|
@@ -249,7 +232,7 @@ module IDL
|
|
249
232
|
when File
|
250
233
|
i = src
|
251
234
|
nm = src.path
|
252
|
-
when IO
|
235
|
+
when IO, StringIO
|
253
236
|
i = src
|
254
237
|
nm = '<io>'
|
255
238
|
else
|
@@ -261,7 +244,7 @@ module IDL
|
|
261
244
|
end
|
262
245
|
def find_include(fname, all = true)
|
263
246
|
if File.file?(fname) && File.readable?(fname)
|
264
|
-
fname
|
247
|
+
File.expand_path(fname)
|
265
248
|
else
|
266
249
|
# search transient include paths if allowed (quoted includes)
|
267
250
|
fp = if all then
|
@@ -298,7 +281,7 @@ module IDL
|
|
298
281
|
end
|
299
282
|
@stack << [:include, @prefix, @ifdef, @in, @ifskip]
|
300
283
|
# record file dir as new searchpath
|
301
|
-
@xincludepaths << (File.dirname(fpath)+'/')
|
284
|
+
@xincludepaths << (File.dirname(fpath) + '/')
|
302
285
|
@prefix = nil
|
303
286
|
@ifdef = Array.new
|
304
287
|
@in = In.new(File.open(fpath, 'r'), fpath)
|
@@ -316,13 +299,16 @@ module IDL
|
|
316
299
|
@expansions.include?(define)
|
317
300
|
end
|
318
301
|
def more_source?
|
319
|
-
@stack.size>0
|
302
|
+
@stack.size > 0
|
320
303
|
end
|
321
304
|
def in_expansion?
|
322
305
|
more_source? and @stack.last[0] == :define
|
323
306
|
end
|
324
307
|
def leave_source
|
325
|
-
|
308
|
+
# make sure to close the input source
|
309
|
+
@in.close
|
310
|
+
# check if we have any previous source still stacked up
|
311
|
+
if @stack.size > 0
|
326
312
|
if @stack.last[0] == :include
|
327
313
|
@xincludepaths.pop # remove directory of finished include
|
328
314
|
@directiver.leave_include
|
@@ -338,7 +324,7 @@ module IDL
|
|
338
324
|
@ifdef.empty? || @ifdef.last
|
339
325
|
end
|
340
326
|
def positions
|
341
|
-
@stack.reverse.inject(@in.nil? ? [] : [@in.position]) {|pos_arr,(_, _, _,in_, _)| pos_arr << in_.position }
|
327
|
+
@stack.reverse.inject(@in.nil? ? [] : [@in.position]) {|pos_arr, (_, _, _, in_, _)| pos_arr << in_.position }
|
342
328
|
end
|
343
329
|
def parse_error(msg, ex = nil)
|
344
330
|
e = IDL::ParseError.new(msg, positions)
|
@@ -347,7 +333,8 @@ module IDL
|
|
347
333
|
end
|
348
334
|
|
349
335
|
LFCR = [ (?\n), (?\r) ]
|
350
|
-
|
336
|
+
SPACES = [ (?\ ), (?\t) ]
|
337
|
+
WHITESPACE = SPACES + LFCR
|
351
338
|
|
352
339
|
ANNOTATION = ?@
|
353
340
|
ANNOTATION_STR = '@'
|
@@ -361,9 +348,16 @@ module IDL
|
|
361
348
|
|
362
349
|
SHIFTCHARS = [ ?<, ?> ]
|
363
350
|
|
364
|
-
|
351
|
+
DIGITS = (?0..?9).to_a
|
352
|
+
ALPHA_LC = (?a..?z).to_a
|
353
|
+
ALPHA_UC = (?A..?Z).to_a
|
354
|
+
OCTALS = (?0..?7).to_a
|
355
|
+
HEXCHARS = DIGITS + (?a..?f).to_a + (?A..?F).to_a
|
356
|
+
SIGNS = [?-, ?+]
|
357
|
+
DOT = ?.
|
365
358
|
|
366
|
-
IDCHARS = [?_
|
359
|
+
IDCHARS = [?_ ] + ALPHA_LC + ALPHA_UC
|
360
|
+
FULL_IDCHARS = IDCHARS + DIGITS
|
367
361
|
|
368
362
|
ESCTBL = CharRegistry.new({
|
369
363
|
:n => ?\n, :t => ?\t, :v => ?\v, :b => ?\b,
|
@@ -376,7 +370,7 @@ module IDL
|
|
376
370
|
long manages mirrorport module multiple native Object octet oneway out port porttype primarykey private provides
|
377
371
|
public publishes raises readonly setraises sequence short string struct supports switch TRUE truncatable typedef
|
378
372
|
typeid typename typeprefix unsigned union uses ValueBase valuetype void wchar wstring
|
379
|
-
).inject(TokenRegistry.new) { |h,a| h[a.downcase.to_sym] = a; h }
|
373
|
+
).inject(TokenRegistry.new) { |h, a| h[a.downcase.to_sym] = a; h }
|
380
374
|
|
381
375
|
LITERALS = [
|
382
376
|
:integer_literal,
|
@@ -432,8 +426,9 @@ module IDL
|
|
432
426
|
annotation_body = nil
|
433
427
|
# next token should be '(' in case of normal/single value annotation
|
434
428
|
# or anything else in case of marker annotation
|
435
|
-
|
436
|
-
if
|
429
|
+
skip_spaces # skip till next non-space or eol
|
430
|
+
if peek_next == '('
|
431
|
+
token = next_token # parse '('
|
437
432
|
begin
|
438
433
|
# identifier or value (in case of single value annotation) expected
|
439
434
|
token = next_token
|
@@ -454,9 +449,9 @@ module IDL
|
|
454
449
|
end
|
455
450
|
end
|
456
451
|
end until token.first == ')'
|
457
|
-
|
458
|
-
token = nil
|
452
|
+
token = next_token_before_eol
|
459
453
|
else
|
454
|
+
token = next_token_before_eol
|
460
455
|
# marker annotation or symbolic value; leave body nil
|
461
456
|
end
|
462
457
|
[token, annotation_body]
|
@@ -495,13 +490,18 @@ module IDL
|
|
495
490
|
token
|
496
491
|
end
|
497
492
|
|
493
|
+
def peek_next
|
494
|
+
@in.lookc
|
495
|
+
end
|
496
|
+
|
497
|
+
def skip_spaces
|
498
|
+
@in.skipwhile {|c| SPACES.include?(c) }
|
499
|
+
end
|
500
|
+
|
498
501
|
def next_identifier(first = nil)
|
499
502
|
@in.mark(first)
|
500
|
-
while
|
501
|
-
|
502
|
-
when nil
|
503
|
-
break
|
504
|
-
when ?0..?9, ?a..?z, ?A..?Z, ?_
|
503
|
+
while true
|
504
|
+
if FULL_IDCHARS.include?(@in.lookc)
|
505
505
|
@in.skipc
|
506
506
|
else
|
507
507
|
break
|
@@ -512,18 +512,13 @@ module IDL
|
|
512
512
|
s2 = s0.dup # (to be) unescaped id
|
513
513
|
|
514
514
|
# simple check
|
515
|
-
escape = false
|
516
515
|
if s2.length == 0
|
517
516
|
parse_error 'identifier expected!'
|
518
517
|
else
|
519
|
-
|
520
|
-
|
521
|
-
when ?_ ## if starts with CORBA IDL escape => remove
|
522
|
-
escape = true
|
523
|
-
s2.slice!(0)
|
524
|
-
else
|
525
|
-
parse_error "identifier must begin with alphabet character: #{s2}"
|
518
|
+
if s2[0] == ?_
|
519
|
+
s2.slice!(0) ## if starts with CORBA IDL escape => remove
|
526
520
|
end
|
521
|
+
parse_error "identifier must begin with alphabet character: #{s2}" unless ALPHA_LC.include?(s2[0]) || ALPHA_UC.include?(s2[0])
|
527
522
|
end
|
528
523
|
|
529
524
|
# preprocessor check
|
@@ -540,9 +535,8 @@ module IDL
|
|
540
535
|
[ :identifier, Identifier.new(s2, s2, s0) ]
|
541
536
|
end
|
542
537
|
elsif (a = KEYWORDS.assoc(s1)).nil?
|
543
|
-
# check for language mapping keyword
|
544
|
-
|
545
|
-
[ :identifier, Identifier.new(s2, escape ? s2 : chk_identifier(s2), s0) ]
|
538
|
+
# check for language mapping keyword
|
539
|
+
[ :identifier, Identifier.new(s2, chk_identifier(s2), s0) ]
|
546
540
|
elsif s0 == a[1]
|
547
541
|
[ a[1], nil ]
|
548
542
|
else
|
@@ -657,26 +651,26 @@ module IDL
|
|
657
651
|
end
|
658
652
|
|
659
653
|
def skipfloat_or_fixed
|
660
|
-
if @in.lookc ==
|
654
|
+
if @in.lookc == DOT
|
661
655
|
@in.skipc
|
662
|
-
@in.skipwhile(
|
656
|
+
@in.skipwhile {|c| DIGITS.include?(c) }
|
663
657
|
end
|
664
658
|
if [?e, ?E].include? @in.lookc
|
665
659
|
@in.skipc
|
666
|
-
@in.skipc if
|
667
|
-
@in.skipwhile(
|
660
|
+
@in.skipc if SIGNS.include? @in.lookc
|
661
|
+
@in.skipwhile {|c| DIGITS.include?(c) }
|
668
662
|
return :floating_pt_literal
|
669
663
|
elsif [?d, ?D].include? @in.lookc
|
670
664
|
@in.skipc
|
671
|
-
@in.skipc if
|
672
|
-
@in.skipwhile(
|
665
|
+
@in.skipc if SIGNS.include? @in.lookc
|
666
|
+
@in.skipwhile {|c| DIGITS.include?(c) }
|
673
667
|
return :fixed_pt_literal
|
674
668
|
end
|
675
669
|
:floating_pt_literal
|
676
670
|
end
|
677
671
|
|
678
672
|
def skipline
|
679
|
-
while
|
673
|
+
while true
|
680
674
|
s = @in.gets
|
681
675
|
until s.chomp!.nil?; end
|
682
676
|
break unless s[s.length - 1] == ?\\
|
@@ -685,13 +679,13 @@ module IDL
|
|
685
679
|
|
686
680
|
def getline
|
687
681
|
s = ''
|
688
|
-
while
|
682
|
+
while true
|
689
683
|
ch = @in.lookc
|
690
684
|
break if ch.nil?
|
691
685
|
case
|
692
686
|
when (ch == ?\") #"
|
693
687
|
s << @in.getc # opening quote
|
694
|
-
while
|
688
|
+
while true
|
695
689
|
if @in.lookc == ?\\
|
696
690
|
# escape sequence
|
697
691
|
s << @in.getc
|
@@ -766,7 +760,7 @@ module IDL
|
|
766
760
|
|
767
761
|
def resolve_define(id, stack = [])
|
768
762
|
return id if %w(true false).include?(id)
|
769
|
-
IDL.log(3,"*** RIDL - resolve_define(#{id})")
|
763
|
+
IDL.log(3, "*** RIDL - resolve_define(#{id})")
|
770
764
|
if @defined.has_key?(id)
|
771
765
|
define_ = @defined[id]
|
772
766
|
stack << id
|
@@ -779,7 +773,7 @@ module IDL
|
|
779
773
|
end
|
780
774
|
|
781
775
|
def eval_directive(s)
|
782
|
-
IDL.log(
|
776
|
+
IDL.log(3, "** RIDL - eval_directive(#{s})")
|
783
777
|
rc = eval(s)
|
784
778
|
case rc
|
785
779
|
when FalseClass, TrueClass
|
@@ -792,10 +786,10 @@ module IDL
|
|
792
786
|
end
|
793
787
|
|
794
788
|
def parse_directive
|
795
|
-
@in.skipwhile
|
789
|
+
@in.skipwhile {|c| SPACES.include?(c) }
|
796
790
|
s = getline
|
797
791
|
/^(\w*)\s*/ === s
|
798
|
-
s1,s2 = $1, $' #'
|
792
|
+
s1, s2 = $1, $' #'
|
799
793
|
|
800
794
|
if /(else|endif|elif)/ === s1
|
801
795
|
|
@@ -828,7 +822,7 @@ module IDL
|
|
828
822
|
else
|
829
823
|
while s2 =~ /(^|[\W])defined\s*\(\s*(\w+)\s*\)/
|
830
824
|
def_id = $2
|
831
|
-
s2.gsub!(/(^|[\W])(defined\s*\(\s*\w+\s*\))/, '\1'+"#{@defined.has_key?(def_id).to_s}")
|
825
|
+
s2.gsub!(/(^|[\W])(defined\s*\(\s*\w+\s*\))/, '\1' + "#{@defined.has_key?(def_id).to_s}")
|
832
826
|
end
|
833
827
|
s2.gsub!(/(^|[\W])([A-Za-z_][\w]*)/) do |_| "#{$1}#{resolve_define($2)}" end
|
834
828
|
begin
|
@@ -860,10 +854,10 @@ module IDL
|
|
860
854
|
if do_parse?
|
861
855
|
# match 'defined(Foo)' or 'defined Foo'
|
862
856
|
while s2 =~ /(^|[\W])defined(\s*\(\s*(\w+)\s*\)|\s+(\w+))/
|
863
|
-
IDL.log(
|
857
|
+
IDL.log(3, "** RIDL - parse_directive : resolving 'defined(#{$3 || $4})'")
|
864
858
|
def_id = $3 || $4
|
865
859
|
# resolve 'defined' expression to 'true' or 'false' according to actual macro definition
|
866
|
-
s2.gsub!(/(^|[\W])(defined\s*[\s\(]\s*#{def_id}(\s*\))?)/, '\1'+"#{@defined.has_key?(def_id).to_s}")
|
860
|
+
s2.gsub!(/(^|[\W])(defined\s*[\s\(]\s*#{def_id}(\s*\))?)/, '\1' + "#{@defined.has_key?(def_id).to_s}")
|
867
861
|
end
|
868
862
|
# match and resolve any macro variables listed in conditional expression
|
869
863
|
s2.gsub!(/(^|[\W])([A-Za-z_][\w]*)/) do |_| "#{$1}#{resolve_define($2)}" end
|
@@ -903,11 +897,11 @@ module IDL
|
|
903
897
|
@defined.delete(s2)
|
904
898
|
|
905
899
|
when 'include'
|
906
|
-
if s2[0,1] == '"' || s2[0,1] == '<'
|
907
|
-
quoted_inc = (s2[0,1] == '"')
|
908
|
-
if s2.size>2
|
900
|
+
if s2[0, 1] == '"' || s2[0, 1] == '<'
|
901
|
+
quoted_inc = (s2[0, 1] == '"')
|
902
|
+
if s2.size > 2
|
909
903
|
s2.strip!
|
910
|
-
s2 = s2.slice(1..(s2.size-2))
|
904
|
+
s2 = s2.slice(1..(s2.size - 2))
|
911
905
|
else
|
912
906
|
s2 = ''
|
913
907
|
end
|
@@ -936,25 +930,30 @@ module IDL
|
|
936
930
|
end
|
937
931
|
end
|
938
932
|
|
933
|
+
def next_token_before_eol
|
934
|
+
@in.skipwhile {|c| SPACES.include?(c)}
|
935
|
+
LFCR.include?(@in.lookc) ? nil : next_token
|
936
|
+
end
|
937
|
+
|
939
938
|
def next_token
|
940
939
|
sign = nil
|
941
940
|
str = '' #initialize empty string
|
942
|
-
while
|
941
|
+
while true
|
943
942
|
ch = @in.getc
|
944
943
|
if ch.nil?
|
945
|
-
if @ifdef.size>0 and !in_expansion?
|
944
|
+
if @ifdef.size > 0 and !in_expansion?
|
946
945
|
parse_error 'mismatched #if/#endif'
|
947
946
|
end
|
948
947
|
if more_source?
|
949
948
|
leave_source
|
950
949
|
next
|
951
950
|
else
|
952
|
-
return [
|
951
|
+
return [false, nil]
|
953
952
|
end
|
954
953
|
end
|
955
954
|
|
956
955
|
if WHITESPACE.include? ch
|
957
|
-
@in.skipwhile
|
956
|
+
@in.skipwhile {|c| WHITESPACE.include?(c) }
|
958
957
|
next
|
959
958
|
end
|
960
959
|
|
@@ -1017,7 +1016,7 @@ module IDL
|
|
1017
1016
|
ret = []
|
1018
1017
|
chs = ''
|
1019
1018
|
@in.skipc # skip 'L'
|
1020
|
-
while
|
1019
|
+
while true
|
1021
1020
|
_nxtc = @in.lookc
|
1022
1021
|
if _nxtc == ?\\
|
1023
1022
|
@in.skipc
|
@@ -1067,7 +1066,7 @@ module IDL
|
|
1067
1066
|
# return token returned by parse_annotation or parse next token recursively
|
1068
1067
|
return parse_annotation(true) || next_token
|
1069
1068
|
else
|
1070
|
-
@in.skipuntil(
|
1069
|
+
@in.skipuntil {|c| LFCR.include?(c) }
|
1071
1070
|
end
|
1072
1071
|
end
|
1073
1072
|
str = '' # reset
|
@@ -1077,9 +1076,9 @@ module IDL
|
|
1077
1076
|
return %w(/ /)
|
1078
1077
|
end
|
1079
1078
|
|
1080
|
-
when ch
|
1079
|
+
when SIGNS.include?(ch)
|
1081
1080
|
_nxtc = @in.lookc
|
1082
|
-
if
|
1081
|
+
if DIGITS.include? _nxtc
|
1083
1082
|
sign = ch
|
1084
1083
|
str = '' # reset
|
1085
1084
|
next
|
@@ -1089,7 +1088,7 @@ module IDL
|
|
1089
1088
|
|
1090
1089
|
when (?1..?9).include?(ch)
|
1091
1090
|
@in.mark(sign, ch)
|
1092
|
-
@in.skipwhile(
|
1091
|
+
@in.skipwhile {|c| DIGITS.include?(c) }
|
1093
1092
|
num_type = ([?., ?e, ?E, ?d, ?D].include?(@in.lookc)) ? skipfloat_or_fixed : :integer_literal
|
1094
1093
|
|
1095
1094
|
r = @in.getregion
|
@@ -1102,10 +1101,10 @@ module IDL
|
|
1102
1101
|
return [:integer_literal, r.to_i]
|
1103
1102
|
end
|
1104
1103
|
|
1105
|
-
when ch ==
|
1104
|
+
when ch == DOT #
|
1106
1105
|
@in.mark(ch)
|
1107
|
-
@in.skipwhile(
|
1108
|
-
num_type = (
|
1106
|
+
@in.skipwhile {|c| DIGITS.include?(c) }
|
1107
|
+
num_type = (DOT != @in.lookc) ? skipfloat_or_fixed : nil
|
1109
1108
|
s = @in.getregion
|
1110
1109
|
if s == '.'
|
1111
1110
|
parse_error 'token consisting of single dot (.) is invalid.'
|
@@ -1128,11 +1127,11 @@ module IDL
|
|
1128
1127
|
s = @in.getregion
|
1129
1128
|
return [:integer_literal, s.hex]
|
1130
1129
|
else
|
1131
|
-
dec =
|
1132
|
-
@in.skipwhile(
|
1130
|
+
dec = false
|
1131
|
+
@in.skipwhile {|c| OCTALS.include?(c) }
|
1133
1132
|
if (?8..?9).include? @in.lookc
|
1134
1133
|
dec = TRUE
|
1135
|
-
@in.skipwhile(
|
1134
|
+
@in.skipwhile {|c| DIGITS.include?(c) }
|
1136
1135
|
end
|
1137
1136
|
|
1138
1137
|
num_type = ([?., ?e, ?E, ?d, ?D].include?(@in.lookc)) ? skipfloat_or_fixed : :integer_literal
|
@@ -1170,7 +1169,7 @@ module IDL
|
|
1170
1169
|
|
1171
1170
|
when ch == ?\" #" #double quote, for a string literal.
|
1172
1171
|
ret = ''
|
1173
|
-
while
|
1172
|
+
while true
|
1174
1173
|
_nxtc = @in.lookc
|
1175
1174
|
if _nxtc == ?\\
|
1176
1175
|
@in.skipc
|