(String s, Resolver resolver)
| 416 | |
| 417 | |
| 418 | private static Object matchSymbol(String s, Resolver resolver){ |
| 419 | Matcher m = symbolPat.matcher(s); |
| 420 | if(m.matches()) |
| 421 | { |
| 422 | int gc = m.groupCount(); |
| 423 | String ns = m.group(1); |
| 424 | String name = m.group(2); |
| 425 | if(ns != null && ns.endsWith(":/") |
| 426 | || name.endsWith(":") |
| 427 | || s.indexOf("::", 1) != -1) |
| 428 | return null; |
| 429 | if(s.startsWith("::")) |
| 430 | { |
| 431 | Symbol ks = Symbol.intern(s.substring(2)); |
| 432 | if(resolver != null) |
| 433 | { |
| 434 | Symbol nsym; |
| 435 | if(ks.ns != null) |
| 436 | nsym = resolver.resolveAlias(Symbol.intern(ks.ns)); |
| 437 | else |
| 438 | nsym = resolver.currentNS(); |
| 439 | //auto-resolving keyword |
| 440 | if(nsym != null) |
| 441 | return Keyword.intern(nsym.name, ks.name); |
| 442 | else |
| 443 | return null; |
| 444 | } |
| 445 | else |
| 446 | { |
| 447 | Namespace kns; |
| 448 | if(ks.ns != null) |
| 449 | kns = Compiler.currentNS().lookupAlias(Symbol.intern(ks.ns)); |
| 450 | else |
| 451 | kns = Compiler.currentNS(); |
| 452 | //auto-resolving keyword |
| 453 | if(kns != null) |
| 454 | return Keyword.intern(kns.name.name, ks.name); |
| 455 | else |
| 456 | return null; |
| 457 | } |
| 458 | } |
| 459 | boolean isKeyword = s.charAt(0) == ':'; |
| 460 | Symbol sym = Symbol.intern(s.substring(isKeyword ? 1 : 0)); |
| 461 | if(isKeyword) |
| 462 | return Keyword.intern(sym); |
| 463 | return sym; |
| 464 | } |
| 465 | else |
| 466 | { |
| 467 | Matcher am = arraySymbolPat.matcher(s); |
| 468 | if(am.matches()) |
| 469 | return Symbol.intern(am.group(1), am.group(2)); |
| 470 | } |
| 471 | return null; |
| 472 | } |
| 473 | |
| 474 | |
| 475 | private static Object matchNumber(String s){ |
no test coverage detected