ridl 2.5.6 → 2.8.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|