< prev index next >

src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/parser/Parser.java

Print this page




5092         final long templateToken = token;
5093         final boolean hasSubstitutions = type == TEMPLATE_HEAD;
5094         addTemplateLiteralString(rawStrings, cookedStrings);
5095 
5096         if (hasSubstitutions) {
5097             TokenType lastLiteralType;
5098             do {
5099                 final Expression expression = expression();
5100                 if (type != TEMPLATE_MIDDLE && type != TEMPLATE_TAIL) {
5101                     throw error(AbstractParser.message("unterminated.template.expression"), token);
5102                 }
5103                 argumentList.add(expression);
5104 
5105                 lastLiteralType = type;
5106                 addTemplateLiteralString(rawStrings, cookedStrings);
5107             } while (lastLiteralType == TEMPLATE_MIDDLE);
5108         }
5109 
5110         final LiteralNode<Expression[]> rawStringArray = LiteralNode.newInstance(templateToken, finish, rawStrings);
5111         final LiteralNode<Expression[]> cookedStringArray = LiteralNode.newInstance(templateToken, finish, cookedStrings);


5112         final RuntimeNode templateObject = new RuntimeNode(templateToken, finish, RuntimeNode.Request.GET_TEMPLATE_OBJECT, rawStringArray, cookedStringArray);
5113         argumentList.set(0, templateObject);



5114         return optimizeList(argumentList);
5115     }
5116 
5117     private void addTemplateLiteralString(final ArrayList<Expression> rawStrings, final ArrayList<Expression> cookedStrings) {
5118         final long stringToken = token;
5119         final String rawString = lexer.valueOfRawString(stringToken);
5120         final String cookedString = (String) getValue();
5121         next();
5122         rawStrings.add(LiteralNode.newInstance(stringToken, finish, rawString));
5123         cookedStrings.add(LiteralNode.newInstance(stringToken, finish, cookedString));
5124     }
5125 
5126 
5127     /**
5128      * Parse a module.
5129      *
5130      * Module :
5131      *      ModuleBody?
5132      *
5133      * ModuleBody :




5092         final long templateToken = token;
5093         final boolean hasSubstitutions = type == TEMPLATE_HEAD;
5094         addTemplateLiteralString(rawStrings, cookedStrings);
5095 
5096         if (hasSubstitutions) {
5097             TokenType lastLiteralType;
5098             do {
5099                 final Expression expression = expression();
5100                 if (type != TEMPLATE_MIDDLE && type != TEMPLATE_TAIL) {
5101                     throw error(AbstractParser.message("unterminated.template.expression"), token);
5102                 }
5103                 argumentList.add(expression);
5104 
5105                 lastLiteralType = type;
5106                 addTemplateLiteralString(rawStrings, cookedStrings);
5107             } while (lastLiteralType == TEMPLATE_MIDDLE);
5108         }
5109 
5110         final LiteralNode<Expression[]> rawStringArray = LiteralNode.newInstance(templateToken, finish, rawStrings);
5111         final LiteralNode<Expression[]> cookedStringArray = LiteralNode.newInstance(templateToken, finish, cookedStrings);
5112 
5113         if (!env._parse_only) {
5114             final RuntimeNode templateObject = new RuntimeNode(templateToken, finish, RuntimeNode.Request.GET_TEMPLATE_OBJECT, rawStringArray, cookedStringArray);
5115             argumentList.set(0, templateObject);
5116         } else {
5117             argumentList.set(0, rawStringArray);
5118         }
5119         return optimizeList(argumentList);
5120     }
5121 
5122     private void addTemplateLiteralString(final ArrayList<Expression> rawStrings, final ArrayList<Expression> cookedStrings) {
5123         final long stringToken = token;
5124         final String rawString = lexer.valueOfRawString(stringToken);
5125         final String cookedString = (String) getValue();
5126         next();
5127         rawStrings.add(LiteralNode.newInstance(stringToken, finish, rawString));
5128         cookedStrings.add(LiteralNode.newInstance(stringToken, finish, cookedString));
5129     }
5130 
5131 
5132     /**
5133      * Parse a module.
5134      *
5135      * Module :
5136      *      ModuleBody?
5137      *
5138      * ModuleBody :


< prev index next >