Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "EDT:EGL Language Statements"

 
(9 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 
Please see the parent of this page, [[EDT:EGL Language]].  
 
Please see the parent of this page, [[EDT:EGL Language]].  
 +
 +
<br>
  
 
== Statements (Table 5)  ==
 
== Statements (Table 5)  ==
Line 35: Line 37:
 
| done<br>
 
| done<br>
 
|-
 
|-
| bgcolor="#cccccc" | ''Move<sup>1</sup>''  
+
| bgcolor="#ffff00" | ''Move<sup>1</sup>''  
| <br>done {{bug|354164}}  
+
| bgcolor="#ffff00" | <br>done {{bug|354164}}  
| 2d<br>  
+
| bgcolor="#ffff00" | 2d<br>  
| 2d {{bug|353670}}<br>
+
| bgcolor="#ffff00" | 2d {{bug|353670}}<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''Return''  
 
| bgcolor="#cccccc" | ''Return''  
Line 48: Line 50:
 
| <br>done  
 
| <br>done  
 
|  
 
|  
[https://bugs.eclipse.org/bugs/show_bug.cgi?id=352780 JS:Function Invocation tests]<br>  
+
done<br><br>Synchronous service invocation
  
Synchronous service invocation
+
<br>
  
 
|  
 
|  
 
REST Service invocation<br>  
 
REST Service invocation<br>  
  
*XML Conversion {{bug|351892}}(3d)<br>  
+
<br>
*<strike>JSON Conversion {{bug|352581}}(3d)</strike><br>  
+
 
 +
*XML Conversion {{bug|351892}}(3d)<br>
 +
 
 +
*<strike>JSON Conversion {{bug|352581}}(3d)</strike><br>
 +
 
 
*invocation gen/rt {{bug|352588}}(10d)
 
*invocation gen/rt {{bug|352588}}(10d)
  
 
<span style="background: none repeat scroll 0% 0% rgb(255, 255, 0);">SOAP Service invocation {{bug|352590}}(3d)</span>  
 
<span style="background: none repeat scroll 0% 0% rgb(255, 255, 0);">SOAP Service invocation {{bug|352590}}(3d)</span>  
 +
 +
<br>
  
 
|-
 
|-
Line 67: Line 75:
 
REST Service invocation  
 
REST Service invocation  
  
*XML Conversion {{bug|346138}}(3d)  
+
<br>
*JSON Conversion {{bug|346144}}(1d)  
+
 
 +
*XML Conversion {{bug|346138}}(3d)
 +
 
 +
*JSON Conversion {{bug|346144}}(1d)
 +
 
 
*invocation gen/rt {{bug|346144}}(2d)<br>
 
*invocation gen/rt {{bug|346144}}(2d)<br>
  
 
<span style="background: none repeat scroll 0% 0% rgb(255, 255, 0);">SOAP Service invocation {{bug|352591}}(3d)</span><br>Dedicated service invocation {{bug|352592}}(3d)<br>Proxy {{bug|346145}}(1d)<br>  
 
<span style="background: none repeat scroll 0% 0% rgb(255, 255, 0);">SOAP Service invocation {{bug|352591}}(3d)</span><br>Dedicated service invocation {{bug|352592}}(3d)<br>Proxy {{bug|346145}}(1d)<br>  
 +
 +
<br>
  
 
| <span style="background: none repeat scroll 0% 0% rgb(255, 255, 0);">5d {{bug|353672}}</span><br>
 
| <span style="background: none repeat scroll 0% 0% rgb(255, 255, 0);">5d {{bug|353672}}</span><br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''Label''  
 
| bgcolor="#cccccc" | ''Label''  
| done (remove label field from ConditionalStatement)<br>{{bug|354163}}
+
| done<br>  
 
| done<br>  
 
| done<br>  
 
| done<br>
 
| done<br>
Line 87: Line 101:
 
| bgcolor="#cccccc" | ''Throw''  
 
| bgcolor="#cccccc" | ''Throw''  
 
| <br>done  
 
| <br>done  
| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=352140 JS:Throws]0.2d<br>  
+
| done<br>  
 
| done<br>
 
| done<br>
 
|-
 
|-
Line 97: Line 111:
 
| bgcolor="#cccccc" | ''Case''  
 
| bgcolor="#cccccc" | ''Case''  
 
| <br>done  
 
| <br>done  
| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=352031 JS: Case]0.2d<br>  
+
| done<br>  
 
| (preprocessor doesn't pass case statement, it breaks into a series of IF statements) - no work needed<br>
 
| (preprocessor doesn't pass case statement, it breaks into a series of IF statements) - no work needed<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''If''  
 
| bgcolor="#cccccc" | ''If''  
 
| <br>done  
 
| <br>done  
| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=352028 JS: If ]0.1d<br>  
+
| done<br>  
 
| done<br>
 
| done<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''While''  
 
| bgcolor="#cccccc" | ''While''  
 
| done<br>  
 
| done<br>  
| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=352029 JS: While]0.2d<br>
+
| done
 
| done<br>
 
| done<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''For''  
 
| bgcolor="#cccccc" | ''For''  
 
| done<br>  
 
| done<br>  
| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=352030 <strike>JS:For</strike>]<strike>0.2d</strike><br>done for 0.7.0<br>  
+
| done<br>  
 
| done<br>
 
| done<br>
 
|-
 
|-
Line 121: Line 135:
 
|-
 
|-
 
| bgcolor="#ffff00" | ''Foreach (array)<sup>3</sup>''  
 
| bgcolor="#ffff00" | ''Foreach (array)<sup>3</sup>''  
| bgcolor="#ffff00" | 1d<br>  
+
| bgcolor="#ffff00" | done {{bug|366884}}<br>  
 
| bgcolor="#ffff00" | [https://bugs.eclipse.org/bugs/show_bug.cgi?id=352030 JS: Foreach]0.1d<br>  
 
| bgcolor="#ffff00" | [https://bugs.eclipse.org/bugs/show_bug.cgi?id=352030 JS: Foreach]0.1d<br>  
| bgcolor="#ffff00" | 0.5d<br>
+
| bgcolor="#ffff00" | 0.5d {{bug|366883}}<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''Exit<sup>5</sup>''  
 
| bgcolor="#cccccc" | ''Exit<sup>5</sup>''  
Line 132: Line 146:
 
| bgcolor="#cccccc" | ''Continue''  
 
| bgcolor="#cccccc" | ''Continue''  
 
| <br>done  
 
| <br>done  
| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=352139 <strike>JS: Continue</strike>]<strike>0.1d</strike><br><strike></strike>done<br>  
+
| <br><strike></strike>done<br>  
 
| done<br>
 
| done<br>
 
|-
 
|-
Line 170: Line 184:
 
| 1d {{bug|353671}}<br>
 
| 1d {{bug|353671}}<br>
 
|-
 
|-
| bgcolor="#ffff00" | ''Prepare''  
+
| bgcolor="#cccccc" | ''Prepare''  
| bgcolor="#ffff00" | done?<br>  
+
| done<br>  
| bgcolor="#ffff00" | N/S<br>  
+
| N/S<br>  
| bgcolor="#ffff00" | 1d<br>
+
| done<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''Open''  
 
| bgcolor="#cccccc" | ''Open''  
Line 228: Line 242:
 
'''Notes on Table 5'''<br>  
 
'''Notes on Table 5'''<br>  
  
#EDT won't support every variation of RBD's move statement. There will be support for '''move byName''', '''move for''', and '''move for all'''. A move statement without one of the additional keywords is only allowed between two references, and it results in the target being assigned a copy of the source's value. If/when we support structured records, we might not support '''move byName''' on them because of the complex (unclean) design.  
+
<br>
 +
 
 +
#EDT won't support every variation of RBD's move statement. There will be support for '''move byName''', '''move for''', and '''move for all'''. A move statement without one of the additional keywords is only allowed between two reference variables of the same type, and it results in the target being assigned a deep copy of the source's value. The deep copy is invalid for JavaObject and JavaScriptObject ExternalTypes. If/when we support structured records, we might not support '''move byName''' on them because of the complex (unclean) design.  
 
#EDT doesn't have called programs, but services and native programs can be called.  
 
#EDT doesn't have called programs, but services and native programs can be called.  
 
#<span style="background: none repeat scroll 0% 0% rgb(255, 165, 0);">EDT's foreach statement will support iterating over an array.</span>  
 
#<span style="background: none repeat scroll 0% 0% rgb(255, 165, 0);">EDT's foreach statement will support iterating over an array.</span>  
Line 235: Line 251:
 
#See the discussion of nullability below.<br>  
 
#See the discussion of nullability below.<br>  
 
#See the discussion of array declarations below.<br>
 
#See the discussion of array declarations below.<br>
 +
 +
<br>
  
 
<br>  
 
<br>  
Line 240: Line 258:
 
=== Nullability<br>  ===
 
=== Nullability<br>  ===
  
Variables may be declared with a question mark following the name of the type to indicate that they're nullable. <span style="background: none repeat scroll 0% 0% rgb(255, 165, 0);">Nullability means that a variable may really be null. It's not an "I'm null" flag like in RBD.&nbsp; Even reference variables may be nullable.</span><br>  
+
Variable declarations, function parameters, and function return types may end with a question mark to indicate that they're nullable. <span style="background: none repeat scroll 0% 0% rgb(255, 165, 0);">Nullability means that a variable may really be null. It's not an "I'm null" flag like in RBD.&nbsp; Even reference variables can be nullable.</span><br>  
  
<span style="background: none repeat scroll 0% 0% rgb(255, 165, 0);">A NullValueException will be thrown if you try to access a field or function of a null variable, even a record. A NullValueException will be thrown if a null variable is an operand to a math operator, an array access, a substring access, a comparison, or a bitwise operator.</span> The string concatenation operators will work the same as in RBD with respect to nulls.&nbsp;:: treats null as the empty string, and&nbsp;?: results in null if either operand is null. <span style="background: none repeat scroll 0% 0% rgb(255, 165, 0);">A question mark won't be allowed on the second operand of the AS and ISA operators (the name of the type).</span><br>  
+
<br> <span style="background: none repeat scroll 0% 0% rgb(255, 165, 0);">A NullValueException will be thrown if you try to access a field or function of a null variable, even a record. A NullValueException will be thrown if a null variable is an operand to a math operator, an array access, a substring access, a comparison, or a bitwise operator.</span> The string concatenation operators will work the same as in RBD with respect to nulls.&nbsp;:: treats null as the empty string, and&nbsp;?: results in null if either operand is null. <span style="background: none repeat scroll 0% 0% rgb(255, 165, 0);">A question mark won't be allowed on the second operand of the AS and ISA operators (the name of the type).</span><br>  
  
<span style="background: none repeat scroll 0% 0% rgb(255, 165, 0);">A validation check will ensure that things which can't be instantiated (interfaces, and types with private default constructors) must be declared nullable. Constructors can be defined in ExternalTypes and handlers.</span>
+
<br> <span style="background: none repeat scroll 0% 0% rgb(255, 165, 0);">A validation check will ensure that things which can't be instantiated (interfaces, and types with private default constructors) must be declared nullable. Constructors can be defined in ExternalTypes and handlers.</span>  
  
<span style="background: none repeat scroll 0% 0% rgb(255, 165, 0);">You can't assign null to something that's not nullable.&nbsp; We'll give a validation error on notNullableVariable = null; and a runtime error on notNullableVariable = nullableVariable; when the nullableVariable is null.</span><br>  
+
<br> <span style="background: none repeat scroll 0% 0% rgb(255, 165, 0);">You can't assign null to something that's not nullable.&nbsp; We'll give a validation error on notNullableVariable = null; and a runtime error on notNullableVariable = nullableVariable; when the nullableVariable is null.</span><br>
 +
 
 +
<br>  
  
 
=== Array Declarations<br>  ===
 
=== Array Declarations<br>  ===
Line 254: Line 274:
 
<span style="background: none repeat scroll 0% 0% rgb(255, 165, 0);">Arrays can't be declared with an initial size.</span> The size of an array isn't part of its type. That's why in RBD you can declare an int[5] and then assign [1,2,3] to it -- you change its length from 5 to 3. In EDT, all arrays must be declared without an initial size.  
 
<span style="background: none repeat scroll 0% 0% rgb(255, 165, 0);">Arrays can't be declared with an initial size.</span> The size of an array isn't part of its type. That's why in RBD you can declare an int[5] and then assign [1,2,3] to it -- you change its length from 5 to 3. In EDT, all arrays must be declared without an initial size.  
  
A size is still allowed on a new expression when you create an array.  
+
<br> A size is still allowed on a new expression when you create an array.  
  
Here are some example array declarations for EDT:  
+
<br> Here are some example array declarations for EDT:  
 +
 
 +
<br>
 +
 
 +
*a int[] = new int[3];
 +
 
 +
*a int[] = [1, 2, 3];
 +
 
 +
*a int[]; // This is an array of length zero.
 +
 
 +
*a int[]?; // Initially null.
  
*a int[] = new int[3];
 
*a int[] = [1, 2, 3];
 
*a int[]; // This is an array of length zero.
 
*a int[]?; // Initially null.
 
 
*a int[]? {}; // This is an array of length zero.
 
*a int[]? {}; // This is an array of length zero.
  
Line 267: Line 293:
  
 
Array initializers must be efficient. "a int[] = [1, 2, 3];" means make an array of three elements, values 1 then 2 then 3. Do not make a zero-length array, then make an array from the literal, and throw away the original zero-length array.  
 
Array initializers must be efficient. "a int[] = [1, 2, 3];" means make an array of three elements, values 1 then 2 then 3. Do not make a zero-length array, then make an array from the literal, and throw away the original zero-length array.  
 +
 +
<br>
  
 
==== Initializing arrays with set-values blocks  ====
 
==== Initializing arrays with set-values blocks  ====
  
 
<span style="background: none repeat scroll 0% 0% rgb(255, 165, 0);">A set-values block on an array declaration causes the values within the block to be appended to the array. For example "a int[] { 1, 2, 3 };" results in [1, 2, 3].</span> The block has a different effect in RBD: it sets elements rather than appending them, so you'd get an index out of bounds exception on the declaration "a int[] { 1, 2, 3 };".
 
<span style="background: none repeat scroll 0% 0% rgb(255, 165, 0);">A set-values block on an array declaration causes the values within the block to be appended to the array. For example "a int[] { 1, 2, 3 };" results in [1, 2, 3].</span> The block has a different effect in RBD: it sets elements rather than appending them, so you'd get an index out of bounds exception on the declaration "a int[] { 1, 2, 3 };".

Latest revision as of 16:31, 4 May 2012

Please see the parent of this page, EDT:EGL Language.


Statements (Table 5)

Statements Core JavaScript Java
Variable declaration (including nullability6 and array declarations7)

done
done
done
Annotations before declarations4 6d none none
Const declaration
done
done
done
Use
done
done
Assignment done
done
done
Move1
done bug 354164
2d
2d bug 353670
Return
done
done
(see Function invocation below)
done
Function invocation
done

done

Synchronous service invocation


REST Service invocation


SOAP Service invocation bug 352590(3d)


Call2
done

REST Service invocation


SOAP Service invocation bug 352591(3d)
Dedicated service invocation bug 352592(3d)
Proxy bug 346145(1d)


5d bug 353672
Label done
done
done
Transfer
done
N/S
1d
Throw
done
done
done
Try done
done
done
Case
done
done
(preprocessor doesn't pass case statement, it breaks into a series of IF statements) - no work needed
If
done
done
done
While done
done done
For done
done
done
Foreach (SQL) done N/S 0.5d bug 353671
Foreach (array)3 done bug 366884
JS: Foreach0.1d
0.5d bug 366883
Exit5
done
done
done
Continue
done

done
done
Empty statement (a semicolon) done
done
done
Add done
N/S
1d bug 353671
Close done
N/S
0.5d bug 353671
Delete
done
N/S
1d bug 353671
Get done
N/S
2d bug 353671
Replace
done
N/S
2d bug 353671
Execute done?
N/S
1d bug 353671
Prepare done
N/S
done
Open
done?
N/S
2d bug 353671
FreeSQL
done?
N/S
0.5d
Goto

done
N/S N/S
Set

done
N/S N/S
Converse
done
N/S N/S
Display
done
N/S N/S
Print
done
N/S N/S
Forward

done
N/S N/S
Show

done
N/S N/S
OpenUI

done
N/S N/S

Notes on Table 5


  1. EDT won't support every variation of RBD's move statement. There will be support for move byName, move for, and move for all. A move statement without one of the additional keywords is only allowed between two reference variables of the same type, and it results in the target being assigned a deep copy of the source's value. The deep copy is invalid for JavaObject and JavaScriptObject ExternalTypes. If/when we support structured records, we might not support move byName on them because of the complex (unclean) design.
  2. EDT doesn't have called programs, but services and native programs can be called.
  3. EDT's foreach statement will support iterating over an array.
  4. New syntax will allow setting annotations on declarations without the use of curly braces. In RBD we usually do x int {myAnnotation = 3}; but another way to do the same thing is x int {@myAnnotation{3}};. In EDT we will allow that to be outside of curly braces and before the declaration, for example @myAnnotation{3} x int;.
  5. EDT won't support exit stack.
  6. See the discussion of nullability below.
  7. See the discussion of array declarations below.



Nullability

Variable declarations, function parameters, and function return types may end with a question mark to indicate that they're nullable. Nullability means that a variable may really be null. It's not an "I'm null" flag like in RBD.  Even reference variables can be nullable.


A NullValueException will be thrown if you try to access a field or function of a null variable, even a record. A NullValueException will be thrown if a null variable is an operand to a math operator, an array access, a substring access, a comparison, or a bitwise operator. The string concatenation operators will work the same as in RBD with respect to nulls. :: treats null as the empty string, and ?: results in null if either operand is null. A question mark won't be allowed on the second operand of the AS and ISA operators (the name of the type).


A validation check will ensure that things which can't be instantiated (interfaces, and types with private default constructors) must be declared nullable. Constructors can be defined in ExternalTypes and handlers.


You can't assign null to something that's not nullable.  We'll give a validation error on notNullableVariable = null; and a runtime error on notNullableVariable = nullableVariable; when the nullableVariable is null.


Array Declarations

Arrays can't be declared with an initial size

Arrays can't be declared with an initial size. The size of an array isn't part of its type. That's why in RBD you can declare an int[5] and then assign [1,2,3] to it -- you change its length from 5 to 3. In EDT, all arrays must be declared without an initial size.


A size is still allowed on a new expression when you create an array.


Here are some example array declarations for EDT:


  • a int[] = new int[3];
  • a int[] = [1, 2, 3];
  • a int[]; // This is an array of length zero.
  • a int[]?; // Initially null.
  • a int[]? {}; // This is an array of length zero.

Initializing arrays with literals

Array initializers must be efficient. "a int[] = [1, 2, 3];" means make an array of three elements, values 1 then 2 then 3. Do not make a zero-length array, then make an array from the literal, and throw away the original zero-length array.


Initializing arrays with set-values blocks

A set-values block on an array declaration causes the values within the block to be appended to the array. For example "a int[] { 1, 2, 3 };" results in [1, 2, 3]. The block has a different effect in RBD: it sets elements rather than appending them, so you'd get an index out of bounds exception on the declaration "a int[] { 1, 2, 3 };".

Back to the top