Project

General

Profile

Activity

From 12/26/2018 to 01/24/2019

01/24/2019

05:35 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> Why do you say "We may need to look here without the arguments"? Do you have reason to believe t...
Constantin Asofiei
04:27 PM Feature #3751: implement support for OO 4GL and structured error handling
> Are you planning to fix the method erasure where it can override only by parameter mode, not just type?
Yes.
Greg Shah
04:27 PM Feature #3751: implement support for OO 4GL and structured error handling
From #3751-353:
> What I think is missing is the parent lookup:
>
> * in ClassDefinition.exactMethodLookup - thi...
Greg Shah

01/23/2019

05:34 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> From #3751-346:
>
> > INPUT/OUTPUT/INPUT-OUPTUT for OO argument case.
>
> I assume this is ...
Constantin Asofiei
05:11 PM Feature #3751: implement support for OO 4GL and structured error handling
From #3751-346:
> INPUT/OUTPUT/INPUT-OUPTUT for OO argument case.
I assume this is the TODO in @fuzzyMethodLook...
Greg Shah
04:43 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> In @ClassDefinition.fuzzyMethodLookup()@ code starting at line 1548:
>
> * Shouldn't the code ...
Constantin Asofiei
04:28 PM Feature #3751: implement support for OO 4GL and structured error handling
In @ClassDefinition.fuzzyMethodLookup()@:... Greg Shah
04:04 PM Feature #3751: implement support for OO 4GL and structured error handling
Ovidiu Maxiniuc wrote:
> Think only in the case of bulk delete when the entire table content is dropped with
Is it...
Constantin Asofiei
02:45 PM Feature #3751: implement support for OO 4GL and structured error handling
Constantin Asofiei wrote:
> Ovidiu, you can now look into the object reference tracking for the temp-table fields (w...
Ovidiu Maxiniuc
02:43 PM Feature #3751: implement support for OO 4GL and structured error handling
Constantin Asofiei wrote:
> Greg, have you checked properties defined in an interface or an abstract property (in an...
Greg Shah
02:42 PM Feature #3751: implement support for OO 4GL and structured error handling
In @ClassDefinition.fuzzyMethodLookup()@ code starting at line 1548:
* Shouldn't the code at line 1563 be checking...
Greg Shah
01:56 PM Feature #3751: implement support for OO 4GL and structured error handling
Please don't use the builtin 4GL classes in FWD - these are not implemented yet.
Use an explicitly defined class, ...
Constantin Asofiei
01:53 PM Feature #3751: implement support for OO 4GL and structured error handling
... Ovidiu Maxiniuc
01:50 PM Feature #3751: implement support for OO 4GL and structured error handling
Ovidiu Maxiniuc wrote:
> Constantin,
>
> In @ObjectResource.delete()@, a new @ExternalProgramWrapper@ is used fo...
Constantin Asofiei
01:47 PM Feature #3751: implement support for OO 4GL and structured error handling
Constantin,
In @ObjectResource.delete()@, a new @ExternalProgramWrapper@ is used for some cleanup. I do not think...
Ovidiu Maxiniuc
01:14 PM Feature #3751: implement support for OO 4GL and structured error handling
3750b rev 11312 contains another batch of mostly conversion changes.
I've fixed review notes 1 to 3; 4 and 5 (comm...
Constantin Asofiei
12:44 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg, have you checked properties defined in an interface or an abstract property (in an abstract class)? These don'... Constantin Asofiei
10:57 AM Feature #3751: implement support for OO 4GL and structured error handling
Constantin: The changes are very good. I'm excited to see this coming together. Greg Shah
10:37 AM Feature #3751: implement support for OO 4GL and structured error handling
Code Review Task Branch 3750b Revision 11311
1. In @ArrayAssigner@, why is @ObjectOps.reRegister(array, copy);@ be...
Greg Shah

01/22/2019

04:53 PM Feature #3751: implement support for OO 4GL and structured error handling
3750b rev 11311 contains support for:
* NEW, DYNAMIC-NEW, VALID-OBJECT, CAST, DYNAMIC-CAST, TYPE-OF, DELETE
* DYNAM...
Constantin Asofiei
04:16 PM Feature #3751: implement support for OO 4GL and structured error handling
We can have 2 versions of @DYNAMIC-INVOKE@. One that is for a standalone expression and one that is known to be used... Greg Shah
03:50 PM Feature #3751: implement support for OO 4GL and structured error handling
For dynamic method invocation, there is a ERROR condition raised if the method returns void and that method is used i... Constantin Asofiei
03:15 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> > Maybe we should emit something like oo.Bar.__load__().xs.get()?
>
> Instead of emitting this...
Constantin Asofiei
03:00 PM Feature #3751: implement support for OO 4GL and structured error handling
> Maybe we should emit something like oo.Bar.__load__().xs.get()?
Instead of emitting this everywhere something st...
Greg Shah
02:57 PM Feature #3751: implement support for OO 4GL and structured error handling
I've confirmed that the customer code works properly with my recent context-local static data changes. I have been a... Greg Shah
12:18 PM Feature #3751: implement support for OO 4GL and structured error handling
Ovidiu Maxiniuc wrote:
> Constantin Asofiei wrote:
> > I don't think we can use the JAVA_OBJECT type. If we are st...
Constantin Asofiei
12:17 PM Feature #3751: implement support for OO 4GL and structured error handling
Constantin Asofiei wrote:
> I don't think we can use the JAVA_OBJECT type. If we are storing an UUID, we can use VA...
Ovidiu Maxiniuc
10:37 AM Feature #3751: implement support for OO 4GL and structured error handling
Ovidiu Maxiniuc wrote:
> Constantin,
> I added the minimum necessary hibernate mappings so that the server that ru...
Constantin Asofiei
10:11 AM Feature #3751: implement support for OO 4GL and structured error handling
Constantin Asofiei wrote:
> Ovidiu, please focus on making this test work:
> [...]
> The idea here is that the FWD...
Ovidiu Maxiniuc
09:34 AM Feature #3751: implement support for OO 4GL and structured error handling
The static c'tor needs to emulate an external procedure and all static member initialization (like opening temp-table... Constantin Asofiei
03:24 AM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> > I need a way to intercept in FWD that this is a class reference and force it to load the static...
Constantin Asofiei
11:01 PM Feature #3751: implement support for OO 4GL and structured error handling
> the get() call is missing, to retrieve the context-local
Fixed in revision 11306. This is only an issue with va...
Greg Shah
08:44 PM Feature #3751: implement support for OO 4GL and structured error handling
Constantin Asofiei wrote:
> This method will be emitted as a prefix for any static call (method, property, var, etc)...
Constantin Asofiei
08:07 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg, I mean a simple static reference, outside of a 4GL object class, like:... Constantin Asofiei
07:52 PM Feature #3751: implement support for OO 4GL and structured error handling
Example:... Greg Shah

01/21/2019

06:22 PM Feature #3751: implement support for OO 4GL and structured error handling
Ovidiu, please focus on making this test work:... Constantin Asofiei
05:59 PM Feature #3751: implement support for OO 4GL and structured error handling
Eric, is there an easy way to track a DMO property setter (when is being invoked, knowing also the old value) and whe... Constantin Asofiei
04:13 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg, how does a simple static member reference get converted?
I ask because something as simple as @oo.Bar:e.@ wi...
Constantin Asofiei
04:02 PM Feature #3751: implement support for OO 4GL and structured error handling
In 3750b revision 11305, static variables, properties and events have their backing variable converted as a ContextLo... Greg Shah
12:13 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> I have noticed that when we create a default constructor, it is placed in a strange location in t...
Constantin Asofiei
11:42 AM Feature #3751: implement support for OO 4GL and structured error handling
I have noticed that when we create a default constructor, it is placed in a strange location in the AST:... Greg Shah
09:17 AM Feature #3751: implement support for OO 4GL and structured error handling
3750b rev 11302 has the fix for the static issue with events. It also fixes other latent problems with static proces... Greg Shah
07:40 AM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> BTW, this seems to be related to the use of @static@ for the @define event@. If not defined stat...
Constantin Asofiei

01/20/2019

03:06 PM Feature #3751: implement support for OO 4GL and structured error handling
BTW, this seems to be related to the use of @static@ for the @define event@. If not defined static then the unqualif... Greg Shah
03:01 PM Feature #3751: implement support for OO 4GL and structured error handling
It seems that our parsing of class event @subscribe()@ and @unsubscribe()@ does not work for the "simple" case of pas... Greg Shah

01/18/2019

06:51 PM Feature #3751: implement support for OO 4GL and structured error handling
FYI, the reference counting in the end depends on the variable scopes - a var going out of scope will decrement the c... Constantin Asofiei
11:22 AM Feature #3751: implement support for OO 4GL and structured error handling
> > I'm starting to work on the open issues related to methods (see #3751-360).
> I think we should fix the conversi...
Greg Shah
11:08 AM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> I'm starting to work on the open issues related to methods (see #3751-360).
I think we should fi...
Constantin Asofiei
11:02 AM Feature #3751: implement support for OO 4GL and structured error handling
I'm starting to work on the open issues related to methods (see #3751-360). Considering the interconnected nature of... Greg Shah
11:00 AM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> Constantin: What is the status of your current work?
I'm still working on the instantiation and ...
Constantin Asofiei
10:50 AM Feature #3751: implement support for OO 4GL and structured error handling
Constantin: What is the status of your current work? Greg Shah

01/17/2019

03:27 PM Feature #3855: implement equivalent support for REST (classic appserver, PASOE REST and WEB trans...
There are 2 ways to expose REST web services in the 4GL:
* Nasty Wizard Approach
** A development tool is used to...
Greg Shah

01/16/2019

07:42 PM Feature #3753: I18N additions
The @CURRENT-LANGUAGE@ implementation really should not be needed for the POC, since the default language's string co... Greg Shah

01/11/2019

12:04 PM Feature #3869: enhance JasperReports support with sub-reports and ProDataSets
For sub-reports see the discussion starting at #3342-77.
ProDataSet support seems like a natural enhancement. The...
Greg Shah
11:58 AM Feature #3869 (New): enhance JasperReports support with sub-reports and ProDataSets
Greg Shah
10:52 AM Feature #3868: customer servlet integration/support
A customer has multiple OpenEdge applications which have custom written servlets that use the Java open client to cal... Greg Shah
10:43 AM Feature #3868 (Closed): customer servlet integration/support
Greg Shah
10:29 AM Feature #3867: direct java class access from 4GL code
Does anyone see any additional problems or effort needed that I missed above? Greg Shah
10:28 AM Feature #3867: direct java class access from 4GL code
Once OO 4GL features are available, it is a natural extension to use the same syntax for Java class access. For exam... Greg Shah
10:14 AM Feature #3867 (Closed): direct java class access from 4GL code
Greg Shah

01/10/2019

10:26 AM Feature #3855 (New): implement equivalent support for REST (classic appserver, PASOE REST and WEB...
Greg Shah
09:51 AM Feature #3310: add support for the equivalent of the OpenEdge Web Services Adapter (and ProxyGen)...
We need to include the equivalent of SOAP transport for PASOE mode. I believe this is no different from the WSA in c... Greg Shah
09:43 AM Feature #2078 (Hold): provide support for malformed label names
Greg Shah
09:31 AM Feature #2078: provide support for malformed label names
The parser now handles a wide range of malformed symbols. These are marked with the "malformed" boolean annotation.
...
Greg Shah

01/09/2019

06:40 PM Feature #3854: update appserver support with PASOE features
PASOE is a Tomcat based alternative to appserver which is simplifies/improves the design.
Instead of the appserver...
Greg Shah
06:25 PM Feature #3854 (Closed): update appserver support with PASOE features
Greg Shah
06:22 PM Feature #3853: implement LOG-MANAGER runtime
Log Manager Usage
The base implementation is already handled at conversion and it is stubbed out in the runtime. ...
Greg Shah
06:13 PM Feature #3853 (WIP): implement LOG-MANAGER runtime
Greg Shah

01/07/2019

03:36 PM Feature #3751: implement support for OO 4GL and structured error handling
Code Review 3750a Revision 11444
I'm good with the changes.
Greg Shah
03:10 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> Are you asking if the @deleteScope()@ in this code should be moved to the exit action? I think t...
Constantin Asofiei
02:54 PM Feature #3751: implement support for OO 4GL and structured error handling
> shouldn't @pre_scan_class@ delete the class/iface scope after the rule has processed the class members?... Greg Shah
02:49 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg, let me rephrase this: shouldn't @pre_scan_class@ delete the class/iface scope after the rule has processed the ... Constantin Asofiei
02:00 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> @def_var_stmt@ doesn't support this today. It matches using @symbol@ which does not allow reserv...
Constantin Asofiei
01:56 PM Feature #3751: implement support for OO 4GL and structured error handling
All 4GL global var names can be used as class variables, properties and method names.
Only these global names can ...
Constantin Asofiei
01:56 PM Feature #3751: implement support for OO 4GL and structured error handling
@def_var_stmt@ doesn't support this today. It matches using @symbol@ which does not allow reserved keywords. If we ... Greg Shah
01:35 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> I assume you are thinking about the unqualified reference inside the class hierarchy.
No, I'm th...
Constantin Asofiei
01:32 PM Feature #3751: implement support for OO 4GL and structured error handling
Constantin Asofiei wrote:
> Greg, @User@ is a builtin variable in 4GL (and reserved kw), UNLESS is used as a class m...
Greg Shah
01:19 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg, @User@ is a builtin variable in 4GL (and reserved kw), UNLESS is used as a class member - can you recall me whe... Constantin Asofiei

01/03/2019

05:57 PM Feature #3751: implement support for OO 4GL and structured error handling
Constantin Asofiei wrote:
> Greg Shah wrote:
> > Is this an issue because we don't have ASTs to use for overloaded ...
Greg Shah
05:52 PM Feature #3751: implement support for OO 4GL and structured error handling
The following is a running list to keep track of the differences between Java and the OO 4GL support.
+Missing in ...
Greg Shah
05:45 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> Is this an issue because we don't have ASTs to use for overloaded method matching?
This is a c...
Constantin Asofiei
05:41 PM Feature #3751: implement support for OO 4GL and structured error handling
Constantin Asofiei wrote:
> Greg, there are errors like this:
> ...
Greg Shah
05:19 PM Feature #3751: implement support for OO 4GL and structured error handling
+Open Items+
This is in priority order.
* *CA WIP* Implement runtime for:
** -Instantiation of objects via the...
Greg Shah
03:28 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> 1. Can I consider "data members including instantiation, scoping and life cycle" to be complete?
...
Constantin Asofiei
03:11 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> 4. I'm guessing that in order to duplicate the flow of control for @CATCH@, we might need to move...
Constantin Asofiei
02:12 PM Feature #3751: implement support for OO 4GL and structured error handling
I think the built-in 4GL error classes need to inherit from @RuntimeException@. This will potentially cause an issue... Greg Shah
02:12 PM Feature #3751: implement support for OO 4GL and structured error handling
I'm updating the gap analysis rules for the new OO features. I'm also trying to plan out the remaining OO work. Som... Greg Shah
01:11 PM Feature #2135: implement COPY-LOB language statement
Constantin Asofiei wrote:
> Eric, is this @copy-lob from v1 to v2 overlay at idx.@ version of @COPY-LOB@ supported?
...
Eric Faulhaber

12/29/2018

02:46 PM Feature #3751: implement support for OO 4GL and structured error handling
Constantin Asofiei wrote:
> Greg, any idea what has changed, that now the builtin method names are all converted as ...
Constantin Asofiei
02:43 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg, any idea what has changed, that now the builtin method names are all converted as lowercase?... Constantin Asofiei
10:59 AM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> > second phase uses the arg modes, on the set of matches from previous step.
>
> Is there a 3r...
Constantin Asofiei
10:14 AM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> We "lose" overloading, but I don't think there is any loss of functionality. The only loss is of...
Constantin Asofiei
10:09 AM Feature #3751: implement support for OO 4GL and structured error handling
Other than the overloading signature erasure issue, is there anything else that needs attention today which you are n... Greg Shah
10:08 AM Feature #3751: implement support for OO 4GL and structured error handling
Should I look at the signature erasure issue? As you've noted in the testcases, we now have that issue with any sign... Greg Shah
10:01 AM Feature #3751: implement support for OO 4GL and structured error handling
> I'm not sure here if the match must be exact (without narrowing/widening checks) and how POLY interferes.
My pre...
Greg Shah
09:54 AM Feature #3751: implement support for OO 4GL and structured error handling
Code Review Task Branch 3750a Revision 11433
I'm good with the changes. @ParameterKey@ does need class javadoc, b...
Greg Shah
07:45 AM Feature #3751: implement support for OO 4GL and structured error handling
The two-phase fuzzy method matching is not complete yet; as I understand:
* first phase is matching without checking...
Constantin Asofiei
06:22 AM Feature #3751: implement support for OO 4GL and structured error handling
The OUTPUT and INPUT-OUTPUT cases are fixed in 3750a rev 11433 . Tests are in rev 1812 . Please review.
What is le...
Constantin Asofiei
05:30 AM Feature #3751: implement support for OO 4GL and structured error handling
Constantin Asofiei wrote:
> Another case we need to fix is the field reference for OUTPUT and INPUT-OUTPUT - current...
Constantin Asofiei
05:04 AM Feature #3751: implement support for OO 4GL and structured error handling
Another case we need to fix is the field reference for OUTPUT and INPUT-OUTPUT - currently we have only @HandleFieldR... Constantin Asofiei
03:20 AM Feature #3751: implement support for OO 4GL and structured error handling
*GES LE: I believe this table is incorrect based on my testing. The version that is correct can be found in #3751-49... Constantin Asofiei
12:22 AM Feature #3751: implement support for OO 4GL and structured error handling
Revision 11432:
Wrap property setter parameters when there would be a mis-match.
When multiply, plus and minus...
Greg Shah
07:10 PM Feature #3751: implement support for OO 4GL and structured error handling
#3751-338 fix is fixed now in 3750a 11431.
For #3751-337 - we need to change @SignatureKey@ to use a more complex ...
Constantin Asofiei

12/28/2018

06:57 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> Do you have any changes that aren't checked in?
Hm... something regressed my fix, I'll check it.
Constantin Asofiei
06:54 PM Feature #3751: implement support for OO 4GL and structured error handling
Constantin Asofiei wrote:
> So there is another level of fuzzy matching the arguments. It depends on the direction ...
Greg Shah
06:50 PM Feature #3751: implement support for OO 4GL and structured error handling
Constantin Asofiei wrote:
> Greg Shah wrote:
> > * *CA* Fix unknown value passed as an object reference. oo/Overloa...
Greg Shah
06:48 PM Feature #3751: implement support for OO 4GL and structured error handling
So there is another level of fuzzy matching the arguments. It depends on the direction of the data (sent or received... Constantin Asofiei
06:29 PM Feature #3751: implement support for OO 4GL and structured error handling
Constantin Asofiei wrote:
> But we still need to properly determine the method call target, when the POLY signature ...
Constantin Asofiei
06:19 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> * *CA* Fix unknown value passed as an object reference. oo/Overloads.cls line 268/269 can be used...
Constantin Asofiei
06:15 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> Is there anything else absolutely needed for tonight?
Yes, see #3750-220
Constantin Asofiei
06:13 PM Feature #3751: implement support for OO 4GL and structured error handling
> Fix unknown value passed as an object reference. oo/Overloads.cls line 268/269 can be used to test this case.
I ...
Greg Shah
06:01 PM Feature #3751: implement support for OO 4GL and structured error handling
Revision 11429 provides OO method EXTENT parameter support and minor fixes for OO method EXTENT return types.
It d...
Greg Shah
05:52 PM Feature #3751: implement support for OO 4GL and structured error handling
That makes sense, I've got it. Greg Shah
05:50 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> I see that for methods that have extent return types, if the extent is fixed, we are altering the...
Constantin Asofiei
05:42 PM Feature #3751: implement support for OO 4GL and structured error handling
I see that for methods that have extent return types, if the extent is fixed, we are altering the method name to add ... Greg Shah
05:35 PM Feature #3751: implement support for OO 4GL and structured error handling
I'm close to having the EXTENT changes ready. One problem I found is the fact that the 4GL treats the following as 2... Greg Shah
05:10 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> > But we still need to properly determine the method call target, when the POLY signature matches...
Constantin Asofiei
05:08 PM Feature #3751: implement support for OO 4GL and structured error handling
> But we still need to properly determine the method call target, when the POLY signature matches multiple targets. I... Greg Shah
05:04 PM Feature #3751: implement support for OO 4GL and structured error handling
All #3750-322 problems were exposed by a (now fixed - see 3750a rev 11428) abend with the root cause in @ClassDefinit... Constantin Asofiei
04:16 PM Feature #3751: implement support for OO 4GL and structured error handling
You've changed progress.g checks like:... Constantin Asofiei
04:08 PM Feature #3751: implement support for OO 4GL and structured error handling
3750a rev 11427 and testcases project rev 1811 has the changes for the BUFFER/TABLE method params and arguments, unkn... Constantin Asofiei
03:37 PM Feature #3751: implement support for OO 4GL and structured error handling
There is a case where we have a call like @dateMethod(h:buffer-value)@, and @dateMethod@ has 3 signatures, like:
<pr...
Constantin Asofiei
02:32 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> * Reduce the extra layer of wrapping for unknown value and for the widening conversions when pass...
Constantin Asofiei
01:36 PM Feature #3751: implement support for OO 4GL and structured error handling
Good point. We'll have to have a dual approach. Greg Shah
01:21 PM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> * *GES* Rework @ConvertedClassName@ to eliminate usage of @fname2jname@. The refid support is wor...
Constantin Asofiei
12:33 PM Feature #3751: implement support for OO 4GL and structured error handling
Assuming there are definitions like:... Constantin Asofiei
12:19 PM Feature #3751: implement support for OO 4GL and structured error handling
I've just committed some OO testcase changes in @testcases/uast/oo/@ as rev 1808. Greg Shah
11:18 AM Feature #3751: implement support for OO 4GL and structured error handling
Greg Shah wrote:
> *Constantin: Can you help me with the above items?* I've split up the first of the issues based ...
Constantin Asofiei
10:49 AM Feature #3751: implement support for OO 4GL and structured error handling
The following is the list of issues that still need to be resolved:
* -Add support for table and buffer parameters...
Greg Shah
11:09 PM Feature #3751: implement support for OO 4GL and structured error handling
Revision 11425: Rewrite of method resolution and related annotations to properly handle overloading and many of the p... Greg Shah
 

Also available in: Atom