This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
lara:docs:specs3 [2017/06/02 15:16] joaobispo ['exit' Joinpoint in 'scope'/'body'] |
lara:docs:specs3 [2019/09/22 15:47] (current) |
||
---|---|---|---|
Line 14: | Line 14: | ||
===== Joinpoint Actions ===== | ===== Joinpoint Actions ===== | ||
- | (recommended syntax: $jp.exec <action_name>. Could it be $jp.action <action_name> instead?) | + | Previous syntax: |
+ | |||
+ | <code lara> | ||
+ | $jp.exec result : <action_name>; | ||
+ | </code> | ||
+ | |||
+ | |||
+ | New syntax: | ||
+ | |||
+ | <code lara> | ||
+ | var result = $jp.exec <action_name>; | ||
+ | </code> | ||
+ | |||
+ | If 'result' is a variable that already exists, 'var' can be omitted: | ||
+ | |||
+ | |||
+ | <code lara> | ||
+ | result = $jp.exec <action_name>; | ||
+ | </code> | ||
+ | |||
+ | The keyword '.exec' can be omitted if you prefix the name of the action with the target join point, and add parenthesis: | ||
+ | |||
+ | <code lara> | ||
+ | result = $jp.<action_name>(); | ||
+ | </code> | ||
+ | |||
+ | /* (recommended syntax: $jp.exec <action_name>. Could it be $jp.action <action_name> instead?) */ | ||
==== Default Actions ==== | ==== Default Actions ==== | ||
Line 32: | Line 58: | ||
===== Aspect Calls ===== | ===== Aspect Calls ===== | ||
- | (recommended syntax: var a = new Aspect(); call a;) | + | Previous syntax: |
+ | |||
+ | <code lara> | ||
+ | call result : AnAspect(); | ||
+ | </code> | ||
+ | |||
+ | |||
+ | New syntax: | ||
+ | |||
+ | <code lara> | ||
+ | var result = call AnAspect(); | ||
+ | </code> | ||
===== Tools ('run') ===== | ===== Tools ('run') ===== | ||
Line 65: | Line 103: | ||
Add joinpoints specifically for direct children selection. 'select function.stmt' selects all statements, 'select function.childStmt' selects only the direct children of the function. | Add joinpoints specifically for direct children selection. 'select function.stmt' selects all statements, 'select function.childStmt' selects only the direct children of the function. | ||
+ | |||
+ | |||
+ | /* | ||
+ | |||
==== Insert Order ==== | ==== Insert Order ==== | ||
Line 103: | Line 145: | ||
'after_1' | 'after_1' | ||
| | ||
+ | */ | ||
| | ||
+ | /* | ||
+ | |||
==== String Literals ==== | ==== String Literals ==== | ||
+ | |||
+ | |||
Currently, the preferred way to do String literals in LARA is to use quotes: | Currently, the preferred way to do String literals in LARA is to use quotes: | ||
Line 116: | Line 163: | ||
We can 1) normalize on the LARAC side and escape the quote or 2) identify the type of String (' or ") and generate code accordingly | We can 1) normalize on the LARAC side and escape the quote or 2) identify the type of String (' or ") and generate code accordingly | ||
+ | */ | ||
==== 'exit' Joinpoint in 'scope'/'body' ==== | ==== 'exit' Joinpoint in 'scope'/'body' ==== | ||
Line 129: | Line 176: | ||
==== Insert Begin/End in 'scope'/'body' ==== | ==== Insert Begin/End in 'scope'/'body' ==== | ||
+ | |||
+ | Joinpoint 'scope' is being used in Clava as the base joinpoint for the 'body' joinpoint. While $body.insert before/after conceptually inserts before/after the first/last statement of the body, when it is a 'scope' we want to be able to insert before/after it. | ||
+ | |||
+ | |||
+ | === *Tentative Solution* === | ||
+ | |||
+ | $scope.insert before/after inserts before/after the scope, as expected. Add two new actions, insertBegin and insertEnd, that behaves like $body.insert before/after. | ||
+ | |||
+ | If 'body' is also used as an alias of 'scope', for compatibility reasons, $body.insert before/after must continue to be supported. 'scope' can detect if it is being used as a 'body', and in case of insert before/after, issue a warning telling that insertBegin/End should be used instead. | ||
+ |