Learning ColdFusion 9: Bug Using Implicit Structs Within Nested Function Calls

Posted July 30, 2009 at 1:40 PM by Ben Nadel

Tags: ColdFusion

Last night, when I was playing around with ColdFusion 9's new Object-Relational Mapping (ORM) functionality, I think I found a compile-time bug. I say compile-time because the following code throws an error even if I put a CFAbort at the top:

  • <!--- Load the girl object based on the name. --->
  • <cfset joanna = entityLoad(
  • "Girl",
  • { name = "Joanna" },
  • true
  • ) />
  •  
  • <!---
  • Override Joanna's properties with a new collection.
  • Because we don't know the IDs of the given properties,
  • we need to search for them by name.
  •  
  • NOTE: Use the "TRUE" uniqueness parameter to make sure that
  • these entityLoad() methods return a CFC, not an array.
  • --->
  • <cfset joanna.setProperties(
  • [
  • entityLoad(
  • "Property",
  • { name = "Athletic" },
  • true
  • ),
  • entityLoad(
  • "Property",
  • { name = "Brunette" },
  • true
  • )
  • ]
  • ) />

As you can see, all I'm doing here is loading a Girl.cfc instance and then overriding its collection of Property.cfcs. This throws the following ColdFusion error:

Unable to complete CFML to Java translation. Error information unknown node type coldfusion.compiler.ASTStructInitializer@189eab7

I narrowed down the problem to the fact that I was calling EntityLoad() as part of an implicit array that was being passed to a function call. When I moved the EntityLoad() calls outside of the SetProperties() call, everything worked fine.

At first, I thought maybe this was a bug with EntityLoad() or some other ORM feature; but, because this appears to be a compile-time issue, I wanted to see if I could duplicate the error with a much smaller bit of code:

  • <!--- Test method returns a struct. --->
  • <cffunction name="test">
  • <cfreturn arguments[ 1 ] />
  • </cffunction>
  •  
  • <!---
  • Get an array containing our nested struct that is returned
  • from the method.
  • --->
  • <cfset data = test(
  • [
  • test(
  • { foo = "Bar" }
  • )
  • ]
  • ) />

This simple demo also throws the ColdFusion error:

Unable to complete CFML to Java translation. Error information unknown node type coldfusion.compiler.ASTStructInitializer@1b5027d

I tried a whole bunch of different combinations of nested structs and arrays - it didn't matter. As long as the outer expression was a method call and as long as there were at least two levels of implicit object creation (struct or array) in which the inner-most one was wrapped inside of another method call, the error was thrown.

ColdFusion 9 definitely made some good steps forward with allowing us to pass implicit structs and arrays to method calls; but, it looks like they still need to iron some of the complex nesting that this sort of syntax invites.


You Might Also Be Interested In:



Reader Comments

Jul 30, 2009 at 1:49 PM // reply »
11,314 Comments

I have filed a bug for this:

http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=79175

After searching the Bug database, looks like CFLoop was having a similar bug, which has since been closed. Hopefully, this has already been fixed.


Jan 29, 2011 at 4:22 PM // reply »
1 Comments

Hi Ben

Is this another bug? I have broken it down to it's simplest form.

var local.result = {};

// add the page details to result
local.result['page'] = 1;
local.result['records'] = 2;
local.result['total'] = 3;

local.result['rows'] = [];

cfdrop( local.result );

This all works as expected but add an if statement (which can be anything) and the array just vanishes. What is going on here?

if ( 1 == 1) {

};

var local.result = {};

// add the page details to result
local.result['page'] = 1;
local.result['records'] = 2;
local.result['total'] = 3;

local.result['rows'] = [];

cfdrop( local.result );


Aug 11, 2011 at 7:56 PM // reply »
15 Comments

@Ben, @Ken,

Do you have a bug number of bug report for this? I'd like to vote it up. I lost quite a bit of time to this issue (see Stackoverflow: http://stackoverflow.com/questions/6948541/odd-coldfusion-behavior-abort-not-honored).

Thanks.

Aaron Greenlee


Post A Comment

Comment Etiquette: Please do not post spam. Please keep the comments on-topic. Please do not post unrelated questions or large chunks of code. And, above all, please be nice to each other - we're trying to have a good conversation here.

Please review the following issues:

Author Name:


Author Email:

Author Website:

Comment:

Supported HTML tags for formatting: <strong>bold</strong>   <em>italic</em>   <code>code</code>







  • Help Wanted - Find Your Next ColdFusion Job
Ben Nadel's Company - Epicenter Consulting Recent Blog Comments
Jun 18, 2013 at 3:39 PM
Experimenting With The Amazon Simple Storage Service (S3) API Using ColdFusion
Hi Ben, THANKS! While not bleeding edge, it is new to me & I like learning new things every day! ... read »
Jun 18, 2013 at 12:30 PM
Disabling Auto-Correct And Auto-Capitalize Features On iPhone Inputs
Also spellcheck="false" should be mentioned as part of html5 specs ... read »
Jun 18, 2013 at 8:40 AM
Using Named Functions Within Self-Executing Function Blocks In Javascript
Hi Ben, you forgot to mention the most important thing for named self-executing functions - they can be referenced by name ONLY inside their execution context (which is parens in this case), it mean ... read »
dee
Jun 18, 2013 at 7:01 AM
My Safari Browser SQLite Database Hello World Example
hai ben, this program is really good i could understand the concept but i dint know how to save it and how to open it as you have done in the video can u give that details pls ... read »
Jun 18, 2013 at 6:04 AM
Clearing Inline CSS Properties With jQuery
Thanks a lot for for post! It helped me a lot... after being stuck since 24 hrs.. found solution from your post. Thanks again! ... read »
Jun 18, 2013 at 2:31 AM
SOTR 2013 - The Best Conference I Never Went To
I keep watching it, should keep me happily distracted until SotR14 ;) ... read »
Jun 17, 2013 at 9:45 PM
What If All User Interface (UI) Data Came In Reports?
@Jonah, As I was reading what you wrote, it occurred to me that maybe I do something similar to that in some of my client-side code. In an application I'm working on, there are a bunch of unrelated ... read »
Jun 17, 2013 at 9:36 PM
Object Thinking By David West
@Jonah, Please, don't feel bad at all. I appreciate all that you have contributed to the conversation. And, the more points of view I get, the more confident I am that I will some day, some how und ... read »
InVision App - Prototyping Made Beautiful With Prototyping Tools