Created
April 19, 2013 03:26
-
-
Save mah0x211/5417916 to your computer and use it in GitHub Desktop.
luajitがSegmentation faultで落ちる。こまた。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| -- change string metatable | |
| do | |
| local meta = debug.getmetatable( '' ); | |
| meta.__index = function( str, field ) | |
| return nil; | |
| end | |
| meta.__add = function( op1, op2 ) | |
| local t1 = type( op1 ); | |
| local t2 = type( op2 ); | |
| if t1 == t2 then | |
| return op1 .. op2; | |
| elseif t1 == 'string' then | |
| return op1 .. tostring( op2 ); | |
| end | |
| return tostring( op1 ) .. op2; | |
| end | |
| end | |
| local function isDef( self, val ) | |
| return ( val == nil or | |
| val == 0 or | |
| val == '' or | |
| val == false ) and nil or val; | |
| end | |
| function mkNode( self, parent, ... ) | |
| local argv = {...}; | |
| local prev = parent; | |
| local len = #argv; | |
| local child = undefined; | |
| local name = undefined; | |
| local t,i; | |
| -- lookup | |
| for i = 1, len, 1 do | |
| name = argv[i]; | |
| t = type( name ); | |
| if t == 'number' or ( t == 'string' and name ~= '' ) then | |
| parent = prev; | |
| child = prev[name]; | |
| if type( child ) == 'table' then | |
| prev = child; | |
| -- create new-node | |
| elseif ( i + 1 ) < len then | |
| local tail = prev; | |
| local nodeName = name; | |
| local node = {}; | |
| prev = node; | |
| i = i + 1; | |
| while i < len do | |
| name = argv[i]; | |
| t = type( name ); | |
| if ( t == 'string' and name ~= '' ) or t == 'number' then | |
| parent = prev; | |
| child = {}; | |
| prev[name] = child; | |
| prev = child; | |
| -- invalid property name | |
| else | |
| return nil; | |
| end | |
| i = i + 1; | |
| end | |
| parent[name] = ''; | |
| tail[nodeName] = node; | |
| break; | |
| end | |
| -- invalid property name | |
| else | |
| return nil; | |
| end | |
| end | |
| return parent; | |
| end | |
| local page = { | |
| mkNode = mkNode, | |
| isDef = isDef | |
| }; | |
| function page:test( CTX, UDATA ) | |
| local TMP = {}; local LOCAL = {}; | |
| CTX.res = CTX.res + ('\nset:v0 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'v0'); | |
| if TMP._0 then | |
| TMP._0.v0 = 0; | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.v0 ) or '' )); | |
| CTX.res = CTX.res + ('\nset:v1 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'v1'); | |
| if TMP._0 then | |
| TMP._0.v1 = 1; | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.v1 ) or '' )); | |
| CTX.res = CTX.res + ('\nset:v2 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'v2'); | |
| if TMP._0 then | |
| TMP._0.v2 = 2; | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v0 + v2 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v0 ) or 0 )+( self:isDef( LOCAL.v2 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v0 + v1 + v2 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v0 ) or 0 )+( self:isDef( LOCAL.v1 ) or 0 )+( self:isDef( LOCAL.v2 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v0 + v2 + v1 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v0 ) or 0 )+( self:isDef( LOCAL.v2 ) or 0 )+( self:isDef( LOCAL.v1 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n\n put:v1 + v0 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v1 ) or 0 )+( self:isDef( LOCAL.v0 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v1 + v2 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v1 ) or 0 )+( self:isDef( LOCAL.v2 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v1 + v2 + v0 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v1 ) or 0 )+( self:isDef( LOCAL.v2 ) or 0 )+( self:isDef( LOCAL.v0 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v1 + v0 + v2 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v1 ) or 0 )+( self:isDef( LOCAL.v0 ) or 0 )+( self:isDef( LOCAL.v2 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n\n put:v2 + v0 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v2 ) or 0 )+( self:isDef( LOCAL.v0 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v2 + v1 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v2 ) or 0 )+( self:isDef( LOCAL.v1 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v2 + v0 + v1 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v2 ) or 0 )+( self:isDef( LOCAL.v0 ) or 0 )+( self:isDef( LOCAL.v1 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v2 + v1 + v0 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v2 ) or 0 )+( self:isDef( LOCAL.v1 ) or 0 )+( self:isDef( LOCAL.v0 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n\n put:v0 - v1 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v0 ) or 0 )-( self:isDef( LOCAL.v1 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v0 - v2 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v0 ) or 0 )-( self:isDef( LOCAL.v2 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v0 - v1 - v2 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v0 ) or 0 )-( self:isDef( LOCAL.v1 ) or 0 )-( self:isDef( LOCAL.v2 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v0 - v2 - v1 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v0 ) or 0 )-( self:isDef( LOCAL.v2 ) or 0 )-( self:isDef( LOCAL.v1 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n\n put:v1 - v0 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v1 ) or 0 )-( self:isDef( LOCAL.v0 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v1 - v2 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v1 ) or 0 )-( self:isDef( LOCAL.v2 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v1 - v2 - v0 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v1 ) or 0 )-( self:isDef( LOCAL.v2 ) or 0 )-( self:isDef( LOCAL.v0 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v1 - v0 - v2 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v1 ) or 0 )-( self:isDef( LOCAL.v0 ) or 0 )-( self:isDef( LOCAL.v2 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n\n put:v2 - v0 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v2 ) or 0 )-( self:isDef( LOCAL.v0 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v2 - v1 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v2 ) or 0 )-( self:isDef( LOCAL.v1 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v2 - v0 - v1 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v2 ) or 0 )-( self:isDef( LOCAL.v0 ) or 0 )-( self:isDef( LOCAL.v1 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v2 - v1 - v0 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v2 ) or 0 )-( self:isDef( LOCAL.v1 ) or 0 )-( self:isDef( LOCAL.v0 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n\n put:v0 * v1 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v0 ) or 0 )*( self:isDef( LOCAL.v1 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v0 * v2 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v0 ) or 0 )*( self:isDef( LOCAL.v2 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v0 * v1 * v2 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v0 ) or 0 )*( self:isDef( LOCAL.v1 ) or 0 )*( self:isDef( LOCAL.v2 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v0 * v2 * v1 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v0 ) or 0 )*( self:isDef( LOCAL.v2 ) or 0 )*( self:isDef( LOCAL.v1 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n\n put:v1 * v0 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v1 ) or 0 )*( self:isDef( LOCAL.v0 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v1 * v2 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v1 ) or 0 )*( self:isDef( LOCAL.v2 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v1 * v2 * v0 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v1 ) or 0 )*( self:isDef( LOCAL.v2 ) or 0 )*( self:isDef( LOCAL.v0 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v1 * v0 * v2 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v1 ) or 0 )*( self:isDef( LOCAL.v0 ) or 0 )*( self:isDef( LOCAL.v2 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n\n put:v2 * v0 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v2 ) or 0 )*( self:isDef( LOCAL.v0 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v2 * v1 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v2 ) or 0 )*( self:isDef( LOCAL.v1 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v2 * v0 * v1 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v2 ) or 0 )*( self:isDef( LOCAL.v0 ) or 0 )*( self:isDef( LOCAL.v1 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v2 * v1 * v0 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v2 ) or 0 )*( self:isDef( LOCAL.v1 ) or 0 )*( self:isDef( LOCAL.v0 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n\n put:v0 / v1 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v0 ) or 0 )/( self:isDef( LOCAL.v1 ) or 0 ); | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v0 / v2 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| -- !!!: Segmentation fault | |
| TMP._0.x = ( self:isDef( LOCAL.v0 ) or 0 )/( self:isDef( LOCAL.v2 ) or 0 ); | |
| --]] | |
| end | |
| CTX.res = CTX.res + (( self:isDef( LOCAL.x ) or '' )); | |
| CTX.res = CTX.res + ('\n put:v0 / v1 / v2 = '); | |
| TMP._0 = self:mkNode(LOCAL, 'x'); | |
| if TMP._0 then | |
| TMP._0.x = ( self:isDef( LOCAL.v0 ) or 0 )/( self:isDef( LOCAL.v1 ) or 0 )/( self:isDef( LOCAL.v2 ) or 0 ); | |
| end | |
| end | |
| local result = { | |
| req = {}, | |
| res = '', | |
| udata = {} | |
| }; | |
| page:test( result, result.udata ); | |
| print( result.res ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment