diff --git a/jac/jaclang/runtimelib/cfg.py b/jac/jaclang/runtimelib/cfg.py index f926f721e..264c68811 100644 --- a/jac/jaclang/runtimelib/cfg.py +++ b/jac/jaclang/runtimelib/cfg.py @@ -105,25 +105,18 @@ def valid_offset(offset): return offset >= 0 and offset <= max_offset # Identify all block starts for instr in instructions: - if instr.offset == 240: - x = 1 if instr.is_branch(): next_instr_offset = instr.get_next_instruction_offset() - if next_instr_offset == 242: - x =1 if 0 <= next_instr_offset <= max_offset: block_starts.add(next_instr_offset) + #TODO: Confirm we can clean this up if instr.is_relative_branch(): target_offset = instr.argval - if target_offset == 244: - x = 21 else: target_offset = instr.argval if valid_offset(target_offset): - if target_offset == 242: - x = 21 block_starts.add(target_offset) if instr.is_jump_target: @@ -244,14 +237,14 @@ def visualize_cfg(cfg: CFG): ##simple= #instructions = disassemble_bytecode(b'c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x01\xf3*\x00\x00\x00\x97\x00d\x00d\x01l\x00m\x01Z\x01\x01\x00d\x00Z\x02d\x00Z\x03e\x03d\x00k\\\x00\x00r\x02d\x02Z\x02d\x03Z\x02y\x04)\x05\xe9\x00\x00\x00\x00)\x01\xda\x0bannotations\xe9\x01\x00\x00\x00\xe9\xff\xff\xff\xffN)\x04\xda\n__future__r\x02\x00\x00\x00\xda\x01a\xda\x01x\xa9\x00\xf3\x00\x00\x00\x00\xfaP/Users/jakobtherkelsen/Documents/jaseci-ginS/jac/examples/ginsScripts/simple.jac\xfa\x08r\x0b\x00\x00\x00\x01\x00\x00\x00s%\x00\x00\x00\xf0\x03\x01\x01\x01\xf5\x02\x07\x02\x03\xd8\x05\x06\x801\xd8\x05\x06\x801\xd8\x06\x07\x881\x82f\xd8\x07\x08\x80Q\xe0\x05\x07\x811r\t\x00\x00\x00') #hot path -instructions = disassemble_bytecode(b'c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x01\xf3T\x00\x00\x00\x97\x00d\x00d\x01l\x00m\x01Z\x01\x01\x00d\x00Z\x02d\x00Z\x03e\x02d\x02k\x02\x00\x00r\x19e\x02d\x03z\x06\x00\x00d\x00k(\x00\x00r\x03d\x04Z\x03n\x02d\x03Z\x03e\x02d\x04z\r\x00\x00Z\x02e\x02d\x02k\x02\x00\x00r\x01\x8c\x18y\x05y\x05)\x06\xe9\x00\x00\x00\x00)\x01\xda\x0bannotations\xe9\x0f\x00\x00\x00\xe9\x02\x00\x00\x00\xe9\x01\x00\x00\x00N)\x04\xda\n__future__r\x02\x00\x00\x00\xda\x01a\xda\x01b\xa9\x00\xf3\x00\x00\x00\x00\xfaR/Users/jakobtherkelsen/Documents/jaseci-ginS/jac/examples/ginsScripts/hot_path.jac\xfa\x08r\x0c\x00\x00\x00\x01\x00\x00\x00sD\x00\x00\x00\xf0\x03\x01\x01\x01\xf5\x02\x0c\x02\x03\xd8\x07\x08\x801\xd8\x07\x08\x801\xd8\t\n\x88R\x8a\x16\xd8\x08\t\x88A\x89\x05\x90\x11\x8a\n\xd8\x0b\x0c\x81q\xf0\x06\x00\x0c\r\x80q\xe0\x05\x06\x88!\x81W\x80Q\xf0\x0f\x00\n\x0b\x88R\x8d\x16r\n\x00\x00\x00') -#guess_game_bc = disassemble_bytecode(b'c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x01\xf3\x9e\x01\x00\x00\x97\x00d\x00Z\x00d\x01d\x02l\x01m\x02Z\x02\x01\x00d\x01d\x03l\x03m\x04Z\x05\x01\x00d\x01d\x04l\x06Z\x07d\x01d\x05l\x08m\tZ\n\x01\x00d\x01d\x06l\x0b\xad\x02\x01\x00d\x01d\x07l\x0cm\rZ\x0e\x01\x00e\x07j\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00r\x05d\x01d\x04l\x10Z\x10n\x10\x02\x00e\x05d\x08e\x11d\td\nd\x04i\x00\xac\x0b\xab\x06\x00\x00\x00\x00\x00\x00\\\x01\x00\x00Z\x10\x02\x00e\nj$\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00g\x00g\x00\xac\x0c\xab\x02\x00\x00\x00\x00\x00\x00\x02\x00e\x0ed\n\xac\r\xab\x01\x00\x00\x00\x00\x00\x00\x02\x00G\x00d\x0e\x84\x00d\x0fe\nj&\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x03\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00Z\x14\x02\x00e\nj$\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00g\x00g\x00\xac\x0c\xab\x02\x00\x00\x00\x00\x00\x00\x02\x00e\x0ed\n\xac\r\xab\x01\x00\x00\x00\x00\x00\x00\x02\x00G\x00d\x10\x84\x00d\x11e\x14e\nj&\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x04\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00Z\x15\t\x00\x02\x00e\x15\xab\x00\x00\x00\x00\x00\x00\x00Z\x16e\x16j/\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x01\x00y\x04)\x12\xfa\x16A Number Guessing Game\xe9\x00\x00\x00\x00)\x01\xda\x0bannotations)\x01\xda\njac_importN)\x01\xda\nJacFeature)\x01\xda\x01*)\x01\xda\tdataclass\xda\x06random\xda\x02pyF)\x06\xda\x06target\xda\tbase_path\xda\x03lng\xda\x06absorb\xda\tmdl_alias\xda\x05items)\x02\xda\x08on_entry\xda\x07on_exit)\x01\xda\x02eqc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x01\xf3 \x00\x00\x00\x97\x00e\x00Z\x01d\x00Z\x02d\x01Z\x03d\x05d\x02\x84\x04Z\x04d\x06d\x03\x84\x04Z\x05y\x04)\x07\xda\x04Game\xe1\x1a\x01\x00\x00\nA generic Game base class.\n\nThe obj keyword is used to define the class.\nThe can keyword is used to define methods (functions) within the class.\nThe self keyword is used to refer to the current instance of the class.\nConstructors are defined using the init method with parameters.\nc\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x01\xf3 \x00\x00\x00\x97\x00|\x01|\x00_\x00\x00\x00\x00\x00\x00\x00\x00\x00d\x01|\x00_\x01\x00\x00\x00\x00\x00\x00\x00\x00y\x00)\x02NF)\x02\xda\x08attempts\xda\x03won)\x02\xda\x04selfr\x17\x00\x00\x00s\x02\x00\x00\x00 \xfaT/Users/jakobtherkelsen/Documents/jaseci-ginS/jac/examples/guess_game/guess_game1.jac\xda\x08__init__z\rGame.__init__\x0e\x00\x00\x00s\x10\x00\x00\x00\x80\x00\xd8\x19!\x88\x14\x8c\x1d\xd8\x14\x19\x88\x14\x8d\x18\xf3\x00\x00\x00\x00c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x01\xf3\x18\x00\x00\x00\x97\x00t\x01\x00\x00\x00\x00\x00\x00\x00\x00d\x01\xab\x01\x00\x00\x00\x00\x00\x00\x82\x01)\x02N\xfa&Subclasses must implement this method.)\x01\xda\x13NotImplementedError)\x01r\x19\x00\x00\x00s\x01\x00\x00\x00 r\x1a\x00\x00\x00\xda\x04playz\tGame.play\x13\x00\x00\x00s\x12\x00\x00\x00\x80\x00\xdc\x0f"\xd8\r5\xf3\x03\x02\x10\x10\xf0\x00\x02\n\x0cr\x1c\x00\x00\x00N\xa9\x04r\x17\x00\x00\x00\xda\x03int\xda\x06return\xda\x04None\xa9\x02r#\x00\x00\x00r$\x00\x00\x00)\x06\xda\x08__name__\xda\n__module__\xda\x0c__qualname__\xda\x07__doc__r\x1b\x00\x00\x00r \x00\x00\x00\xa9\x00r\x1c\x00\x00\x00r\x1a\x00\x00\x00r\x14\x00\x00\x00r\x14\x00\x00\x00\x05\x00\x00\x00s\x11\x00\x00\x00\x84\x00\xf1\x00\x07\x02\x05\xf3\x12\x03\x06\x07\xf4\n\x04\x06\x07r\x1c\x00\x00\x00r\x14\x00\x00\x00c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x01\xf36\x00\x00\x00\x87\x00\x97\x00e\x00Z\x01d\x00Z\x02d\x01Z\x03d\x05d\x06\x88\x00f\x01d\x02\x84\rZ\x04d\x07d\x03\x84\x04Z\x05d\x08d\x04\x84\x04Z\x06\x88\x00x\x01Z\x07S\x00)\t\xda\x12GuessTheNumberGame\xfa\xae\nA number guessing game. The player must guess a number between 1 and 100.\n\nThis class inherits from Game. The super() function is used to call the parent class constructor.\nc\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x01\xf3Z\x00\x00\x00\x95\x01\x97\x00t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x02|\x00\x8d\x05\x00\x00|\x01\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00t\x05\x00\x00\x00\x00\x00\x00\x00\x00j\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00d\x01d\x02\xab\x02\x00\x00\x00\x00\x00\x00|\x00_\x04\x00\x00\x00\x00\x00\x00\x00\x00y\x00)\x03N\xe9\x01\x00\x00\x00\xe9d\x00\x00\x00)\x05\xda\x05superr\x1b\x00\x00\x00r\x08\x00\x00\x00\xda\x07randint\xda\x0ecorrect_number)\x03r\x19\x00\x00\x00r\x17\x00\x00\x00\xda\t__class__s\x03\x00\x00\x00 \x80r\x1a\x00\x00\x00r\x1b\x00\x00\x00z\x1bGuessTheNumberGame.__init__ \x00\x00\x00s \x00\x00\x00\xf8\x80\x00\xde\t\x0e\x89\x1a\x90H\xd4\t\x1d\xdc\x1f%\x9f~\x99~\xa8a\xb0\x13\xd3\x1f5\x88\x14\xd5\t\x1cr\x1c\x00\x00\x00c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x03\x00\x00\x01\xf3\xf4\x00\x00\x00\x97\x00|\x00j\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00d\x01kD\x00\x00rQt\x03\x00\x00\x00\x00\x00\x00\x00\x00d\x02\xab\x01\x00\x00\x00\x00\x00\x00}\x01|\x01j\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00r\x1b|\x00j\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00t\t\x00\x00\x00\x00\x00\x00\x00\x00|\x01\xab\x01\x00\x00\x00\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00n\x0bt\x0b\x00\x00\x00\x00\x00\x00\x00\x00d\x03\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00|\x00j\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00d\x01kD\x00\x00r\x01\x8cQ|\x00j\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x0ct\x0b\x00\x00\x00\x00\x00\x00\x00\x00d\x04\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00y\x00y\x00)\x05Nr\x02\x00\x00\x00\xfa"Guess a number between 1 and 100: \xfa%That\'s not a valid number! Try again.\xfa:Sorry, you didn\'t guess the number. Better luck next time!)\x07r\x17\x00\x00\x00\xda\x05input\xda\x07isdigit\xda\rprocess_guessr"\x00\x00\x00\xda\x05printr\x18\x00\x00\x00\xa9\x02r\x19\x00\x00\x00\xda\x05guesss\x02\x00\x00\x00 r\x1a\x00\x00\x00\xfa\x04playz\x17GuessTheNumberGame.play%\x00\x00\x00sd\x00\x00\x00\x80\x00\xe0\x0f\x13\x8f}\x89}\x98q\xd2\x0f \xdc\x15\x1a\xd0\x1b?\xd3\x15@\x88U\xd8\x10\x15\x97\r\x91\r\x94\x0f\xd8\x11\x15\xd7\x11#\xd1\x11#\xa4C\xa8\x05\xa3J\xd5\x11/\xe4\x11\x16\xd0\x17>\xd4\x11?\xf0\x0b\x00\x10\x14\x8f}\x89}\x98q\xd3\x0f \xf0\x10\x00\x11\x15\x97\x08\x92\x08\xdc\r\x12\xd8\x11M\xf5\x03\x02\x0e\x0f\xf0\x03\x00\x11\x19r\x1c\x00\x00\x00c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x03\x00\x00\x01\xf3\xfe\x00\x00\x00\x97\x00|\x01|\x00j\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00kD\x00\x00r\x0ct\x03\x00\x00\x00\x00\x00\x00\x00\x00d\x01\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00n4|\x01|\x00j\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00k\x02\x00\x00r\x0ct\x03\x00\x00\x00\x00\x00\x00\x00\x00d\x02\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00n\x19t\x03\x00\x00\x00\x00\x00\x00\x00\x00d\x03\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00d\x04|\x00_\x02\x00\x00\x00\x00\x00\x00\x00\x00d\x05|\x00_\x03\x00\x00\x00\x00\x00\x00\x00\x00|\x00x\x01j\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00d\x06z\x17\x00\x00c\x02_\x02\x00\x00\x00\x00\x00\x00\x00\x00t\x03\x00\x00\x00\x00\x00\x00\x00\x00d\x07|\x00j\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00d\x08\x9d\x03\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00y\x00)\tN\xfa\tToo high!\xfa\x08Too low!\xfa\'Congratulations! You guessed correctly.r\x02\x00\x00\x00Tr/\x00\x00\x00\xfa\tYou have \xfa\x0f attempts left.)\x04r3\x00\x00\x00r<\x00\x00\x00r\x17\x00\x00\x00r\x18\x00\x00\x00r=\x00\x00\x00s\x02\x00\x00\x00 r\x1a\x00\x00\x00\xfa\rprocess_guessz GuessTheNumberGame.process_guess6\x00\x00\x00se\x00\x00\x00\x80\x00\xd8\x0c\x11\x90D\xd7\x14\'\xd1\x14\'\xd2\x0c\'\xdc\r\x12\x90;\xd5\r\x1f\xd8\x10\x15\x98\x04\xd7\x18+\xd1\x18+\xd2\x10+\xdc\r\x12\x90:\xd5\r\x1e\xe4\r\x12\xd0\x13<\xd4\r=\xd8\x1d\x1e\x88T\x8c]\xd8\x18\x1c\x88T\x8cX\xe0\t\r\x8f\x1d\x8a\x1d\x98!\xd1\t\x1c\x8d\x1d\xdc\t\x0e\xd0\x0f9\x984\x9f=\x9a=\xd1\x0f9\xd5\t:r\x1c\x00\x00\x00)\x01\xe9\n\x00\x00\x00r!\x00\x00\x00r%\x00\x00\x00)\x04r>\x00\x00\x00r"\x00\x00\x00r#\x00\x00\x00r$\x00\x00\x00)\x08r&\x00\x00\x00r\'\x00\x00\x00r(\x00\x00\x00r)\x00\x00\x00r\x1b\x00\x00\x00r \x00\x00\x00r;\x00\x00\x00\xda\r__classcell__)\x01r4\x00\x00\x00s\x01\x00\x00\x00@r\x1a\x00\x00\x00r,\x00\x00\x00r,\x00\x00\x00\x1a\x00\x00\x00s\x17\x00\x00\x00\xf8\x84\x00\xf1\x00\x04\x02\x05\xf6\x0c\x03\x06\x07\xf3\n\x0f\x06\x07\xf7"\x0c\x06\x07r\x1c\x00\x00\x00r,\x00\x00\x00)\x18r)\x00\x00\x00\xda\n__future__r\x03\x00\x00\x00\xda\x07jaclangr\x04\x00\x00\x00\xda\x0e__jac_import__\xda\x06typing\xda\x08_jac_typ\xda\x16jaclang.plugin.featurer\x05\x00\x00\x00\xda\x04_Jac\xda\x16jaclang.plugin.builtin\xda\x0bdataclassesr\x07\x00\x00\x00\xda\x11__jac_dataclass__\xda\rTYPE_CHECKINGr\x08\x00\x00\x00\xda\x08__file__\xda\x08make_obj\xda\x03Objr\x14\x00\x00\x00r,\x00\x00\x00\xda\x04gamer \x00\x00\x00r*\x00\x00\x00r\x1c\x00\x00\x00r\x1a\x00\x00\x00\xda\x08rX\x00\x00\x00\x01\x00\x00\x00s\xaa\x00\x00\x00\xf0\x03\x01\x01\x01\xd9\x01\x1d\xf7\x00K\x01\x02\x03\xf7\x00K\x01\x02\x03\xf7\x00K\x01\x02\x03\xf7\x00K\x01\x02\x03\xf0\x00K\x01\x02\x03\xe7\x01\x12\xd7\x01\x12\xd4\x01\x12\x80s\xd7\x01\x12\xd2\x01\x12\xf1\x04\x13\x02\x03\xef&\xe9\x00\xf7\'\x13\x02\x03\xf7\x00\x13\x02\x03\xf4\x00\x13\x02\x03\xef&\xe9\x00\xf7\'\x13\x02\x03\xf4\x00\x13\x02\x03\xf1*)\x02\x03\xefR\x01\xe9\x00\xf7S\x01)\x02\x03\xf7\x00)\x02\x03\xf3\x00)\x02\x03\xf0\n\x00\x1a\x1e\xf0\x0b)\x02\x03\xefR\x01\xe9\x00\xf7S\x01)\x02\x03\xf4\x00)\x02\x03\xf0X\x01\x02\x02\x05\xf1\x08\x00\r\x1f\xd3\x0c \x80T\xd8\x05\t\x87Y\x81Y\x85[r\x1c\x00\x00\x00') -BBs = create_BBs(instructions) -print(BBs) - -cfg = create_cfg(BBs) -print("\nControl Flow Graph (CFG):") -print(cfg) +# instructions = disassemble_bytecode(b'c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x01\xf3T\x00\x00\x00\x97\x00d\x00d\x01l\x00m\x01Z\x01\x01\x00d\x00Z\x02d\x00Z\x03e\x02d\x02k\x02\x00\x00r\x19e\x02d\x03z\x06\x00\x00d\x00k(\x00\x00r\x03d\x04Z\x03n\x02d\x03Z\x03e\x02d\x04z\r\x00\x00Z\x02e\x02d\x02k\x02\x00\x00r\x01\x8c\x18y\x05y\x05)\x06\xe9\x00\x00\x00\x00)\x01\xda\x0bannotations\xe9\x0f\x00\x00\x00\xe9\x02\x00\x00\x00\xe9\x01\x00\x00\x00N)\x04\xda\n__future__r\x02\x00\x00\x00\xda\x01a\xda\x01b\xa9\x00\xf3\x00\x00\x00\x00\xfaR/Users/jakobtherkelsen/Documents/jaseci-ginS/jac/examples/ginsScripts/hot_path.jac\xfa\x08r\x0c\x00\x00\x00\x01\x00\x00\x00sD\x00\x00\x00\xf0\x03\x01\x01\x01\xf5\x02\x0c\x02\x03\xd8\x07\x08\x801\xd8\x07\x08\x801\xd8\t\n\x88R\x8a\x16\xd8\x08\t\x88A\x89\x05\x90\x11\x8a\n\xd8\x0b\x0c\x81q\xf0\x06\x00\x0c\r\x80q\xe0\x05\x06\x88!\x81W\x80Q\xf0\x0f\x00\n\x0b\x88R\x8d\x16r\n\x00\x00\x00') +# #guess_game_bc = disassemble_bytecode(b'c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x01\xf3\x9e\x01\x00\x00\x97\x00d\x00Z\x00d\x01d\x02l\x01m\x02Z\x02\x01\x00d\x01d\x03l\x03m\x04Z\x05\x01\x00d\x01d\x04l\x06Z\x07d\x01d\x05l\x08m\tZ\n\x01\x00d\x01d\x06l\x0b\xad\x02\x01\x00d\x01d\x07l\x0cm\rZ\x0e\x01\x00e\x07j\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00r\x05d\x01d\x04l\x10Z\x10n\x10\x02\x00e\x05d\x08e\x11d\td\nd\x04i\x00\xac\x0b\xab\x06\x00\x00\x00\x00\x00\x00\\\x01\x00\x00Z\x10\x02\x00e\nj$\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00g\x00g\x00\xac\x0c\xab\x02\x00\x00\x00\x00\x00\x00\x02\x00e\x0ed\n\xac\r\xab\x01\x00\x00\x00\x00\x00\x00\x02\x00G\x00d\x0e\x84\x00d\x0fe\nj&\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x03\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00Z\x14\x02\x00e\nj$\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00g\x00g\x00\xac\x0c\xab\x02\x00\x00\x00\x00\x00\x00\x02\x00e\x0ed\n\xac\r\xab\x01\x00\x00\x00\x00\x00\x00\x02\x00G\x00d\x10\x84\x00d\x11e\x14e\nj&\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x04\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00Z\x15\t\x00\x02\x00e\x15\xab\x00\x00\x00\x00\x00\x00\x00Z\x16e\x16j/\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x01\x00y\x04)\x12\xfa\x16A Number Guessing Game\xe9\x00\x00\x00\x00)\x01\xda\x0bannotations)\x01\xda\njac_importN)\x01\xda\nJacFeature)\x01\xda\x01*)\x01\xda\tdataclass\xda\x06random\xda\x02pyF)\x06\xda\x06target\xda\tbase_path\xda\x03lng\xda\x06absorb\xda\tmdl_alias\xda\x05items)\x02\xda\x08on_entry\xda\x07on_exit)\x01\xda\x02eqc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x01\xf3 \x00\x00\x00\x97\x00e\x00Z\x01d\x00Z\x02d\x01Z\x03d\x05d\x02\x84\x04Z\x04d\x06d\x03\x84\x04Z\x05y\x04)\x07\xda\x04Game\xe1\x1a\x01\x00\x00\nA generic Game base class.\n\nThe obj keyword is used to define the class.\nThe can keyword is used to define methods (functions) within the class.\nThe self keyword is used to refer to the current instance of the class.\nConstructors are defined using the init method with parameters.\nc\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x01\xf3 \x00\x00\x00\x97\x00|\x01|\x00_\x00\x00\x00\x00\x00\x00\x00\x00\x00d\x01|\x00_\x01\x00\x00\x00\x00\x00\x00\x00\x00y\x00)\x02NF)\x02\xda\x08attempts\xda\x03won)\x02\xda\x04selfr\x17\x00\x00\x00s\x02\x00\x00\x00 \xfaT/Users/jakobtherkelsen/Documents/jaseci-ginS/jac/examples/guess_game/guess_game1.jac\xda\x08__init__z\rGame.__init__\x0e\x00\x00\x00s\x10\x00\x00\x00\x80\x00\xd8\x19!\x88\x14\x8c\x1d\xd8\x14\x19\x88\x14\x8d\x18\xf3\x00\x00\x00\x00c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x01\xf3\x18\x00\x00\x00\x97\x00t\x01\x00\x00\x00\x00\x00\x00\x00\x00d\x01\xab\x01\x00\x00\x00\x00\x00\x00\x82\x01)\x02N\xfa&Subclasses must implement this method.)\x01\xda\x13NotImplementedError)\x01r\x19\x00\x00\x00s\x01\x00\x00\x00 r\x1a\x00\x00\x00\xda\x04playz\tGame.play\x13\x00\x00\x00s\x12\x00\x00\x00\x80\x00\xdc\x0f"\xd8\r5\xf3\x03\x02\x10\x10\xf0\x00\x02\n\x0cr\x1c\x00\x00\x00N\xa9\x04r\x17\x00\x00\x00\xda\x03int\xda\x06return\xda\x04None\xa9\x02r#\x00\x00\x00r$\x00\x00\x00)\x06\xda\x08__name__\xda\n__module__\xda\x0c__qualname__\xda\x07__doc__r\x1b\x00\x00\x00r \x00\x00\x00\xa9\x00r\x1c\x00\x00\x00r\x1a\x00\x00\x00r\x14\x00\x00\x00r\x14\x00\x00\x00\x05\x00\x00\x00s\x11\x00\x00\x00\x84\x00\xf1\x00\x07\x02\x05\xf3\x12\x03\x06\x07\xf4\n\x04\x06\x07r\x1c\x00\x00\x00r\x14\x00\x00\x00c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x01\xf36\x00\x00\x00\x87\x00\x97\x00e\x00Z\x01d\x00Z\x02d\x01Z\x03d\x05d\x06\x88\x00f\x01d\x02\x84\rZ\x04d\x07d\x03\x84\x04Z\x05d\x08d\x04\x84\x04Z\x06\x88\x00x\x01Z\x07S\x00)\t\xda\x12GuessTheNumberGame\xfa\xae\nA number guessing game. The player must guess a number between 1 and 100.\n\nThis class inherits from Game. The super() function is used to call the parent class constructor.\nc\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x01\xf3Z\x00\x00\x00\x95\x01\x97\x00t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x02|\x00\x8d\x05\x00\x00|\x01\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00t\x05\x00\x00\x00\x00\x00\x00\x00\x00j\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00d\x01d\x02\xab\x02\x00\x00\x00\x00\x00\x00|\x00_\x04\x00\x00\x00\x00\x00\x00\x00\x00y\x00)\x03N\xe9\x01\x00\x00\x00\xe9d\x00\x00\x00)\x05\xda\x05superr\x1b\x00\x00\x00r\x08\x00\x00\x00\xda\x07randint\xda\x0ecorrect_number)\x03r\x19\x00\x00\x00r\x17\x00\x00\x00\xda\t__class__s\x03\x00\x00\x00 \x80r\x1a\x00\x00\x00r\x1b\x00\x00\x00z\x1bGuessTheNumberGame.__init__ \x00\x00\x00s \x00\x00\x00\xf8\x80\x00\xde\t\x0e\x89\x1a\x90H\xd4\t\x1d\xdc\x1f%\x9f~\x99~\xa8a\xb0\x13\xd3\x1f5\x88\x14\xd5\t\x1cr\x1c\x00\x00\x00c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x03\x00\x00\x01\xf3\xf4\x00\x00\x00\x97\x00|\x00j\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00d\x01kD\x00\x00rQt\x03\x00\x00\x00\x00\x00\x00\x00\x00d\x02\xab\x01\x00\x00\x00\x00\x00\x00}\x01|\x01j\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00r\x1b|\x00j\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00t\t\x00\x00\x00\x00\x00\x00\x00\x00|\x01\xab\x01\x00\x00\x00\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00n\x0bt\x0b\x00\x00\x00\x00\x00\x00\x00\x00d\x03\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00|\x00j\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00d\x01kD\x00\x00r\x01\x8cQ|\x00j\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x0ct\x0b\x00\x00\x00\x00\x00\x00\x00\x00d\x04\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00y\x00y\x00)\x05Nr\x02\x00\x00\x00\xfa"Guess a number between 1 and 100: \xfa%That\'s not a valid number! Try again.\xfa:Sorry, you didn\'t guess the number. Better luck next time!)\x07r\x17\x00\x00\x00\xda\x05input\xda\x07isdigit\xda\rprocess_guessr"\x00\x00\x00\xda\x05printr\x18\x00\x00\x00\xa9\x02r\x19\x00\x00\x00\xda\x05guesss\x02\x00\x00\x00 r\x1a\x00\x00\x00\xfa\x04playz\x17GuessTheNumberGame.play%\x00\x00\x00sd\x00\x00\x00\x80\x00\xe0\x0f\x13\x8f}\x89}\x98q\xd2\x0f \xdc\x15\x1a\xd0\x1b?\xd3\x15@\x88U\xd8\x10\x15\x97\r\x91\r\x94\x0f\xd8\x11\x15\xd7\x11#\xd1\x11#\xa4C\xa8\x05\xa3J\xd5\x11/\xe4\x11\x16\xd0\x17>\xd4\x11?\xf0\x0b\x00\x10\x14\x8f}\x89}\x98q\xd3\x0f \xf0\x10\x00\x11\x15\x97\x08\x92\x08\xdc\r\x12\xd8\x11M\xf5\x03\x02\x0e\x0f\xf0\x03\x00\x11\x19r\x1c\x00\x00\x00c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x03\x00\x00\x01\xf3\xfe\x00\x00\x00\x97\x00|\x01|\x00j\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00kD\x00\x00r\x0ct\x03\x00\x00\x00\x00\x00\x00\x00\x00d\x01\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00n4|\x01|\x00j\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00k\x02\x00\x00r\x0ct\x03\x00\x00\x00\x00\x00\x00\x00\x00d\x02\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00n\x19t\x03\x00\x00\x00\x00\x00\x00\x00\x00d\x03\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00d\x04|\x00_\x02\x00\x00\x00\x00\x00\x00\x00\x00d\x05|\x00_\x03\x00\x00\x00\x00\x00\x00\x00\x00|\x00x\x01j\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00d\x06z\x17\x00\x00c\x02_\x02\x00\x00\x00\x00\x00\x00\x00\x00t\x03\x00\x00\x00\x00\x00\x00\x00\x00d\x07|\x00j\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00d\x08\x9d\x03\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00y\x00)\tN\xfa\tToo high!\xfa\x08Too low!\xfa\'Congratulations! You guessed correctly.r\x02\x00\x00\x00Tr/\x00\x00\x00\xfa\tYou have \xfa\x0f attempts left.)\x04r3\x00\x00\x00r<\x00\x00\x00r\x17\x00\x00\x00r\x18\x00\x00\x00r=\x00\x00\x00s\x02\x00\x00\x00 r\x1a\x00\x00\x00\xfa\rprocess_guessz GuessTheNumberGame.process_guess6\x00\x00\x00se\x00\x00\x00\x80\x00\xd8\x0c\x11\x90D\xd7\x14\'\xd1\x14\'\xd2\x0c\'\xdc\r\x12\x90;\xd5\r\x1f\xd8\x10\x15\x98\x04\xd7\x18+\xd1\x18+\xd2\x10+\xdc\r\x12\x90:\xd5\r\x1e\xe4\r\x12\xd0\x13<\xd4\r=\xd8\x1d\x1e\x88T\x8c]\xd8\x18\x1c\x88T\x8cX\xe0\t\r\x8f\x1d\x8a\x1d\x98!\xd1\t\x1c\x8d\x1d\xdc\t\x0e\xd0\x0f9\x984\x9f=\x9a=\xd1\x0f9\xd5\t:r\x1c\x00\x00\x00)\x01\xe9\n\x00\x00\x00r!\x00\x00\x00r%\x00\x00\x00)\x04r>\x00\x00\x00r"\x00\x00\x00r#\x00\x00\x00r$\x00\x00\x00)\x08r&\x00\x00\x00r\'\x00\x00\x00r(\x00\x00\x00r)\x00\x00\x00r\x1b\x00\x00\x00r \x00\x00\x00r;\x00\x00\x00\xda\r__classcell__)\x01r4\x00\x00\x00s\x01\x00\x00\x00@r\x1a\x00\x00\x00r,\x00\x00\x00r,\x00\x00\x00\x1a\x00\x00\x00s\x17\x00\x00\x00\xf8\x84\x00\xf1\x00\x04\x02\x05\xf6\x0c\x03\x06\x07\xf3\n\x0f\x06\x07\xf7"\x0c\x06\x07r\x1c\x00\x00\x00r,\x00\x00\x00)\x18r)\x00\x00\x00\xda\n__future__r\x03\x00\x00\x00\xda\x07jaclangr\x04\x00\x00\x00\xda\x0e__jac_import__\xda\x06typing\xda\x08_jac_typ\xda\x16jaclang.plugin.featurer\x05\x00\x00\x00\xda\x04_Jac\xda\x16jaclang.plugin.builtin\xda\x0bdataclassesr\x07\x00\x00\x00\xda\x11__jac_dataclass__\xda\rTYPE_CHECKINGr\x08\x00\x00\x00\xda\x08__file__\xda\x08make_obj\xda\x03Objr\x14\x00\x00\x00r,\x00\x00\x00\xda\x04gamer \x00\x00\x00r*\x00\x00\x00r\x1c\x00\x00\x00r\x1a\x00\x00\x00\xda\x08rX\x00\x00\x00\x01\x00\x00\x00s\xaa\x00\x00\x00\xf0\x03\x01\x01\x01\xd9\x01\x1d\xf7\x00K\x01\x02\x03\xf7\x00K\x01\x02\x03\xf7\x00K\x01\x02\x03\xf7\x00K\x01\x02\x03\xf0\x00K\x01\x02\x03\xe7\x01\x12\xd7\x01\x12\xd4\x01\x12\x80s\xd7\x01\x12\xd2\x01\x12\xf1\x04\x13\x02\x03\xef&\xe9\x00\xf7\'\x13\x02\x03\xf7\x00\x13\x02\x03\xf4\x00\x13\x02\x03\xef&\xe9\x00\xf7\'\x13\x02\x03\xf4\x00\x13\x02\x03\xf1*)\x02\x03\xefR\x01\xe9\x00\xf7S\x01)\x02\x03\xf7\x00)\x02\x03\xf3\x00)\x02\x03\xf0\n\x00\x1a\x1e\xf0\x0b)\x02\x03\xefR\x01\xe9\x00\xf7S\x01)\x02\x03\xf4\x00)\x02\x03\xf0X\x01\x02\x02\x05\xf1\x08\x00\r\x1f\xd3\x0c \x80T\xd8\x05\t\x87Y\x81Y\x85[r\x1c\x00\x00\x00') +# BBs = create_BBs(instructions) +# print(BBs) + +# cfg = create_cfg(BBs) +# print("\nControl Flow Graph (CFG):") +# print(cfg) # # Visualize CFG # dot = visualize_cfg(cfg)