Introduce ParamForLoop as a thin veneer on BlockStmt
Removed checks and assertions upon form_Map.
Add a space after node ID (upon --gen-ids).
ParamForLoop: Refactor the constructor
Convert ParamForLoop to inherit from LoopStmt
Allow this test to fail again.

For other's sanity, allow this test to continue to fail on cygwin until we fix
it to be more portable and look into whether qio makes similar assumptions.
Merge pull request #988 from lydia-duncan/allowQioTestToFailAgain

Allow this test to fail again.

For other's sanity, allow this test to continue to fail on cygwin until we fix
it to be more portable and look into whether qio makes similar assumptions.
Merge pull request #989 from noakesmichael/param-for-loop-0

Introduce the statement ParamForLoop

This is the remaining looping AST node that relies on loop state within BlockStmt.  Introduce a new AST node for this type of loop that inherits directly from LoopStmt.

1) Introduce a simple version of ParamForLoop as a direct decedent of BlockStmt

2) Add a "factory" method on the class ParamForLoop to support the parser/builder.

3) Migrate ParamForLoop from a direct dependence on BlockStmt to a direct dependence on LoopStmt.

Compiled: STD clang/darwin, STD gcc/linux64, LLVM gcc/linux64
Tested: paratest --verify
Review: none
Introduce virtual overrides for blockInfoGet/Set and the method paramInfoGet
Introduce functions is/toParamForLoop(BaseAST* a) and virtual method isParamForLoop()
Add virtual methods getFirstExpr/getNextExpr and add a guard to catch any unexpected uses of ParamForLoop::blockInfoGet
Add virtual methods for codegen (flag an error if invoked) and verify
Add support for AstVisitor
Merge pull request #990 from noakesmichael/param-for-loop-1

ParamForLoop: Flesh out the implementation

Begin to separate ParamForLoop from BlockStmt; for example introduce paramInfoGet/Set to serve the role currently played by BlockStmt::blockInfoGet/Set and override the latter virtual methods with implementations
that print a warning message if the abstraction is being violated.

Add the core set of utility operations e.g. isParamForLoop(), toParamForLoop(), getFirstExpr/getNextExpr,
and support for AstVisitor.

Compiled STD clang/darwin, STD gcc/linux64, LLVM gcc/linux64
Tested: paratest --verify
Review: none


local implementations of the virtual methods blockInfoGet/Set that generate warning messages if they are invoked so that we can
Merge pull request #987 from vasslitvinov/restore-space-in-generated-C-code

Add a space after node ID (upon --gen-ids).

There is often a space missing after the node ID in the generated code, e.g.:

  /* 889339*/ ret = type_tmp;

This space disappeared due to 23311c03 aka r20461, which commit
was unrelated:

+      info->cStatements.push_back("/* " + numToString(stmt->id) + "*/ ");
-    fprintf(outfile, "/* %7d */ ", stmt->id);

I am restoring this space for convenience highlighting in emacs
and for consistency.

Reviewed by Mike.
Merge pull request #986 from vasslitvinov/remove-checks-and-asserts-upon-form_Map

Removed checks and assertions used with form_Map().

The files createTaskFunctions.cpp and implementForallIntents.cpp
contained these idioms:

  form_Map(SymbolMapElem, e, ...) {
    INT_ASSERT(e->key);
    ...

and/or

  form_Map(SymbolMapElem, e, ...) {
    if (Symbol* sym = e->key) {
      ...

Since the 'form_Map' macro only yields non-NULL things by design,
the above assert and check are not needed. I am removing them.

I also replaced:      vars->put(sym, arg);
with the equivalent:  e->value = arg;
for efficiency.


These changes can also be applied to flattenFunctions.cpp.
I did not do so, to keep that code undisturbed.

Reviewed by Mike.
Fixed .bad mismatch for hplx.chpl.
Merge pull request #991 from vasslitvinov/fix--hplx.bad--mismatch

Fixed .bad mismatch for hplx.chpl.

This test has been failing in more and more diverse ways.
I keep relaxing PREDIFF to accept these failures, so I can have .bad
and match clean against it.

Or, Kyle suggests, maybe this test shouldn't have a .bad?