<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8054077600937508922</id><updated>2011-12-19T12:30:56.761-08:00</updated><title type='text'>Sergey Antonov Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-8102512749620340075</id><published>2011-12-19T12:28:00.001-08:00</published><updated>2011-12-19T12:30:57.035-08:00</updated><title type='text'>Moscow and SAP</title><content type='html'>Now, working in Moscow.&lt;br /&gt;SAP, ABAP, JAVA, Javascript, VBA.&lt;br /&gt;&lt;br /&gt;P.S. at night I'm working on YAR.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-8102512749620340075?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/8102512749620340075/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=8102512749620340075' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/8102512749620340075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/8102512749620340075'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2011/12/moscow-and-sap.html' title='Moscow and SAP'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-7538837698770878893</id><published>2011-04-16T04:11:00.000-07:00</published><updated>2011-04-16T04:13:52.709-07:00</updated><title type='text'>Working on function inlining</title><content type='html'>Working on function inlining&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-7538837698770878893?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/7538837698770878893/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=7538837698770878893' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/7538837698770878893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/7538837698770878893'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2011/04/working-on-function-inlining.html' title='Working on function inlining'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-1232319244203789247</id><published>2011-02-24T05:16:00.000-08:00</published><updated>2011-02-24T05:25:58.762-08:00</updated><title type='text'>Parallel front-end, Units and other tasks</title><content type='html'>Now working on 5 tasks&lt;br /&gt;&lt;br /&gt;1. Support Units.&lt;br /&gt;2. Forward types using without predeclaring. &lt;br /&gt;3. Cross units references resolving with cycles too.&lt;br /&gt;4. Parallel front-end to process units simultaneously.&lt;br /&gt;5. Extend .NET back-end to support units.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-1232319244203789247?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/1232319244203789247/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=1232319244203789247' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/1232319244203789247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/1232319244203789247'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2011/02/tasks.html' title='Parallel front-end, Units and other tasks'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-7600227715483555696</id><published>2011-02-03T21:45:00.000-08:00</published><updated>2011-02-04T01:06:51.725-08:00</updated><title type='text'>Changes to POINTERMATH</title><content type='html'>Now the operator[] of typed pointer returns the dereferenced pointer to type(ref to value).&lt;br /&gt;&lt;br /&gt;Thanks to DiamondShark.&lt;br /&gt;&lt;br /&gt;A sample &lt;br /&gt;&lt;br /&gt;program myprogram;&lt;br /&gt;&lt;br /&gt;procedure pf &lt; T&gt; (cnt:integer);&lt;br /&gt;p:pointer;&lt;br /&gt;ptype:^T;&lt;br /&gt;valueA:T;&lt;br /&gt;i:integer;&lt;br /&gt;begin&lt;br /&gt;GetMem(p,cnt*sizeof(T));&lt;br /&gt;ptype:=p;&lt;br /&gt;for i:=0 to cnt-1 do ptype[i]:=valueA;&lt;br /&gt;FreeMem(p);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;pf &lt; boolean&gt; (100);&lt;br /&gt;pf &lt; integer&gt; (200);&lt;br /&gt;pf &lt; double&gt; (300);&lt;br /&gt;end&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-7600227715483555696?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/7600227715483555696/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=7600227715483555696' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/7600227715483555696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/7600227715483555696'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2011/02/changes-to-pointe-rmath.html' title='Changes to POINTERMATH'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-1931307828676478128</id><published>2011-02-02T05:49:00.000-08:00</published><updated>2011-02-03T00:42:05.329-08:00</updated><title type='text'>Getmem, Freemem, Pointer math</title><content type='html'>YAR language is enhanced by supporting Getmem, Freemem and pointer math.&lt;br /&gt;Sample&lt;br /&gt;&lt;br /&gt;program myprogram;&lt;br /&gt;&lt;br /&gt;procedure dosample();&lt;br /&gt;p:pointer;&lt;br /&gt;pinteger:^integer;&lt;br /&gt;i:integer;&lt;br /&gt;begin&lt;br /&gt;GetMem(p,400);&lt;br /&gt;pinteger:=p;&lt;br /&gt;for i:=0 to 99 do pinteger[i]^:=i;&lt;br /&gt;for i:=0 to 99 do write pinteger[i]^;&lt;br /&gt;FreeMem(p);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;dosample();&lt;br /&gt;end&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-1931307828676478128?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/1931307828676478128/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=1931307828676478128' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/1931307828676478128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/1931307828676478128'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2011/02/getmem-freemem-pointer-math.html' title='Getmem, Freemem, Pointer math'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-5127980617791894146</id><published>2011-01-25T05:47:00.000-08:00</published><updated>2011-01-25T05:50:47.062-08:00</updated><title type='text'>YARCC in the wild</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_fwEi4kRA5N0/TT7VLIJCSwI/AAAAAAAAABE/VAEzHjBYRjE/s1600/yarccWild.bmp"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 162px;" src="http://3.bp.blogspot.com/_fwEi4kRA5N0/TT7VLIJCSwI/AAAAAAAAABE/VAEzHjBYRjE/s320/yarccWild.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5566120576617171714" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-5127980617791894146?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/5127980617791894146/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=5127980617791894146' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/5127980617791894146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/5127980617791894146'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2011/01/yarcc-in-wild.html' title='YARCC in the wild'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fwEi4kRA5N0/TT7VLIJCSwI/AAAAAAAAABE/VAEzHjBYRjE/s72-c/yarccWild.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-6623893769483915263</id><published>2011-01-24T04:22:00.000-08:00</published><updated>2011-01-24T04:48:40.814-08:00</updated><title type='text'>Mutable string and pinned managed objects</title><content type='html'>Added String type to YAR &lt;br /&gt;&lt;br /&gt;sample&lt;br /&gt;&lt;br /&gt;program myprogram;&lt;br /&gt;&lt;br /&gt;procedure abc();&lt;br /&gt;a:string;&lt;br /&gt;i:integer;&lt;br /&gt;begin&lt;br /&gt;a:='abcdefghij';&lt;br /&gt;for i:=0 to a.length()-1 do a[i]:='1';&lt;br /&gt;write a;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;abc();&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;=&gt;&lt;br /&gt;&lt;br /&gt;.assembly extern mscorlib { auto }&lt;br /&gt;.assembly project {}&lt;br /&gt;.method public static void main() cil managed&lt;br /&gt;{&lt;br /&gt;.entrypoint&lt;br /&gt;call void abc()&lt;br /&gt;ret&lt;br /&gt;}&lt;br /&gt;.method public static void abc() cil managed&lt;br /&gt;{&lt;br /&gt;.locals init(int32 _autoname0,string pinned a,int32 i)&lt;br /&gt;ldstr "abcdefghij"&lt;br /&gt;stloc  a&lt;br /&gt;ldc.i4  0&lt;br /&gt;stloc  i&lt;br /&gt;ldloc  a&lt;br /&gt;callvirt   instance int32 [mscorlib]System.String::get_Length()&lt;br /&gt;ldc.i4  1&lt;br /&gt;sub&lt;br /&gt;stloc  _autoname0&lt;br /&gt;Label0:&lt;br /&gt;ldloc  i&lt;br /&gt;ldloc  _autoname0&lt;br /&gt;cgt&lt;br /&gt;brtrue Label1&lt;br /&gt;ldloc  a&lt;br /&gt;conv.i&lt;br /&gt;call int32 [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::get_OffsetToStringData()&lt;br /&gt;add&lt;br /&gt;ldloc  i&lt;br /&gt;ldc.i4  2&lt;br /&gt;mul&lt;br /&gt;add&lt;br /&gt;conv.i&lt;br /&gt;ldc.i4  49&lt;br /&gt;stobj char&lt;br /&gt;ldloc  i&lt;br /&gt;ldc.i4  1&lt;br /&gt;add&lt;br /&gt;stloc  i&lt;br /&gt;br Label0&lt;br /&gt;Label1:&lt;br /&gt;ldloc  a&lt;br /&gt;call void [mscorlib]System.Console::Write(string)&lt;br /&gt;ret&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-6623893769483915263?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/6623893769483915263/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=6623893769483915263' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/6623893769483915263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/6623893769483915263'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2011/01/mutable-string-and-pinned-managed.html' title='Mutable string and pinned managed objects'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-7264661016503230344</id><published>2010-12-22T22:42:00.000-08:00</published><updated>2010-12-22T22:51:12.481-08:00</updated><title type='text'>YAR: Added explicit type cast</title><content type='html'>a:integer;&lt;br /&gt;d:double;&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;...&lt;br /&gt;d:=a;          //Implicit&lt;br /&gt;d:=double(a);  //Explicit&lt;br /&gt;&lt;br /&gt;But! I am still thinking about the syntax for declaring new implicit or explicit operators: Delphi or Free Pascal like. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-7264661016503230344?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/7264661016503230344/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=7264661016503230344' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/7264661016503230344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/7264661016503230344'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/12/yar-added-explicit-type-cast.html' title='YAR: Added explicit type cast'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-2054217859035327902</id><published>2010-12-22T00:47:00.000-08:00</published><updated>2010-12-22T00:55:40.908-08:00</updated><title type='text'>YAR: Enhance syntax of  [ ] array operator</title><content type='html'>Now support [.. , ..]&lt;br /&gt;&lt;br /&gt;A sample&lt;br /&gt;&lt;br /&gt;integerarrarr:Myrecord[6][3][5][3][3][6];&lt;br /&gt;&lt;br /&gt;integerarrarr[1,1,2][1][1,2].c[1]:=abc().a;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-2054217859035327902?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/2054217859035327902/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=2054217859035327902' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/2054217859035327902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/2054217859035327902'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/12/yar-enhance-syntax-of-array-operator.html' title='YAR: Enhance syntax of  [ ] array operator'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-8126577367130184976</id><published>2010-12-07T12:34:00.000-08:00</published><updated>2010-12-07T12:36:34.394-08:00</updated><title type='text'>YAR and static arrays</title><content type='html'>Working on support static arrays in YAR.&lt;br /&gt;The shortest sample &lt;br /&gt;&lt;br /&gt;program Helloworld;&lt;br /&gt;&lt;br /&gt;integerarr:integer[6];&lt;br /&gt;&lt;br /&gt;begin &lt;br /&gt;integerarr[2]:=1;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;=&gt;&lt;br /&gt;&lt;br /&gt;.assembly extern mscorlib { auto }&lt;br /&gt;.assembly project {}&lt;br /&gt;.field public static int32* integerarr&lt;br /&gt;&lt;br /&gt;.method static public void main() cil managed&lt;br /&gt;{&lt;br /&gt;.entrypoint&lt;br /&gt;ldc.i4 28&lt;br /&gt;localloc&lt;br /&gt;stsfld  int32* integerarr&lt;br /&gt;ldsfld  int32* integerarr&lt;br /&gt;ldc.i4  2&lt;br /&gt;ldc.i4 4&lt;br /&gt;mul&lt;br /&gt;add&lt;br /&gt;ldc.i4  1&lt;br /&gt;stind.i4&lt;br /&gt;ret&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-8126577367130184976?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/8126577367130184976/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=8126577367130184976' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/8126577367130184976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/8126577367130184976'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/12/yar-and-static-arrays.html' title='YAR and static arrays'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-1724520296711375212</id><published>2010-12-05T13:52:00.001-08:00</published><updated>2010-12-05T14:08:30.355-08:00</updated><title type='text'>YAR Update: Importing external function</title><content type='html'>Yar supports now for &lt;br /&gt;&lt;br /&gt;import external functions&lt;br /&gt;&lt;br /&gt;sample&lt;br /&gt;&lt;br /&gt;program Helloworld;&lt;br /&gt;&lt;br /&gt;function importedfunc(var a:integer):integer;external library=mydll name=importfunc;&lt;br /&gt;&lt;br /&gt;GField:integer;&lt;br /&gt;&lt;br /&gt;begin &lt;br /&gt;GField:=1;&lt;br /&gt;write importedfunc(GField);&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;=&gt;&lt;br /&gt;&lt;br /&gt;.assembly extern mscorlib { auto }&lt;br /&gt;.assembly project {}&lt;br /&gt;.field public static int32 GField&lt;br /&gt;&lt;br /&gt;.method static public void main() cil managed&lt;br /&gt;{&lt;br /&gt;.entrypoint&lt;br /&gt;ldc.i4  1&lt;br /&gt;stsfld  int32 GField&lt;br /&gt;ldsflda int32 GField&lt;br /&gt;call int32 importedfunc(int32&amp; a)&lt;br /&gt;call void [mscorlib]System.Console::Write(int32)&lt;br /&gt;ret&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.method public static pinvokeimpl("mydll.dll" as "importfunc" winapi)&lt;br /&gt;int32 importedfunc(int32&amp; a) cil managed preservesig&lt;br /&gt;{}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-1724520296711375212?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/1724520296711375212/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=1724520296711375212' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/1724520296711375212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/1724520296711375212'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/12/yar-update-records-methods-and.html' title='YAR Update: Importing external function'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-3502784841630586915</id><published>2010-12-03T03:49:00.000-08:00</published><updated>2010-12-03T03:57:30.912-08:00</updated><title type='text'>YAR: records with methods</title><content type='html'>Syntax:&lt;br /&gt;&lt;br /&gt;program Helloworld;&lt;br /&gt;&lt;br /&gt;Myrecord=record&lt;br /&gt;c:integer;&lt;br /&gt; function abc(a:integer):integer; &lt;br /&gt; begin&lt;br /&gt; self.c:=a;&lt;br /&gt; result:=self.c;&lt;br /&gt; end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;mr:Myrecord;&lt;br /&gt;&lt;br /&gt;function Func(var a:Myrecord):integer;&lt;br /&gt;begin&lt;br /&gt;a.c:=4;&lt;br /&gt;write mr.c;&lt;br /&gt;a.abc(5);&lt;br /&gt;write a.c;&lt;br /&gt;result:=6;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;begin &lt;br /&gt;Func(mr);&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;.NET BackEnd:&lt;br /&gt;&lt;br /&gt;.assembly extern mscorlib { auto }&lt;br /&gt;.assembly project {}&lt;br /&gt;.class public sealed Myrecord extends [mscorlib]System.ValueType&lt;br /&gt;{&lt;br /&gt;.field public static int32 c&lt;br /&gt;.method public instance int32 abc(int32 a) cil managed&lt;br /&gt;{&lt;br /&gt;ldarg.0&lt;br /&gt;ldarg  a&lt;br /&gt;stfld  int32 .this::c&lt;br /&gt;ldarg.0&lt;br /&gt;ldfld int32 .this::c&lt;br /&gt;ret&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;.field public static  valuetype Myrecord mr&lt;br /&gt;&lt;br /&gt;.method static public void main() cil managed&lt;br /&gt;{&lt;br /&gt;.entrypoint&lt;br /&gt;ldsflda  valuetype Myrecord mr&lt;br /&gt;call int32 Func( valuetype Myrecord&amp; a)&lt;br /&gt;pop&lt;br /&gt;ret&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.method static public int32 Func( valuetype Myrecord&amp; a) cil managed&lt;br /&gt;{&lt;br /&gt;ldarg  a&lt;br /&gt;ldc.i4  4&lt;br /&gt;stfld  int32 Myrecord::c&lt;br /&gt;ldsflda  valuetype Myrecord mr&lt;br /&gt;ldfld int32 Myrecord::c&lt;br /&gt;call void [mscorlib]System.Console::Write(int32)&lt;br /&gt;ldarg  a&lt;br /&gt;ldc.i4  5&lt;br /&gt;call instance int32 Myrecord::abc(int32 a)&lt;br /&gt;pop&lt;br /&gt;ldarg  a&lt;br /&gt;ldfld int32 Myrecord::c&lt;br /&gt;call void [mscorlib]System.Console::Write(int32)&lt;br /&gt;ldc.i4  6&lt;br /&gt;ret&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-3502784841630586915?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/3502784841630586915/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=3502784841630586915' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/3502784841630586915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/3502784841630586915'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/12/yar-records-with-methods.html' title='YAR: records with methods'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-314856013425813249</id><published>2010-11-08T01:44:00.000-08:00</published><updated>2010-11-08T03:52:47.238-08:00</updated><title type='text'>Added @ and ^ operators</title><content type='html'>I have just added. &lt;br /&gt;&lt;br /&gt;begin &lt;br /&gt;pinteger:=@mr.c;&lt;br /&gt;a:=pinteger^;&lt;br /&gt;mr.c:=@a^;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;=&gt;&lt;br /&gt;&lt;br /&gt;.entrypoint&lt;br /&gt;ldsflda  valuetype Myrecord mr&lt;br /&gt;ldflda int32 Myrecord::c&lt;br /&gt;stsfld  int32* pinteger&lt;br /&gt;ldsfld  int32* pinteger&lt;br /&gt;ldobj int32&lt;br /&gt;stsfld  int32 a&lt;br /&gt;ldsflda  valuetype Myrecord mr&lt;br /&gt;ldsflda int32 a&lt;br /&gt;ldobj int32&lt;br /&gt;stfld  int32 Myrecord::c&lt;br /&gt;ret&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-314856013425813249?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/314856013425813249/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=314856013425813249' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/314856013425813249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/314856013425813249'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/11/added-and-operators.html' title='Added @ and ^ operators'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-5573527261192378389</id><published>2010-11-03T12:11:00.000-07:00</published><updated>2010-11-03T12:20:34.066-07:00</updated><title type='text'>Test YAR Type inference</title><content type='html'>Todays working sample &lt;br /&gt;&lt;br /&gt;function abc &lt; T,U &gt; (a:T):^U;&lt;br /&gt;begin&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;pinteger:^integer;&lt;br /&gt;d:double;&lt;br /&gt;&lt;br /&gt;pinteger:=abc(d);&lt;br /&gt;&lt;br /&gt;=&gt; T=double&lt;br /&gt;=&gt; U=integer&lt;br /&gt;&lt;br /&gt;So generic operators like @, [], sizeof .. to come very soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-5573527261192378389?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/5573527261192378389/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=5573527261192378389' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/5573527261192378389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/5573527261192378389'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/11/test-type-inference.html' title='Test YAR Type inference'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-2004604985654914523</id><published>2010-11-02T02:40:00.000-07:00</published><updated>2010-11-02T02:46:52.435-07:00</updated><title type='text'>YAR and Type inference</title><content type='html'>Working on support Type Inference in YAR.&lt;br /&gt;A sample:&lt;br /&gt;&lt;br /&gt;mr:Myrecord;&lt;br /&gt;a,b:integer;&lt;br /&gt;d:double;&lt;br /&gt;&lt;br /&gt;function GenericFunc &lt; T, U , Z&gt; (var a:T;b:U):Z;&lt;br /&gt;begin&lt;br /&gt;end;&lt;br /&gt;..&lt;br /&gt;begin &lt;br /&gt;GenericFunc(a,a):=d;   //I know this function result is not a lvalue. &lt;br /&gt;                       //I relax the assign op type checking rules &lt;br /&gt;                       //to test of infering of result type&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-2004604985654914523?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/2004604985654914523/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=2004604985654914523' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/2004604985654914523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/2004604985654914523'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/11/yar-and-type-inference.html' title='YAR and Type inference'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-53880719056500264</id><published>2010-10-27T23:40:00.000-07:00</published><updated>2010-10-27T23:54:16.401-07:00</updated><title type='text'>Процесс рефакторинга</title><content type='html'>Сам по себе процесс продвигался достаточно безболезненно, однако долго.&lt;br /&gt;Приятно, что планируемые изменения в целом концептуально гладко уложились с текущей структурой компилятора. Однако переименование типов и небольшое изменение их зоны отвественности("утрясание" иерархий классов) отняли большую часть времени. Но в целом остался доволен, хотя и утомительное это занятие заниматься не делом.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-53880719056500264?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/53880719056500264/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=53880719056500264' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/53880719056500264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/53880719056500264'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/10/blog-post_27.html' title='Процесс рефакторинга'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-6560366888216810729</id><published>2010-10-12T22:10:00.000-07:00</published><updated>2010-10-12T22:22:52.583-07:00</updated><title type='text'>Время для рефакторинга</title><content type='html'>Достаточно сложно считать на несколько шагов вперед, хотя и очень интересно. Не всегда удается выбрать баланс между выразительностью и скоростью на ранних этапах, да и просто порой принятые решения по проектированию на ранних этапах в меньшей степени предусмотрены для задач для более поздних. Хотя технически работать можно и в рамках текущих проектных решений, однако это требует лишних движений, что отвлекает от решения текущих подзадач.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-6560366888216810729?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/6560366888216810729/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=6560366888216810729' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/6560366888216810729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/6560366888216810729'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/10/blog-post.html' title='Время для рефакторинга'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-946351463441749505</id><published>2010-10-07T05:18:00.000-07:00</published><updated>2010-10-07T05:27:08.307-07:00</updated><title type='text'>Added Procedural Types</title><content type='html'>Added procedural Types to YAR Language&lt;br /&gt;Extend .NET codegen by MSIL calli instruction&lt;br /&gt;&lt;br /&gt;Sample &lt;br /&gt;&lt;br /&gt;TMyFunc=function(a:integer):integer;&lt;br /&gt;TXfunc=function(var a:double):TMyFunc;&lt;br /&gt;&lt;br /&gt;function abc(a:integer):integer;&lt;br /&gt;begin&lt;br /&gt;result:=a;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;function abc(var a:double):TMyFunc;&lt;br /&gt;begin&lt;br /&gt;result:=abc;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;e:double;&lt;br /&gt;f:integer;&lt;br /&gt;g:TXfunc;&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;g:=abc;&lt;br /&gt;f:=g(e)(f);&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;=&gt;&lt;br /&gt;&lt;br /&gt;.method static public void main() cil managed&lt;br /&gt;{&lt;br /&gt;.entrypoint&lt;br /&gt;ldftn native int abc(float64&amp; a)&lt;br /&gt;stsfld  native int g&lt;br /&gt;ldsfld  int32 f&lt;br /&gt;ldsflda float64 e&lt;br /&gt;ldsfld  native int g&lt;br /&gt;calli native int (float64&amp; a)&lt;br /&gt;calli int32 (int32 a)&lt;br /&gt;stsfld  int32 f&lt;br /&gt;ret&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-946351463441749505?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/946351463441749505/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=946351463441749505' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/946351463441749505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/946351463441749505'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/10/added-procedural-types.html' title='Added Procedural Types'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-1419080609505587840</id><published>2010-10-05T04:17:00.000-07:00</published><updated>2010-10-05T04:20:46.410-07:00</updated><title type='text'>Supporting dot operator for .NET backend</title><content type='html'>A sample&lt;br /&gt;&lt;br /&gt;program Helloworld;&lt;br /&gt;&lt;br /&gt;MyrecordStuff=record&lt;br /&gt;a:integer;&lt;br /&gt;b:integer;&lt;br /&gt;c:boolean;&lt;br /&gt;d:double;&lt;br /&gt;f:double;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;Myrecord=record&lt;br /&gt;a,b,c:integer;&lt;br /&gt;private&lt;br /&gt;d:integer;&lt;br /&gt;f:integer;&lt;br /&gt;public&lt;br /&gt;pp:MyrecordStuff;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;function abc(var a:integer):integer;&lt;br /&gt;begin&lt;br /&gt;a:=1;&lt;br /&gt;result:=5;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;function abc(var a:MyrecordStuff):integer;&lt;br /&gt;begin&lt;br /&gt;a.a:=7;&lt;br /&gt;result:=5;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;a,b,c,d:Myrecord;&lt;br /&gt;e:double;&lt;br /&gt;f:integer;&lt;br /&gt;begin &lt;br /&gt;abc(a.a);&lt;br /&gt;abc(a.pp.a);&lt;br /&gt;e:=a.pp.d;&lt;br /&gt;a.pp.a:=f;&lt;br /&gt;a.pp.a:=a.pp.b;&lt;br /&gt;write abc(a.pp);&lt;br /&gt;write a.pp.a;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;Generated MSIL code&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.assembly extern mscorlib { auto }&lt;br /&gt;.assembly project {}&lt;br /&gt;.class public sealed MyrecordStuff extends [mscorlib]System.ValueType&lt;br /&gt;{&lt;br /&gt;.field public static int32 b&lt;br /&gt;.field public static float64 f&lt;br /&gt;.field public static int32 a&lt;br /&gt;.field public static bool c&lt;br /&gt;.field public static float64 d&lt;br /&gt;}&lt;br /&gt;.class public sealed Myrecord extends [mscorlib]System.ValueType&lt;br /&gt;{&lt;br /&gt;.field private static int32 f&lt;br /&gt;.field private static int32 d&lt;br /&gt;.field public static int32 b&lt;br /&gt;.field public static int32 a&lt;br /&gt;.field public static int32 c&lt;br /&gt;.field public static  valuetype MyrecordStuff pp&lt;br /&gt;}&lt;br /&gt;.field public static  valuetype Myrecord b&lt;br /&gt;.field public static float64 e&lt;br /&gt;.field public static  valuetype Myrecord a&lt;br /&gt;.field public static int32 f&lt;br /&gt;.field public static  valuetype Myrecord c&lt;br /&gt;.field public static  valuetype Myrecord d&lt;br /&gt;&lt;br /&gt;.method static public void main() cil managed&lt;br /&gt;{&lt;br /&gt;.entrypoint&lt;br /&gt;ldsflda  valuetype Myrecord a&lt;br /&gt;ldflda int32 Myrecord::a&lt;br /&gt;call int32 abc(int32&amp; a)&lt;br /&gt;pop&lt;br /&gt;ldsflda  valuetype Myrecord a&lt;br /&gt;ldflda  valuetype MyrecordStuff Myrecord::pp&lt;br /&gt;ldflda int32 MyrecordStuff::a&lt;br /&gt;call int32 abc(int32&amp; a)&lt;br /&gt;pop&lt;br /&gt;ldsflda  valuetype Myrecord a&lt;br /&gt;ldflda  valuetype MyrecordStuff Myrecord::pp&lt;br /&gt;ldfld float64 MyrecordStuff::d&lt;br /&gt;stsfld  float64 e&lt;br /&gt;ldsflda  valuetype Myrecord a&lt;br /&gt;ldflda  valuetype MyrecordStuff Myrecord::pp&lt;br /&gt;ldsfld  int32 f&lt;br /&gt;stfld  int32 MyrecordStuff::a&lt;br /&gt;ldsflda  valuetype Myrecord a&lt;br /&gt;ldflda  valuetype MyrecordStuff Myrecord::pp&lt;br /&gt;ldsflda  valuetype Myrecord a&lt;br /&gt;ldflda  valuetype MyrecordStuff Myrecord::pp&lt;br /&gt;ldfld int32 MyrecordStuff::b&lt;br /&gt;stfld  int32 MyrecordStuff::a&lt;br /&gt;ldsflda  valuetype Myrecord a&lt;br /&gt;ldflda  valuetype MyrecordStuff Myrecord::pp&lt;br /&gt;call int32 abc( valuetype MyrecordStuff&amp; a)&lt;br /&gt;call void [mscorlib]System.Console::Write(int32)&lt;br /&gt;ldsflda  valuetype Myrecord a&lt;br /&gt;ldflda  valuetype MyrecordStuff Myrecord::pp&lt;br /&gt;ldfld int32 MyrecordStuff::a&lt;br /&gt;call void [mscorlib]System.Console::Write(int32)&lt;br /&gt;ret&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.method static public int32 abc(int32&amp; a) cil managed&lt;br /&gt;{&lt;br /&gt;ldarg a&lt;br /&gt;ldc.i4  1&lt;br /&gt;stind.i4&lt;br /&gt;ldc.i4  5&lt;br /&gt;ret&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.method static public int32 abc( valuetype MyrecordStuff&amp; a) cil managed&lt;br /&gt;{&lt;br /&gt;ldarg a&lt;br /&gt;ldc.i4  7&lt;br /&gt;stfld  int32 MyrecordStuff::a&lt;br /&gt;ldc.i4  5&lt;br /&gt;ret&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-1419080609505587840?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/1419080609505587840/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=1419080609505587840' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/1419080609505587840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/1419080609505587840'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/10/supporting-dot-operator-for-net-backend.html' title='Supporting dot operator for .NET backend'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-2057959889330163678</id><published>2010-09-29T01:19:00.000-07:00</published><updated>2010-09-29T01:24:04.584-07:00</updated><title type='text'>Deferred assign of type constructor</title><content type='html'>Working on support syntax like:&lt;br /&gt;&lt;br /&gt;TFUNC &lt; T &gt; =function (a:TFUNC &lt; Integer &gt; ):T;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-2057959889330163678?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/2057959889330163678/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=2057959889330163678' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/2057959889330163678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/2057959889330163678'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/09/deferred-assign-of-type-constructor.html' title='Deferred assign of type constructor'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-8140823049554579449</id><published>2010-09-21T04:25:00.000-07:00</published><updated>2010-09-21T04:47:52.686-07:00</updated><title type='text'>Code generation for YAR polymorphic methods</title><content type='html'>Added for .NET backend. &lt;br /&gt;&lt;br /&gt;All process consists of :&lt;br /&gt;&lt;br /&gt;YAR =&gt; semantic tree =&gt; call codegen(Semantic tree, .NET backend) =&gt; IL ASM&lt;br /&gt;&lt;br /&gt;Here is a sample: &lt;br /&gt;&lt;br /&gt;YAR&lt;br /&gt;function abc &lt; T,U,Z &gt; (a:integer;b:U):Z;&lt;br /&gt;c,d:T;&lt;br /&gt;e:Z;&lt;br /&gt;f:U;&lt;br /&gt;begin&lt;br /&gt;c:=d;&lt;br /&gt;f:=b;&lt;br /&gt;result:=e;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;=&gt;&lt;br /&gt;&lt;br /&gt;IL ASM&lt;br /&gt;&lt;br /&gt;.method static public !!Z abc &lt; T,U,Z &gt; (int32 a,!!U b) cil managed&lt;br /&gt;{&lt;br /&gt;.locals init(!!U f,!!Z e,!!T c,!!T d)&lt;br /&gt;ldloc  d&lt;br /&gt;stloc  c&lt;br /&gt;ldarg  b&lt;br /&gt;stloc  f&lt;br /&gt;ldloc  e&lt;br /&gt;ret&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-8140823049554579449?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/8140823049554579449/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=8140823049554579449' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/8140823049554579449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/8140823049554579449'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/09/code-generation-for-yar-polymorphic.html' title='Code generation for YAR polymorphic methods'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-5876204390215063155</id><published>2010-09-13T05:01:00.000-07:00</published><updated>2010-09-13T05:27:46.759-07:00</updated><title type='text'>Обновление синтаксического анализатора YAR и проверка типов</title><content type='html'>Разбор YAR построен на восходящем синтаксическом анализаторе. И при использовании&lt;br /&gt;символов &lt; и &gt; для указания параметров типов создаются конфликты в состояниях анализатора. После некоторых манипуляций в синтаксический анализатор  YAR добавлен механизм для устранения таких конфликтов. То есть выражения  вида TList &lt; tlist &lt; t,z,u &gt;,TList &lt; t,z,tlist &lt; z &gt; &gt; &gt;  и A &lt; 5 будут успешно разрешены.&lt;br /&gt;&lt;br /&gt;Механизм проверки типов также корректно проверят unbound параметры, считая их только самосовместимыми.&lt;br /&gt;&lt;br /&gt;function abc &lt; t,u,z &gt;(a:integer;b:U):Z;&lt;br /&gt;c,d:T;&lt;br /&gt;e:Z;&lt;br /&gt;f:U;&lt;br /&gt;begin&lt;br /&gt;c:=d;&lt;br /&gt;f:=b;&lt;br /&gt;result:=e;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;Кодогенератор и BackEnd для .NET будет расширен, как только будет закончена работа в front-end части.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-5876204390215063155?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/5876204390215063155/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=5876204390215063155' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/5876204390215063155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/5876204390215063155'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/09/yar.html' title='Обновление синтаксического анализатора YAR и проверка типов'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-2927890302538666289</id><published>2010-08-24T05:31:00.000-07:00</published><updated>2010-08-24T05:33:02.605-07:00</updated><title type='text'>Обновление YAR</title><content type='html'>+Переиспользование совместимых  и свободных временных переменных&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-2927890302538666289?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/2927890302538666289/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=2927890302538666289' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/2927890302538666289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/2927890302538666289'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/08/yar_24.html' title='Обновление YAR'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-340174467484820279</id><published>2010-08-23T22:25:00.000-07:00</published><updated>2010-08-23T22:29:23.751-07:00</updated><title type='text'>Обновление YAR</title><content type='html'>+Неявное приведение типов&lt;br /&gt;+Конструкция if&lt;br /&gt;+Цикл for&lt;br /&gt;+Цикл while&lt;br /&gt;+Цикл repeat&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-340174467484820279?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/340174467484820279/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=340174467484820279' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/340174467484820279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/340174467484820279'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/08/yar_1547.html' title='Обновление YAR'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-711180081594805366</id><published>2010-08-14T10:03:00.000-07:00</published><updated>2010-08-14T10:09:39.176-07:00</updated><title type='text'>Обновление YAR</title><content type='html'>-Добавлена оптимизация в работе операторов +, *, -, &lt;, &lt;=, =, &lt;&gt;, &gt;=, &gt; при операндах константах.&lt;br /&gt;Код вычислений не генерируется.&lt;br /&gt;-Оптимизировано вычисление предиката конструкции if  и генерация кода аналогично.&lt;br /&gt;Автоматически распространится на все Backend'ы.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-711180081594805366?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/711180081594805366/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=711180081594805366' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/711180081594805366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/711180081594805366'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/08/yar.html' title='Обновление YAR'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-6038393571645113197</id><published>2010-08-04T04:57:00.001-07:00</published><updated>2010-08-04T05:00:38.781-07:00</updated><title type='text'>YAR.NET in the wild</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_fwEi4kRA5N0/TFlWRqNInSI/AAAAAAAAAAw/wZIQp-bM54c/s1600/YarNetWild.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5501523281196916002" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 247px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_fwEi4kRA5N0/TFlWRqNInSI/AAAAAAAAAAw/wZIQp-bM54c/s320/YarNetWild.JPG" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-6038393571645113197?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/6038393571645113197/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=6038393571645113197' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/6038393571645113197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/6038393571645113197'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/08/yarnet-in-wild.html' title='YAR.NET in the wild'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fwEi4kRA5N0/TFlWRqNInSI/AAAAAAAAAAw/wZIQp-bM54c/s72-c/YarNetWild.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-3545786546535190944</id><published>2010-07-09T00:20:00.000-07:00</published><updated>2010-07-09T00:25:16.574-07:00</updated><title type='text'>Working with .NET unmanaged API.</title><content type='html'>I started translating cor.h corhdr.h to pas analogues yesterday.&lt;br /&gt;Today I'm testing the results. 5 min a normal fly. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-3545786546535190944?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/3545786546535190944/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=3545786546535190944' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/3545786546535190944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/3545786546535190944'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/07/working-with-net-unmanaged-api.html' title='Working with .NET unmanaged API.'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-4386653703604903229</id><published>2010-05-31T23:52:00.000-07:00</published><updated>2010-05-31T23:56:42.620-07:00</updated><title type='text'>Fabio(Fitzroy Heslop) and Liquid funk</title><content type='html'>Thank you, Fabio.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-4386653703604903229?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/4386653703604903229/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=4386653703604903229' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/4386653703604903229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/4386653703604903229'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/05/fabiofitzroy-heslop-and-liquid-funk.html' title='Fabio(Fitzroy Heslop) and Liquid funk'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-2008899302651755762</id><published>2010-05-27T22:52:00.001-07:00</published><updated>2010-05-27T22:56:59.928-07:00</updated><title type='text'>Working on Virtual Machine</title><content type='html'>So just few steps:&lt;br /&gt;&lt;br /&gt;1. Read some stuff&lt;br /&gt;2. JVM or CLR Like?  &lt;br /&gt;  I prefer MSIL for its universal untype load and store operations.&lt;br /&gt;3. Implement it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-2008899302651755762?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/2008899302651755762/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=2008899302651755762' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/2008899302651755762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/2008899302651755762'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/05/working-on-virtual-machine.html' title='Working on Virtual Machine'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-7888750868643739208</id><published>2010-04-25T22:29:00.000-07:00</published><updated>2010-04-25T22:37:36.169-07:00</updated><title type='text'>Gathering and mixing</title><content type='html'>Enhancing systax for support: Structs, objects and parametrized types&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-7888750868643739208?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/7888750868643739208/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=7888750868643739208' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/7888750868643739208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/7888750868643739208'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/04/gathering-and-mixing.html' title='Gathering and mixing'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-7072473850140549362</id><published>2010-04-06T23:32:00.000-07:00</published><updated>2010-04-06T23:35:05.617-07:00</updated><title type='text'>Refine YAR Type System</title><content type='html'>Working.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-7072473850140549362?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/7072473850140549362/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=7072473850140549362' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/7072473850140549362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/7072473850140549362'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/04/refine-yar-type-system.html' title='Refine YAR Type System'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-7860772801544447868</id><published>2010-04-02T04:39:00.000-07:00</published><updated>2010-04-02T04:52:05.551-07:00</updated><title type='text'>Just Any type Delphi Case statement</title><content type='html'>Just Any type Delphi Case statement &lt;br /&gt;&lt;br /&gt;Here is the implementation.&lt;br /&gt;&lt;br /&gt;TPAIRTYPE[T]=record&lt;br /&gt;Value:T;&lt;br /&gt;Proc:TProc;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;CaseAnyTypeClassSupport[T]=class&lt;br /&gt;private&lt;br /&gt;class function GetCaseOption(Value:T;Action:TProc):TPAIRTYPE[T];static;&lt;br /&gt;public&lt;br /&gt;class procedure MyCase(const Value:T;const Pairs:array of TPAIRTYPE[T];ElseProc:TProc=nil);static;&lt;br /&gt;class property CaseOption[Value:T;Action:TProc]:TPAIRTYPE[T] read GetCaseOption;default;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;uses generics.defaults;&lt;br /&gt;&lt;br /&gt;class procedure CaseAnyTypeClassSupport[T].MyCase(const Value:T;const Pairs:array of TPAIRTYPE[T];ElseProc:TProc=nil);&lt;br /&gt;var Pair:TPAIRTYPE[T];&lt;br /&gt;    Comparer:IComparer[T];&lt;br /&gt;begin&lt;br /&gt;Comparer:=TComparer[T].Default;&lt;br /&gt;for Pair in Pairs do&lt;br /&gt;   if Comparer.Compare(Value,Pair.Value)=0 then&lt;br /&gt;     begin&lt;br /&gt;     Pair.Proc();&lt;br /&gt;     exit;&lt;br /&gt;     end;&lt;br /&gt;if Assigned(ElseProc) then ElseProc();&lt;br /&gt;end;&lt;br /&gt;class function CaseAnyTypeClassSupport&lt;T&gt;.GetCaseOption(Value:T;Action:TProc):TPAIRTYPE[T];&lt;br /&gt;begin&lt;br /&gt;Result.Value:=Value;&lt;br /&gt;Result.Proc:=action;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;and a usage&lt;br /&gt;&lt;br /&gt;procedure TForm2.FormCreate(Sender: TObject);&lt;br /&gt;var Stuff:CaseAnyTypeClassSupport[string];&lt;br /&gt;begin&lt;br /&gt;Stuff.MyCase('2',&lt;br /&gt;    [&lt;br /&gt;    Stuff['4',procedure&lt;br /&gt;              begin&lt;br /&gt;              showmessage('Option 1');&lt;br /&gt;              end],&lt;br /&gt;    Stuff['2',procedure&lt;br /&gt;              begin&lt;br /&gt;              showmessage('Option 2');&lt;br /&gt;              end]&lt;br /&gt;    ],procedure&lt;br /&gt;      begin&lt;br /&gt;      showmessage('Else option');&lt;br /&gt;      end);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;Because of restriction of Delphi compiler you could not write usage like this &lt;br /&gt;&lt;br /&gt;with stuff do &lt;br /&gt;  MyCase('2',&lt;br /&gt;    [&lt;br /&gt;     ['4',procedure&lt;br /&gt;              begin&lt;br /&gt;              showmessage('Option 1');&lt;br /&gt;              end],&lt;br /&gt;     ['2',procedure&lt;br /&gt;              begin&lt;br /&gt;              showmessage('Option 2');&lt;br /&gt;              end]&lt;br /&gt;     ],procedure&lt;br /&gt;      begin&lt;br /&gt;      showmessage('Else option');&lt;br /&gt;      end);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;You can enhance MyCase for supports variance types(type with subtypes) the same way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-7860772801544447868?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/7860772801544447868/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=7860772801544447868' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/7860772801544447868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/7860772801544447868'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/04/just-any-type-delphi-case-statement.html' title='Just Any type Delphi Case statement'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-5780047320091793215</id><published>2010-02-05T11:23:00.000-08:00</published><updated>2010-02-05T11:28:36.199-08:00</updated><title type='text'>The proof of the soundness of type system</title><content type='html'>Reading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-5780047320091793215?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/5780047320091793215/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=5780047320091793215' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/5780047320091793215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/5780047320091793215'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/02/proof-of-soundness-of-type-system.html' title='The proof of the soundness of type system'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-8573679111844827346</id><published>2010-02-03T04:01:00.000-08:00</published><updated>2010-02-10T22:12:05.402-08:00</updated><title type='text'>Fixed point combinators and Existential type</title><content type='html'>After adapting mind to functional programming style I have comprehended that stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-8573679111844827346?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/8573679111844827346/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=8573679111844827346' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/8573679111844827346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/8573679111844827346'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/02/fixed-point-combinators-and.html' title='Fixed point combinators and Existential type'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-4114594094761246293</id><published>2010-01-21T01:43:00.000-08:00</published><updated>2010-01-21T01:44:30.086-08:00</updated><title type='text'>The Polymorphic Lambda Calculus</title><content type='html'>Reading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-4114594094761246293?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/4114594094761246293/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=4114594094761246293' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/4114594094761246293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/4114594094761246293'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/01/polymorphic-lambda-calculus.html' title='The Polymorphic Lambda Calculus'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-1621642998151151319</id><published>2010-01-19T22:17:00.000-08:00</published><updated>2010-01-19T22:18:10.047-08:00</updated><title type='text'>Type lambda calculus</title><content type='html'>Reading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-1621642998151151319?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/1621642998151151319/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=1621642998151151319' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/1621642998151151319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/1621642998151151319'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/01/type-lambda-calculus.html' title='Type lambda calculus'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-1217757949482773905</id><published>2010-01-15T04:18:00.000-08:00</published><updated>2010-01-15T04:20:17.227-08:00</updated><title type='text'>Subtype, Variance, Mutable Types</title><content type='html'>Reading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-1217757949482773905?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/1217757949482773905/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=1217757949482773905' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/1217757949482773905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/1217757949482773905'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/01/subtype-variance-mutable-types.html' title='Subtype, Variance, Mutable Types'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-8088964343895609204</id><published>2010-01-12T13:40:00.000-08:00</published><updated>2010-01-12T13:47:48.851-08:00</updated><title type='text'>Polymorphism.</title><content type='html'>There was my last day of annual leave yesterday.&lt;br /&gt;&lt;br /&gt;bounded polymorphism,&lt;br /&gt;F-bounded polymorphism,&lt;br /&gt;match-bounded polymorphism&lt;br /&gt;&lt;br /&gt;It is bedtime.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-8088964343895609204?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/8088964343895609204/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=8088964343895609204' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/8088964343895609204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/8088964343895609204'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2010/01/polymorphism.html' title='Polymorphism.'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-3836523777316637926</id><published>2009-11-21T13:35:00.001-08:00</published><updated>2009-11-21T13:45:36.690-08:00</updated><title type='text'>About syntax analizer in YAR Language</title><content type='html'>The YAR language syntax analizer supports for parsing methods:&lt;br /&gt;&lt;br /&gt;-LL(1)&lt;br /&gt;-CYK&lt;br /&gt;-SLR,&lt;br /&gt;-CLR(1)&lt;br /&gt;-LARL(1)&lt;br /&gt;-Simple precedence&lt;br /&gt;-Operator precedence&lt;br /&gt;-My extension for CLR method. I call it ECLR(1) method. &lt;br /&gt;&lt;br /&gt;But YAR language now is being parsed by LARL(1) method. &lt;br /&gt;&lt;br /&gt;Here is the semantic action sample &lt;br /&gt;&lt;br /&gt;TTokenSequence.create(PNS_EXPR,[PTS_CONST_EXP_STRING],'',&lt;br /&gt;              function(LRAnalizer:TLRAnalizer):pointer&lt;br /&gt;              var  value:TExprState;&lt;br /&gt;              begin&lt;br /&gt;              value.value:=LRAnalizer.StackValue[0].Lexeme;&lt;br /&gt;              value.ExprStateItem.TypeDesc:=StringTypeDesc;&lt;br /&gt;              PNS_EXPR.AttribitesList.Add(value);&lt;br /&gt;              result:=nil;&lt;br /&gt;              end&lt;br /&gt;  );&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-3836523777316637926?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/3836523777316637926/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=3836523777316637926' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/3836523777316637926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/3836523777316637926'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2009/11/about-syntax-analizer-in-yar-language.html' title='About syntax analizer in YAR Language'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-154300115953461869</id><published>2009-11-13T03:33:00.000-08:00</published><updated>2009-11-13T03:36:56.814-08:00</updated><title type='text'>YAR Language enhancement</title><content type='html'>Now Supports for &lt;br /&gt;-Integer,Float,String,Char,Boolean types&lt;br /&gt;-Type inference &lt;br /&gt;-Operator and functions overloads&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-154300115953461869?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/154300115953461869/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=154300115953461869' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/154300115953461869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/154300115953461869'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2009/11/yar-language-enhancement.html' title='YAR Language enhancement'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-5041905557702400274</id><published>2009-11-03T12:48:00.000-08:00</published><updated>2009-11-03T12:49:20.140-08:00</updated><title type='text'>Type system, Type Theory.</title><content type='html'>Deep in Type system, Type Theory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-5041905557702400274?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/5041905557702400274/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=5041905557702400274' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/5041905557702400274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/5041905557702400274'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2009/11/type-system-type-theory.html' title='Type system, Type Theory.'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-8374784172334768387</id><published>2009-10-26T11:58:00.001-07:00</published><updated>2009-10-26T12:05:33.005-07:00</updated><title type='text'>Program language name</title><content type='html'>I choose the language name. So I call it YAR.&lt;br /&gt;&lt;br /&gt;Here is the code sample that was succesfully executed today.&lt;br /&gt;program Helloworld;&lt;br /&gt;var a,b,c:integer;&lt;br /&gt;     d,ec,fg:float;&lt;br /&gt;     j,z,i:integer;&lt;br /&gt;begin &lt;br /&gt;a:=123;&lt;br /&gt;b:=a;&lt;br /&gt;write b;&lt;br /&gt;write a+2*b;&lt;br /&gt;c:=a+2*(b+2);&lt;br /&gt;write c;&lt;br /&gt;b:=321;&lt;br /&gt;a:=c+100*2-a/(b-100)*200/300-400;&lt;br /&gt;write a;&lt;br /&gt;end&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-8374784172334768387?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/8374784172334768387/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=8374784172334768387' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/8374784172334768387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/8374784172334768387'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2009/10/program-language-name.html' title='Program language name'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-1602536838099885893</id><published>2009-07-20T04:56:00.000-07:00</published><updated>2009-07-20T04:59:00.790-07:00</updated><title type='text'>Still hard working on compiler</title><content type='html'>I am still hard working on compiler in my free time. &lt;br /&gt;And more more with my son Yaroslav.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-1602536838099885893?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/1602536838099885893/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=1602536838099885893' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/1602536838099885893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/1602536838099885893'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2009/07/still-hard-working-on-compiler.html' title='Still hard working on compiler'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-3170529807509139144</id><published>2009-02-16T23:46:00.000-08:00</published><updated>2009-02-17T00:02:49.939-08:00</updated><title type='text'>For russian fellow Maaacheba or getting method name dynamically</title><content type='html'>It is still a draft implementation, &lt;br /&gt;but it can be extended for other x86 opcodes. &lt;br /&gt;So it is a base idea.&lt;br /&gt;And it can be extended to support dynamic methods invocation.&lt;br /&gt;&lt;br /&gt;  TForm1 = class(TForm)&lt;br /&gt;    procedure FormCreate(Sender: TObject);&lt;br /&gt;  private&lt;br /&gt;    { Private declarations }&lt;br /&gt;  public&lt;br /&gt;    { Public declarations }&lt;br /&gt;  Published&lt;br /&gt;  procedure StaticMethod;&lt;br /&gt;  procedure VirtualMethod(a,b,c,d:integer);virtual;&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt; THelper= class helper for Tobject&lt;br /&gt; function GetMethodAddress:pointer;&lt;br /&gt; end;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;implementation&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt;PPDWORD=^PDWORD;&lt;br /&gt;&lt;br /&gt;function AnalizeCallMethod(Self:PPDWORD;ReturnAddress:pbyte;SomePlaceInTheMethodCode:pointer):DWORD;&lt;br /&gt;var Operation:DWORD;&lt;br /&gt;    VMT:PDWORD;&lt;br /&gt;    Offset:Integer;&lt;br /&gt;begin&lt;br /&gt;{$POINTERMATH ON}&lt;br /&gt;//Virtual Call&lt;br /&gt;Operation:=DWORD((@ReturnAddress[-6])^) AND $FF;&lt;br /&gt;case Operation of&lt;br /&gt;$FF:&lt;br /&gt;    begin&lt;br /&gt;    VMT:=Self[0];&lt;br /&gt;    Offset:=DWORD((@ReturnAddress[-4])^);&lt;br /&gt;    result:=DWORD((@(Pbyte(VMT)[Offset]))^);&lt;br /&gt;    exit;&lt;br /&gt;    end;&lt;br /&gt;end;&lt;br /&gt;Operation:=DWORD((@ReturnAddress[-5])^) AND $E8;&lt;br /&gt;//Static Call&lt;br /&gt;case Operation of&lt;br /&gt;$E8:&lt;br /&gt;    begin&lt;br /&gt;    result:=DWORD(ReturnAddress)+DWORD((@ReturnAddress[-4])^);&lt;br /&gt;    exit;&lt;br /&gt;    end;&lt;br /&gt;end;&lt;br /&gt;{$POINTERMATH OFF}&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;{ THelper }&lt;br /&gt;&lt;br /&gt;function THelper.GetMethodAddress: pointer;&lt;br /&gt;asm&lt;br /&gt;mov edx,[ebp+04];&lt;br /&gt;mov ecx,[esp];&lt;br /&gt;Call AnalizeCallMethod;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;{$R *.dfm}&lt;br /&gt;&lt;br /&gt;procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;StaticMethod;&lt;br /&gt;VirtualMethod(1,2,3,4);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TForm1.StaticMethod;&lt;br /&gt;begin&lt;br /&gt;showmessage(MethodName(GetMethodAddress));&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TForm1.VirtualMethod(a,b,c,d:integer);&lt;br /&gt;begin&lt;br /&gt;showmessage(MethodName(GetMethodAddress));&lt;br /&gt;end;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-3170529807509139144?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/3170529807509139144/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=3170529807509139144' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/3170529807509139144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/3170529807509139144'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2009/02/for-russian-fellow-maaacheba-or-getting.html' title='For russian fellow Maaacheba or getting method name dynamically'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-4819631257516824489</id><published>2007-11-15T08:16:00.000-08:00</published><updated>2007-11-16T11:54:55.932-08:00</updated><title type='text'>How to get Entry Point of Method Address Dynamically? No problem</title><content type='html'>In some cases (may be some sort of code injecting for constructive needs)  there is a necessity for getting Method Entry Point Dynamically.&lt;br /&gt;&lt;br /&gt;Here is my method&lt;br /&gt;&lt;br /&gt;TMethodAddres=class&lt;br /&gt;public&lt;br /&gt;//Compile time binding method&lt;br /&gt;procedure Method;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TMethodAddres.Method;&lt;br /&gt;begin&lt;br /&gt;//Compile time binding method&lt;br /&gt;asm&lt;br /&gt;mov eax,[ebp+04];&lt;br /&gt;add eax,[eax-4];  //Now in eax the Entry point of this method&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;But there is some restrictions to work this code properly. This trick is based on Method stack frame existence. &lt;br /&gt;To archive this, set the optimization flag of the project to unchecked state, and the stack frames flag to checked state.&lt;br /&gt;And what about virtual methods address?&lt;br /&gt;&lt;br /&gt;May be in the next time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-4819631257516824489?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/4819631257516824489/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=4819631257516824489' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/4819631257516824489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/4819631257516824489'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2007/11/how-to-get-entry-point-of-method.html' title='How to get Entry Point of Method Address Dynamically? No problem'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-8406714049147150385</id><published>2007-10-27T11:20:00.000-07:00</published><updated>2007-10-27T11:22:37.709-07:00</updated><title type='text'>SEH Dynamic Unwinding with auto correction</title><content type='html'>To achieve this objective, I  have made some modifications.&lt;br /&gt;&lt;br /&gt;I have added next fields to the TYieldObject class&lt;br /&gt;&lt;br /&gt;InnerSEHCount:DWORD;&lt;br /&gt;InnerSEHOffsets:array[0..$F] of DWORD;&lt;br /&gt;&lt;br /&gt;And of course the code has been changed a little.&lt;br /&gt;&lt;br /&gt;function TYieldObject.MoveNext: boolean;&lt;br /&gt;asm&lt;br /&gt;push ebp;&lt;br /&gt;push ebx;&lt;br /&gt;push edi;&lt;br /&gt;push esi;&lt;br /&gt;push eax;&lt;br /&gt;xor edx,edx;&lt;br /&gt;mov eax.TYieldObject.IsYield,dl;&lt;br /&gt;push offset @a1&lt;br /&gt;{&lt;br /&gt;Is it first call&lt;br /&gt;}&lt;br /&gt;mov ecx,eax.TYieldObject.BESP;&lt;br /&gt;cmp ecx,edx;&lt;br /&gt;jnz @NotFirstCall;&lt;br /&gt;mov eax.TYieldObject.BESP,esp;&lt;br /&gt;jmp @JustBeforeTheJump;&lt;br /&gt;@NotFirstCall:&lt;br /&gt;cmp eax.TYieldObject.StackFrameSize,edx;&lt;br /&gt;jz @RestoreRegisters;&lt;br /&gt;{&lt;br /&gt;is need any correction&lt;br /&gt;}&lt;br /&gt;mov edx,esp;&lt;br /&gt;sub edx,ecx;&lt;br /&gt;jz @RestoreStackFrame;&lt;br /&gt;{&lt;br /&gt;Correction&lt;br /&gt;}&lt;br /&gt;{&lt;br /&gt;Correct ebp&lt;br /&gt;}&lt;br /&gt;add [eax.TYieldObject.REBP],edx;&lt;br /&gt;{&lt;br /&gt;Is any SEH frames&lt;br /&gt;}&lt;br /&gt;mov ecx,eax.TYieldObject.InnerSEHCount;&lt;br /&gt;jecxz @ChangeBESP;&lt;br /&gt;{&lt;br /&gt;correct SEH frames&lt;br /&gt;}&lt;br /&gt;mov ebx,eax.TYieldObject.REBP;&lt;br /&gt;lea esi,eax.TYieldObject.StackFrame;&lt;br /&gt;add esi,eax.TYieldObject.StackFrameSize;&lt;br /&gt;dec ecx;&lt;br /&gt;mov edi,esi;&lt;br /&gt;sub edi,DWORD PTR eax.TYieldObject.InnerSEHOffsets+4*ecx;&lt;br /&gt;mov [edi+$08],ebx;&lt;br /&gt;@SEHCorrection:&lt;br /&gt;dec ecx;&lt;br /&gt;jl @ChangeBESP&lt;br /&gt;mov edi,esi;&lt;br /&gt;sub edi,DWORD PTR eax.TYieldObject.InnerSEHOffsets+4*ecx;&lt;br /&gt;mov [edi+$08],ebx;&lt;br /&gt;add [edi],edx;&lt;br /&gt;jmp @SEHCorrection;&lt;br /&gt;{&lt;br /&gt;Change BESP&lt;br /&gt;}&lt;br /&gt;@ChangeBESP:&lt;br /&gt;mov eax.TYieldObject.BESP,esp;&lt;br /&gt;{&lt;br /&gt;Restore stack frame&lt;br /&gt;}&lt;br /&gt;@RestoreStackFrame:&lt;br /&gt;mov ecx,eax.TYieldObject.StackFrameSize;&lt;br /&gt;sub esp,ecx;&lt;br /&gt;mov edi,esp;&lt;br /&gt;lea esi,eax.TYieldObject.StackFrame;&lt;br /&gt;rep movsb;&lt;br /&gt;{&lt;br /&gt;Connect Inner SEH frame. Are any inner SEH?&lt;br /&gt;}&lt;br /&gt;mov ecx,eax.TYieldObject.InnerSEHCount;&lt;br /&gt;jecxz @RestoreRegisters;&lt;br /&gt;{&lt;br /&gt;Connect Inner SEH frame&lt;br /&gt;}&lt;br /&gt;xor ecx,ecx;&lt;br /&gt;mov edi,eax.TYieldObject.BESP;&lt;br /&gt;sub edi,DWORD PTR eax.TYieldObject.InnerSEHOffsets+4*ecx;&lt;br /&gt;mov fs:[ecx],edi;&lt;br /&gt;{&lt;br /&gt;Restore Registers&lt;br /&gt;}&lt;br /&gt;@RestoreRegisters:&lt;br /&gt;mov ebx,eax.TYieldObject.REBX;&lt;br /&gt;mov ecx,eax.TYieldObject.RECX;&lt;br /&gt;mov edx,eax.TYieldObject.REDX;&lt;br /&gt;mov esi,eax.TYieldObject.RESI;&lt;br /&gt;mov edi,eax.TYieldObject.REDI;&lt;br /&gt;mov ebp,eax.TYieldObject.REBP;&lt;br /&gt;&lt;br /&gt;@JustBeforeTheJump:&lt;br /&gt;push [eax.TYieldObject.NextItemEntryPoint];&lt;br /&gt;mov eax,eax.TYieldObject.REAX;&lt;br /&gt;ret;&lt;br /&gt;@a1:;&lt;br /&gt;pop eax;&lt;br /&gt;pop esi;&lt;br /&gt;pop edi;&lt;br /&gt;pop ebx;&lt;br /&gt;pop ebp;&lt;br /&gt;mov al,eax.TYieldObject.IsYield;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TYieldObject.Yield(const Value);&lt;br /&gt;asm&lt;br /&gt;mov eax.TYieldObject.REBP,ebp;&lt;br /&gt;mov eax.TYieldObject.REAX,eax;&lt;br /&gt;mov eax.TYieldObject.REBX,ebx;&lt;br /&gt;mov eax.TYieldObject.RECX,ecx;&lt;br /&gt;mov eax.TYieldObject.REDX,edx;   // This is the Ref to const param&lt;br /&gt;mov eax.TYieldObject.RESI,ESI;&lt;br /&gt;mov eax.TYieldObject.REDI,EDI;&lt;br /&gt;pop ecx;&lt;br /&gt;mov eax.TYieldObject.NextItemEntryPoint,ecx;&lt;br /&gt;//We must do it first for valid const reference&lt;br /&gt;push eax;&lt;br /&gt;mov ecx,[eax];&lt;br /&gt;CALL  DWORD PTR [ecx+VMTOFFSET TYieldObject.SaveYieldedValue];&lt;br /&gt;pop eax;&lt;br /&gt;{&lt;br /&gt;Unwind SEH&lt;br /&gt;// There is no need ebx,esi,edi to retain&lt;br /&gt;}&lt;br /&gt;xor ebx,ebx;&lt;br /&gt;mov ecx,fs:[ebx];&lt;br /&gt;@SEHUnwind:&lt;br /&gt;jecxz @JustAfterSEHUnwind;&lt;br /&gt;cmp ecx,eax.TYieldObject.BESP;&lt;br /&gt;jnl @JustAfterSEHUnwind&lt;br /&gt;mov esi,eax.TYieldObject.BESP;&lt;br /&gt;sub esi,ecx;&lt;br /&gt;mov DWORD PTR eax.TYieldObject.InnerSEHOffsets+4*ebx,esi;&lt;br /&gt;inc ebx;&lt;br /&gt;mov ecx,[ecx];&lt;br /&gt;jmp @SEHUnwind;&lt;br /&gt;@JustAfterSEHUnwind:&lt;br /&gt;mov eax.TYieldObject.InnerSEHCount,ebx;&lt;br /&gt;{&lt;br /&gt;Connect Outer SEH frame.&lt;br /&gt;If no local SEH frames next two commands are redundant&lt;br /&gt;}&lt;br /&gt;xor ebx,ebx;&lt;br /&gt;mov fs:[ebx],ecx;&lt;br /&gt;{&lt;br /&gt;Save local stack frame&lt;br /&gt;}&lt;br /&gt;mov ecx,eax.TYieldObject.BESP;&lt;br /&gt;sub ecx,esp;&lt;br /&gt;mov eax.TYieldObject.StackFrameSize,ecx;&lt;br /&gt;jz @AfterSaveStack;&lt;br /&gt;lea esi,[esp];&lt;br /&gt;lea edi,[eax.TYieldObject.StackFrame];&lt;br /&gt;rep movsb;&lt;br /&gt;mov esp,eax.TYieldObject.BESP;&lt;br /&gt;@AfterSaveStack:&lt;br /&gt;mov eax.TYieldObject.IsYield,1;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;So for now you may use try/finally and try/except construction in procedure that uses yielding.&lt;br /&gt;Next article will be about additional improvements.&lt;br /&gt;Now I am thinking about separate stack.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-8406714049147150385?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/8406714049147150385/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=8406714049147150385' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/8406714049147150385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/8406714049147150385'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2007/10/seh-dynamic-unwinding-with-auto.html' title='SEH Dynamic Unwinding with auto correction'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-7461321904375803884</id><published>2007-10-22T09:57:00.000-07:00</published><updated>2007-10-22T21:54:46.953-07:00</updated><title type='text'>Just before improving implementation for dynamic SEH unwinding support</title><content type='html'>All times we declare local variables of finalized types the Delphi compiler inserts hidden try finally block that forces local variables of finalized types to be  finalized under any circumstances. &lt;br /&gt;&lt;br /&gt;Look at the next sample.&lt;br /&gt;&lt;br /&gt;Delphi code &lt;br /&gt;&lt;br /&gt;procedure TForm1.Button1Click(Sender: TObject);&lt;br /&gt;var a:string;&lt;br /&gt;begin&lt;br /&gt;a:='abcdef';&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;is mapped to appropriate x86 assembler code.&lt;br /&gt;Something like this   &lt;br /&gt;&lt;br /&gt;push ebp&lt;br /&gt;mov ebp,esp&lt;br /&gt;push $00&lt;br /&gt;xor eax,eax&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;This is the hidden try&lt;br /&gt;}&lt;br /&gt;push ebp&lt;br /&gt;push $XXXXXXXX&lt;br /&gt;push dword ptr fs:[eax]&lt;br /&gt;mov fs:[eax],esp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Unit1.pas. XX: a:='abcdef';&lt;br /&gt;lea eax,[ebp-$04]&lt;br /&gt;mov edx,$XXXXXXXX&lt;br /&gt;call @LStrLAsg&lt;br /&gt;Unit1.pas.XX: end;&lt;br /&gt;xor eax,eax&lt;br /&gt;pop edx&lt;br /&gt;pop ecx&lt;br /&gt;pop ecx&lt;br /&gt;mov fs:[eax],edx&lt;br /&gt;push $XXXXXXXX&lt;br /&gt;{&lt;br /&gt;Local variable Finalization code&lt;br /&gt;}&lt;br /&gt;lea eax,[ebp-$04]&lt;br /&gt;call @LStrClr&lt;br /&gt;&lt;br /&gt;ret &lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;And this is the hidden finally block&lt;br /&gt;}&lt;br /&gt;jmp @HandleFinally                            &lt;br /&gt;jmp $XXXXXXXX&lt;br /&gt;&lt;br /&gt;{Normal procedure Exit }&lt;br /&gt;pop ecx&lt;br /&gt;pop ebp&lt;br /&gt;ret&lt;br /&gt;&lt;br /&gt;Little explanation about SEH.&lt;br /&gt;&lt;br /&gt;FS is protected mode selector that indexes descriptor of segment in descriptor tables (descriptors map logical address space to linear) . &lt;br /&gt;Segment that is indexed by FS has special meaning for Windows Operation System.&lt;br /&gt;This segment contains structure known as Thread Environment Block, TEB. But TEB structure includes at start of it  a Win32 Thread Information Block (TIB). Win32 Thread Information Block (TIB) is a data structure in Win32 on x86 that stores info about the currently running thread.&lt;br /&gt;First field of TIB (i.e. fs:[0]) is current Structured Exception Handling frame. &lt;br /&gt;This field is used by system to provide your code the ability to react on raised exception.&lt;br /&gt;Because your procedures and functions may consist of not only hidden try/finally blocks, but yours try/finally try/except blocks, I have to implement some special SEH unwinding code and if there is any displacement I need to correct this dynamically.&lt;br /&gt;&lt;br /&gt;And because Yield has a very specific behaviour I have to dynamically attach/detach/correct local SEH frames.&lt;br /&gt;&lt;br /&gt;Read about this in my next article.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-7461321904375803884?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/7461321904375803884/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=7461321904375803884' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/7461321904375803884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/7461321904375803884'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2007/10/just-before-improving-implementation.html' title='Just before improving implementation for dynamic SEH unwinding support'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8054077600937508922.post-8167884518308359972</id><published>2007-10-19T05:28:00.000-07:00</published><updated>2007-10-23T10:50:11.501-07:00</updated><title type='text'>C# Yield  implementation in Delphi.</title><content type='html'>The C# yield keyword is used to provide a value to the enumerator object or to signal the end of iteration. The main idea of yield construction is to generate a collection item on request and return it to the enumerator consumer immediately. You may find it useful in some cases.&lt;br /&gt;&lt;br /&gt;As you know the Enumerator has two methods MoveNext and GetCurrent.&lt;br /&gt;But how does yield works?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Technical details of the implementation&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;When I saw this construction I asked myself where is MoveNext and GetCurrent?&lt;br /&gt;The function returns the enumerator object or interface, but the enumerator is not explicitly constructed anywhere. So there must be some secret mechanism that makes it possible.&lt;br /&gt;How does it really work? After spending some time in the debugger and the answer appeared.&lt;br /&gt;&lt;br /&gt;In short the compiler generates a special type of object that of course&lt;br /&gt;has some magic MoveNext and GetCurrent functions.&lt;br /&gt;&lt;br /&gt;And because this construction may be useful to our Delphi community, I asked myself, what can I do to get yield support in Delphi with saving the form of using like in С#. &lt;br /&gt;&lt;br /&gt;But of course I have to generalize implementation for all types.&lt;br /&gt;&lt;br /&gt;I started from the programmer’s viewpoint. Something like this:&lt;br /&gt;&lt;br /&gt;var  &lt;br /&gt; number, exponent, counter, Res:integer;&lt;br /&gt;begin&lt;br /&gt;…..&lt;br /&gt;Res:=1;&lt;br /&gt;while counter&lt;exponent do&lt;br /&gt; begin&lt;br /&gt; Res:=Res*number;&lt;br /&gt; Yield(Res);&lt;br /&gt; inc(counter);&lt;br /&gt; end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;I had to implement some class that implemented the magic MoveNext and GetCurrent functions.&lt;br /&gt;And if you use local vars (that is placed on stack) I had to implement some mechanism that guarantees no memory leaks for finalized types and some mechanism that guarantees that I use&lt;br /&gt;the valid local vars when the actual address of local vars has changed after last yield calling due to external reasons (e.g. enumerator  passed as parameter to other procedure, so the location in stack becomes different).&lt;br /&gt;&lt;br /&gt;So after each yield call I have to preserve the state of local vars and processor registers, &lt;br /&gt;clean up the stack and return a value to the enumerator consumer. &lt;br /&gt;And after next call to MoveNext I must allocate stack space, restore the state of local vars and processor registers, i.e. emulate that nothing has happened.  &lt;br /&gt;And of course I must provide a normal procedure for exiting at the end.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;So let’s begin &lt;/strong&gt;&lt;br /&gt;First of all we declare some types:&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt;  TYieldObject = class;&lt;br /&gt;  TYieldProc = procedure (YieldObject: TYieldObject);&lt;br /&gt;&lt;br /&gt;  TYieldObject = class&lt;br /&gt;  protected&lt;br /&gt;    IsYield:boolean;&lt;br /&gt;    NextItemEntryPoint:pointer;&lt;br /&gt;    BESP:pointer;&lt;br /&gt;    REAX,REBX,RECX,REDX,RESI,REDI,REBP:pointer;&lt;br /&gt;    StackFrameSize:DWORD;&lt;br /&gt;    StackFrame: array[1..128] of DWORD;&lt;br /&gt;    procedure SaveYieldedValue(const Value); virtual; abstract;&lt;br /&gt;  public&lt;br /&gt;    constructor Create(YieldProc: TYieldProc);&lt;br /&gt;    function MoveNext:boolean;&lt;br /&gt;    procedure Yield(const Value);&lt;br /&gt;  end; &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;And the implementation&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;constructor TYieldObject.Create(YieldProc:TYieldProc);&lt;br /&gt;asm&lt;br /&gt;  mov eax.TYieldObject.NextItemEntryPoint,ecx;&lt;br /&gt;  mov eax.TYieldObject.REAX,EAX;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;function TYieldObject.MoveNext: boolean;&lt;br /&gt;asm&lt;br /&gt;  { Save the value of following registers.&lt;br /&gt;    We must preserve EBP, EBX, EDI, ESI, EAX for some circumstances.&lt;br /&gt;    Because there is no guarantee that the state of registers will &lt;br /&gt;    be the same after an iteration }&lt;br /&gt;  push ebp;&lt;br /&gt;  push ebx;&lt;br /&gt;  push edi;&lt;br /&gt;  push esi;&lt;br /&gt;  push eax;&lt;br /&gt;&lt;br /&gt;  mov eax.TYieldObject.IsYield,0&lt;br /&gt;  push offset @a1&lt;br /&gt;  xor edx,edx;&lt;br /&gt;  cmp eax.TYieldObject.BESP,edx;&lt;br /&gt;  jz @AfterEBPAdjust;&lt;br /&gt;&lt;br /&gt;  { Here is the correction of EBP. Some need of optimization still exists. }&lt;br /&gt;  mov edx,esp;&lt;br /&gt;  sub edx,eax.TYieldObject.BESP;&lt;br /&gt;  add [eax.TYieldObject.REBP],edx&lt;br /&gt;  @AfterEBPAdjust:&lt;br /&gt;  mov eax.TYieldObject.BESP,esp;&lt;br /&gt;&lt;br /&gt;  { Is there any local frame? }&lt;br /&gt;  cmp eax.TYieldObject.StackFrameSize,0&lt;br /&gt;  jz @JumpIn;&lt;br /&gt;&lt;br /&gt;  { Restore the local stack frame }&lt;br /&gt;  mov ecx,eax.TYieldObject.StackFrameSize;&lt;br /&gt;  sub esp,ecx;&lt;br /&gt;  mov edi,esp;&lt;br /&gt;  lea esi,eax.TYieldObject.StackFrame;&lt;br /&gt;&lt;br /&gt;  { Some need of optimization still exists. Like movsd}&lt;br /&gt;  rep movsb;&lt;br /&gt;  @JumpIn:&lt;br /&gt;&lt;br /&gt;  { Restore the content of processor registers }&lt;br /&gt;  mov ebx,eax.TYieldObject.REBX;&lt;br /&gt;  mov ecx,eax.TYieldObject.RECX;&lt;br /&gt;  mov edx,eax.TYieldObject.REDX;&lt;br /&gt;  mov esi,eax.TYieldObject.RESI;&lt;br /&gt;  mov edi,eax.TYieldObject.REDI;&lt;br /&gt;  mov ebp,eax.TYieldObject.REBP;&lt;br /&gt;  push [eax.TYieldObject.NextItemEntryPoint];&lt;br /&gt;  mov eax,eax.TYieldObject.REAX;&lt;br /&gt;&lt;br /&gt;  { Here is the jump to next iteration }&lt;br /&gt;  ret;&lt;br /&gt;&lt;br /&gt;  { And we return here after next iteration in all cases, except exception of course. }&lt;br /&gt;  @a1:;&lt;br /&gt;&lt;br /&gt;  { Restore the preserved EBP, EBX, EDI, ESI, EAX registers }&lt;br /&gt;  pop eax;&lt;br /&gt;  pop esi;&lt;br /&gt;  pop edi;&lt;br /&gt;  pop ebx;&lt;br /&gt;  pop ebp;&lt;br /&gt;  { This Flag indicates the occurrence or no occurrence of Yield  }&lt;br /&gt;  mov al,eax.TYieldObject.IsYield;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TYieldObject.Yield(const Value);&lt;br /&gt;asm&lt;br /&gt;  { Preserve EBP, EAX,EBX,ECX,EDX,ESI,EDI }&lt;br /&gt;  mov eax.TYieldObject.REBP,ebp;&lt;br /&gt;  mov eax.TYieldObject.REAX,eax;&lt;br /&gt;  mov eax.TYieldObject.REBX,ebx;&lt;br /&gt;  mov eax.TYieldObject.RECX,ecx;&lt;br /&gt;  mov eax.TYieldObject.REDX,edx;   // This is the Ref to const param&lt;br /&gt;  mov eax.TYieldObject.RESI,ESI;&lt;br /&gt;  mov eax.TYieldObject.REDI,EDI;&lt;br /&gt;  pop ecx;&lt;br /&gt;  mov eax.TYieldObject.NextItemEntryPoint,ecx;&lt;br /&gt;&lt;br /&gt;  //We must do it first for valid const reference&lt;br /&gt;  push eax;&lt;br /&gt;  mov ecx,[eax];&lt;br /&gt;  CALL  DWORD PTR [ecx+VMTOFFSET TYieldObject.SaveYieldedValue];&lt;br /&gt;  pop eax;&lt;br /&gt;  &lt;br /&gt;  { Calculate the current local stack frame size }&lt;br /&gt;  mov ecx,eax.TYieldObject.BESP;&lt;br /&gt;  sub ecx,esp;&lt;br /&gt;  mov eax.TYieldObject.StackFrameSize,ecx;&lt;br /&gt;  jz @AfterSaveStack;&lt;br /&gt;&lt;br /&gt;  { Preserve the local stack frame }&lt;br /&gt;  lea esi,[esp];&lt;br /&gt;  lea edi,[eax.TYieldObject.StackFrame];&lt;br /&gt;  &lt;br /&gt;  { Some need of optimization still exists. Like movsd }&lt;br /&gt;  rep movsb;&lt;br /&gt;  mov esp,eax.TYieldObject.BESP;&lt;br /&gt;  @AfterSaveStack:&lt;br /&gt;&lt;br /&gt;  {Set flag of Yield occurance }&lt;br /&gt;  mov eax.TYieldObject.IsYield,1;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;And what about my improvements&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;As for improvements I am still thinking about  unwinding the local SEH (Structured Exception Handling) frames on yielding and restore it with any needed correction after return.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;And how do you use it?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt;  TYieldInteger = class(TYieldObject)&lt;br /&gt;  protected&lt;br /&gt;    Value:integer;&lt;br /&gt;    function GetCurrent:integer;&lt;br /&gt;    procedure SaveYieldedValue(const Value); override;&lt;br /&gt;  public&lt;br /&gt;    property Current:integer read GetCurrent;&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;{ TYieldInteger }&lt;br /&gt;&lt;br /&gt;function TYieldInteger.GetCurrent: integer;&lt;br /&gt;begin&lt;br /&gt;  Result:=Value;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TYieldInteger.SaveYieldedValue(const Value);&lt;br /&gt;begin&lt;br /&gt;  Self.Value:=integer(Value);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;So now there is full support for &lt;strong&gt;integer.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  TYieldString = class(TYieldObject)&lt;br /&gt;  protected&lt;br /&gt;    Value:string;&lt;br /&gt;    function GetCurrent:string;&lt;br /&gt;    procedure SaveYieldedValue(const Value); override;&lt;br /&gt;  public&lt;br /&gt;    property Current:string read GetCurrent;&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;{ TYieldString }&lt;br /&gt;&lt;br /&gt;function TYieldString.GetCurrent: string;&lt;br /&gt;begin&lt;br /&gt;  Result:=Value;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TYieldString.SaveYieldedValue(const Value);&lt;br /&gt;begin&lt;br /&gt;  Self.Value := string(Value);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;And now there is full support for &lt;strong&gt;string.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Sample of using a string Enumerator&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;procedure StringYieldProc(YieldObj: TYieldObject);&lt;br /&gt;var  &lt;br /&gt;  YieldValue: string;&lt;br /&gt;  i: integer;&lt;br /&gt;begin&lt;br /&gt;  YieldValue:='None';&lt;br /&gt;  YieldObj.Yield(YieldValue);&lt;br /&gt;  for i := 1 to 10 do&lt;br /&gt;  begin&lt;br /&gt;    YieldValue := YieldValue + IntToStr(i);&lt;br /&gt;    YieldObj.Yield(YieldValue);&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;function TForm1.GetEnumerator: TYieldString;&lt;br /&gt;begin&lt;br /&gt;  Result:=TYieldString.Create(StringYieldProc);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TForm1.Button1Click(Sender: TObject);&lt;br /&gt;var &lt;br /&gt;  a:string;&lt;br /&gt;begin&lt;br /&gt;  for a in self do &lt;br /&gt;    Memo1.Lines.Add(a);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;From Russia with love Sergey Antonov aka oxffff.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;ECMA 334&lt;br /&gt;ECMA 335&lt;br /&gt;MSDN&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8054077600937508922-8167884518308359972?l=santonov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://santonov.blogspot.com/feeds/8167884518308359972/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8054077600937508922&amp;postID=8167884518308359972' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/8167884518308359972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8054077600937508922/posts/default/8167884518308359972'/><link rel='alternate' type='text/html' href='http://santonov.blogspot.com/2007/10/yield-you.html' title='C# Yield  implementation in Delphi.'/><author><name>Sergey Antonov aka oxffff</name><uri>http://www.blogger.com/profile/10045102019512764602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_fwEi4kRA5N0/Sw2aTLuVtLI/AAAAAAAAAAM/JeNjgYggmJM/S220/avatar.jpg'/></author><thr:total>2</thr:total></entry></feed>
