groovy

array[0]++ doesn't compile

Details

  • Type: Bug Bug
  • Status: Closed Closed
  • Priority: Minor Minor
  • Resolution: Fixed
  • Affects Version/s: 1.0-JSR-6
  • Fix Version/s: 1.1-beta-2
  • Component/s: None
  • Labels:
    None
  • Environment:
    Mac OSX Intel
  • Number of attachments :
    0

Description

I've been playing a little with running Groovy scripts from within Java. Pretty simple how I am doing this:

Binding binding=new Binding();
int[] i=new int[1];
binding.setVariable("i", i);

GroovyShell shell=new GroovyShell(getClass().getClassLoader(), binding);
shell.evaluate("i[0]++");

Now the strange thing is that a compiler error occurs at i[0]++. I'd expected that it would take the first element of the array and increment it. Apparently I'm wrong. Here's the exception:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, General error during class
generation: BinaryExpression appeared on LHS. .
Node: org.codehaus.groovy.ast.expr.BinaryExpression. At [1:2] Script1.groovy

the script i[0]+=1 works.

Activity

Hide
Marc Palmer added a comment -

There is another possibly related array operation problem.

def experienceScores = [
		(INSPIRE):0,
		(RELAX):0,
		(ENERGIZE):0,
		(REVITALIZE):0
	]

	answers.values().each() {
		def cat = ANSWERS_BY_ID[it]?.category
		experienceScores[cat]++
	}

he postincrement doesn't work, and gives an error message that doesn't inspire confidence ("RuntimeParserException: Should not be called here"). Should this be working in 1.1 Beta 1? The problem is probably the map in use for experienceScores...

General error during class generation: Should not be called here. Possible reason: postfix operation on array.. Node: org.codehaus.groovy.ast.expr.BinaryExpression. At [140:20] CompetitionController org.codehaus.groovy.syntax.RuntimeParserException: Should not be called here. Possible reason: postfix operation on array.. Node: org.codehaus.groovy.ast.expr.BinaryExpression. At [140:20] CompetitionController at org.codehaus.groovy.classgen.AsmClassGenerator.throwException(AsmClassGenerator.java:1366) at org.codehaus.groovy.classgen.AsmClassGenerator.visitBinaryExpression(AsmClassGenerator.java:1321) at org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:79) at org.codehaus.groovy.classgen.AsmClassGenerator.evaluatePostfixMethod(AsmClassGenerator.java:3194) at org.codehaus.groovy.classgen.AsmClassGenerator.visitPostfixExpression(AsmClassGenerator.java:1357) at org.codehaus.groovy.ast.expr.PostfixExpression.visit(PostfixExpression.java:73) at org.codehaus.groovy.classgen.AsmClassGenerator.visitAndAutoboxBoolean(AsmClassGenerator.java:3155) at org.codehaus.groovy.classgen.AsmClassGenerator.evaluateExpression(AsmClassGenerator.java:1108) at org.codehaus.groovy.classgen.AsmClassGenerator.visitReturnStatement(AsmClassGenerator.java:1070) at org.codehaus.groovy.ast.stmt.ReturnStatement.visit(ReturnStatement.java:74) at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:83) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:117) at org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:613) at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:82) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:63) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:69) at org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:531) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:77) at org.codehaus.groovy.classgen.AsmClassGenerator.visitMethod(AsmClassGenerator.java:571) at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:840) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:37) at org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:337) at org.codehaus.groovy.control.CompilationUnit$9.call(CompilationUnit.java:745) at org.codehaus.groovy.control.CompilationUnit$9.call(CompilationUnit.java:765) at org.codehaus.groovy.control.CompilationUnit$9.call(CompilationUnit.java:765) at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:946) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:474) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:309) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:279) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:274) at groovy.lang.GroovyClassLoader.recompile(GroovyClassLoader.java:709) at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:668) at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:499) at

Show
Marc Palmer added a comment - There is another possibly related array operation problem.
def experienceScores = [
		(INSPIRE):0,
		(RELAX):0,
		(ENERGIZE):0,
		(REVITALIZE):0
	]

	answers.values().each() {
		def cat = ANSWERS_BY_ID[it]?.category
		experienceScores[cat]++
	}
he postincrement doesn't work, and gives an error message that doesn't inspire confidence ("RuntimeParserException: Should not be called here"). Should this be working in 1.1 Beta 1? The problem is probably the map in use for experienceScores... General error during class generation: Should not be called here. Possible reason: postfix operation on array.. Node: org.codehaus.groovy.ast.expr.BinaryExpression. At [140:20] CompetitionController org.codehaus.groovy.syntax.RuntimeParserException: Should not be called here. Possible reason: postfix operation on array.. Node: org.codehaus.groovy.ast.expr.BinaryExpression. At [140:20] CompetitionController at org.codehaus.groovy.classgen.AsmClassGenerator.throwException(AsmClassGenerator.java:1366) at org.codehaus.groovy.classgen.AsmClassGenerator.visitBinaryExpression(AsmClassGenerator.java:1321) at org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:79) at org.codehaus.groovy.classgen.AsmClassGenerator.evaluatePostfixMethod(AsmClassGenerator.java:3194) at org.codehaus.groovy.classgen.AsmClassGenerator.visitPostfixExpression(AsmClassGenerator.java:1357) at org.codehaus.groovy.ast.expr.PostfixExpression.visit(PostfixExpression.java:73) at org.codehaus.groovy.classgen.AsmClassGenerator.visitAndAutoboxBoolean(AsmClassGenerator.java:3155) at org.codehaus.groovy.classgen.AsmClassGenerator.evaluateExpression(AsmClassGenerator.java:1108) at org.codehaus.groovy.classgen.AsmClassGenerator.visitReturnStatement(AsmClassGenerator.java:1070) at org.codehaus.groovy.ast.stmt.ReturnStatement.visit(ReturnStatement.java:74) at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:83) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:117) at org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:613) at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:82) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:63) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:69) at org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:531) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:77) at org.codehaus.groovy.classgen.AsmClassGenerator.visitMethod(AsmClassGenerator.java:571) at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:840) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:37) at org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:337) at org.codehaus.groovy.control.CompilationUnit$9.call(CompilationUnit.java:745) at org.codehaus.groovy.control.CompilationUnit$9.call(CompilationUnit.java:765) at org.codehaus.groovy.control.CompilationUnit$9.call(CompilationUnit.java:765) at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:946) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:474) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:309) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:279) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:274) at groovy.lang.GroovyClassLoader.recompile(GroovyClassLoader.java:709) at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:668) at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:499) at
Hide
blackdrag blackdrag added a comment -

implemented

Show
blackdrag blackdrag added a comment - implemented

People

Vote (1)
Watch (0)

Dates

  • Created:
    Updated:
    Resolved: