[ https://issues.apache.org/jira/browse/PIG-1998?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13025600#comment-13025600 ]
Xuefu Zhang commented on PIG-1998: ---------------------------------- For patch PIG-1998_2.patch: 1. in the following grammar, the second rule should be just ^(RETURN_VAL). With that, "return void" is equivalent to return zero alias. So in the code, we don't need to do this kind of check: rets.size() == 1 && rets.get(0).equals("void") +macro_return_clause + : RETURNS alias (COMMA alias)* + -> ^(RETURN_VAL alias+) + | RETURNS VOID + -> ^(RETURN_VAL VOID) 2. The bigger concern is actually the newly added method validate(). I don't think the StreamingTokenizer will meet our needs. For instance, it's not able to recognized Pig single line comments such as: -- this is a single line comment. Even if this isn't a problem, the maintenance overhead could evolve to a nightmare for us in long run. I don't necessarily have a better idea, but I think we should at least give more thoughts on this. > Allow macro to return void > -------------------------- > > Key: PIG-1998 > URL: https://issues.apache.org/jira/browse/PIG-1998 > Project: Pig > Issue Type: Improvement > Components: impl > Affects Versions: 0.9.0 > Reporter: Richard Ding > Assignee: Richard Ding > Fix For: 0.9.0 > > Attachments: PIG-1998_1.patch, PIG-1998_2.patch > > > Pig macro is allowed to not have output alias. But this property isn't clear > from macro definition and macro invocation (macro inline). Here we propose to > make it clear: > 1. If a macro doesn't output any alias, it must specify void as return value. > For example: > {code} > define mymacro(...) returns void { > ... ... > }; > {code} > 2. If a macro doesn't output any alias, it must be invoked without return > value. For example, to invoke above macro, just specify: > {code} > mymacro(...); > {code} > 3. Any non-void return alias in the macro definition must exist in the macro > body and be prefixed with $. For example: > {code} > define mymacro(...) returns B { > ... ... > $B = filter ...; > }; > {code} -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira