omg_runtime 0.1.4

The OMG language runtime and virtual machine, providing bytecode execution, REPL, and built-in functions.
Documentation
OMGB$is_digitchis_alphachis_alnumch4read_numbersrci;read_binarysrcic
read_identsrci�tokenizesrc�parsesource
parse_programtokensiparse_statementtokensi@parse_blocktokensi�parse_expressiontokensi(parse_ortokensi,	parse_andtokensigparse_comparisontokensi�
parse_add_subtokensiS
parse_termtokensi�parse_shifttokensib	
parse_bit_andtokensi�	
parse_bit_xortokensi�	parse_bit_ortokensi1
parse_factortokensil

lookup_varenvnameR
env_setenvnamevalue�
copy_envenv�
normalize_pathpath�
dirnamepath	join_pathbaserel.strip_headersourcepath

call_function	func_namefunc
arg_valuesenv�
import_modulepath
	eval_exprexprenvDexecutestmtsenv	is_global�runsource�run_file_with_argspath	file_argsrun_filepathVZtok_len
global_env.current_dir<stdin>module_fileloaded_modulesargs!lengthargsrun_file"&ch0ch9$$chachzchAchZch_$$chis_alphachis_digit$$numcsrc!lengthninsrciis_digit^srcicnum
	c!ascii0!asciinumiiBnumi$$numcsrc!lengthninsrci0srci1�srcicnum	c!ascii0!asciinumiijnumi$$ssrc!lengthninsrciis_alnum�ssrcisii�si$$tokensnicreswordssrc!lengthsrc_lensrc_lensrcsrc_len

�src
srcsrc_lensrc_len�src_len src;src;src;srcosrcmsrcgiisrc_lensrci
iiisrc_lensrci
ii isrc_lensrcicc c	c
c
=iic#Qisrc_lensrci

PiiAc:isrc_lensrci=rtokensnsymbol:='nniic:�tokensnsymbol:'nniic=isrc_lensrci=�tokensnsymbol=='nniic=�Unexpected character =."c!isrc_lensrci=�tokensnsymbol!='nniic<isrc_lensrci=�tokensnsymbol<='nniic>isrc_lensrci=tokensnsymbol>='nniic<isrc_lensrci<2tokensnsymbol<<'nniic>isrc_lensrci>Stokensnsymbol>>'nniic/isrc_lensrci/iUnexpected / after /."c/isrc_lensrci*�iiisrc_lensrci*
srci/
�iiiic(c)c{c}c,c+c-c*c/c%c<c>c[c]c&c|c^c~c.�tokensnsymbolc'nniic0isrc_lensrcibsrciB+iisrciread_binaryrestokensnnumberres'nnresicis_digitCsrciread_numberrestokensnnumberres'nnresic"�iisisrc_lensrci"
ysrci\srcinns
siixssrcisiiMiitokensnstrings'nnsrci
read_identresreswordresiwordallocwordemitwordprocwordreturnwordifwordelsewordelifwordloopwordbreakwordandwordorwordfactswordimportwordaswordtrywordexcept�tokensnkwword'nnwordtrue�tokensnbool'nnwordfalse�tokensnbool'nntokensnidentword'nn ntok_lentokensneof'tokens$$sourcetokenizetokenstokens
parse_programresres$$stmtsiresrestok_len9tokensresparse_statementresstmtsresstmts%stmtsres$$tokensittkwtallocjtokensinametokensiparse_expressionresdeclnameresres$�tkwtemit�tokensiparse_expressionresemitresres$�tkwtreturn�tokensiparse_expressionresreturnresres$�tkwtbreak�breaki$�tkwtloop�tokensiparse_expressionres_condtokensres_condparse_block	res_blockloopres_cond	res_block	res_block$�tkwtif�tokensiparse_expressionres_condtokensres_condparse_blockres_thenres_thenjelifsres_elif	res_block
else_blockkpairjtok_lentokensjkwtokensjelif:tokensjparse_expressionres_eliftokensres_elifparse_block	res_blockelifsres_elif	res_blockelifs	res_blockj
jtok_lentokensjkwtokensjelse]tokensjparse_block	res_block	res_block
else_block	res_blockj]elifs!lengthkkzelifskpairifpairpair
else_block
else_blockkkbifres_condres_then
else_blockj$�tkwtproc�tokensinameijparamstokensjsymbol
tokensj)
��paramstokensjparamsjjtokensjsymboltokensj,�jj����jjtokensjparse_block	res_blockfunc_defnameparams	res_block	res_block$�tkwtimporttokensipathtokensialiasimportpathaliasi$�tkwtfacts0tokensiparse_expressionresfactsresres$�tkwttry�tokensiparse_blocktry_restry_resjtokensjkwtokensjexcept�jjnametokensjidentotokensjnamejjotokensjparse_blockexc_restrytry_resnameexc_resexc_res$��tokensiparse_factorlval_reslval_resjjtok_lentokensjsymboltokensj:=�tokensjparse_expressionval_reslval_restargettargetident�assigntargetval_resval_res$�targetdot�attr_assigntargettargetval_resval_res$�targetindex�index_assigntargettargetval_resval_res$��lval_reslval_res$$stmtsijresjjtokensjsymbol
tokensj}
!tokensjparse_statementresstmtsresstmtsresjstmtsj$$tokensi parse_or$tokensi	parse_andresresleftresj	right_resjtok_lentokensjkwtokensjorbtokensj	parse_and	right_resorleft	right_resleft	right_resj<leftj$$tokensiparse_comparisonresresleftresj	right_resjtok_lentokensjkwtokensjand�tokensjparse_comparison	right_resandleft	right_resleft	right_resjwleftj$$tokensiparse_bit_orresresleftresjop	right_resjtok_lentokensjsymboltokensj<tokensj==tokensj>tokensj<=tokensj>=tokensj!=Ntokensjoptokensjparse_bit_or	right_resop<
ltleft	right_resleftIop>gtleft	right_resleftIop<=&leleft	right_resleftIop>=4geleft	right_resleftIop==Beqleft	right_resleftIneleft	right_resleft	right_resj�leftj$$tokensi
parse_termresresleftresjop	right_resjtok_lentokensjsymboltokensj+tokensj-�tokensjoptokensjsymboltokensj+tokensj-�op+tokensj-�#Unexpected - after + unary operator."�op-tokensj+�#Unexpected + after - unary operator."��tokensj
parse_term	right_resop+�addleft	right_resleft�subleft	right_resleft	right_resjgleftj$$tokensiparse_factorresresleftresjop	right_resjtok_lentokensjsymboltokensj*tokensj/tokensj%]	tokensjoptokensjparse_factor	right_resop*C	mulleft	right_resleftX	op/Q	divleft	right_resleftX	modleft	right_resleft	right_resj	leftj$$tokensi
parse_add_subresresleftresjop	right_resjtok_lentokensjsymboltokensj<<tokensj>>�	tokensjoptokensj
parse_add_sub	right_resop<<�	shlleft	right_resleft�	shrleft	right_resleft	right_resjv	leftj$$tokensiparse_shiftresresleftresj	right_resjtok_lentokensjsymboltokensj&�	tokensjparse_shift	right_resbandleft	right_resleft	right_resj�	leftj$$tokensi
parse_bit_andresresleftresj	right_resjtok_lentokensjsymboltokensj^,
tokensj
parse_bit_and	right_resbxorleft	right_resleft	right_resj
leftj$$tokensi
parse_bit_xorresresleftresj	right_resjtok_lentokensjsymboltokensj|g
tokensj
parse_bit_xor	right_resborleft	right_resleft	right_resjA
leftj$$tokensitnodeijkrestsymbolt+�
tokensisymboltokensi-�
#Unexpected - after + unary operator."�
tokensiparse_factorresunaryaddresres$\tsymbolt-�
tokensisymboltokensi+�
#Unexpected + after - unary operator."�
tokensiparse_factorresunarysubresres$\tsymbolt~tokensiparse_factorresbitnotresres$\tnumbernumbertnodeij\tbool%booltnodeij\tstring6stringtnodeij\tidentGidenttnodeij\tsymbolt[�elemsikrestokensksymbol
tokensk]
��tokenskparse_expressionreselemsreselemsresktokensksymboltokensk,�kk��m�listelemsnodekj\tsymbolt{7pairsikval_resstringkey_nodetokensksymbol
tokensk}
.-tokenskstring�stringtokenskkey_nodekktokenskident�stringtokenskkey_nodekktokenskparse_expressionval_resval_reskey_nodeval_reskkktokenskparse_expressionval_respairskey_nodeval_respairsval_resktokensksymboltokensk,+kk,-�.dictpairsnodekj\tsymbolt(Ttokensiparse_expressionresresnoderesj\numbernodeijinnerend_res	call_argsresattrjtok_lentokensjsymbolM
tokensj(�jk	call_argstokensksymbol
tokensk)
��tokenskparse_expressionres	call_argsres	call_argsresktokensksymboltokensk,�kk����	func_callnode	call_argsnodekjL
tokensj[1
tokensjparse_expressioninnerinnerktokensksymboltokensk:%
tokensksymboltokensk]
slicenodeinnernodekj$
tokenskparse_expressionend_resslicenodeinnerend_resnodeend_resj0
indexnodeinnernodekjL
tokensj.K
tokensjattrdotnodeattrnodejjL
M
nnodej$$ientryenv!lengthenv_lenienv_lens
envientryentrynamen
entry$n
iiY
ientry
global_env!length
global_leni
global_len�

global_envientryentryname�
entry$�
iiz
$$ientryenv!lengthenv_lenienv_len�
envientryentryname�
envinamevalue'env$�
ii�
envnamevalueenvenv$$resultientryenv!lengthenv_lenienv_len�
envientryresultentryresultii�
result$$resipath!lengthninpathi\�
res/resrespathiresii�
res$$pathnormalize_pathpathpath!lengthii!pathi/!iii+pathi$+.$$basenormalize_pathbaserelnormalize_pathrelpathrel!lengthrel/DrelpathJbase/relpathpartspartipath!lengthnabsnpath/babsbin�pathi/�part..�parts!lengthpartsparts!length..
�partsparts!lengthparts�parts..parts�part
part.
�partspartparts�part�partpathipartiibpart..�parts!lengthpartsparts!length..
�partsparts!lengthparts�parts..parts�part
part.
�partspartparts�resiparts!lengthp_lenip_len�res
�res/res�respartsiresii�abs�/resres�res
abs/$.$
res$$isource!lengthsrc_lenisrc_lensourcei sourcei	sourcei
sourcei
3iiisrc_len�sourcei;sourcei;sourcei;sourceiosourceimsourceig�iiisrc_lensourcei
ziizisrc_lensourcei
�ii�sourcei#$��/OMG script missing required header ';;;omg' in path."source$$funcfunction�funcparamsfuncbodyfunccapturedcapturedbasecapturedglobal�
global_envbase�basecopy_envlocaliparams!length
params_len
arg_values!lengtharg_lenarg_len
params_len
�
Function '	func_name
' expects 
params_len
 arguments."�i
params_len�localparamsi
arg_valuesienv_setlocalii�resbodylocalexecuteresresreturn�res$�$	funcbuiltinfuncnamename
arg_values!call_builtin$	Not a function value."$$current_dirpath	join_pathfullkloaded_modules!lengthlm_lenklm_len*loaded_moduleskfull%Recursive import of 'full'."%kkloaded_modulesfullloaded_modulescurrent_dir	saved_dirmodule_file
saved_file
global_envsaved_globalfulldirnamecurrent_dirfullmodule_filefullnamename!lengthiiRnamei/MRMiiAi^namei#name^name!	read_filesourcesourceqModule 'path' not found relative to '
saved_file'."qsourcefullstrip_headersourcesourceparseastlengthbuiltinlength	read_filebuiltin	read_fileasciibuiltinasciibinarybuiltinbinarychrbuiltinchrhexbuiltinhexfreezebuiltinfreeze	file_openbuiltin	file_open	file_readbuiltin	file_read
file_writebuiltin
file_write
file_closebuiltin
file_closefile_existsbuiltinfile_existsraisebuiltinraise
envenvargsenv_setenvenv
global_envexportsistmtast!lengthast_leniast_len�astistmtstmtdeclstmtfunc_def�exportsstmtexports�ii�_astenvexecute_
global_env
module_env	module_nsnamevaliexports!lengthexp_leniexp_len3exportsiname
module_envname
lookup_varvalvalfunctionvalglobal*functionvalval
module_envval
module_envnamevalenv_set
module_env*	module_nsnameval'ii	module_ns!freeze	module_ns	saved_dircurrent_dir
saved_filemodule_filesaved_global
global_envloaded_moduleslm_lenloaded_modules	module_ns$$exprkindkindnumberQexpr$�kindstringZexpr$�kindboolcexpr$�kindident�exprnameenvname
lookup_varresresxres$xUndefined identifier 'name'."$�kindadd�exprenv	eval_exprexprenv	eval_expr$�kindsub�exprenv	eval_exprexprenv	eval_expr$�kindmul�exprenv	eval_exprexprenv	eval_expr	$�kinddiv�exprenv	eval_exprexprenv	eval_expr
$�kindmod�exprenv	eval_exprexprenv	eval_expr$�kindband�exprenv	eval_exprexprenv	eval_expr$�kindbor�exprenv	eval_exprexprenv	eval_expr$�kindbxor
exprenv	eval_exprexprenv	eval_expr$�kindshlexprenv	eval_exprexprenv	eval_expr$�kindshr,exprenv	eval_exprexprenv	eval_expr$�kindbitnot8exprenv	eval_expr$�kindeqIexprenv	eval_exprexprenv	eval_expr$�kindneZexprenv	eval_exprexprenv	eval_expr
$�kindltkexprenv	eval_exprexprenv	eval_expr$�kindgt|exprenv	eval_exprexprenv	eval_expr$�kindle�exprenv	eval_exprexprenv	eval_expr$�kindge�exprenv	eval_exprexprenv	eval_expr$�kindand�exprenv	eval_exprleftleft�exprenv 	eval_expr�$�kindor�exprenv	eval_exprleftleft�left$�exprenv 	eval_expr�kindunary�expropexprenv	eval_exprvalopsub�val$�val$�kindlistexprnodesresultinodes!length	nodes_leni	nodes_lenresultnodesienv	eval_exprresultii�result$�kinddict;exprpairsresultipairkeyvalpairs!length	pairs_leni	pairs_len8pairsipairpairenv	eval_exprkeypairenv	eval_exprvalresultkeyval'iiresult$�kindsliceaexprenv	eval_exprbaseexprenv	eval_exprstartexprend_nodeend_node[end_nodeenv	eval_exprendbasestartend$[basestart#$�kindindexvexprenv	eval_exprbaseexprenv	eval_expridxbaseidx$�kinddot�exprenv	eval_exprbaseexprattrbaseattr$�kind	func_call�exprenv	eval_exprfunc_valexpr	arg_nodes
arg_valuesi	arg_nodes!lengtharg_leniarg_len�
arg_values	arg_nodesienv	eval_expr
arg_valuesii�exprfunc_idfunc_idfunc_val
arg_valuesenv 
call_function�!RuntimeError: Unknown expr kind: kind."$$istmtkindnormalresstmts!length	stmts_lencondnormalloop_resvalnameparamsbodyfunc_val	arg_nodes	call_argsjarg_lenobjattridx_i	stmts_len�stmtsistmtstmtkindkinddeclenvstmtstmtenv	eval_exprenv_setenv	is_globalenv
global_env�kindassign;stmtnamestmtenv	eval_exprvalenvname
lookup_varlookuplookup3envnamevalenv_setenv	is_global2env
global_env2:Undefined variable 'name'."�kindattr_assignRstmtenv	eval_exprobjstmtattrobjattrstmtenv	eval_expr'�kindindex_assignkstmtenv	eval_exprobjstmtenv	eval_expridxobjidxstmtenv	eval_expr'�kindemitvstmtenv	eval_expr%�kindfacts�stmtenv	eval_exprcondcond�_� AssertionError: Assertion failed."�kindtry�stmtenv	is_globalexecuteresreserror�stmt
�envstmtresenv_setenv	is_global�env
global_env��stmtenv	is_globalexecuteres�resnormal
�res$��kindif�stmtenv	eval_exprcondnormalrescond�stmtenv	is_globalexecuteres�stmt!length�stmtenv	is_globalexecuteres�resnormal
�res$��kindloopnormalloop_resstmtenv	eval_exprstmtenv	is_globalexecuteloop_resloop_resbreak
loop_resreturnloop_res$��kindbreak!break$�kindreturn0stmtenv	eval_exprvalreturnval$�kindfunc_defZstmtnamestmtparamsstmtbody	is_globalIfunctionparamsbodyglobalfunc_valOfunctionparamsbodyenvfunc_valenvnamefunc_valenv_setenv	is_globalYenv
global_envY�kindimportpstmt
import_moduleobjenvstmtobjenv_setenv	is_globaloenv
global_envo�kind	func_call�stmtenv	eval_exprfunc_valstmt	arg_nodes	call_argsj	arg_nodes!lengtharg_lenjarg_len�	call_args	arg_nodesjenv	eval_expr	call_argsjj�stmtfunc_idfunc_idfunc_val	call_argsenv
call_function_�!RuntimeError: Unknown statement: kind."ii�normal$$sourceparseastlengthbuiltinlength	read_filebuiltin	read_fileasciibuiltinasciibinarybuiltinbinarychrbuiltinchrhexbuiltinhexfreezebuiltinfreeze	file_openbuiltin	file_open	file_readbuiltin	file_read
file_writebuiltin
file_write
file_closebuiltin
file_closefile_existsbuiltinfile_existsraisebuiltinraise
envenvargsargsenv_setenvenv
global_envastenv execute$argssavedcurrent_dirold_dirmodule_fileold_filepathnormalize_pathpath	file_argsargspathmodule_filepathdirnamecurrent_dirpathnamename!lengthii-namei/(-(iii9namei#name9name!	read_filesourcesourceF#RuntimeError: Failed to read file: path."Fsourcepathstrip_headersourcesourcerunresold_dircurrent_dirold_filemodule_filesavedargsres$$pathargs run_file_with_args$