Revision 46081 trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultCompiler.java

View differences:

DefaultCompiler.java
517 517
    }
518 518

  
519 519
    public Code parse_getattr() {
520
        Code op1 = parse_termino();
520
        Code op1 = parse_colon();
521 521
        if( !isObjectAccessSupported() ) {
522 522
            return op1;
523 523
        }
......
557 557
        }
558 558
    }    
559 559

  
560
    public Code parse_colon() { 
561
        Token token = lexer.look();
562
        if( token.getType() == Token.COLON ) {
563
            // Con esto pretendemos simular el uso de los ":" de SQLJ.
564
            // 
565
            // https://docs.oracle.com/cd/A87860_01/doc/java.817/a83723/blangfe3.htm
566
            // Basic Host Expression Syntax
567
            //
568
            // Solo estamos dando soporte al especificador de modo "IN".
569
            lexer.next();
570
            token = lexer.look();
571
            if( token.getType() == Token.IDENTIFIER )  {
572
                switch(token.getLiteral().trim().toUpperCase()) {
573
                    case "IN":
574
                        lexer.next();
575
                        break;
576
                    case "OUT":
577
                    case "INOUT":
578
                        // Invalid mode specifier in host expression
579
                        throw new ExpressionSyntaxException(
580
                            I18N.invalid_mode_specifier_in_host_expression(),
581
                            lexer
582
                        );
583
                }
584
            }
585
            Code op = parse_termino();
586
            return codeBuilder.$eval(op);
587
        }
588
        return parse_termino();
589
    }
590
    
560 591
    @SuppressWarnings("UnusedAssignment")
561 592
    public Code parse_termino() {
562 593

  
......
630 661
                    return codeBuilder.identifier(id);
631 662
                }
632 663
            }
633
        case Token.STRING_LITERAL:
664
        case Token.STRING_LITERAL: 
634 665
            lexer.next();
635 666
            return codeBuilder.constant(token.getValue());
636 667
        case Token.INTEGER_LITERAL:

Also available in: Unified diff