-|
-
- |
-
-
- |
+
+@newxor[]
+^eval(1!|2 #примечание()zzz
+|0x100)
+#^eval(1!||2)
+^if(1!|1){y}{n}
+
+#@method[$bad]
+
+@doubleliterals[]
+#^eval(1e-10)
+^eval("1e-20")
+
+@xpath3[]
+$constr[^xdoc::create{ }]
+$objectData[^constr.selectSingle[/constructor-data/object]]
+$objectData.nodeType
+$objectData.firstChild.nodeValue
+
+@calltest[]
+^calltest2[string]
+
+@calltest2[s]
+$s
+
+@ttransformsep[]
+$input[^xdoc::load[20020909131046.xml]]
+$output[^input.transform[generated.xsl]]
+^output.string[]
+
+@okswitchtest[]
+$local[local value]
+^switch[1]{
+ ^case[1]{1code $local}
+}
+
+@badswitchtest[]
+^switch[1]{
+ ^badswitchtestcase[]
+}
+@badswitchtestcase[][local]
+$local[local value]
+ ^case[1]{1code $local}
+
+@badjunction[]
+^badj1[]
+^badj2[]
+
+@html-почта[]
+$переменная[значение]
+^mail:send[
+ $.from[paf@mail]
+ $.to[paf@mail]
+ $.subject[htmltest1]
+ $.html{тест$переменная= !}
+]
+
+
+@грязные-cookie[]
+$cookie:a[&]
+$cookie:a
+
+@новый-split[]
+$abc[a.b.c]
+#$table[^abc.split[.]]
+#$table[^abc.split[.;l]]
+#$table[^abc.split[.;v]]
+$table[^abc.split[.;lv]]
+^table.menu{$table.piece}[,]
+
+#$table[^abc.split[.;h]]
+$table[^abc.split[.;hr]]
+$table.0,$table.1,$table.2
+
+@delimiters[]
+$a#1[1]
+$a#1=
+
+
+@badcolumntest[]
+$table[^table::load[ext.cfg]]
+$table.b
+
+
+@virtualtest[]
+$derived[^derived::create[derived create actual param]]
+^derived.test[]
+
+
+@voidpostest[]
+$s[]
+^s.pos[$nothing]
+
+@postest[]
+$s[$nothing]
+^s.pos[$nothing]
+
+@cookieexpirestest[]
+#$cookie:exptest[1]
+#$cookie:exptest[$.value[2] $.expires(+1)]
+$response:xxxx[^date::now(+10)]
+$response:yyy[$.value[^date::now(+20)]]
+$response:yyy[$.value[vvv] $.aaaa[^date::now(+20)]]
+
+@rbodytest[]
+$request:body=
+
+
+@staticstest2[]
+^$derived:derived_var=$derived:derived_var
+^$derived:a=$derived:a
+$derived:a[changed] ^$derived:a=$derived:a
+$derived:derived_var[changed]
+^$derived:derived_var=$derived:derived_var
+
+@staticstest[]
+$derived[^derived::create[]]
+^derived.test[]
+
+^$derived.a=$derived.a
+^$derived.x=$derived.x
+
+^if($derived is derived){derived is derived}{error: derived is not derived}
+^if($derived is table){derived is table}{error:derived is not table}
+
+^^eval(^$derived)=^eval($derived)
+^^if(^$derived)=^if($derived){y}{n}
+
+
+@xdoctypetest[]
+$xdoc[^xdoc::create[x]]
+^if($xdoc is xdoc){y}{n}
+
+@xtabletest[]
+$xtableo[^xtable::create[]]
+^if($xtableo is table){y}{n}
+#^xtableo.columns[]
+
+@monthdays[month]
+$from[^date::create(2000;$month;1)]
+$to[^date::create($from)] ^to.roll[month](+1)
+$result($to-$from)
+
+@badconstructor[]
+^date::now[]
+
+@datesaving[]
+$now[^date::now[]]
+$now.daylightsaving
+$now.yearday
+#
+$date[^date::create(2002;1;3)]
+$date.daylightsaving
+$date.yearday
+
+@mail4[]
+^mail:send[
+ $.from[paf@mail.design.ru]
+ $.to[paf@mail.design.ru]
+ $.subject[^taint[uri][москва]=2]
+ $.text[^taint[uri][москва]=]
+ $.html{link}
+]
+@processtest[]
+ $f[^file::load[text;piece.p]] ^process{$f.text}
+ $ORIGINS(1)
+
+
+@badpos[]
+$s[123]
+^s.mid(0;2)
+
+@wwrapperpass[]
+$h[^hash::create[]]
+$h.a(1)
+^my_method[^if(1){$h}]
+работает. так и должно быть?
+
+@my_method[p]
+^p._count[]
+
+
+@tableclonelimit[]
+$source[^table::create{a
+aa
+bb
+cc}]
+^source.offset(1)
+#$dest[^table::create[$source]]
+$dest[^table::create[$source;$.offset(2)]]
+$dest[^table::create[$source;$.limit(2)]]
+$dest[^table::create[$source;$.offset(1)$.limit(1)]]
+$dest[^table::create[$source;$.offset(1)$.limit(2)]]
+$dest[^table::create[$source;$.offset[cur]$.limit(2)]]
+
+^dest.menu{$dest.a}[,]
+
+@joinlimit[]
+$source[^table::create{a
+aa
+bb
+cc}]
+^source.offset(2)
+$dest[^table::create{a
+xx
+}]
+#^dest.join[$source]
+#^dest.join[$source;$.offset(2)]
+#^dest.join[$source;$.limit(2)]
+#^dest.join[$source;$.offset(1)$.limit(1)]
+#^dest.join[$source;$.offset(1)$.limit(2)]
+#^dest.join[$source;$.offset[cur]$.limit(1)]
+^dest.join[$source;$.limit(0)]
+
+^dest.menu{$dest.a}[,]
+
+@cgit[]
+$f[^file::cgi[showenv.cmd]]
+$f.HELLO=
+$f.CONTENT-TYPE=
+$f.content-type=
+
+
+@mimet[]
+$f[^file::stat[a.GIF]]
+$f.content-type
+
+
+@tfind[]
+^file:find[index.html]
+
+@tstdin[]
+$f[^file::exec[test.pl;$.stdin[проверка stdin потока]]]
+$f.text
+
+@sergestrandef[]
+$sQuantity[ ]
+^sQuantity.int(10)
+
+@xmltransformbyxdoc[]
+$xdoc[^xdoc::set{^process{
+
+
+
+ 1 2
+
+
+}}]
+$sheet[^xdoc::create{
+
+
+
+
+
+
+defparam1
+defparam2
+
+
+
+ param1=
+ param2=
+
+ test return
+
+
+
+ test return3
+
+
+
+
+ z
+ para1=
+
+
+
+
+
+
+
+
+
+
+}]
+
+
+$xdoc[^xdoc.transform[$sheet]]
+$string[^xdoc.string[$.method[html]]]
+^string.save[a]
+^untaint[html]{$string}
+
+
+
+@tnormalize[]
+#s состоит из 1000 фрагментов
+$s[^for[i](0;999){фрагмент }]
+#это займет много ресурсов
+^s.match[фраг][g]{перга}
+#это займет меньше ресурсов
+#$normalized[^s.normalize[]]
+#^normalized.match[фраг][g]{перга}
+
+@sendtests[]
+^text[]
+#^html[]
+#^text-n-html[]
+#^file[]
+#^text-n-file[]
+#^text-n-html-n-file[]
+#^backwardcomp[]
+
+@backwardcomp[]
+^mail:send[
+ $.from[paf]
+ $.to[paf]
+ $.body[this is text value]
+]
+
+@text[]
+^mail:send[
+ $.from[paf]
+ $.to[paf]
+ $.text[
+ $.value[this is text value]
+ ]
+]
+
+@html[]
+^mail:send[
+ $.from[paf]
+ $.to[paf]
+ $.html{this is html value ^taint[<] 10}
+]
+
+@text-n-html[]
+^mail:send[
+ $.from[paf]
+ $.to[paf]
+ $.text[
+ $.value[this is text value]
+ ]
+ $.html[
+ $.value{this is html value ^taint[<] 10}
+ ]
+]
+
+@file[]
+^mail:send[
+ $.from[paf]
+ $.to[paf]
+ $.file[^file::load[binary;image.jpg]]
+]
+
+@text-n-file[]
+^mail:send[
+ $.from[paf]
+ $.to[paf]
+ $.text[
+ $.value[this is text value]
+ ]
+ $.file[^file::load[binary;image.jpg]]
+]
+
+@text-n-html-n-file[]
+^mail:send[
+ $.from[paf]
+ $.to[paf]
+ $.text[
+ $.value[this is text value]
+ ]
+ $.html[
+ $.COntent-type[$.value[text/html]$.charset[windows-1251xx]]
+ $.value{this is html value ^taint[<] 10}
+ ]
+ $.file[^file::load[binary;image.jpg]]
+]
+
+
+
+@md5salt[]
+1234
+
+@cryptdocsample[]
+$users[^table::create{name password
+alice ***
+bob ***
+}]
+
+$htpasswd[^table::create[nameless]{}]
+^users.menu{
+ ^htpasswd.append{$users.name:^math:crypt[$users.password;^$apr1^$^md5salt[]]}
+}
+
+^htpasswd.save[nameless;.htpasswd-parser-test]
+
+
+@tcrypt[]
+#^math:crypt[123;^$apr1^$1234567890abcdef]
+^math:crypt[123;^$apr1^$]
+
+@tfilespec[]
+src=$selffilespec
+dirname=^file:dirname[$selffilespec]
+basename=^file:basename[$selffilespec]
+justname=^file:justname[$selffilespec]
+justext=^file:justext[$selffilespec]
+
+@datecreatestring3[]
+$new_after[^date::now(-3)]
+$articles[^table::create{id title last_update
+1 привет 2002-07-03}]
+^articles.menu{
+ $last_update[^date::create[$articles.last_update]]
+ $articles.title
+ ^if($last_update > $new_after){новая}
+
+}
+
+@div[]
+$var(5)
+^var.inc(7)
+^var.dec(3)
+^var.div(4)
+^var.mul(2)
+$var
+
+
+@xdocsave[]
+$document[^xdoc::create{
+
+строка1
+строка2
+}]
+^document.save[test.xml]
+
+@xdocstring[]
+$document[^xdoc::create{
+
+строка1
+строка2
+}]
+^document.string[
+ $.method[html]
+]
+
+
+@xdocload[]
+$document[^xdoc::load[article.xml]]
+$response:body[^document.file[$.media-type[text/xml]]]
+
+
+@xdoccreatetag[]
+$document[^xdoc::create[document]]
+$paraNode[^document.createElement[para]]
+$dummy[^document.documentElement.appendChild[$paraNode]]
+$response:body[^document.file[$.media-type[text/xml]]]
+
+
+@xdoccreate[]
+$document[^xdoc::create{
+
+текст
+}]
+$response:body[^document.file[$.media-type[text/xml]]]
+
+@selectBool2[]
+$d[^xdoc::set{
+}]
+^if(^d.selectBool[/t/@n > 10]){
+ /t/@n больше 10
+}{
+ не больше
+}
+
+
+@selectNumber2[]
+$d[^xdoc::set{
+}]
+^d.selectNumber[number(/t/@n)+1]
+^d.selectNumber[2*2]
+
+
+@selectString2[]
+$d[^xdoc::set{
+}]
+# результат=привет
+^d.selectString[string(t/@attr)]
+
+
+@selectSingle2[]
+$d[^xdoc::set{
+}]
+# результат=один элемент "t"
+$element[^d.selectSingle[t]]
+# результат=2 (количество атрибутов )
+Количество атрибутов: ^element.attributes._count[]
+# результат=не существует (нет )
+^if(^d.select[x]){
+ x существует
+}{
+ x не существует
+}
+
+@select2[]
+$d[^xdoc::set{}]
+# результат: список из одного элемента "t"
+$list[^d.select[t]]
+# результат: 2 = количество атрибутов
+^list.0.attributes._count[]
+^for[i](0;$list-1){
+ $attr[$list.$i]
+ $attr.nodeName = $attr.nodeType
+}
+
+
+@selectt[]
+$d[^xdoc::set{}]
+$list[^d.select[t]]
+^list.0.attributes._count[]
+
+@envt[]
+$f[^file::exec[showenv.cmd;
+ $.bad[value]
+ $.CGI_good[value]
+]]
+$f.status
+$f.stderr
+$f.text
+
+
+@tserge[]
+^if(" 09 "){y}
+
+@datetest[]
+ $f[^file::stat[some.zip]]
+Размер в байтах: $f.size
+Год создания: $f.cdate.year
+$now[^date::now[]]
+$DAYS_CONSIDERED_NEW(3)
+Статус: ^if($f.mdate >= $now-$DAYS_CONSIDERED_NEW){новый;старый}
+
+
+@checkList[]
+...^oneOf[a;a,b,c]...
+#...^oneOf[a;ax,b,c]...
+...^oneWord[word]...
+#...^oneWord[wo rd]...
+
+
+@oneOf[s;list][t] выдаёт строку, если строка она есть в списке(разделенном запятыми)
+$t[^list.lsplit[,]]
+^if(!^t.locate[piece;$s]){^throw[user;$s;unknown]}
+$result[$s]
+
+@oneWord[s]
+^if(^s.match[\W]){^throw[user.data;$s;not word]}{$s}
+
+@pngsize[]
+$i[^image::measure[test.png]]
+^i.html[]
+
+
+@forkeys[]
+$text[^form:fields.foreach[key;val]{$key=$val
+}]
+^text.save[ttt.txt]
+=$text=
+
+
+@tstoredproc2[]
+^connect[odbc://DSN=nestle^;UID=nestle^;PWD=mbm32]{
+ ^void:sql{exec pafvoid}
+}
+
+@tstoredproc[]
+^connect[odbc://DSN=nestle^;UID=nestle^;PWD=mbm32]{
+ $t[^table::sql{exec pafproc}]
+# $t[^table::sql{{call pafproc}}]
+ $c[^t.columns[]]
+ ^c.menu{$c.column}[ ]
+}
+
+@datecreatestring2[]
+
+^datecreatestring2show[2000]
+^datecreatestring2show[2000-02]
+^datecreatestring2show[2000-2-03]
+^datecreatestring2show[2000-02-03 15]
+^datecreatestring2show[2000-02-03 15:30]
+^datecreatestring2show[2000-02-03 15:30:04]
+^datecreatestring2show[2000-02-03 15:30:04 hren]
+^datecreatestring2show[15:30]
+^datecreatestring2show[15:30:05]
+^datecreatestring2show[15:30:05 hren]
-
-
+
+@datecreatestring2show[s]
+$date[^date::create[$s]]
- |
- |
+$s | ^date.sql-string[] |
-
-
-
-
-
\ No newline at end of file
+
+
+@junctionprob[][l]
+$l[123]
+$a{$l}
+^junctionprobnested[$a]
+@junctionprobnested[p]
+$p
+
+
+@callindirecttarget[]
+callindirecttarget called
+@callindirect[]
+$f[$callindirecttarget]
+^f[]
+
+@xpath2[]
+$xdoc[^xdoc::create{
+
+
+
+
+
+
+}]
+
+#^xdoc.string[]
+
+$fieldList[^xdoc.selectSingle[/doc/field-list]]
+#^fieldList.childNodes._count[]
+$fields[^fieldList.select[field]]
+#^fields._count[]
+^fields.foreach[k;node]{
+ $node.nodeName
+}
+@counter[filespec][f;s]
+^file:lock[$filespec]{
+ $f[^file::load[text;$filespec]]
+ $s[^eval($f.text+1)]
+ ^s.save[$filespec]
+}
+$s
+
+@xmlspace[]
+$xdoc[^xdoc::set{^process{
+
+
+
+ 1 2
+
+
+}}]
+$xdoc[^xdoc.transform[global.xsl]]
+$string[^xdoc.string[$.method[html]]]
+^string.save[a]
+^untaint[html]{$string}
+
+@badthrows[]
+#^throw[a;b;]
+^throw[a;]
+
+@mssqltypes1[]
+^connect[odbc://DSN=nestle^;UID=nestle^;PWD=mbm32]{
+# ^string:sql{select { ts '1998-05-02 01:23:56.123' }}
+# ^string:sql{select CAST({ ts '1998-05-02 01:23:56.123' }AS smalldatetime)}
+# ^string:sql{select CAST({ts '2002-04-28 00:00:00.000'} AS smalldatetime)}
+ $t[^table::sql{select a from paf}]
+ ^t.count[]
+}
+
+@datecreatestring[]
+$d[^date::create[2002-04-33 01:03:04]]
+^d.sql-string[]
+
+@method[hash]
+$hash.key
+@mainZ[]
+^method[
+ $.key{code}
+]
+
+@tablehasht[]
+$t[^table::create{p
+1
+3
+2
+4}]
+
+$h[^t.hash[p]]
+
+=^h._count[]=
+
+
+@sqldefaults[]
+^connect[mysql://mdm:4b833ljq@db-mysql/mdm]{
+ ^int:sql{select news_id from news where news_id=-1}[$.default{2}]
+ ^string:sql{select news_id from news where news_id=-1}[$.default{2}]
+}
+=======
+
+OK
+>>>>>>> 1.50
+
+@tcrashlocaljunctionsv2[]
+$a[
+ $b{ $c[1] }
+]
+$b
+$c
+
+@tcrashlocaljunctions[]
+$var[aaa]
+^if(1){
+^tcrashlocaljunctions1[]
+}
+
+$j
+
+@tcrashlocaljunctions1[][var]
+$var[varvalue]
+ $j{
+ $var
+ }
+$j
+
+@tjunctions[][tl]
+$t[^t::create[]]
+^tjunctionsi[]
+
+@tjunctionsi[][tl]
+$tl[12345]
+^t.tjunctionsm[
+ $.key{
+ $tl
+ }
+]
+
+@replacetest[]
+$b[b]
+$s[
+aaaaaaaaaa${b}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa${b}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+]
+^s.replace[^table::create{from to
+ba !_}]
+
+
+@matchoptionpp[]
+#$ORIGINS(1)
+$s[
+aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+]
+^s.match[b;g']{($match.prematch|$match.match|$match.postmatch)}
+
+
+@txdocxnodechild[]
+$xdoc[^xdoc::set{}]
+$xdoc.nodeName
+^xdoc.selectNumber[2*2]
+$xdoc:ELEMENT_NODE
+
+
+@tclasses[]
+$t[^t::create[]]
+^t.method[]
+
+^t.base_method[]
+
+
+@errort[]
+^xdoc::create[a]
+#^throw[user;here;this]
+
+@tselectNumber[]
+$d[^xdoc::set{}]
+^d.selectString[string(d/@attr)]
+^d.selectNumber[2*2]
+^d.selectNumber[number(/d/@n)+1]
+
+
+@invaliddate2[]
+$d[^date::create(1018946575/60/60)] ^d.sql-string[]
+
+@process2[]
+^^process{
+ ^process{
+ ^$a[^^if(0){^$.k[y]}{^$.k[^^hren[]n]}] ^$a.k
+ }
+}
+
+@casehashtext[]
+$tt[1]
+$tmp[
+ ^switch[$tt]{
+ ^case[1]{
+ $.aaa[123]
+ }
+ ^case[DEFAULT]{
+ $.bbb[456]
+ }
+ }
+ shit!
+]
+#$tmp
+$tmp.aaa
+
+@subjvaltest[]
+$a12[val]
+$b[12]
+$a$b
+
+@tableselect0[]
+$person[^table::create{name height
+paf 1.77
+шохин 2.07
+moko 1.77
+}]
+$nottoohigh[^person.select($person.height<2)]
+^nottoohigh.menu{$nottoohigh.name }
+
+@transparams[]
+$idoc[^xdoc::create{}]
+$odoc[^idoc.transform[global.xsl;
+ $.param1['1']
+ $.param2['2']
+]]
+^taint[^odoc.string[$.method[html]]]
+
+@memnotest1[]
+^for[i](0;4000){
+
+ $xxxx[$i]
+ $xxxx
+
+}
+
+@memnotest1notes[]
+одна итерация цикла:
+[Mon Apr 8 20:12:02 2002] execution-------------------------|
+'469641+=28 wcodeframe -> 0 !optimize[3]''469669+=49 string от {} -> 0 optimize[3]'
+[Mon Apr 8 20:12:02 2002] 12:STRING__WRITE
+[Mon Apr 8 20:12:02 2002] "|| "
+[Mon Apr 8 20:12:02 2002] 12:WITH_ROOT
+[Mon Apr 8 20:12:02 2002] 13:VALUE
+[Mon Apr 8 20:12:02 2002] "xxxx" string
+[Mon Apr 8 20:12:02 2002] 14:CREATE_EWPOOL'469377+=24 wcodeframe -> 0 !optimize[1]''469401+=49 string -> 41 !optimize[7]'
+[Mon Apr 8 20:12:02 2002] 16:WITH_READ
+[Mon Apr 8 20:12:02 2002] 17:VALUE
+[Mon Apr 8 20:12:02 2002] "i" string
+[Mon Apr 8 20:12:02 2002] 18:GET_ELEMENT
+[Mon Apr 8 20:12:02 2002] 17:WRITE_VALUE'469452+=40 MAX_NUMBER -> !~2 actual digits''469492+=49 -> 41 !'
+[Mon Apr 8 20:12:02 2002] 16:REDUCE_EWPOOL'469541+=24 VString -> 0 optimize[5]'
+[Mon Apr 8 20:12:02 2002] 15:CONSTRUCT_VALUE
+[Mon Apr 8 20:12:02 2002] 12:STRING__WRITE
+[Mon Apr 8 20:12:02 2002] "| "
+[Mon Apr 8 20:12:02 2002] 12:WITH_READ
+[Mon Apr 8 20:12:02 2002] 13:VALUE
+[Mon Apr 8 20:12:02 2002] "xxxx" string
+[Mon Apr 8 20:12:02 2002] 14:GET_ELEMENT
+[Mon Apr 8 20:12:02 2002] 13:WRITE_VALUE'469573+=41 string expand nothing for now'
+[Mon Apr 8 20:12:02 2002] 12:STRING__WRITE
+[Mon Apr 8 20:12:02 2002] "||"'469617+=24 VString -> 0 !optimize[6]'
+[Mon Apr 8 20:12:02 2002] <-ja returned
+[Mon Apr 8 20:12:02 2002] ja->
+
+201/328=0.612804878049 %%optimized
+
+1.
+CREATE_*POOL
+ сделать
+*POOL_POOLED+CODE
+ где
+ wwrapper
+ и(возможно) wcodeframe
+ +string
+ стековая переменная
+
+2.
+избавиться от обёртки при возврате результата process [см. тело _for]
+
+3.
+сделать callback для process, чтобы вынести invariants из _for & co.
+
+4.
+ @todo склеить get_element и write_value (при вставлении? write_value)
+
+5.
+reduce_*pool -> вариант получить именно string, без VString обёртки [часто
+обёртка сразу выбрасывается = не нужна]
+
+6.
+process вариант получить именно string, без VString обёртки [часто обёртка
+сразу выбрасывается = не нужна]
+
+7.
+string head, убить 8 байт неправильной link
+
+@voidparams[]
+^voidparamsm[$form:field]
+
+@voidparamsm[p]
+^p.int(123)
+
+@rolls2[]
+$now[^date::now[]]
+$d[^date::create($now.year;$now.month)] ^d.sql-string[]
+^for[i](1;12){
+ ^d.roll[month](-1) ^d.sql-string[]
+}
+
+@cacheexpireschanging[]
+^cache[$DB_HOME/keyключ][^date::now(+1)]{ ^rem{1 day}
+ ^cache[^date::now(+4/24/60/60)]
+# ^cache(2)
+# ^cache(0)
+ ^math:random(100)
+}
+
+
+
+@cacheexpiresfixed[]
+^cache[$DB_HOME/keyключ][^date::now(+2/24/60/60)]{
+ ^math:random(100)
+}
+
+@dateoffsets[]
+$d[^date::create(^date::now[]+1/24/60)]
+#$d[^date::now(+1/24/60)]
+^d.sql-string[]
+#$d
+
+@exceptionTypes[]
+# parser.compile ^test[} компиляция (непарная скобка, ...)
+# parser.runtime ^if(0). параметры (больше/меньше, чем нужно, не тех типов, ...)
+# number.zerodivision ^eval(1/0) ^eval(1%0)
+# number.format ^eval(abc*5)
+# file.missing ^file:delete[delme] not found
+# file.access ^table::load[.] no rights
+# image.format ^image::measure[index.html] not gif/jpg
+# sql.connect ^connect[mysql://baduser:pass@host/db]{} not found/timeout
+# sql.execute ^connect[mysql://okuser:pass@host/db]{^void:sql{select bad}} syntax error
+# xml ^xdoc::create{} any error in xml/xslt libs
+# smtp.connect not found/timeout
+# smtp.execute communication error
+
+@roll2[]
+$d[^date::create(2002;4;2;2;2;3)] ^d.sql-string[]
+^d.roll[day](+365*3+1) ^d.sql-string[]
+
+
+@rolls[]
+$d[^date::create(2002;4;4)]
+^d.sql-string[]
+^for[i](1;7){
+^d.roll[day](-1)
+^d.sql-string[]
+}
+
+$d[^date::create(2002;3;28)]
+^d.sql-string[]
+^for[i](1;7){
+^d.roll[day](+1)
+^d.sql-string[]
+}
+
+$d[^date::create(2002;12;3)]
+^d.sql-string[]
+^for[i](1;14){
+^d.roll[day](-1)
+^d.sql-string[]
+}
+
+$d[^date::create(2002;10;19)]
+^d.sql-string[]
+^for[i](1;14){
+^d.roll[day](+1)
+^d.sql-string[]
+}
+
+
+
+
+
+
+@exceptions1[]
+^try{
+ aaa
+ ^throw[custom1;paf;is stupid]
+}{
+ ^if($exception.type eq custom1){
+# $exception.handled(1)
+ ^throw[$exception]
+ type=$exception.type
+ source=$exception.source
+ file=$exception.file
+ lineno=$exception.lineno
+ comment=$exception.comment
+ }
+}
+
+@locate_by_expr[]
+$t[^table::create{a b
+1 nok
+2 ok
+3 nok
+}]
+^if(^t.locate($t.a==2)){$t.b}{n}
+
+@method_junction_params[param]
+^if($param is junction){junction}{ne junction}
+
+@verifyCookie[value]
+^if($cookie:dummyvote eq $value){
+ $result(1)
+}{
+ $cookie:dummyvote[$value]
+ $result(0)
+}
+
+@execlangs[]
+$f[^file::exec[test.pl]]
+err:$f.stderr
+^process{$f.text}
+#$c[^t.columns[]]
+#^c.menu{
+#* $c.column
+#}
+c:$t.c
+
+@tobjeresult[]
+^table::create{a
+12}
+
+@xmlprobs[]
+$xmlDataType[^xdoc::load[program.xml]]
+#^taint[^xmlDataType.string[]]
+$xmlDataTypes[^xmlDataType.select[programs/program[@id=4]/data]]
+#=^xmlDataTypes._count[]=
+=^xmlDataTypes.0.getAttribute[type-id]=
+
+@doubleprobs[]
+$1(^math:radians(180))
+$2($math:PI)
+^if(^1.format[%.10f]==^2.format[%.10f]){y;n}
+^if($1==$2){y;n}
+^if(^math:radians(180)==$math:PI){y;n}
+
+
+@divnamestop[]
+$a(10)
+^eval($a\3)
+
+@arrayclone[]
+$t[^table::create{a b
+1 11
+2 22
+}]
+$c[^table::create[$t]]
+^c.append{2 33}
+^t.count[]
+^c.count[]
+
+@operator_tricks[]
+^if(1){$a[^t[]]}
+$a!
+$a($b)
+^if(1){y}{n}
+$MAIN:a(^t[] eq OK)
+#$MAIN:a(1)
+^if($a){y}{n}
+#^if(1){y}{n}
+$form:if
+$a[$.n[1]]
+$a.if
+
+@xoutputrusattr[]
+$d[^xdoc::set{}]
+^show_xdoc2[$d]
+
+@xdocset1[]
+$d[^xdoc::set{=^taint[&]=}]
+^show_xdoc2[$d]
+
+@regexp3[]
+$s[abcАБВ]
+^if(^s.match[][i]){y}{n}
+
+
+@exec2[]
+$a[^file::exec[bin/t.cmd]]
+^taint[$a.text] |$a.status|$a.stderr
+
+
+@tlock[]
+^file:lock[lockfile]{
+ code
+}
+
+@xmloutattrwithoutvalue[]
+#$ORIGINS(1)
+$doc[^xdoc::set{zz}]
+$doc[^doc.transform[global.xsl]]
+=^taint[html][^doc.string[$.method[html]]]=
+
+
+
+@precisionProblem[]
+$a[123456789012345678901234567890]
+$b(^a.double[])
+^b.format{%.20E}
+
+^eval(2*2)
+
+@xpath[]
+$xdoc[^xdoc::set{
+привет
+}]
+#^show_xdoc2[$xdoc]
+$node[^xdoc.selectSingle[/document/block/p]]
+^if(def $node){
+ ^if($node is string){
+ $node
+ }{
+ ^if($node is hash){
+ ^node._count[]
+ }{
+ $node.nodeType
+ }
+ }
+#$node.firstChild.nodeValue
+}{
+ node not found
+}
+
+
+@ttablesetlang[]
+$a-tab-b[a b
+1 2]
+
+$t[^table::set{$a-tab-b}]
+=$t.a=
+
+
+$t[^table::set[nameless]{^taint[$a-tab-b]}]
+=$t.0=
+
+
+$t[^table::set{^untaint{^taint[$a-tab-b]}}]
+=$t.a=
+
+#^t.append{1 2}
+
+@mail3[]
+^mail:send[
+ $.from[Александр Петросян ]
+ $.to[Александр Петросян ]
+ $.subject[проверка2]
+ $.body[
+ $.text[
+ $.content-type[$.value[text/plain] $.charset[windows-1251]]
+ $.body[проверка^taint[uri][москва]=]
+ ]
+ $.attachment[
+ $.value[^file::load[text;index.html]]
+ $.file-name[привет всем.html]
+ ]
+ ]
+]
+
+
+@ttime[]
+$now[^date::now[]]
+$now.hour:$now.minute
+
+@tupper[]
+$t[abcABCабвАБВ]
+$t
+^t.upper[]
+
+@treplace[]
+$copy-paste-clean[^table::set{a b
+. _
+, _
++ _
+& _
+? _
+= _}]
+
+$cache_key[^taint[в.а,с+я]&был?тут=недавно.cache]
+# почему-то этот replace роняет апач в 500 ошибку :(
+#^cache_key.replace[$copy-paste-clean]
+$test[abc]
+^test.save[$cache_key]saved
+$cache[^file:list[.;\.cache^$]]
+^file:delete[$cache_key]deleted($cache.name)
+
+
+
+@xslt2[]
+$xdoc[^xdoc::set{
+привет
+}]
+^show_xdoc2[$xdoc]
+^show_xdoc2[^xdoc.transform[templates/_document.xslt]]
+
+
+
+@tcache2[]
+^cache[$DB_HOME/keyключ](2){
+ ^math:random(100)
+}
+
+@ttaintuntaint[]
+^taint[html][
+
+]zz
+
+^untaint[html]{1^taint[ ]2 3}
+
+
+@tappend2[]
+$t[^table::set{a b}]^t.append{1 2}$t.a
+
+@badvsnprintf[]
+^connect[zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz]{
+}
+
+
+@badoracequoting[]
+$SQL.connect-string[oracle://webspb:webpwd@mts?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]
+^connect[$SQL.connect-string]{
+^void:sql{delete from paf}
+^void:sql{insert into paf values (1, '$form:text')}
+$paf[^table::sql{select * from paf}]
+^paf.menu{
+ $paf.id: ^untaint{$paf.block}
+
+}
+
+
+
+^rem{
+$news[^table::sql{select description from news}[$.limit(3)]]
+^news.menu{
+ ^untaint{$news.description}
+
+}
+
+}
+
+$tables[^table::sql{select table_name from user_tables}]
+^tables.menu{
+$tables.table_name
+}
+
+}
+
+$env:PATH
+
+@badconstructors[]
+$bred[^string::length[]]
+$bred[^response::clear[]]
+$bred[^int::int[]]
+
+
+@xloadwrongtable[]
+$constr[^xdoc::load[wrongtable.xml]]
+^show_xdoc2[$constr]
+
+@xsetwrongtable[]
+$constr[^xdoc::set{
+^untaint[as-is]{$constructor}}]
+
+
+@tablecolumnerror[]
+$t[^table::set{a}]
+$t.$a
+
+@roll[]
+#$date[^date::set(1970;1;2)]
+#^date.roll[month](-1)
+$date[^date::set(2038;1;1)]
+^date.roll[month](+1)
+$date.year $date.month $date.day
+
+@cookie2[]
+#=$cookie:clientType[$.value[test]]=
+=$cookie:clientType=
+
+
+@tableset[]
+$a[^table::set{a
+1
+2}]
+^eval(100\$a)
+
+
+
+@zzz[]
+
+
+$constructor[
+
+
+]
+
+$constr[^xdoc::set{
+^untaint[as-is]{$constructor}}]
+
+$children[$constr.documentElement.childNodes]
+^if($children){
+^for[i](1;^children._count[]){
+ $node[$children.$i]
+ $node.nodeName
+}
+}
+
+
+@thashforeach3[]
+$h[
+ $.a[1]
+ $.b[2]
+]
+$c[^table::set{a
+^h.foreach[key;value]{$value
+}}]
+$c.a
+
+@thashforeach2[]
+$h[
+ $.a[1]
+ $.b[2]
+]
+$c[
+^h.foreach[key;value]{
+ $.$key[$value]
+}
+]
+$c.b
+
+@thashforeach[]
+$h[
+ $.a[1]
+ $.b[2]
+]
+^h.foreach[key;value]{
+ $key=$value
+}
+
+@thashdelete[]
+$h[$.a[1] $.b[2]]
+was:
+count=^h._count[]
+b='$h.b'
+
+^h.delete[b]
+
+now:
+count=^h._count[]
+b='$h.b'
+
+@sappend[]
+$test[123]
+^test.save[test]
+^test.save[append;test]
+
+@tappend[]
+$test[^table::set{a b
+a1 b1}]
+^test.save[test]
+$test[^table::set{a b
+a2 b2}]
+^test.save[append;test]
+
+
+@tform[]
+^if(def $form:new_file){y}{n}
+ |