Index: D:/workspace-imperius/imperius/modules/imperius-splcore/src/main/java/org/apache/imperius/spl/parser/expression/primary/PrimaryExpression.java =================================================================== --- D:/workspace-imperius/imperius/modules/imperius-splcore/src/main/java/org/apache/imperius/spl/parser/expression/primary/PrimaryExpression.java (revision 609121) +++ D:/workspace-imperius/imperius/modules/imperius-splcore/src/main/java/org/apache/imperius/spl/parser/expression/primary/PrimaryExpression.java (working copy) @@ -30,8 +30,8 @@ import org.apache.imperius.spl.parser.compiler.IdentPrimaryTuple; import org.apache.imperius.spl.parser.compiler.symboltable.SPLSymbolTable; import org.apache.imperius.spl.parser.compiler.symboltable.Symbol; -import org.apache.imperius.spl.parser.exceptions.*; -import org.apache.imperius.spl.parser.util.*; +import org.apache.imperius.spl.parser.exceptions.SPLException; +import org.apache.imperius.spl.parser.util.TypeInfo; import org.apache.imperius.util.SPLLogger; @@ -197,14 +197,21 @@ else // local constant { boolean symbolExists = _symTab.symbolExists(_classNameOrInstanceVariableName, true); - Symbol sym = _symTab.getSymbol(_classNameOrInstanceVariableName); - if(!symbolExists) + if( symbolExists ) { + Symbol sym = _symTab.getSymbol(_classNameOrInstanceVariableName); + _dataType.copy(sym.getType()); +// _isArray = sym.isArray(); + _referenceTypeName = sym.getReferenceTypeName(); + } + else if(_symTab.getInstance(_classNameOrInstanceVariableName)!=null) + { + // validate! happens when the identifier is an import variable + } + else + { throw new SPLException("Symbol " + _classNameOrInstanceVariableName + " does not exist"); } - _dataType.copy(sym.getType()); -// _isArray = sym.isArray(); - _referenceTypeName = sym.getReferenceTypeName(); } @@ -238,8 +245,15 @@ } else { - Symbol sym = _symTab.getSymbol(_classNameOrInstanceVariableName); - intermediateObject = sym.getValue(); + if( _symTab.symbolExists(_classNameOrInstanceVariableName,false) ) + { + Symbol sym = _symTab.getSymbol(_classNameOrInstanceVariableName); + intermediateObject = sym.getValue(); + } + else + { + intermediateObject = _symTab.getInstance(_classNameOrInstanceVariableName); + } }