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 Operators and Expressions"

 
(30 intermediate revisions by 6 users not shown)
Line 3: Line 3:
 
== Operators and expressions (Table 7)  ==
 
== Operators and expressions (Table 7)  ==
  
{| border="1" cellspacing="1" cellpadding="1" width="400"
+
{| cellspacing="1" cellpadding="1" border="1" style="width: 496px; height: 1035px"
 
|-
 
|-
 
| bgcolor="#999999" align="center" | '''''Operators and expressions<sup>1</sup>'''''  
 
| bgcolor="#999999" align="center" | '''''Operators and expressions<sup>1</sup>'''''  
Line 11: Line 11:
 
|-
 
|-
 
| bgcolor="#cccccc" | ''. (member access)''  
 
| bgcolor="#cccccc" | ''. (member access)''  
 +
| done<br>
 +
| done<br>
 
| done<br>
 
| done<br>
| <br>
 
| <br>
 
 
|-
 
|-
 
| bgcolor="#cccccc" | ''=''  
 
| bgcolor="#cccccc" | ''=''  
 +
| done<br>
 +
| done<br>
 
| done<br>
 
| done<br>
| <br>
 
| <br>
 
 
|-
 
|-
 
| bgcolor="#cccccc" | ''function invocation''  
 
| bgcolor="#cccccc" | ''function invocation''  
| <br>done
+
| <br>done  
| <br>
+
| done<br>  
| <br>
+
| done<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''new''  
 
| bgcolor="#cccccc" | ''new''  
 +
| done<br>
 +
| done<br>
 
| done<br>
 
| done<br>
| <br>
 
| <br>
 
 
|-
 
|-
 
| bgcolor="#cccccc" | ''{ } (set-values block)''  
 
| bgcolor="#cccccc" | ''{ } (set-values block)''  
| <br>done
+
| <br>done  
| <br>
+
| 0.5d<br>  
| <br>
+
| done<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''@''  
 
| bgcolor="#cccccc" | ''@''  
| <br>done
+
| <br>done  
| <br>
+
| done (no work for generators)<br>  
| <br>
+
| done (no work for generators)<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''[ ] (array access)''  
 
| bgcolor="#cccccc" | ''[ ] (array access)''  
| <br>done
+
| <br>done  
| <br>
+
| done<br>  
| <br>
+
| done<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''[ ] (dynamic access)''  
 
| bgcolor="#cccccc" | ''[ ] (dynamic access)''  
| done<br>
+
| done<br>  
| <br>
+
| 1d<br>  
| <br>
+
| done {{bug|353653}}<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''[ ] (substring)<sup>2</sup>''  
 
| bgcolor="#cccccc" | ''[ ] (substring)<sup>2</sup>''  
| 1d<br>
+
| done {{bug|354165}}<br>  
| <br>
+
| done<br>  
| <br>
+
| done<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''isa<sup>3</sup>''  
 
| bgcolor="#cccccc" | ''isa<sup>3</sup>''  
| <br>1d
+
| <br>done {{bug|354167}}
| <br>
+
| 1d<br>  
| <br>
+
| done {{bug|353654}}<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''as<sup>3</sup>''  
 
| bgcolor="#cccccc" | ''as<sup>3</sup>''  
| <br>see isa
+
| <br>done
| <br>
+
| done<br>  
| <br>
+
| done {{bug|353655}}<br>
 
|-
 
|-
| bgcolor="#cccccc" | ''unary (+ -&nbsp;! ~)<sup>4, 5</sup>''  
+
| bgcolor="#ffff00" | ''unary (~)<sup>4, 5</sup>''  
| <br>done
+
| bgcolor="#ffff00" | done&nbsp;
| <br>
+
| bgcolor="#ffff00" | done&nbsp;{{bug|366875}}<br>  
| <br>
+
| bgcolor="#ffff00" | done&nbsp;{{bug|366876}}<br>
 +
|-
 +
| bgcolor="#cccccc" | ''unary (+ -&nbsp;!)''
 +
| done
 +
| done
 +
| done
 
|-
 
|-
 
| bgcolor="#cccccc" | ''math (+ - * /&nbsp;% **)<sup>9</sup>''  
 
| bgcolor="#cccccc" | ''math (+ - * /&nbsp;% **)<sup>9</sup>''  
| <br>done
+
| <br>done  
| <br>
+
| 1d<br>  
| <br>
+
| done<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''assigning math (+= -= *= /=&nbsp;%= **=)<sup>9</sup>''  
 
| bgcolor="#cccccc" | ''assigning math (+= -= *= /=&nbsp;%= **=)<sup>9</sup>''  
| <br>done
+
| <br>done  
| <br>
+
| 0.5d<br>  
| <br>
+
| done<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''::''  
 
| bgcolor="#cccccc" | ''::''  
| <br>done
+
| <br>done  
| <br>
+
| 0.5d<br>  
| <br>
+
| done {{bug|353656}}<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''?:''  
 
| bgcolor="#cccccc" | ''?:''  
| <br>done
+
| <br>done  
| <br>
+
| 0.5d<br>  
| <br>
+
| done {{bug|353656}}<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''logical (And Or &amp;&amp; &#124;&#124;)''  
 
| bgcolor="#cccccc" | ''logical (And Or &amp;&amp; &#124;&#124;)''  
| <br>done
+
| <br>done  
| <br>
+
| done<br>  
| <br>
+
| done<br>
 
|-
 
|-
 
| bgcolor="#cccccc" | ''comparison (&lt; &gt; &lt;= &gt;= ==&nbsp;!=)''  
 
| bgcolor="#cccccc" | ''comparison (&lt; &gt; &lt;= &gt;= ==&nbsp;!=)''  
| <br>done
+
| <br>done  
| <br>
+
| 2d<br>  
| <br>
+
| 2d {{bug|353657}}<br>
 
|-
 
|-
| bgcolor="#cccccc" | ''bitwise (&amp; &#124; Xor &lt;&lt; &gt;&gt; &gt;&gt;&gt;)<sup>4, 5</sup>''  
+
| bgcolor="#cccccc" | ''bitwise (&amp; &#124; Xor)<sup>5</sup>''  
| <br>2d
+
| done
| <br>
+
| 0.5d<br>  
| <br>
+
| 0.25d {{bug|353658}}<br>
 
|-
 
|-
| bgcolor="#cccccc" | ''assigning bitwise (&amp;= &#124;= Xor= &lt;&lt;= &gt;&gt;= &gt;&gt;&gt;=)<sup>4, 5</sup>''  
+
| bgcolor="#cccccc" | ''assigning bitwise (&amp;= &#124;= Xor=)<sup>5</sup>''  
| <br>1d
+
| done
| <br>
+
| 0.5d<br>  
| <br>
+
| 0.5d {{bug|353658}}<br>
 
|-
 
|-
| bgcolor="#cccccc" | ''if-then-else'' (condition&nbsp;? val1&nbsp;: val2)''<sup>6</sup>''  
+
| bgcolor="#ffff00" | ''bit shifting (&lt;&lt; &gt;&gt; &gt;&gt;&gt; &lt;&lt;= &gt;&gt;= &gt;&gt;&gt;=)<sup>4,5</sup>''  
| <br>3d
+
| bgcolor="#ffff00" | done
| <br>
+
[https://bugs.eclipse.org/bugs/show_bug.cgi?id=352742 Validation needs to allow these operators]
| <br>
+
 
 +
| bgcolor="#ffff00" | &nbsp;done&nbsp;
 +
| bgcolor="#ffff00" | &nbsp;done&nbsp;
 
|-
 
|-
| bgcolor="#cccccc" | ''in<sup>7</sup>''  
+
| bgcolor="#ffff00" | ''in<sup>7</sup>''  
| 1d
+
| bgcolor="#ffff00" | 1d  
| N/S  
+
| bgcolor="#ffff00" | N/S  
| N/S
+
| bgcolor="#ffff00" | N/S
 
|-
 
|-
| bgcolor="#cccccc" | ''like matches<sup>8</sup>''  
+
| bgcolor="#ffff00" | ''like matches<sup>8</sup>''  
| <br>1d
+
| bgcolor="#ffff00" | <br>1d  
 +
| bgcolor="#ffff00" | done<br>(see [https://bugs.eclipse.org/bugs/show_bug.cgi?id=352939 IR bug])
 +
| bgcolor="#ffff00" | N/S
 +
|-
 +
| bgcolor="#cccccc" | ''is/not''
 +
| done
 
| N/S  
 
| N/S  
 
| N/S
 
| N/S
 +
|-
 +
| bgcolor="#ffff00" | ''Ternary Operator&nbsp;<br>(condition&nbsp;? val1&nbsp;: val2)<sup>6</sup><br>''
 +
| bgcolor="#ffff00" | 3d {{bug|366872}}<br>
 +
| bgcolor="#ffff00" | .5d {{bug|366873}}<br>
 +
| bgcolor="#ffff00" | .5d {{bug|366874}}<br>
 +
|-
 +
| bgcolor="#ffff00" |
 +
''Object Expression&nbsp;<br>{key&nbsp;: value, ''<br>''"key"&nbsp;: value}<sup>10</sup>''
 +
 +
| bgcolor="#ffff00" | done{{bug|366742}}<br>
 +
| bgcolor="#ffff00" | {{bug|366860}}<br>
 +
| bgcolor="#ffff00" | {{bug|366861}}<br>
 
|}
 
|}
  
'''Notes on Table 7'''<br>
+
'''Notes on Table 7'''<br>  
  
 
#We'll document error conditions of operators and expressions, and their resulting exceptions. Whenever possible this documentation will be comments in the EGL source file for a type.  
 
#We'll document error conditions of operators and expressions, and their resulting exceptions. Whenever possible this documentation will be comments in the EGL source file for a type.  
#<span style="background: #ffa500">Substrings are immutable, so they can't be the target of an assignment or the argument to an inout parameter.</span>  
+
#<span style="background: rgb(255,165,0)">Substrings are immutable, so they can't be the target of an assignment or the argument to an inout parameter.</span>  
#<span style="background: #ffa500">The type cannot be a nullable type. Nullability is not part of a type signature.</span>  
+
#<span style="background: rgb(255,165,0)">The type cannot be a nullable type. Nullability is not part of a type signature.</span>  
#There are new bitwise operators in EDT. ~ is a bitwise NOT (also called the compliment), &lt;&lt; is a left shift, &gt;&gt; is a right shift where the leftmost bits become zero, &gt;&gt;&gt; is a right shift where the sign is copied into the leftmost bits.  
+
#There are new bitwise operators in EDT. ~ is a bitwise NOT (also called the compliment), &lt;&lt; is a left shift, &gt;&gt;&gt; is a right shift where the leftmost bits become zero (logical), &gt;&gt; is a right shift where the sign is copied into the leftmost bits (arithmetic).  
#Bitwise operators are only supported on values of type int.  
+
#Bitwise operators are only supported on values of type int and smallint. &nbsp;
 
#The if-then-else operator is borrowed from languages like C and Java. The condition's type must be boolean. The two values must have the same type.  
 
#The if-then-else operator is borrowed from languages like C and Java. The condition's type must be boolean. The two values must have the same type.  
 
#We'll have functions in the array type to provide similar behavior.  
 
#We'll have functions in the array type to provide similar behavior.  
 
#We'll have functions in the string type to provide similar behavior.  
 
#We'll have functions in the string type to provide similar behavior.  
#Date/time math is not supported in EDT. Functions on the date and timestamp types provide similar behavior.
+
#Date/time math is not supported in EDT. Functions on the date and timestamp types provide similar behavior.
 +
#Object expression is borrowed from java script, which allows an object to be created "on the fly". The key can either be an ID or a string and the value can be any expression that is valid on the right hand side of an assignment.

Latest revision as of 11:30, 19 June 2012

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

Operators and expressions (Table 7)

Operators and expressions1 Core JavaScript Java
. (member access) done
done
done
= done
done
done
function invocation
done
done
done
new done
done
done
{ } (set-values block)
done
0.5d
done
@
done
done (no work for generators)
done (no work for generators)
[ ] (array access)
done
done
done
[ ] (dynamic access) done
1d
done bug 353653
[ ] (substring)2 done bug 354165
done
done
isa3
done bug 354167
1d
done bug 353654
as3
done
done
done bug 353655
unary (~)4, 5 done  done bug 366875
done bug 366876
unary (+ - !) done done done
math (+ - * / % **)9
done
1d
done
assigning math (+= -= *= /= %= **=)9
done
0.5d
done
::
done
0.5d
done bug 353656
?:
done
0.5d
done bug 353656
logical (And Or && ||)
done
done
done
comparison (< > <= >= == !=)
done
2d
2d bug 353657
bitwise (& | Xor)5 done 0.5d
0.25d bug 353658
assigning bitwise (&= |= Xor=)5 done 0.5d
0.5d bug 353658
bit shifting (<< >> >>> <<= >>= >>>=)4,5 done

Validation needs to allow these operators

 done   done 
in7 1d N/S N/S
like matches8
1d
done
(see IR bug)
N/S
is/not done N/S N/S
Ternary Operator 
(condition ? val1 : val2)6
3d bug 366872
.5d bug 366873
.5d bug 366874

Object Expression 
{key : value,

"key" : value}10

donebug 366742
bug 366860
bug 366861

Notes on Table 7

  1. We'll document error conditions of operators and expressions, and their resulting exceptions. Whenever possible this documentation will be comments in the EGL source file for a type.
  2. Substrings are immutable, so they can't be the target of an assignment or the argument to an inout parameter.
  3. The type cannot be a nullable type. Nullability is not part of a type signature.
  4. There are new bitwise operators in EDT. ~ is a bitwise NOT (also called the compliment), << is a left shift, >>> is a right shift where the leftmost bits become zero (logical), >> is a right shift where the sign is copied into the leftmost bits (arithmetic).
  5. Bitwise operators are only supported on values of type int and smallint.  
  6. The if-then-else operator is borrowed from languages like C and Java. The condition's type must be boolean. The two values must have the same type.
  7. We'll have functions in the array type to provide similar behavior.
  8. We'll have functions in the string type to provide similar behavior.
  9. Date/time math is not supported in EDT. Functions on the date and timestamp types provide similar behavior.
  10. Object expression is borrowed from java script, which allows an object to be created "on the fly". The key can either be an ID or a string and the value can be any expression that is valid on the right hand side of an assignment.

Back to the top