nendo 0.6.6 → 0.6.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YTBkYzNiM2M2Yzk1ZWMzNTRmMTAxZTdmMTljNjMyNWM4Y2U5Njc2ZA==
5
- data.tar.gz: !binary |-
6
- NjZiZjljYzk3YTk3Y2U3YTJkNTcxNjVlZTNmZTYxNTE3ZWQzYTVmNQ==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- YzA4YzA1N2NmMjI4YWQwNDkyYjNlYTJhZWJjMzFiOTBjYzY4NmI4YTJlY2U2
10
- ODkyMjdhYzJhZGQ0ZjZjM2M2NmUxOGI3NjdkOGJiZGJmOWE3NjUwYTM0NTUz
11
- YzBlZGZkNDM1NDFlOWNlZWFhZjgzOGZjYjRjOTMxYjQyNzUyNzI=
12
- data.tar.gz: !binary |-
13
- NjM3ODhmZGYyMzMyNzUwOWVjZTU4OTY1ZmQ0YmU4MDFiYmRhOWYxMTA1YzAw
14
- ZmRkODRmMzc0MWQwNTBkN2IxY2RjODQ1NzMwNTMxZGUwNGQwYWE5YjBiODM4
15
- M2FiYTZjZTM1OGQ3MWZhMDBkMzllODJiYWMyMjYyMjMwMmViZDU=
2
+ SHA1:
3
+ metadata.gz: 8bcb8ea5cb0874720bb6b4b39a5651e7848580d9
4
+ data.tar.gz: 900a2e9af0b6987a36a8d17773140a4b01e890d4
5
+ SHA512:
6
+ metadata.gz: 609a4d62c959aa142a0ace769aeaf9b3776808aa5ad0b3398cafad7ed1c426c3ecebf8e7604891d50b519a11f3d21be1920e52402d2ebe57052a35c2e9d91c60
7
+ data.tar.gz: 259f4e4141cd781bf8b3b0433d01a70f786f563b8f85c03b046796b6d87628f5d38cc40f5cba762072404b2957ff1ea5cff399b7c7154d480c0f8a67b83dc6ef
data/Rakefile CHANGED
@@ -40,9 +40,6 @@ begin
40
40
  'benchmark/*.rb',
41
41
  'benchmark/*.nnd'].to_a
42
42
  gemspec.rdoc_options += [ '-x', 'match.nndc' ]
43
- gemspec.add_development_dependency "rspec"
44
- gemspec.add_development_dependency "rake"
45
- gemspec.add_dependency "json"
46
43
  end
47
44
  rescue LoadError
48
45
  puts 'Jeweler2 not available. If you want to build a gemfile, please install with "sudo gem install jeweler2"'
@@ -58,6 +55,8 @@ end
58
55
 
59
56
  task :test1 do
60
57
  sh "ruby -I ./lib `which rspec` -b ./test/nendo_spec.rb "
58
+ sh "ruby -I ./lib `which rspec` -b ./test/nendo_spec_2.rb "
59
+ sh "ruby -I ./lib `which rspec` -b ./test/nendo_spec_3.rb "
61
60
  sh "ruby -I ./lib `which rspec` -b ./test/syntax_spec.rb "
62
61
  sh "ruby -I ./lib `which rspec` -b ./test/testframework_spec.rb "
63
62
  sh "ruby -I ./lib ./bin/nendo ./test/srfi-1-test.nnd"
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 6
4
- :patch: 6
4
+ :patch: 7
data/lib/nendo/init.nnd CHANGED
@@ -1324,9 +1324,13 @@
1324
1324
  (map
1325
1325
  (lambda (orig)
1326
1326
  (string->symbol (+ "/nendo/core/" (symbol->string orig))))
1327
- reserved-orig))])
1328
- (memq sym reserved)))
1329
-
1327
+ reserved-orig))]
1328
+ [cast-sym (if (eq? sym.class ParsedSymbol)
1329
+ (intern sym)
1330
+ sym)]
1331
+ )
1332
+ (memq cast-sym reserved)))
1333
+
1330
1334
  (define (setup-let-args args)
1331
1335
  (map
1332
1336
  (lambda (arg)
data/lib/nendo/init.nndc CHANGED
@@ -7885,7 +7885,7 @@ trampCall(
7885
7885
  ))
7886
7886
  end
7887
7887
  rescue => __e
7888
- __e.set_backtrace( ["./lib/nendo/init.nnd:419"] + __e.backtrace )
7888
+ __e.set_backtrace( [":1"] + __e.backtrace )
7889
7889
  raise __e
7890
7890
  end
7891
7891
  end
@@ -9456,7 +9456,7 @@ trampCall(
9456
9456
  ))
9457
9457
  end
9458
9458
  rescue => __e
9459
- __e.set_backtrace( ["./lib/nendo/init.nnd:736"] + __e.backtrace )
9459
+ __e.set_backtrace( [":1"] + __e.backtrace )
9460
9460
  raise __e
9461
9461
  end
9462
9462
  else
@@ -9569,7 +9569,7 @@ trampCall(
9569
9569
  ))
9570
9570
  end
9571
9571
  rescue => __e
9572
- __e.set_backtrace( ["./lib/nendo/init.nnd:736"] + __e.backtrace )
9572
+ __e.set_backtrace( [":1"] + __e.backtrace )
9573
9573
  raise __e
9574
9574
  end
9575
9575
  else
@@ -9640,7 +9640,7 @@ trampCall(
9640
9640
  ))
9641
9641
  end
9642
9642
  rescue => __e
9643
- __e.set_backtrace( ["./lib/nendo/init.nnd:736"] + __e.backtrace )
9643
+ __e.set_backtrace( [":1"] + __e.backtrace )
9644
9644
  raise __e
9645
9645
  end
9646
9646
  end
@@ -10167,7 +10167,7 @@ trampCall(
10167
10167
  begin raise RuntimeError,
10168
10168
  "with-open requires 2 or 3 arguments."
10169
10169
  rescue => __e
10170
- __e.set_backtrace( ["./lib/nendo/init.nnd:889"] + __e.backtrace )
10170
+ __e.set_backtrace( ["./lib/nendo/init.nnd:887"] + __e.backtrace )
10171
10171
  raise __e
10172
10172
  end
10173
10173
  end
@@ -10990,7 +10990,7 @@ trampCall(
10990
10990
  ))
10991
10991
  end
10992
10992
  rescue => __e
10993
- __e.set_backtrace( ["./lib/nendo/init.nnd:926"] + __e.backtrace )
10993
+ __e.set_backtrace( [":1"] + __e.backtrace )
10994
10994
  raise __e
10995
10995
  end
10996
10996
  else
@@ -13053,7 +13053,7 @@ trampCall(
13053
13053
  ))
13054
13054
  end
13055
13055
  rescue => __e
13056
- __e.set_backtrace( ["./lib/nendo/init.nnd:1120"] + __e.backtrace )
13056
+ __e.set_backtrace( [":1"] + __e.backtrace )
13057
13057
  raise __e
13058
13058
  end
13059
13059
  end
@@ -13449,7 +13449,7 @@ trampCall(
13449
13449
  ))
13450
13450
  end
13451
13451
  rescue => __e
13452
- __e.set_backtrace( ["./lib/nendo/init.nnd:1120"] + __e.backtrace )
13452
+ __e.set_backtrace( [":1"] + __e.backtrace )
13453
13453
  raise __e
13454
13454
  end
13455
13455
  end
@@ -13925,7 +13925,7 @@ trampCall(
13925
13925
  ))
13926
13926
  end
13927
13927
  rescue => __e
13928
- __e.set_backtrace( ["./lib/nendo/init.nnd:1120"] + __e.backtrace )
13928
+ __e.set_backtrace( [":1"] + __e.backtrace )
13929
13929
  raise __e
13930
13930
  end
13931
13931
  begin
@@ -14118,19 +14118,53 @@ trampCall(
14118
14118
  begin
14119
14119
  ___lambda = lambda { |_reserved|
14120
14120
  begin
14121
- delayCall( '_memq', 'memq',
14122
- begin
14123
- trampCall(@_memq)
14124
- end ,
14125
- [
14126
- begin
14127
- trampCall(_sym)
14128
- end ,
14121
+ ___lambda = lambda { |_cast_MIMARKsym|
14122
+ begin
14123
+ delayCall( '_memq', 'memq',
14124
+ begin
14125
+ trampCall(@_memq)
14126
+ end ,
14127
+ [
14128
+ begin
14129
+ trampCall(_cast_MIMARKsym)
14130
+ end ,
14131
+ begin
14132
+ trampCall(_reserved)
14133
+ end
14134
+ ]
14135
+ )
14136
+ end
14137
+ } ; ___lambda.call(
14138
+ if (
14129
14139
  begin
14130
- trampCall(_reserved)
14140
+ _eq_QUMARK(
14141
+ begin
14142
+ trampCall(_sym).class
14143
+ end ,
14144
+ begin
14145
+ trampCall(ParsedSymbol)
14146
+ end
14147
+ )
14131
14148
  end
14132
- ]
14133
- )
14149
+ ) then
14150
+ begin
14151
+ delayCall( '_intern', 'intern',
14152
+ begin
14153
+ trampCall(@_intern)
14154
+ end ,
14155
+ [
14156
+ begin
14157
+ trampCall(_sym)
14158
+ end
14159
+ ]
14160
+ )
14161
+ end
14162
+ else
14163
+ begin
14164
+ trampCall(_sym)
14165
+ end
14166
+ end
14167
+ )
14134
14168
  end
14135
14169
  } ; ___lambda.call(
14136
14170
  begin
@@ -16360,7 +16394,7 @@ trampCall(
16360
16394
  begin raise RuntimeError,
16361
16395
  "Error: identifier->symbol requires only symbol"
16362
16396
  rescue => __e
16363
- __e.set_backtrace( ["./lib/nendo/init.nnd:1466"] + __e.backtrace )
16397
+ __e.set_backtrace( ["./lib/nendo/init.nnd:1470"] + __e.backtrace )
16364
16398
  raise __e
16365
16399
  end
16366
16400
  end
@@ -16612,7 +16646,7 @@ trampCall(
16612
16646
  end
16613
16647
  )
16614
16648
  rescue => __e
16615
- __e.set_backtrace( ["./lib/nendo/init.nnd:1679"] + __e.backtrace )
16649
+ __e.set_backtrace( ["./lib/nendo/init.nnd:1503"] + __e.backtrace )
16616
16650
  raise __e
16617
16651
  end
16618
16652
  end
@@ -16700,7 +16734,7 @@ trampCall(
16700
16734
  end
16701
16735
  )
16702
16736
  rescue => __e
16703
- __e.set_backtrace( ["./lib/nendo/init.nnd:1679"] + __e.backtrace )
16737
+ __e.set_backtrace( ["./lib/nendo/init.nnd:1505"] + __e.backtrace )
16704
16738
  raise __e
16705
16739
  end
16706
16740
  end
@@ -16728,7 +16762,7 @@ trampCall(
16728
16762
  end
16729
16763
  )
16730
16764
  rescue => __e
16731
- __e.set_backtrace( ["./lib/nendo/init.nnd:1679"] + __e.backtrace )
16765
+ __e.set_backtrace( ["./lib/nendo/init.nnd:1507"] + __e.backtrace )
16732
16766
  raise __e
16733
16767
  end
16734
16768
  end
@@ -17190,7 +17224,7 @@ trampCall(
17190
17224
  end
17191
17225
  )
17192
17226
  rescue => __e
17193
- __e.set_backtrace( ["./lib/nendo/init.nnd:1679"] + __e.backtrace )
17227
+ __e.set_backtrace( ["./lib/nendo/init.nnd:1556"] + __e.backtrace )
17194
17228
  raise __e
17195
17229
  end
17196
17230
  end
@@ -17270,7 +17304,7 @@ trampCall(
17270
17304
  end
17271
17305
  )
17272
17306
  rescue => __e
17273
- __e.set_backtrace( ["./lib/nendo/init.nnd:1679"] + __e.backtrace )
17307
+ __e.set_backtrace( ["./lib/nendo/init.nnd:1559"] + __e.backtrace )
17274
17308
  raise __e
17275
17309
  end
17276
17310
  end
@@ -19548,7 +19582,7 @@ trampCall(
19548
19582
  begin raise RuntimeError,
19549
19583
  "too few ...'s"
19550
19584
  rescue => __e
19551
- __e.set_backtrace( ["./lib/nendo/init.nnd:1679"] + __e.backtrace )
19585
+ __e.set_backtrace( ["./lib/nendo/init.nnd:1669"] + __e.backtrace )
19552
19586
  raise __e
19553
19587
  end
19554
19588
  end
@@ -19724,7 +19758,7 @@ trampCall(
19724
19758
  begin raise RuntimeError,
19725
19759
  "too many ...'s"
19726
19760
  rescue => __e
19727
- __e.set_backtrace( ["./lib/nendo/init.nnd:1679"] + __e.backtrace )
19761
+ __e.set_backtrace( ["./lib/nendo/init.nnd:1683"] + __e.backtrace )
19728
19762
  raise __e
19729
19763
  end
19730
19764
  else
@@ -1467,7 +1467,7 @@ trampCall(
1467
1467
  end
1468
1468
  )
1469
1469
  rescue => __e
1470
- __e.set_backtrace( ["./lib/nendo/nendo/experimental.nnd:178"] + __e.backtrace )
1470
+ __e.set_backtrace( [":1"] + __e.backtrace )
1471
1471
  raise __e
1472
1472
  end
1473
1473
  )
@@ -2250,7 +2250,7 @@ trampCall(
2250
2250
  end
2251
2251
  )
2252
2252
  rescue => __e
2253
- __e.set_backtrace( ["./lib/nendo/nendo/experimental.nnd:178"] + __e.backtrace )
2253
+ __e.set_backtrace( [":1"] + __e.backtrace )
2254
2254
  raise __e
2255
2255
  end
2256
2256
  )
@@ -2467,7 +2467,7 @@ trampCall(
2467
2467
  end
2468
2468
  )
2469
2469
  rescue => __e
2470
- __e.set_backtrace( ["./lib/nendo/nendo/experimental.nnd:178"] + __e.backtrace )
2470
+ __e.set_backtrace( [":1"] + __e.backtrace )
2471
2471
  raise __e
2472
2472
  end
2473
2473
  )
@@ -2780,7 +2780,7 @@ trampCall(
2780
2780
  end
2781
2781
  )
2782
2782
  rescue => __e
2783
- __e.set_backtrace( ["./lib/nendo/nendo/experimental.nnd:207"] + __e.backtrace )
2783
+ __e.set_backtrace( [":1"] + __e.backtrace )
2784
2784
  raise __e
2785
2785
  end
2786
2786
  )
@@ -3192,7 +3192,7 @@ trampCall(
3192
3192
  end
3193
3193
  )
3194
3194
  rescue => __e
3195
- __e.set_backtrace( ["./lib/nendo/nendo/experimental.nnd:223"] + __e.backtrace )
3195
+ __e.set_backtrace( [":1"] + __e.backtrace )
3196
3196
  raise __e
3197
3197
  end
3198
3198
  )
@@ -3812,7 +3812,7 @@ trampCall(
3812
3812
  end
3813
3813
  )
3814
3814
  rescue => __e
3815
- __e.set_backtrace( ["./lib/nendo/nendo/experimental.nnd:223"] + __e.backtrace )
3815
+ __e.set_backtrace( [":1"] + __e.backtrace )
3816
3816
  raise __e
3817
3817
  end
3818
3818
  )
@@ -55,6 +55,8 @@ module Nendo
55
55
  end
56
56
 
57
57
  def _equal_QUMARK( a, b )
58
+ a = a.intern if a.class == ParsedSymbol
59
+ b = b.intern if b.class == ParsedSymbol
58
60
  if a.is_a? String and b.is_a? String
59
61
  a === b
60
62
  elsif a.class != b.class
@@ -279,12 +281,20 @@ module Nendo
279
281
  def __GTMARK_EQMARK( a,b ) a >= b end
280
282
  def __LTMARK( a,b ) a < b end
281
283
  def __LTMARK_EQMARK( a,b ) a <= b end
282
- def _eq_QUMARK( a,b ) a == b end
284
+ def _eq_QUMARK( a,b )
285
+ a = a.intern if a.class == ParsedSymbol
286
+ b = b.intern if b.class == ParsedSymbol
287
+ a == b
288
+ end
283
289
  def _gt_QUMARK( a,b ) a > b end
284
290
  def _ge_QUMARK( a,b ) a >= b end
285
291
  def _lt_QUMARK( a,b ) a < b end
286
292
  def _le_QUMARK( a,b ) a <= b end
287
- def _eqv_QUMARK( a,b ) a === b end
293
+ def _eqv_QUMARK( a,b )
294
+ a = a.intern if a.class == ParsedSymbol
295
+ b = b.intern if b.class == ParsedSymbol
296
+ a === b
297
+ end
288
298
  def _car( cell ) cell.car end
289
299
  def _cdr( cell )
290
300
  if cell.cdr.is_a? Nil
@@ -301,7 +311,7 @@ module Nendo
301
311
  def _newline( ) print "\n" end
302
312
  def _procedure_QUMARK( arg ) ((Proc == arg.class) or (Method == arg.class)) end
303
313
  def _macro_QUMARK( arg ) (LispMacro == arg.class) end
304
- def _symbol_QUMARK( arg ) (arg.is_a? Symbol or arg.is_a? SyntacticClosure) end
314
+ def _symbol_QUMARK( arg ) (arg.is_a? Symbol or arg.is_a? SyntacticClosure or arg.is_a? ParsedSymbol) end
305
315
  def _keyword_QUMARK( arg ) (arg.is_a? LispKeyword) end
306
316
  def _syntax_QUMARK( arg ) (arg.is_a? LispSyntax) end
307
317
  def _core_MIMARKsyntax_QUMARK( arg )
@@ -42,7 +42,7 @@ module Nendo
42
42
  end
43
43
 
44
44
  def self.version
45
- "0.6.6" ##NENDO-VERSION
45
+ "0.6.7" ##NENDO-VERSION
46
46
  end
47
47
 
48
48
  attr_reader :evaluator
@@ -206,7 +206,8 @@ module Nendo
206
206
  if SyntacticClosure == name.class
207
207
  "_" + name.to_s
208
208
  else
209
- name = name.to_s if Symbol == name.class
209
+ name = name.to_s if Symbol == name.class
210
+ name = name.to_s if ParsedSymbol == name.class
210
211
  if 0 == name.length
211
212
  ""
212
213
  else
@@ -235,7 +236,8 @@ module Nendo
235
236
  end
236
237
 
237
238
  def toLispSymbol( name )
238
- name = name.to_s if Symbol == name.class
239
+ name = name.to_s if Symbol == name.class
240
+ name = name.to_s if ParsedSymbol == name.class
239
241
  raise ArgumentError, sprintf( "Error: `%s' is not a lisp symbol", name ) if not ('_' == name[0])
240
242
  name = name[1..-1]
241
243
  @char_table_ruby_to_lisp.each_pair { |key,val|
@@ -339,7 +341,9 @@ module Nendo
339
341
  end
340
342
 
341
343
  def isDefines( sym )
342
- [ :define, :set!, :"define-syntax", @core_syntax_hash[ :define ], @core_syntax_hash[ :set! ], @core_syntax_hash[ :"define-syntax" ] ].include?( sym )
344
+ sym = castParsedSymbol( sym )
345
+ result = [ :define, :set!, :"define-syntax", @core_syntax_hash[ :define ], @core_syntax_hash[ :set! ], @core_syntax_hash[ :"define-syntax" ] ].include?( sym )
346
+ return result
343
347
  end
344
348
 
345
349
  def embedBacktraceInfo( sourcefile, lineno )
@@ -401,6 +405,7 @@ module Nendo
401
405
  end
402
406
 
403
407
  def execFunc( funcname, args, sourcefile, lineno, locals, sourceInfo, execType )
408
+ funcname = castParsedSymbol( funcname )
404
409
  if isDefines( funcname )
405
410
  ar = args.cdr.map { |x| x.car }
406
411
  variable_sym = toRubySymbol( args.car.to_s.sub( /^:/, "" ))
@@ -661,6 +666,8 @@ module Nendo
661
666
  str += "[" + arr.join(",") + "]"
662
667
  when Symbol
663
668
  str += sprintf( ":\"%s\"", sexp.to_s )
669
+ when ParsedSymbol
670
+ str += sprintf( ":\"%s\"", sexp.to_s )
664
671
  when String, LispString
665
672
  str += sprintf( "\"%s\"", LispString.escape( sexp ))
666
673
  when LispKeyword
@@ -732,15 +739,29 @@ module Nendo
732
739
  # (let ((c 3))
733
740
  # (print (+ a b c))))
734
741
  # => locals must be [["_a" "_b"]["_c"]] value.
735
- def translate( sexp, locals, sourceInfo = nil )
742
+ def translate( sexpArg, locals, sourceInfo = nil )
743
+ sexp = castParsedSymbol( sexpArg )
736
744
  case sexp
737
745
  when Cell
738
746
  inv = @core_syntax_hash.invert
739
- car = if inv.has_key?( sexp.car )
740
- inv[ sexp.car ]
741
- else
742
- sexp.car
743
- end
747
+ # if sexp.car.to_s.match( /begin/ ) and sexp.car.to_s.match( /core/ )
748
+ # p inv
749
+ # p inv.keys
750
+ # p sexp.car.class
751
+ # p castParsedSymbol( sexp.car ).intern, inv.has_key?( castParsedSymbol( sexp.car ).intern )
752
+ # p inv[ castParsedSymbol( sexp.car ).intern ]
753
+ # end
754
+ if ParsedSymbol == sexp.car.class or Symbol == sexp.car.class
755
+ car = if inv.has_key?( castParsedSymbol( sexp.car ).intern )
756
+ inv[ castParsedSymbol( sexp.car ).intern ]
757
+ else
758
+ castParsedSymbol( sexp.car )
759
+ end
760
+ else
761
+ car = sexp.car
762
+ end
763
+ car = castParsedSymbol( car )
764
+
744
765
  if :quote == car
745
766
  genQuote( sexp.second )
746
767
  elsif :"syntax-quote" == car
@@ -792,11 +813,15 @@ module Nendo
792
813
  when Array
793
814
  raise RuntimeError, "Error: can't eval unquoted vector."
794
815
  else
795
- case sexp
816
+ case sexpArg
796
817
  when Symbol
797
818
  sym = sexp.to_s
798
819
  sym = toRubySymbol( sym )
799
820
  lispSymbolReference( sym, locals, nil, sexp.sourcefile, sexp.lineno )
821
+ when ParsedSymbol
822
+ sym = sexp.to_s
823
+ sym = toRubySymbol( sym )
824
+ lispSymbolReference( sym, locals, nil, sexpArg.sourcefile, sexpArg.lineno )
800
825
  when Fixnum
801
826
  sexp.to_s
802
827
  when String, LispString
@@ -955,15 +980,16 @@ module Nendo
955
980
  #
956
981
  #
957
982
  def __macroexpandEngine( sexp, syntaxArray, lexicalVars )
983
+ sexp == castParsedSymbol( sexp )
958
984
  case sexp
959
985
  when Cell
960
- car = sexp.car
986
+ car = castParsedSymbol( sexp.car )
961
987
  if :quote == car or :"syntax-quote" == car or @core_syntax_hash[ :quote ] == car or @core_syntax_hash[ :"syntax-quote" ] == car
962
988
  sexp
963
989
  elsif :"%let" == car or :letrec == car or @core_syntax_hash[ :"%let" ] == car or @core_syntax_hash[ :letrec ] == car
964
990
  # catch lexical identifiers of `let' and `letrec'.
965
991
  arr = sexp.second.map { |x|
966
- [ x.car.car, macroexpandEngine( x.car.cdr, syntaxArray, lexicalVars ) ]
992
+ [ castParsedSymbol( x.car.car ), macroexpandEngine( x.car.cdr, syntaxArray, lexicalVars ) ]
967
993
  }
968
994
  lst = arr.map {|x| Cell.new( x[0], x[1] ) }.to_list
969
995
  ret = Cell.new( car,
@@ -974,30 +1000,30 @@ module Nendo
974
1000
  sexp.second.each {|x|
975
1001
  if not x.car.second.is_a? Cell
976
1002
  raise SyntaxError, "Error: let-syntax get only '((name (syntax-rules ...)))' form but got: " + write_to_string( x )
977
- elsif not ( x.car.second.first == :"syntax-rules" or x.car.second.first == :"%syntax-rules")
1003
+ elsif not ( castParsedSymbol( x.car.second.first ) == :"syntax-rules" or castParsedSymbol( x.car.second.first ) == :"%syntax-rules")
978
1004
  raise SyntaxError, "Error: let-syntax get only '((name (syntax-rules ...)))' form but got: " + write_to_string( x )
979
1005
  end
980
1006
  }
981
1007
  arr_tmp = sexp.second.map { |x|
982
- [ x.car.first, __expandSyntaxRules( x.car.second, syntaxArray, lexicalVars ) ]
1008
+ [ castParsedSymbol( x.car.first ), castParsedSymbol( __expandSyntaxRules( x.car.second, syntaxArray, lexicalVars )) ]
983
1009
  }
984
1010
  arr = arr_tmp.map {|x|
985
- [ x[0], __evalSyntaxRules( x[1], lexicalVars ), x[1], lexicalVars ]
1011
+ [ castParsedSymbol( x[0] ), castParsedSymbol( __evalSyntaxRules( x[1], lexicalVars )), castParsedSymbol( x[1] ), castParsedSymbol( lexicalVars ) ]
986
1012
  }
987
1013
 
988
1014
  # trial (expand recursively)
989
1015
  arr_tmp = arr.map { |x|
990
- [ x[0], __expandSyntaxRules( x[2], syntaxArray + arr, lexicalVars ) ]
1016
+ [ castParsedSymbol( x[0] ), castParsedSymbol( __expandSyntaxRules( x[2], syntaxArray + arr, lexicalVars )) ]
991
1017
  }
992
1018
  arr = arr_tmp.map {|x|
993
- [ x[0], __evalSyntaxRules( x[1], lexicalVars ), x[1], lexicalVars ]
1019
+ [ castParsedSymbol( x[0] ), castParsedSymbol( __evalSyntaxRules( x[1], lexicalVars )), castParsedSymbol( x[1] ), castParsedSymbol( lexicalVars ) ]
994
1020
  }
995
1021
 
996
1022
  # keywords = ((let-syntax-keyword ( let-syntax-body ))
997
1023
  # (let-syntax-keyword ( let-syntax-body ))
998
1024
  # ..)
999
1025
  newKeywords = arr.map { |e|
1000
- [ e[0], [ :"%syntax-rules", e[1]].to_list ].to_list
1026
+ [ castParsedSymbol(e[0]), [ :"%syntax-rules", e[1]].to_list ].to_list
1001
1027
  }.to_list
1002
1028
 
1003
1029
  ret = Cell.new( :"let-syntax",
@@ -1005,6 +1031,7 @@ module Nendo
1005
1031
 
1006
1032
  ret
1007
1033
  else
1034
+ car = castParsedSymbol( car )
1008
1035
  sym = toRubySymbol( car.to_s )
1009
1036
  newSexp = sexp
1010
1037
  if isRubyInterface( sym )
@@ -1020,17 +1047,21 @@ module Nendo
1020
1047
  # (syntaxName (syntaxName arg1 arg2 ...) () (global-variables))
1021
1048
  eval( sprintf( "@__syntax = @%s", sym ), @binding )
1022
1049
  newSexp = trampCall( callProcedure( nil, sym, @__syntax, [ sexp, Cell.new(), _global_MIMARKvariables( ) ] ))
1023
- elsif _symbol_QUMARK( car ) and syntaxArray.map {|arr| arr[0].intern}.include?( car.intern )
1050
+ elsif _symbol_QUMARK( car ) and syntaxArray.map {|arr|
1051
+ arr[0].intern
1052
+ }.include?( car.intern )
1024
1053
  # lexical macro expandeding
1025
- symbol_and_syntaxObj = syntaxArray.reverse.find {|arr| car == arr[0]}
1026
- keys = syntaxArray.reverse.map { |arr| arr[0] }
1054
+ symbol_and_syntaxObj = syntaxArray.reverse.find {|arr|
1055
+ car == castParsedSymbol( arr[0] )
1056
+ }
1057
+ keys = syntaxArray.reverse.map { |arr| castParsedSymbol( arr[0] ) }
1027
1058
  if not symbol_and_syntaxObj
1028
1059
  raise "can't find valid syntaxObject"
1029
1060
  end
1030
- vars = symbol_and_syntaxObj[3].map { |arr| arr[0] }
1061
+ vars = symbol_and_syntaxObj[3].map { |arr| castParsedSymbol( arr[0] ) }
1031
1062
  lexvars = @syntaxHash[ symbol_and_syntaxObj[1] ][0]
1032
1063
  lispSyntax = @syntaxHash[ symbol_and_syntaxObj[1] ][1]
1033
- newSexp = trampCall( callProcedure( nil, symbol_and_syntaxObj[0], lispSyntax, [
1064
+ newSexp = trampCall( callProcedure( nil, castParsedSymbol( symbol_and_syntaxObj[0] ), lispSyntax, [
1034
1065
  sexp,
1035
1066
  Cell.new(),
1036
1067
  (_global_MIMARKvariables( ).to_arr + keys + vars).to_list ] ))
@@ -1054,6 +1085,14 @@ module Nendo
1054
1085
  end
1055
1086
  end
1056
1087
 
1088
+ def castParsedSymbol( arg )
1089
+ if arg.class == ParsedSymbol
1090
+ arg.intern
1091
+ else
1092
+ arg
1093
+ end
1094
+ end
1095
+
1057
1096
  def macroexpandPhase( sexp )
1058
1097
  macroexpandInit( 100000 )
1059
1098
  _strip_MIMARKlet_MIMARKsyntax_MIMARKkeyword(
@@ -1263,7 +1302,7 @@ module Nendo
1263
1302
 
1264
1303
  def _make_MIMARKsyntactic_MIMARKclosure( mac_env, use_env, identifier )
1265
1304
  if _pair_QUMARK( identifier )
1266
- if :"syntax-quote" == identifier.car
1305
+ if :"syntax-quote" == castParsedSymbol( identifier.car )
1267
1306
  identifier
1268
1307
  else
1269
1308
  raise TypeError, "make-syntactic-closure requires symbol or (syntax-quote sexp) only. but got: " + write_to_string( identifier )
@@ -1294,6 +1333,7 @@ module Nendo
1294
1333
  sexp
1295
1334
  else
1296
1335
  car = sexp.car
1336
+ car = castParsedSymbol( car )
1297
1337
  if :"syntax-quote" == car or @core_syntax_hash[ :"syntax-quote" ] == car
1298
1338
  Cell.new( :quote, sexp.cdr )
1299
1339
  else
@@ -33,14 +33,11 @@
33
33
  # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
34
 
35
35
  class Symbol
36
- def setLispToken( token )
37
- @token = token
38
- end
39
36
  def sourcefile
40
- @token ? @token.sourcefile : ""
37
+ ""
41
38
  end
42
39
  def lineno
43
- @token ? @token.lineno : 1
40
+ 1
44
41
  end
45
42
  end
46
43
 
@@ -374,7 +374,6 @@ module Nendo
374
374
  case cur.kind
375
375
  when T_SYMBOL
376
376
  sym = cur.str.intern
377
- sym.setLispToken( cur )
378
377
  case sym
379
378
  when :true
380
379
  true
@@ -383,7 +382,7 @@ module Nendo
383
382
  when :nil
384
383
  nil
385
384
  else
386
- sym
385
+ ParsedSymbol.new( sym, cur.sourcefile, cur.lineno )
387
386
  end
388
387
  when T_NUM
389
388
  if cur.str.match( /[.]/ ) # floating point