mirror of https://github.com/evilhero/mylar
50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
from ..base import *
|
|
try:
|
|
from ..translators.translator import translate_js
|
|
except:
|
|
pass
|
|
|
|
|
|
@Js
|
|
def Function():
|
|
# convert arguments to python list of strings
|
|
a = [e.to_string().value for e in arguments.to_list()]
|
|
body = ';'
|
|
args = ()
|
|
if len(a):
|
|
body = '%s;' % a[-1]
|
|
args = a[:-1]
|
|
# translate this function to js inline function
|
|
js_func = '(function (%s) {%s})' % (','.join(args), body)
|
|
# now translate js inline to python function
|
|
py_func = translate_js(js_func, '')
|
|
# add set func scope to global scope
|
|
# a but messy solution but works :)
|
|
globals()['var'] = PyJs.GlobalObject
|
|
# define py function and return it
|
|
temp = executor(py_func, globals())
|
|
temp.source = '{%s}'%body
|
|
temp.func_name = 'anonymous'
|
|
return temp
|
|
|
|
def executor(f, glob):
|
|
exec(f, globals())
|
|
return globals()['PyJs_anonymous_0_']
|
|
|
|
|
|
#new statement simply calls Function
|
|
Function.create = Function
|
|
|
|
#set constructor property inside FunctionPrototype
|
|
|
|
fill_in_props(FunctionPrototype, {'constructor':Function}, default_attrs)
|
|
|
|
#attach prototype to Function constructor
|
|
Function.define_own_property('prototype', {'value': FunctionPrototype,
|
|
'enumerable': False,
|
|
'writable': False,
|
|
'configurable': False})
|
|
#Fix Function length (its 0 and should be 1)
|
|
Function.own['length']['value'] = Js(1)
|
|
|